本帖最后由 liao6 于 2025-10-15 16:21 编辑
#申请原创#
@21小跑堂
简介
在项目研发整个生命周期中设计验证是非常重要的一个环节,设计验证说直白点就是软硬件联调,这个阶段有两个目标:其一是要把功能调试好,其二发现设计阶段的漏洞并给出解决方案,实测验证此解决方案可行。
从硬件角度出发,产品电路设计是由很多模块组成的,举个例子,移动电源的电路设计一般由MCU、LDO电源电路、电源管理芯片、锂保芯片、数码管显示等等这些组成,有的可能还会有电量计芯片。这么多模块在我们联调时就需要有一个先后循序,一个模块一个模块的去调试,就好比摩天大楼的图纸设计好之后,施工开始先打地基,地基打好之后,再打第一层的柱子,然后盖第一层,封第一层的顶,按着顺序往上盖。施工的整个过程和软硬件联调的思路差不多,下面我们就简单聊聊软硬件联调的过程。
一、联调LDO
拿到PCBA第一步先看电源供电是否正常,也就是先调试LDO,电源供电对整个板子是最重要的。
电源调试无非是一个输入,一个输出,输入一个电压值,能保证输出目标电压值就可以了。如下图所示,这里提供一个LDO的电源电路,从电路中可以看出B+是电池输入端,3.0V是LDO输出端,一般来说LDO电路也比较简单,这里能保证输出稳定的3.0V就OK了。如果LDO出现异常,只需要测下输入、输出端就可以很快定位到是哪一段有问题了,再具体看是电阻电容哪一个值没选对导致的,还是其他原因。
二、烧录程序 LDO正常输出电压之后,就可以先烧录一个简单程序,验证MCU是否正常和烧录口是否OK,像我们常用的烧录口一般是SWD的方式,如下图所示。
三、单个模块调试 3.1 通信数据DEBUG仿真 程序可以正常烧录了,那下一步我们就可以开始逐个模块调试了,我比较常用的是DEBUG仿真,通过仿真可以实时查看交互数据,数据获取是否正常,提示一下,数据变量定义调试阶段可以先定义为全局变量,这样仿真开始数据就可以立即获取上来,如果定义为局部变量,还需要单步调试到函数内部局部变量那里,才能看到数据。 DEBUG仿真不单调试时方便,测试阶段以及维护分析问题也很方便,一旦得心应手之后,分析问题事半功倍。举一个keil5的仿真例子,如下图点击这里就可以开始仿真了,需要查看哪个数据,直接把数据添加到watch表格即可。 3.2 串口通信调试 串口通信也是常用的板载通信方式,比如像WIFI模组、蓝牙模组、4G模组、Zigbee模块等等一般都是串口通信,还有MODBUS通信也是。 调试这类通信一般都是飞线TX、RX、GND出来,用串口助手工具来监视数据交互的过程,来分析每一帧数据获取的是否正确。 举个串口工具打印数据的例子,如下图。数据都是可视化的,调试起来非常方便。 3.3 IIC采集数据调试 IIC通信用的也比较多,像移动电源里面MCU和电源管理IC通信都是采用IIC通信,我们按照从机设备的规格书中寄存器的地址去读取想要的数据,调试阶段可以通过逻辑分析仪查看寄存器读写是否正常,逻辑分析仪如下图这样查看数据。 3.4 示波器 示波器也是常用的调试工具,抓数据更精准,联调的时候经常会用到。 项目开发中遇到过一个问题,当时逻辑分析仪读写数据没问题,但是软件获取数据异常,读出来的数据总是0,这时候我用示波器抓波形来分析数据,发现在读取数据的时候有一个台阶电压,显然有点不正常,通过逐行对比软件发现,有一个地方加了delay延时导致这里出了问题。 示波器抓取的异常数据,如下图: 优化软件之后,可以正常获取数据的波形,如下图。
四、整体调试 每个模块的功能都调试好了,那么就要整合起来,开始整体调试了,这个过程中会进行细节上优化。 例如:移动电源的放电灯显问题,我们需要调试每个灯显之间放电的均匀度,如下图,这里我就做了一个表格用来记录每次调试的结果,这个阶段我们调试的数据可以保存下来,后面方便对比分析。
五、自测试 整机功能都调试OK了,那么我们就进入了自测试环节,通过自测试可以发现一些明显的bug,随时进行优化。自己测可以做一个基本功能的表格,一项一项按照表格测试,这样可以防止哪个功能遗漏。 功能自测表格可以按照下面的,如图所示。
六、总结 软硬件联调在工程师心中应该有一张流程图,按照这个进度,合理规划调试的节奏,最终完成联调。 以下几点需要留意一下: -模块化调试,硬件模块化调试,软件模块化编程; -LDO模块,产品调试出现异常,首先怀疑电源,大部分的问题都是电源异常导致的; -自测试,创建文档自测试,会发现很多小问题,这个时候优化掉,测试环节就省心了。
|