4. 过流保护核心指标
ADC 这玩意儿,说白了就是电机控制系统的「眼睛」。电流多大、相位对不对、有没有过流,全靠它来感知。我见过不少工程师,花大价钱买了高性能 MCU,结果 ADC 配置一塌糊涂,采样出来的数据根本没法用。嗯,这一节咱们就把 ADC 的四个核心参数掰开揉碎讲清楚。
4.1 ADC分辨率:你到底能分辨多小的电流变化?
分辨率决定了你能看到多细的电流纹波。12 位、14 位、16 位,差的不只是数字。
| 分辨率 | 量化台阶数 | 3.3V 参考下 LSB | 典型应用场景 |
|---|---|---|---|
| 10 位 | 1024 | 3.22 mV | 低成本风扇、泵类 |
| 12 位 | 4096 | 0.805 mV | 通用伺服、BLDC 控制 |
| 14 位 | 16384 | 0.201 mV | 高精度位置伺服 |
| 16 位 | 65536 | 0.050 mV | 电流环带宽 > 5kHz 的场合 |
我个人习惯,做电机过流保护至少选 12 位。为什么?你想想看,一个 50A 的驱动器,用 0.5mΩ 采样电阻,满量程电压才 25mV。10 位 ADC 的 LSB 是 3.22mV,相当于 6.44A 一个台阶——过流阈值设 60A,误差都快 10% 了,这保护还有什么意义?
关键公式: 电流分辨率 = (Vref / 2^N) / (Rshunt × Gain)
N 是 ADC 位数,Rshunt 是采样电阻,Gain 是运放增益。算出来的值,最好小于过流阈值的 1/20。
4.2 采样率:别让过流信号从你眼皮底下溜走
采样率不够,过流来了你都抓不到。我记得有一次调试一个高速主轴电机,PWM 频率 20kHz,电流环跑 10kHz。我按奈奎斯特定理,采样率设了 20kHz,结果电机一加速就炸管。查了半天,原来是电流尖峰宽度只有 2μs,20kHz 采样根本拍不到。
采样率到底怎么定?我一般按这个逻辑来:
- 电流环带宽的 10 倍:这是底线。带宽 2kHz,采样率至少 20kHz。
- PWM 周期的 2 倍同步:在 PWM 载波波谷和波峰各采一次,能有效抑制开关噪声。
- 过流检测的响应时间:如果要求 1μs 内关断,ADC 采样率必须 > 1MSPS。
我的经验值: 通用伺服驱动器,PWM 10kHz,采样率设 20kHz~40kHz 就够了。但如果你做的是航空航天或医疗设备,采样率往 100kHz 以上走,别省。
4.3 参考电压设计:ADC 的「尺子」准不准,全看它
参考电压 Vref 就是 ADC 量程的标尺。Vref 漂 1%,测量结果就漂 1%。过流保护阈值要是跟着漂,那还叫保护吗?
我踩过最大的坑,就是直接用 MCU 内部 Vref。那次做批量生产,100 块板子,过流保护点从 58A 到 72A 不等,完全没法用。后来换成外部精密参考,问题才解决。
| 参考方案 | 典型精度 | 温漂 | 成本 | 推荐场景 |
|---|---|---|---|---|
| MCU 内部 Vref | ±2% ~ ±5% | 50~100 ppm/°C | 免费 | 消费级、对精度不敏感 |
| 外部 LDO 供电 | ±1% ~ ±2% | 30~50 ppm/°C | 低 | 工业通用 |
| 精密参考(如 REF50xx) | ±0.05% ~ ±0.1% | 3~10 ppm/°C | 中 | 伺服、医疗、军工 |
| 外部基准 + 缓冲器 | ±0.01% | < 3 ppm/°C | 高 | 实验室级、超高精度 |
注意: 参考电压的噪声同样致命。Vref 上的 1mV 纹波,在 12 位 ADC 下相当于 1.2 个 LSB 的误差。一定要在 Vref 引脚加 10μF + 0.1μF 去耦电容,走线要短而粗,远离 PWM 和功率走线。
4.4 采样时序控制:什么时候采,比怎么采更重要
采样时序是 ADC 设计里最容易翻车的地方。你想想看,PWM 开关瞬间,功率管上会有巨大的 dv/dt 和 di/dt,这些噪声会通过寄生电容耦合到采样回路。如果在那个时刻采样,数据基本是废的。
我常用的策略是「窗口采样」——只在 PWM 开关噪声平息后的稳定窗口内启动 ADC。
// 伪代码:PWM 同步采样时序
// PWM 频率 10kHz,周期 100μs
// 死区时间 2μs,开关振铃 1μs
void PWM_ISR(void) {
// 在 PWM 载波波谷触发
// 等待开关噪声平息
delay_us(3); // 死区 2μs + 振铃 1μs
// 启动 ADC 采样
ADC_StartConversion(CH_CURRENT_U);
ADC_StartConversion(CH_CURRENT_V);
// 等待转换完成
while(!ADC_IsConversionComplete());
// 读取结果
current_u = ADC_GetResult(CH_CURRENT_U);
current_v = ADC_GetResult(CH_CURRENT_V);
// 计算 W 相电流(基尔霍夫定律)
current_w = -current_u - current_v;
// 执行过流判断
if (abs(current_u) > OVERCURRENT_THRESHOLD ||
abs(current_v) > OVERCURRENT_THRESHOLD ||
abs(current_w) > OVERCURRENT_THRESHOLD) {
PWM_Shutdown();
FaultHandler();
}
}
时序要点:
- 采样窗口必须避开死区时间和开关振铃期
- 多通道采样建议用「顺序转换 + DMA」,减少 CPU 开销
- 如果使用双采样(波谷 + 波峰),两个采样点间隔必须固定
- 采样保持时间要足够,一般 > 1μs,保证采样电容充满
4.5 知识体系总览
下面这张图,把 ADC 采样与量化的核心逻辑串起来了。我每次做新项目,都会先对着这张图过一遍参数,确保没有遗漏。
4.6 避坑指南:我踩过的那些 ADC 的坑
做电机控制十几年,ADC 相关的坑我踩过不少。挑几个典型的说说:
- 采样保持时间不够:有一次我用 1MSPS 的 ADC,采样保持只设了 100ns,结果高阻信号源根本充不满采样电容,测量值偏小 20%。后来改成 1μs,问题解决。
- 参考电压走线太长:Vref 走线绕了 5cm,还跟 PWM 信号并行走。结果 ADC 读数随负载抖动,查了三天才发现是串扰。从此 Vref 走线不超过 1cm,且包地处理。
- 多通道采样顺序搞反:我用的是顺序采样,先采 U 相,再采 V 相。结果 U 相和 V 相之间差了 2μs,在高速电机下,这个时间差导致电流重构出现明显相位误差。后来改用同步采样 + 双 ADC 才搞定。
最后提醒一句: ADC 的硬件设计和软件配置,一定要在原理图阶段就定下来。等 PCB 打样回来再改,代价太大了。我见过一个项目,因为 ADC 参考电压没设计好,改版三次,多花了两个月。