2023 年,作为软件开发出身的我,做了两款智能硬件产品,注册了两个专利,「硬」气了一把。
你是否也喜欢鼓捣些硬件,是否对电路板是如何做出来的感到好奇?欢迎跟我一起,揭开硬件开发的神秘面纱,看看硬件工程师如何零基础入门。
首先声明,这里所说的硬件,更偏向于 ARM 单片机及嵌入式开发。我不是硬件工程师出身,属于边学边干;可正是如此,我的视角可能更贴近真实、更容易帮你上手。如果哪个环节有更好的做法,欢迎行业内的朋友指正。
硬件领域很大,又很繁杂,从何说起呢?这是个问题。
首先,还是从需求出发。明确产品要实现哪些功能、有哪些约束条件,有了这些硬性标准,问题的边界就被大大缩小了。
这里,以它适智能跑轮为例,从头到尾,走一遍硬件研发的历程。先说一点,产品的研发不是一条直线,而是不断迭代、甚至重头再来的过程。为了描述方便,这里假设一切是一帆风顺的,只按最终的方案来描述。不过,考虑到商业性,一些地方不会说太细。
它适智能跑轮,核心的需求,是记录数据,然后通过蓝牙传递出来;主要的约束,是低功耗、长待机。那么这颗芯片:
然后,就是其他核心元件,包括蓝牙芯片、霍尔传感器等。
之后,就是确定产品的交互方式,比如显示、按键、声音等。
再之后,就是确定电源方案。电源对于整个电路设计,是非常重要的。事实上,对最终的电路来说,有一小半的元件,都是电源相关的。具体到这个产品,要支持锂电池供电、Type C 充电、LDO 降压稳压、测量锂电池电压等等。
到这里,主要的芯片及方案就基本确定了。接下来,就是搭建具体的电路、设计 PCB 。
这时,就要面临 EDA 的选择。所谓 EDA ,类似于软件开发中的 IDE ,就是电路设计所需要用到的软件。这里我选择的是 立创 EDA,它是国产的、免费的,简单易用。这对于个人或小团队开发来说,非常重要。商业 EDA 是非常昂贵的;当然,我知道有所谓特别版。但作为软件开发出身的我,对正版、免费有天然的亲切感。
确定好工具后,可以开始设计电路图了。
设计电路图,主要靠两样:电路基础知识、芯片数据手册。基础知识自不必说,比如电阻、电容、三极管、MOS 管等基础元件的使用。对于复杂的芯片,主要是参考其数据手册的典型电路,针对自己具体的场景进行调整。
这一步还挺好玩的,把一堆元件摆出来,然后用线连啊连,像正极连正极、负极连接地,连着连着就好了。当然,步骤是这么个步骤,实际不会这么容易。
一般的电路图,大概长这样:
电路图设计好之后,就是设计 PCB ,也就是印刷电路板。这一步同样考验功力,也更加耗时。事实上,不考虑芯片选型的话,PCB 布板所花费的时间,比电路图长很多。
这一步,说简单也简单。就是确定后电路板的外尺寸后,把所有元件排排好;并参照电路图,把各元件通过走线连接起来。
最直接的难点是布线。不考虑多层板的话,电路板相当于一个平面,而平面上的线是不能交叉的。这使得必须很恰当地摆放元件,才能避免交叉。有时,还得反向修改电路图。当然,多层板可以改善这一点,但成本高,且设计难度加大。如非必要,常见的还是用双层板,也就是有正反两个面可以走线。
当然,PCB 板还有很多其他难点和要注意的地方,比如要适配外尺寸及开孔、天线及电磁屏蔽、散热、避免回路、差分信号线等等,这里就不展开了。
一般的 PCB 板,大概长这样:
电路板设计好之后,就可以 制作 PCB,俗称打板。这里依然推荐嘉立创,每月有两次免费打板的机会,付费也只是 20 元起;而且很快,最快隔天就可以收到。
打板之后,就要焊接元件。这里又面临一个选择,要么是让嘉立创这样的工厂替你完成 SMT 贴片,要么自己焊接。二者的优缺点很明显:自己焊,省钱、灵活、不用等,但花时间,且一些很小、引脚很多的元件,不好焊;第三方 SMT 则刚好相反。
一般来讲,前期、以及简单的电路板,可以自己焊;后期还是倾向于 SMT 服务。
焊接好元件后,就类似这样:
电路板制作好后,就要刷固件。当然,有些简单的电路,是不需要刷固件的。刷固件,就相当于给硬件装个操作系统。这里暂时略去固件的开发。
具体的,电路板上留刷机接口,配合专用的刷机工具、上位机,就可以将固件写入芯片的 Flash 存储。
刷好固件后,就要开始测试。简单的,就是先测试下正负极电阻,看有没有短路。没问题可以上电,看电路有没有按预期工作。如果有预留测试点,就测量测试点的电压等。也可以借助示波器等工具进行测量。
如果遇到问题,不要慌,这太正常了。一般来讲,就是先缩小问题的范围。可以用拆焊等方式,去掉不必要电路的影响,只看出问题的那部分,方便排查。
对于固件的测试,可以像黑盒一样观察硬件是否按预期工作,也可以像白盒一样进行调试。只是硬件的调试,远没有软件随便加断点那么轻松。
定位问题,找出解决方案,就可以进行下一次制板。当然,也可以根据实际使用中的不便或问题,对电路进行改进。
经过几轮迭代,电路板基本稳定,可以组装成原型机,开始使用场景的测试。
这时,通常要制作产品的外壳。最好自己有一定建模能力,这样可以设计产品的外壳、3D 打印,方便很多。
如果只是简单的外壳,可以用嘉立创的工具,可以比较简单地生成 3D 模型。如果有团队,可以和同事一起配合进行设计。如果已经有外观设计,就可以进行结构设计。比如,如何固定电路板、如何暴露交互接口等。
假设经过一段时间测试,原型通过了,产品也到了规模化生产阶段,就要开始批量生产电路板了。
通常,不是重新上传设计文件下单,而是返单上一次被验证过的电路板。这样更可靠,避免手抖出错,导致批量生产的电路板报废。
电路板批量生产完后,还面临一个繁琐的流程:刷固件。之所以说繁琐,主要还是量。
试想一下,如果刷一个电路板需要 1 分钟,听起来不多吧?可要刷 1000 片呢,那就是 16 小时。不吃不喝,从早上 6 点,刷到晚上 10 点,吓人不。当然,实际没这么慢,但基本是这个数量级,快不了太多。
然后,就可以交付给工厂,进行包装生产了。继而转发至仓库,用户在电商平台下单后,就可以快递出去了。
等用户收到后开始使用,这时能做的,就是 双手合十,祈祷不要出问题。因为一旦出问题,大概率不像软件一样,升级个版本就能解决,很可能要召回。
说到这里,就要提一个话题:OTA ,就是用户可以远程升级固件,来解决问题、或增加功能。这个其实很重要,尤其是在前期、尚未经过大规模用户实测时。OTA 可以在不召回的情况下,解决一部分问题,减少损失。
如果一切顺利,用户用起来很开心,满足了实际需求,带来正面评价时,就是 产品人最开心的时刻。
至此,就是硬件产品的基本流程。
上面只是走马观花地介绍硬件的基本流程,挂一漏万。下面补充一些细节,解释下为什么 硬件工程师通常发量不多。
玩芯片的第一步,都是点亮一颗灯;这个操作,相当于软件领域中打印出 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 的功耗差异非常大。单从电流上看,R/G/B 三者的电流大概是:1.5mA/1mA/0.8mA 。但事实上,在此电流下,三者亮度大概是 G >>> B > R 。相同亮度下,绿色 LED 是最省电的。
和已有能力组合,可以增加很多可能性。
兴趣归兴趣、炫技归炫技,作为一个产品,满足真实需求,才是最重要的。
和纯软件开发相比,硬件有不一样的乐趣。入门并没那么难,值得你来尝试,欢迎入坑。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.