1. 课程导论:ADC与PWM联合调试的工程意义
各位同学好,我是你们这期实战课的老周。做嵌入式这些年,我调试过不少板子,也踩过很多坑。今天咱们要聊的ADC与PWM联合调试,说白了就是让单片机既能“感知”外部世界,又能“控制”外部设备。
你想想看,一个电机控制系统,你需要知道当前转速(ADC采集),然后调整PWM占空比去控制它。这两者如果配合不好,系统就会抖动、失控,甚至烧管子。我刚开始带项目时,就吃过这个亏。
1.1 为什么要把ADC和PWM放在一起调?
很多新手会问:ADC和PWM不是两个独立的外设吗?各调各的不就行了?
嗯,这里要注意——在真实系统中,它们从来不是孤立的。ADC采集到的数据,往往直接决定了PWM的输出参数。比如:
- 电机控制:ADC采集电流/速度反馈 → PID计算 → 更新PWM占空比
- 电源管理:ADC采集输出电压 → 调整PWM频率/占空比 → 稳压输出
- 传感器闭环:ADC采集温度/压力 → 控制加热/驱动PWM
我曾经调试一个直流无刷电机驱动器,ADC和PWM单独跑都没问题,一联调就炸管。查了三天,最后发现是ADC采样时序和PWM更新时刻冲突了。这就是联合调试的意义——找到那些“单独跑没事,合起来就崩”的隐藏问题。
核心观点:ADC是系统的“眼睛”,PWM是系统的“手”。眼睛看不清,手就会乱动;手乱动,眼睛更看不清。联合调试就是让它们协调工作。
1.2 常见应用场景
我挑三个最典型的场景,也是咱们课程会反复用到的案例:
| 场景 | ADC采集内容 | PWM控制对象 | 联合调试难点 |
|---|---|---|---|
| 直流电机速度环 | 编码器脉冲/霍尔信号 | H桥驱动PWM | 采样频率与PWM频率的同步 |
| BUCK降压电源 | 输出电压/电流 | 开关管驱动PWM | ADC转换时间导致的控制延迟 |
| 加热器温控 | 热电偶/热敏电阻 | SSR驱动PWM | ADC噪声对温度判断的影响 |
我个人习惯把这三个场景作为“三板斧”。你只要吃透了它们,市面上80%的ADC+PWM应用都能拿下。
1.3 课程目标与学习路径
这门课不是讲理论,是讲怎么干活。30章内容,我按实战流程来组织:
- 基础篇(第1-8章):STM32的ADC多通道配置、PWM输出配置、单模块调试方法。这部分我会带着你手写寄存器,而不是只调库函数。
- 联调篇(第9-18章):ADC与PWM的时序同步、DMA传输、中断优先级设计。这里我会分享我踩过的坑——比如ADC注入组和规则组的区别,用不好会出大问题。
- 故障定位篇(第19-25章):示波器抓波形、逻辑分析仪看时序、代码断点调试。我曾经用一整天查一个PWM毛刺,最后发现是地线没接好。
- 实战篇(第26-30章):三个完整项目——直流电机速度环、数控BUCK电源、PID温控器。每个项目我都会给完整的代码和调试记录。
学习建议:别跳着看。我见过太多人直接跳到项目篇,结果连ADC的采样时间都不会配。基础不牢,地动山摇。
1.4 本章知识体系
下面这张图,是我对整门课知识结构的梳理。你可以把它当作地图,后面每学一章,回来看看自己走到哪了。
重要提醒:这门课默认你已经会STM32的基本开发(GPIO、定时器、中断)。如果你连CubeMX怎么生成工程都不熟,建议先补一下基础。我不会在课上讲“怎么点灯”这种入门内容。
1.5 你需要准备什么?
硬件方面,我建议你准备一块STM32F103或F4系列的开发板,最好带电位器和LED。示波器是必须的——别跟我说用万用表看PWM波形,那玩意儿看不出来毛刺。如果预算有限,买个几百块的便携示波器也行。
软件方面,Keil或IAR都行,我会用标准外设库(不是HAL库)。为什么?因为HAL库封装太厚了,出了问题你根本不知道底层在干什么。我习惯直接操作寄存器,这样心里有底。