如何入门硬件开发?一个软件开发者的边学边做手记

  浏览量2024-02-24 作者: 半导体功率

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

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

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

  先说一点,产品的研发不是一条直线,而是不断迭代、甚至重头再来的过程。为了描述方便,这里假设一切是一帆风顺的,只按最终的方案来描述。不过,考虑到商业性,一些地方不会说太细。

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

  要能存储足够多的数据。当然,也可以用外围存储芯片,但那样既会增加成本,也会增加 PCB 的面积和复杂性,所以最好能集成进来。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  定位问题,找出解决方案,就能够直接进行下一次制板。当然,也能够准确的通过实际使用中的不便或问题,对电路进行改进。

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

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

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

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

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

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

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

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

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

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

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

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

  比如,我第一个做给自己用的硬件工具,是 IoT Power 电源转接头。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  在硬件人眼里,还线,也可能是 0.5。或者说,所有的值都有波动、有误差、有范围的。

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

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

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

  比如,有一次电路接线完全正确,死活不干活。最后通过万用表测量才发现,其中一根面包线是坏的、不通电的,我去。

  比如,钰泰 ETA6093,连接电池,什么也不做,就会有很多尖峰电流,分钟平均有 120uA,使得待机时间明显缩短。后来,问了原厂的技术上的支持,才知道本来就是这样的。如果要低功耗,只能选择其他型号。倒,之前屯的芯片都用不上,又要开始选芯片了。

  比如,测量电路中,如果负载有大电流、大负载,会产生比较大的压差,会明显影响测量结果。有时,电源线的长短,都会明显影响测量结果。

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

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

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

上一篇: 一文详解600V稳压电路模块

下一篇:电源的纹波是什么如何测量?如何抑制呢?