4. MCU最小系统故障:晶振不起振、复位电路异常、MCU供电不足、程序跑飞(看门狗复位)

MCU最小系统,说白了就是让芯片“活过来”的最基本条件。我修过那么多血糖仪,至少有一半的“死机”问题,根源都在这里。你想想看,MCU都不干活了,屏幕肯定黑着,按键也没反应。

这一章,咱们就把最小系统的四个“命门”掰开揉碎了讲清楚。晶振、复位、供电、看门狗,一个都不能少。

4.1 晶振不起振——MCU的“心跳”停了

晶振就是MCU的脉搏。脉搏没了,芯片就彻底“凉了”。血糖仪最常见的表现就是:上电后屏幕全黑,电流只有几毫安,跟没通电似的。

4.1.1 典型现象与原因

  • 现象:用示波器测晶振引脚,看不到正弦波,只有一条直流电平线。
  • 原因:晶振本身损坏、匹配电容失效或虚焊、PCB走线过长引入干扰、MCU内部振荡器模块损坏。

我的经验:有一次,一台血糖仪怎么都起振。换了晶振、换了电容,都不行。最后发现是PCB上晶振旁边的过孔离得太近,焊锡搭桥了。清理干净后,波形立马出来了。

4.1.2 排查步骤

  1. 先看供电:确保MCU的VDD引脚有正常电压。没电,晶振肯定不干活。
  2. 测晶振引脚:用示波器探头(10×档)测晶振两脚。正常能看到1V左右的正弦波。
  3. 检查匹配电容:常见的是12pF或22pF。用万用表电容档测一下,或者直接替换。
  4. 检查焊接:用放大镜看晶振和电容的焊点。虚焊、连焊都很常见。
  5. 替换法:换一个同频率的晶振试试。我习惯手边备一包常用频率的晶振,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 排查步骤

  1. 测VDD电压:用万用表测MCU的VDD引脚。正常应在3.0V~3.6V之间(视具体型号)。
  2. 看纹波:用示波器AC耦合档看VDD上的纹波。如果纹波超过100mV,说明电源滤波不好。
  3. 测电流:串入万用表测整机电流。正常工作时,血糖仪电流一般在几毫安到几十毫安。如果电流异常大或异常小,都有问题。
  4. 检查电池:电池内阻变大、接触不良,都会导致供电不足。

我的习惯:在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 排查看门狗复位

  1. 看复位源:很多MCU有复位状态寄存器,可以读出上次复位的原因。是上电复位、外部复位,还是看门狗复位。
  2. 延长喂狗时间:如果程序偶尔跑飞,可以先把看门狗的超时时间设长一点,看看是不是喂狗太频繁导致的。
  3. 检查中断:中断服务程序执行时间过长,会导致主循环来不及喂狗。

我曾经修过一台血糖仪,总是每隔几分钟就重启一次。用示波器抓复位引脚,发现每隔一段时间就有一个低脉冲。查代码发现,是某个中断服务程序里有个死循环,导致主循环无法喂狗。修复后,机器稳定运行。

4.5 综合排查流程

遇到MCU最小系统故障,我一般按这个顺序查:

  1. 先看供电:电压对不对?纹波大不大?
  2. 再看复位:复位引脚电平正常吗?上电波形对不对?
  3. 然后看晶振:有波形吗?频率准不准?
  4. 最后看程序:有没有喂狗?中断有没有问题?

记住:80%的MCU最小系统故障,都出在供电和复位上。先把这两个查清楚,能省很多时间。

嗯,这一章的内容就这些。MCU最小系统是血糖仪硬件的基础,基础不牢,地动山摇。下一章,咱们聊聊传感器接口电路,那又是另一番天地了。