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 采样根本拍不到。

采样率到底怎么定?我一般按这个逻辑来:

  1. 电流环带宽的 10 倍:这是底线。带宽 2kHz,采样率至少 20kHz。
  2. PWM 周期的 2 倍同步:在 PWM 载波波谷和波峰各采一次,能有效抑制开关噪声。
  3. 过流检测的响应时间:如果要求 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 采样与量化的核心逻辑串起来了。我每次做新项目,都会先对着这张图过一遍参数,确保没有遗漏。

ADC采样与量化知识体系 ADC 采样与量化核心设计要素 ADC 采样与量化 分辨率选择 采样率确定 参考电压设计 采样时序控制 12位起步,16位更优 LSB < 阈值/20 带宽 × 10 为底线 PWM 同步双采样 外部精密参考更稳 去耦电容不能省 避开开关噪声窗口 DMA + 顺序转换 设计目标 在噪声环境下,准确、实时地捕获电流信号 为过流保护提供可靠的数据基础

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 参考电压没设计好,改版三次,多花了两个月。