4. MCU最小系统故障:晶振不起振、复位电路异常、MCU供电不足、程序跑飞(看门狗复位)
MCU最小系统,说白了就是让芯片“活过来”的最基本条件。我修过那么多血糖仪,至少有一半的“死机”问题,根源都在这里。你想想看,MCU都不干活了,屏幕肯定黑着,按键也没反应。
这一章,咱们就把最小系统的四个“命门”掰开揉碎了讲清楚。晶振、复位、供电、看门狗,一个都不能少。
4.1 晶振不起振——MCU的“心跳”停了
晶振就是MCU的脉搏。脉搏没了,芯片就彻底“凉了”。血糖仪最常见的表现就是:上电后屏幕全黑,电流只有几毫安,跟没通电似的。
4.1.1 典型现象与原因
- 现象:用示波器测晶振引脚,看不到正弦波,只有一条直流电平线。
- 原因:晶振本身损坏、匹配电容失效或虚焊、PCB走线过长引入干扰、MCU内部振荡器模块损坏。
我的经验:有一次,一台血糖仪怎么都起振。换了晶振、换了电容,都不行。最后发现是PCB上晶振旁边的过孔离得太近,焊锡搭桥了。清理干净后,波形立马出来了。
4.1.2 排查步骤
- 先看供电:确保MCU的VDD引脚有正常电压。没电,晶振肯定不干活。
- 测晶振引脚:用示波器探头(10×档)测晶振两脚。正常能看到1V左右的正弦波。
- 检查匹配电容:常见的是12pF或22pF。用万用表电容档测一下,或者直接替换。
- 检查焊接:用放大镜看晶振和电容的焊点。虚焊、连焊都很常见。
- 替换法:换一个同频率的晶振试试。我习惯手边备一包常用频率的晶振,8MHz、16MHz、32.768kHz。
小技巧:用手触摸晶振引脚,有时人体电容能让它起振。如果一摸就起振了,说明匹配电容或走线有问题。
4.1.3 避坑指南
我曾经遇到过一批血糖仪,低温环境下晶振就不起振。查了半天,发现是晶振的负载电容选型不对,温度特性太差。后来换成了NPO材质的电容,问题解决。
4.2 复位电路异常——MCU一直“卡在起跑线”
复位电路的作用,就是让MCU在上电时从已知状态开始运行。如果复位不正常,MCU可能一直处于复位状态,或者复位时序不对,程序跑不起来。
4.2.1 常见故障模式
| 故障现象 | 可能原因 |
|---|---|
| 上电后MCU无反应 | 复位引脚一直被拉低(电容短路、电阻开路) |
| 偶尔死机,按复位键恢复 | 复位电容老化,上电复位时间不够 |
| 程序运行不稳定 | 复位信号上有毛刺,导致MCU误复位 |
4.2.2 排查方法
- 测复位引脚电平:正常工作时,复位引脚应为高电平(3.3V或5V)。如果为低,说明被拉住了。
- 看复位波形:用示波器看复位引脚的上电波形。应该是一个从0V上升到VDD的斜坡,上升时间在几十微秒到几毫秒。
- 检查外部复位芯片:有些血糖仪用了专门的复位芯片(如MAX809)。测它的输出引脚,看是否正常。
我建议:在复位引脚上串一个10kΩ的上拉电阻到VDD,再加一个0.1μF的电容到GND。这是最稳妥的RC复位电路,成本低,效果好。
4.3 MCU供电不足——饿着肚子干活
MCU对供电很敏感。电压低了,它可能工作异常;电流不够,它可能直接“罢工”。血糖仪是电池供电的设备,这个问题尤其常见。
4.3.1 供电不足的表现
- 屏幕闪烁或显示异常
- 按键反应迟钝
- 测量结果偏差大
- 程序偶尔跑飞
4.3.2 排查步骤
- 测VDD电压:用万用表测MCU的VDD引脚。正常应在3.0V~3.6V之间(视具体型号)。
- 看纹波:用示波器AC耦合档看VDD上的纹波。如果纹波超过100mV,说明电源滤波不好。
- 测电流:串入万用表测整机电流。正常工作时,血糖仪电流一般在几毫安到几十毫安。如果电流异常大或异常小,都有问题。
- 检查电池:电池内阻变大、接触不良,都会导致供电不足。
我的习惯:在MCU的VDD引脚旁边,一定放一个10μF的电解电容和一个0.1μF的瓷片电容。电解电容负责低频滤波,瓷片电容负责高频滤波。两者配合,效果最好。
4.4 程序跑飞与看门狗复位——MCU“发疯”了
程序跑飞,就是MCU执行了不该执行的指令,跑到“沟里”去了。看门狗就是那个把MCU拉回来的“救生员”。
4.4.1 程序跑飞的原因
- 电源干扰:供电上有大的尖峰或跌落
- 外部电磁干扰:电机、继电器等设备产生的干扰
- 软件bug:数组越界、指针错误、堆栈溢出
- 晶振异常:时钟不稳定,导致指令执行时序错乱
4.4.2 看门狗的工作原理
看门狗是一个硬件定时器。程序正常运行时,需要定期“喂狗”(清零定时器)。如果程序跑飞了,没有及时喂狗,定时器溢出,就会产生复位信号,让MCU重新启动。
// 典型的看门狗喂狗代码(以STM8为例)
void IWDG_Feed(void)
{
IWDG->KR = 0xAAAA; // 喂狗,重装载计数器
}
// 在主循环中定期调用
while(1)
{
// 执行任务
Process_Key();
Update_Display();
Measure_Glucose();
IWDG_Feed(); // 喂狗,确保程序正常运行
}
4.4.3 排查看门狗复位
- 看复位源:很多MCU有复位状态寄存器,可以读出上次复位的原因。是上电复位、外部复位,还是看门狗复位。
- 延长喂狗时间:如果程序偶尔跑飞,可以先把看门狗的超时时间设长一点,看看是不是喂狗太频繁导致的。
- 检查中断:中断服务程序执行时间过长,会导致主循环来不及喂狗。
我曾经修过一台血糖仪,总是每隔几分钟就重启一次。用示波器抓复位引脚,发现每隔一段时间就有一个低脉冲。查代码发现,是某个中断服务程序里有个死循环,导致主循环无法喂狗。修复后,机器稳定运行。
4.5 综合排查流程
遇到MCU最小系统故障,我一般按这个顺序查:
- 先看供电:电压对不对?纹波大不大?
- 再看复位:复位引脚电平正常吗?上电波形对不对?
- 然后看晶振:有波形吗?频率准不准?
- 最后看程序:有没有喂狗?中断有没有问题?
记住:80%的MCU最小系统故障,都出在供电和复位上。先把这两个查清楚,能省很多时间。
嗯,这一章的内容就这些。MCU最小系统是血糖仪硬件的基础,基础不牢,地动山摇。下一章,咱们聊聊传感器接口电路,那又是另一番天地了。