嵌入式开发心得体会
在做项目、做比赛的过程中,自己脑海中一直都会迸发出一些关于嵌入式开发的一些小思考、小想法,多年下来,也积累了不少的小思考、小想法,今天就做个阶段性的文档输出,也算是对这些小思考、小想法的系统性总结。
嵌入式硬件
我们的嵌入系统能给人最直观体会的就是其硬件系统了,嵌入式系统的硬件是以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。为了实现嵌入式系统的高集成、易使用,我们需要将这些模块集成在一个或多个PCB板子上,所以,在我的理解里,嵌入式硬件设计就是以PCB设计制作为目标导向的设计。下面是我认为的嵌入式硬件设计流程及其注意事项,也是我一直以来使用方法论。
1.根据项目需求确定完成硬件选型、确定硬件方案
这一步实际上整个嵌入式开发重中之重,因为硬件的修改成本和修改周期是要比软件长很多的,所以我们要做好前期的硬件选型、方案设计工作。
如果是多人合作的项目,而你只负责电路硬件设计部分,你就要和你做好和负责其它部分同学的前期交流工作(人类口头交流的信息熵很低,为了提升设计质量,这里建议提高交流频率,以获取更多的信息)。比如,你要和负责软件的同学确定好要使用的微处理器外设资源,要和做机械部分的同学确定好板子尺寸、按键、屏幕等人机交互装置的信号等。
我们首先对硬件方案进行细分,比如分成电源部分、主控部分、模拟信号处理等。对各个部分的方案选型建议使用网上常使用的成熟方案,或者自己已经验证过的硬件方案;对于自己还不太能把握的硬件方案,我们就要细读起数据手册,使用proteus、multisim的软件进行仿真验证,也可以现在淘宝上买个模块,对其进行功能测试后再来确定是否要使用。比如,我现在要对一个mv级别的差分电压信号进行放大,就要设计信号放大电路,这里使用AD623轨到轨仪表放大器,通过在multisim的软件搭建仿真电路,确定AD623的供电电压应该是多少、是否使用双电源供电,增益电阻应该选多大等。也可在淘宝上买个AD623模块,实物验证其是否符合项目需求。
【AD623仪表放大器模块】
2.绘制原理图、PCB图
硬件方案确定后,就要开始电路板的绘制了。在过去,很多新手都会使用Altium Designer设计电路板,本人第一块电路板也是使用AD绘制的;当下,对不结构不太复杂的电路板,更加推荐使用立创EDA。立创EDA相比于其它同类软件,第一个优点就是它的云端服务,通过云端服务,用户可以共享元器件库,省得网上到处找元件库,也不用再安装元件库到本地了;我们也可将工程文件创建在云端,在云端实现工程文件版本管理,甚至可以创建协作小组,多人共同设计维护一个工程。此外,配合使用立创生态系统的其它产品服务,如立创商城、嘉立创PCB等,可实现从元器件选购到PCB设计再到PCB制造的全生态服务。PS:希望今后越来越多得工业软件能衍生出云端服务,真的很需要。
在EDA软件上设计PCB,第一步就是原理图绘制,个人认为原理图的绘制比PCB图的绘制更加重要,这里归纳几个原理图绘制的注意事项,也是大部分新手会踩到的坑。
- 原理图按照模块功能分区排列,做好关键性标注;(这样及其板子出问题了,也方便后期排查)
- 确定好元器件的PCB封装;(自己买的元器件的型号要和其PCB封装对应的上,很多新手容易忽略这点,导致买的元器件因为封装不合适而焊不到板子上)
PCB图的绘制要遵循相应的规则和良好的习惯,比如差分信号走线要等长、等间距,接插件布局要放在板子的边缘、可以通过铺铜增加地(GND)的面积等!这些规则网上都有介绍,这里就不在赘述。反正我笃信PCB绘制的第一要义就是:美观(颜值和实力是成正比的),越好看的板子越好用。我们要参照网上优秀的开源硬件项目,模仿学习别人的布局、布线方式。
3.PCB板的焊接与调试
首先要明确一点的是,一块板子肯定是要经过数次的迭代才能收敛到完美无bug的版本,很难一步到位的,我们能做的就是做好每一版板子的焊接与调试工作,以此来减少迭代次数。
板子的焊接与调试是一体的,在焊第一块板子的时候,建议按照pcb的模块功能分步焊接、分步调试,比起“全部焊接完毕再调试”,这个做的好处就是即使板子有Bug,也能快速定位出问题的源头。我自己在板子的焊接调试中,先是焊接板子的电源模块,先确定稳压芯片的输出电压是否正常,然后在焊接微控制部分,测试下能否正常烧录程序,最后在把其它的模块逐一焊接上并测试。
所谓工欲善其事,必先利其器,趁手的工具对于提升硬件开发的效率真的很有帮助!除了常规的电烙铁、热风枪的工具外,这里再介绍几个学生党技术进阶的生产力工具。
【电加热吸锡器】
比起常规的真空吸锡器,这款吸锡器自带加热功能,使用更加方便,能够轻松的移除接插件、通孔中的锡
【钢网+加热台】
使用钢网+加热台的组合,我们可以【热台贴片焊接】,比起电烙铁焊接,效率更高!在稚晖君的视频里不止以此的展示过这种焊接方法。钢网是为了方便给pcb板的焊盘移植锡膏,找淘宝商家制造就行,价格比嘉立创更低。
嵌入式软件
嵌入式软件开发最基础的技术要求就是计算机语言如C/C++,再配合一些IDE软件及其它开发工具链。一般都是从单片机开发入手,往更高阶发展的话就是ARM+Linux开发。关于嵌入式软件的学习路线、学习教程,网上多如牛毛,这里我想介绍一下在嵌入式软件开发中的最大的学习心得,就是:以输出为目的的学习才是高效率的学习。
比如说一个C语言的学习教程,视频可能会有好几十集,如果你一集集观看,一个月过去了,你可能还不会烧录程序呢!在我们学习前,一定要确立一个明确的学习目标,奔着这个目标学习。嵌入式软件学习最直接了当的学习目标就是具体的项目,比如我想做个光强测量系统,用来监测环境的光强并将数组显示在OLED屏幕上,我们就要以此为目的,了解光强传感器的信号输出,OLED屏的通讯方式等,以实例程序为基础,来实现相关功能。这就是所谓的边打仗边学习,一门技术的初学期一点短,不然自己容易陷入学习疲劳,如果能够快速入门,然后再去夯实基础,也就更加得心应手了。
随记:
- 工程师都是监控狂。我们希望程序运行过程中,各种状态量都是可监控,程序出现bug时,我们也是通过查看各种变量来排查bug的。为了能够方便监控程序中的各种变量,我们希望我们的IED软件是带有debug调试功能的,嵌入式开发中常用的调试功能有打断点、单步调试,添加watch窗口等。在我之前的博客中,我也有提及debug调试,如:Keil的debug模式下使用simulator,用逻辑分析仪观察IO口输出波形的变换_keil simulator_Joseph Wen的博客-CSDN博客 STM32(HAL库)——光电编码器、M/T法测量电机转速_光电编码器测速_Joseph Wen的博客-CSDN博客
- 一定要上系统。单纯的裸机开发上限实在太低。操作系统能够提高我们的程序性能,学完裸机开发后,可以先从轻量级的操作系统如FreeRtos入手,这里可以移步我的FreeRtos系列学习教程:FreeRtos 操作系统 STM32 CubeMx系列学习笔记_freertos任务数量_Joseph Wen的博客-CSDN博客 。而后可以学习下嵌入式Linux,在操作系统的框架下,对于复杂项目,我们更容易在保证程序高内聚、低耦合的前提下,分工合作,分工编写程序,这是裸机开发所不具备的。
总结
未完待续…