硬件是怎么做出来的?带你从软件的视角,揭开神秘面纱

324 天前
 quietjosen

2023 年,作为软件开发出身的我,做了两款智能硬件产品,注册了两个专利,「硬」气了一把。

你是否也喜欢鼓捣些硬件,是否对电路板是如何做出来的感到好奇?欢迎跟我一起,揭开硬件开发的神秘面纱,看看硬件工程师如何零基础入门。

硬件开发的基本流程

首先声明,这里所说的硬件,更偏向于 ARM 单片机及嵌入式开发。我不是硬件工程师出身,属于边学边干;可正是如此,我的视角可能更贴近真实、更容易帮你上手。如果哪个环节有更好的做法,欢迎行业内的朋友指正。

0 、明确需求

硬件领域很大,又很繁杂,从何说起呢?这是个问题。

首先,还是从需求出发。明确产品要实现哪些功能、有哪些约束条件,有了这些硬性标准,问题的边界就被大大缩小了。

这里,以它适智能跑轮为例,从头到尾,走一遍硬件研发的历程。先说一点,产品的研发不是一条直线,而是不断迭代、甚至重头再来的过程。为了描述方便,这里假设一切是一帆风顺的,只按最终的方案来描述。不过,考虑到商业性,一些地方不会说太细。

1 、芯片选型

它适智能跑轮,核心的需求,是记录数据,然后通过蓝牙传递出来;主要的约束,是低功耗、长待机。那么这颗芯片:

然后,就是其他核心元件,包括蓝牙芯片、霍尔传感器等。

之后,就是确定产品的交互方式,比如显示、按键、声音等。

再之后,就是确定电源方案。电源对于整个电路设计,是非常重要的。事实上,对最终的电路来说,有一小半的元件,都是电源相关的。具体到这个产品,要支持锂电池供电、Type C 充电、LDO 降压稳压、测量锂电池电压等等。

到这里,主要的芯片及方案就基本确定了。接下来,就是搭建具体的电路、设计 PCB 。

2 、设计电路图

这时,就要面临 EDA 的选择。所谓 EDA ,类似于软件开发中的 IDE ,就是电路设计所需要用到的软件。这里我选择的是 立创 EDA,它是国产的、免费的,简单易用。这对于个人或小团队开发来说,非常重要。商业 EDA 是非常昂贵的;当然,我知道有所谓特别版。但作为软件开发出身的我,对正版、免费有天然的亲切感。

确定好工具后,可以开始设计电路图了。

设计电路图,主要靠两样:电路基础知识、芯片数据手册。基础知识自不必说,比如电阻、电容、三极管、MOS 管等基础元件的使用。对于复杂的芯片,主要是参考其数据手册的典型电路,针对自己具体的场景进行调整。

这一步还挺好玩的,把一堆元件摆出来,然后用线连啊连,像正极连正极、负极连接地,连着连着就好了。当然,步骤是这么个步骤,实际不会这么容易。

一般的电路图,大概长这样:

3 、设计 PCB

电路图设计好之后,就是设计 PCB ,也就是印刷电路板。这一步同样考验功力,也更加耗时。事实上,不考虑芯片选型的话,PCB 布板所花费的时间,比电路图长很多。

这一步,说简单也简单。就是确定后电路板的外尺寸后,把所有元件排排好;并参照电路图,把各元件通过走线连接起来。

最直接的难点是布线。不考虑多层板的话,电路板相当于一个平面,而平面上的线是不能交叉的。这使得必须很恰当地摆放元件,才能避免交叉。有时,还得反向修改电路图。当然,多层板可以改善这一点,但成本高,且设计难度加大。如非必要,常见的还是用双层板,也就是有正反两个面可以走线。

当然,PCB 板还有很多其他难点和要注意的地方,比如要适配外尺寸及开孔、天线及电磁屏蔽、散热、避免回路、差分信号线等等,这里就不展开了。

一般的 PCB 板,大概长这样:

4 、打板

电路板设计好之后,就可以 制作 PCB,俗称打板。这里依然推荐嘉立创,每月有两次免费打板的机会,付费也只是 20 元起;而且很快,最快隔天就可以收到。

打板之后,就要焊接元件。这里又面临一个选择,要么是让嘉立创这样的工厂替你完成 SMT 贴片,要么自己焊接。二者的优缺点很明显:自己焊,省钱、灵活、不用等,但花时间,且一些很小、引脚很多的元件,不好焊;第三方 SMT 则刚好相反。

一般来讲,前期、以及简单的电路板,可以自己焊;后期还是倾向于 SMT 服务。

焊接好元件后,就类似这样:

5 、刷固件

电路板制作好后,就要刷固件。当然,有些简单的电路,是不需要刷固件的。刷固件,就相当于给硬件装个操作系统。这里暂时略去固件的开发。

具体的,电路板上留刷机接口,配合专用的刷机工具、上位机,就可以将固件写入芯片的 Flash 存储。

6 、电路测试

刷好固件后,就要开始测试。简单的,就是先测试下正负极电阻,看有没有短路。没问题可以上电,看电路有没有按预期工作。如果有预留测试点,就测量测试点的电压等。也可以借助示波器等工具进行测量。

如果遇到问题,不要慌,这太正常了。一般来讲,就是先缩小问题的范围。可以用拆焊等方式,去掉不必要电路的影响,只看出问题的那部分,方便排查。

对于固件的测试,可以像黑盒一样观察硬件是否按预期工作,也可以像白盒一样进行调试。只是硬件的调试,远没有软件随便加断点那么轻松。

定位问题,找出解决方案,就可以进行下一次制板。当然,也可以根据实际使用中的不便或问题,对电路进行改进。

7 、制作原型

经过几轮迭代,电路板基本稳定,可以组装成原型机,开始使用场景的测试。

这时,通常要制作产品的外壳。最好自己有一定建模能力,这样可以设计产品的外壳、3D 打印,方便很多。

如果只是简单的外壳,可以用嘉立创的工具,可以比较简单地生成 3D 模型。如果有团队,可以和同事一起配合进行设计。如果已经有外观设计,就可以进行结构设计。比如,如何固定电路板、如何暴露交互接口等。

8 、量产电路板

假设经过一段时间测试,原型通过了,产品也到了规模化生产阶段,就要开始批量生产电路板了。

通常,不是重新上传设计文件下单,而是返单上一次被验证过的电路板。这样更可靠,避免手抖出错,导致批量生产的电路板报废。

电路板批量生产完后,还面临一个繁琐的流程:刷固件。之所以说繁琐,主要还是量。

试想一下,如果刷一个电路板需要 1 分钟,听起来不多吧?可要刷 1000 片呢,那就是 16 小时。不吃不喝,从早上 6 点,刷到晚上 10 点,吓人不。当然,实际没这么慢,但基本是这个数量级,快不了太多。

9 、生产、包装、发货

然后,就可以交付给工厂,进行包装生产了。继而转发至仓库,用户在电商平台下单后,就可以快递出去了。

等用户收到后开始使用,这时能做的,就是 双手合十,祈祷不要出问题。因为一旦出问题,大概率不像软件一样,升级个版本就能解决,很可能要召回。

说到这里,就要提一个话题:OTA ,就是用户可以远程升级固件,来解决问题、或增加功能。这个其实很重要,尤其是在前期、尚未经过大规模用户实测时。OTA 可以在不召回的情况下,解决一部分问题,减少损失。

10 、十全十美

如果一切顺利,用户用起来很开心,满足了实际需求,带来正面评价时,就是 产品人最开心的时刻

至此,就是硬件产品的基本流程。

硬件开发的一些故事

上面只是走马观花地介绍硬件的基本流程,挂一漏万。下面补充一些细节,解释下为什么 硬件工程师通常发量不多

如何上手硬件开发

玩芯片的第一步,都是点亮一颗灯;这个操作,相当于软件领域中打印出 Hello World。当然,做得多了,总有「点亮」芯片 的时候,哈哈。

最好边学边练,做些小东西练手。

总之,制作自己用得上的小工具,是不错的开始

从软件和生态上来讲,可以从 Arduino 入手。相对复杂的,就是树莓派以及各种衍生派。

再说芯片选型

芯片选型非常重要,最考虑经验、能力。而且一旦定了,之后基本不太可能会改;如果改,意味着要兼容两套方案、非常恰当地处理芯片及产品库存,总之很麻烦。

芯片的生态很重要。如果一家公司的芯片被广泛使用,通常意味着它更成熟,隐藏的问题更少。如果选一家小厂的芯片,可能看起来更便宜,但配套的开发软件不好用,市场上不容易找到使用该芯片的开源方案,等等。更关键的,可能有隐藏的问题。而这个问题,一旦量产后才发现,将是非常痛苦的:召回的话,血亏;不召回的话,会有持续不断的用户问题。像 STM32 、兆易创新 GD32 这些系列,都是比较成熟的选择。

还有一个问题,就是 开发效率与运行效率的平衡。对于电脑或手机上的软件开发,通常不需要担心性能问题,CPU 、内存、电量管够。而单片机开发,则没这么幸运了。通常,嵌入式使用 C 语言开发。可惜,实在不想这把年纪了,再去啃 C 语言。

最后选择了 合宙 Air101 这颗主芯片。很大的原因,是它支持 LuatOS 开发。简单地说,就是在芯片上运行了一个 Lua 虚拟机,或者说运行环境。接下来,使用 Lua 这门脚本语言,就可以调用库函数,快速完成生产代码的开发。关键的,它还支持 OTA 升级。主流嵌入式操作系统 RTOS ,包括μClinux 、FreeRTOS 等。

有时感觉,硬件产品不是做出来的,是攒出来的;从巨大的元件库中选型,各种排列组合,最后出产品。

配件采购

芯片的采购也比较关键。尤其到后期,产品已经上市,准备批量返单时,如果发现一个关键的元件缺货了、涨价了,就很头痛。如果换芯片,又要有比较长周期的测试。

延伸来说,在硬件众多配件中,哪怕缺少一个螺丝,也会决定最终产品能否量产。过多屯货,又会压资金;之后如果换方案,很可能屯的芯片就无用了。因此,供应链管理很关键。比如,对于汽车这种有 N 多配件的产品来说,供应链管理的难度极大。

说说焊接

做硬件,手工焊接是基本功。虽然嘉立创这类平台,打样已经比较便宜了。但在开发阶段,频繁测试,花费还是不小。更关键,来来回回比较花时间、影响效率。很多时候,还是得撸起袖子自己焊。

焊接中,植锡、放元件,是很枯燥的。风枪一吹,爬锡过程很解压。小元件、多引脚的连锡,是最头痛的。

当然,还有 焊台最佳伴侣:烫伤膏,别问我是怎么知道的…

硬件佬工具多

硬件佬有很多配件、工具,比如各种型号的电容电阻等元件,万用表、示波器、功率计、焊台等。

电压电流这些,肉眼是看不见的,需要工具来测量。

原型到产品

对于一款硬件产品,电路板只是其中一个环节,作为一款完整的产品,要考虑的东西还有很多。比如,包装、说明书、宣传文案配图视频、生产备货、等等。

产品原型做出来,离规模化上市,还差很远。什么东西一上量,性质就变了。

工厂生产,有很多不可控的因素,有很多妥协。事实上,初期设计 100 分的产品,最终批量上市时,能妥协到 70 分以上,已经很不错了

第一次批量生产固件,还是很慌的。可能电路设计有问题,也可能生产过程中有缺陷,担心投入的真金白银,变成无用的电子垃圾。

做了硬件,真的相信,第一代产品通常是有问题的。硬件比较复杂,使用环境和方式多种多样;很多问题,只有在用户使用过程中才能发现。而发现了问题,很多时候无法通过固件升级来解决,只能寄希望下一代硬件改进。

当然,如果大家都不支持第一代产品,也就不会有第二代。这世界总需要有人第一个吃螃蟹,也时常奖励吃螃蟹的人,看大家怎么选择了。

硬件抄袭

抄袭哪都有,硬件也一样,术语叫 抄板。怎么应对呢?很难。

打磨丝印,算是比较基础的操作。更有效的,是开发有固件的硬件,也就是硬件里是有代码、有固件的,这种就不好直接抄。

物理开关

硬件很难避免物理开关。本来想,硬件做得优雅,就不需要物理开关。现在看,意外情况总是有,还是要考虑售后的问题。认怂,给智能模块加个物理 Reset 开关。其实,很多硬件设备上都有此类开关,比如路由器就比较常见。

数字量与模拟量

软件与硬件的视角不同。

在软件人眼里,0 就是 0 ,1 就是 1 ,这不是再清楚明白不过的(当然,这里考虑的是整形数、不是浮点数)。进而,这也是一般人的理解。

在硬件人眼里,还真不是。像浮点数,1 可能是 0.998 ,也可能是 1.02 ,也可能是 > 0.5 。或者说,所有的值都有波动、有误差、有范围的。

嵌入式硬件的局促

比如,在存储空间很小的芯片中写代码,会遇到这样的问题:需要考虑 2100 年后的事吗?

如果需要,则需要存储完整的年份,比如 2023 ;如果不需要,则可以省点存储,比如只存 23 。

说说蓝牙通讯

BLE 蓝牙传输比较慢。实测有一次通过蓝牙传输 552KB 的文件,用时 7 分钟(436s)。并且,蓝牙不稳定、传输的可靠性不高;传输过程中,很容易出现丢数据、传错的情况。

硬件中诡异的问题

由于看不见摸不着,而电路又以光速运行,很容易产生诡异的问题。

这些问题,很多是自己经验不足(当然,没有谁天生经验就足,都一个一个坑踩过来的),有的是芯片本身有问题,有的数据手册压根没介绍,等等。

LED 不为人知的细节

不同颜色 LED 的功耗差异非常大。单从电流上看,R/G/B 三者的电流大概是:1.5mA/1mA/0.8mA 。但事实上,在此电流下,三者亮度大概是 G >>> B > R 。相同亮度下,绿色 LED 是最省电的

多一个能力,就多了一扇窗

和已有能力组合,可以增加很多可能性

兴趣归兴趣、炫技归炫技,作为一个产品,满足真实需求,才是最重要的。

欢迎入坑硬件开发

和纯软件开发相比,硬件有不一样的乐趣。入门并没那么难,值得你来尝试,欢迎入坑。

18449 次点击
所在节点    分享创造
159 条回复
israinbow
324 天前
LED 不为人知的细节源于纯粹的生物学之 550 纳米波长的绿光人眼最灵敏, 其他颜色需要更多的辐射功率才能达到同样的感官亮度 (逃

恭喜转行, 感受硬件开发的折磨.
quietjosen
324 天前
@israinbow 这解释专业 👍
MozzieW
324 天前
借楼问个问题,之前想写个游戏给小朋友玩,类似电视的抢答,需要一个抢答按钮,想法是用蓝牙。但没有找到合适的,自己做的话麻烦吗?我想是需要一个蓝牙芯片,然后找个外壳?
quietjosen
324 天前
@MozzieW 按下按钮之后呢,只是本机灯亮,还是要和其它设备比如手机通信?
听起来还可以吧,不复杂。
guess0594
324 天前
楼主很棒啊
jucelin
324 天前
各个阶段怎么 debug 啊?
MozzieW
324 天前
@quietjosen 就像电视台节目一样,大屏幕(家里的电视)展示比如诗词,小朋友一人一个按钮抢答。家里好几个娃,想着应该挺好玩的。

我想法是蓝牙或者 Wi-Fi ?我哪里可以找到对应的资料吗?
quietjosen
324 天前
@jucelin 固件也是可以断点调试的,但不方便。还要结合串口日志、外部测量工具。
好在简单的硬件,整体逻辑不复杂,比纯软件简单些。
quietjosen
324 天前
@MozzieW 怎么在电视上显示,是个问题。可以开发 TV App ,或者手机投屏。
蓝牙整体比 WiFi 简单。
蓝牙是一对一。如果多个按钮,简单点就连在一个设备上,然后通过蓝牙和 App 通信。
villivateur
324 天前
作为软硬件都开发的我,点个赞,写的不错
quietjosen
324 天前
@villivateur 感谢专业的赞🫡
MozzieW
324 天前
@quietjosen 我做 Android 开发的,可以实现 TV 上的游戏。难点是需要一个外设(按钮),蓝牙或者 Wi-Fi 都行,加上协议我就能搞定其他的东西。
我看苹果蓝牙耳机可以分体了,把多个按钮当作一个蓝牙应该可以?我理解 Wi-Fi 更耗电,并且需要更复杂的系统
byte10
324 天前
太酷啦,正好 12 月份要做一个自动化开门的工具,用到舵机,esp32 或 esp8266 ,arduino ,算是嵌入式开发入门吧😁。硬件是真的很好玩,但是里面的学问还是太多了。。。
qinjiang
324 天前
点赞,通俗易懂
Felldeadbird
324 天前
感谢分享,我也折腾过硬件,苦于时间精力,成了三天打鱼两天晒网。
xieren58
324 天前
硬件是好玩, 就是不赚钱...利润太低...
jaswer
324 天前
本科做硬件,研究生转算法,LZ 这心心得深有体会,硬件 debug 很有意思,软件问题,硬件问题,焊接问题,各种可能,慢慢排查
FreeEx
324 天前
很厉害,感谢分享。
quietjosen
324 天前
@jaswer 恩,遇到问题很头痛,解决问题很开心;有多头痛就有多开心。
stucom
324 天前
作为一个电子信息工程的本硕生,我转码了.....感觉硬件上手比软件更难

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1005031

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX