3

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

 8 months ago
source link: https://www.v2ex.com/t/1005031
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

brr3fx.jpg

硬件开发的基本流程

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

0 、明确需求

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

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

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

1 、芯片选型

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

  • 性能不能太差,要能支撑起蓝牙连接和数据传输;
  • 性能也不用太强,不然会增加功耗;
  • 最好能以不同的功耗工作;不工作时休眠,并且可以被蓝牙连接唤醒;
  • 要能存储足够多的数据。当然,也可以用外围存储芯片,但那样既会增加成本,也会增加 PCB 的面积和复杂性,所以最好能集成进来。

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

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

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

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

2 、设计电路图

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

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

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

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

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

3 、设计 PCB

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

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

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

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

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

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

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

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

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

5 、刷固件

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

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

6 、电路测试

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

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

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

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

7 、制作原型

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

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

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

8 、量产电路板

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

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

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

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

9 、生产、包装、发货

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

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

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

10 、十全十美

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

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

硬件开发的一些故事

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

如何上手硬件开发

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

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

  • 比如,我第一个做给自己用的硬件工具,是 IoT Power 电源转接头。
  • 比如,制作批量刷机工具,提高生产效率。
  • 比如,制作小的 PCB ,记录电池放电过程。

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

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

再说芯片选型

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

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

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

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

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

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

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

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

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

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

硬件佬工具多

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

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

  • 比如,同样是 5V 的电源,有的纹波大、有的小;
  • 比如,标称是 12V 2A 的电源,真到了 2A 的大负载,是不是会掉电压;
  • 比如,测量上电时序。

原型到产品

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

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

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

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

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

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

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

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

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

数字量与模拟量

软件与硬件的视角不同。

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

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

嵌入式硬件的局促

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

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

说说蓝牙通讯

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

硬件中诡异的问题

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

  • 比如,有一次电路接线完全正确,死活不干活。最后通过万用表测量才发现,其中一根面包线是坏的、不通电的,我去
  • 比如,钰泰 ETA6093 ,连接电池,什么也不做,就会有很多尖峰电流,分钟平均有 120uA ,使得待机时间明显缩短。后来,问了原厂的技术支持,才知道本来就是这样的。如果要低功耗,只能选择其他型号。倒,之前屯的芯片都用不上,又要开始选芯片了。
  • 比如,测量电路中,如果负载有大电流、大负载,会产生比较大的压差,会明显影响测量结果。有时,电源线的长短,都会明显影响测量结果

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

LED 不为人知的细节

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

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

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

  • 比如,家里燃气热水器坏了,我可以更换其中的风压开关;
  • 比如,电动车没有电子报警,我可以装一个;
  • 比如,鼠标的按键太吵,可以换个静音开关;
  • 比如,做一款智能音箱,连接 ChatGPT 回答问题。

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

欢迎入坑硬件开发

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK