4. ADC采样与标定:让电机“看见”电流

做FOC控制,说白了就是跟电流打交道。你算法写得再漂亮,ADC采回来的数据是错的,那一切都是白搭。我刚开始做电机驱动时,就吃过这个亏——电流波形看着挺漂亮,电机一转起来就抖得跟筛糠似的。查了两天,最后发现是ADC的采样时序没配好。

这一章,咱们就把ADC采样和标定这件事彻底讲透。从STM32的ADC配置,到电流重构,再到偏置和增益校准,一步不落。

4.1 STM32 ADC配置:规则组与注入组

STM32的ADC有两种工作模式:规则组和注入组。很多人搞不清它们的区别,我简单解释一下。

规则组,就是常规的转换序列。你配置好通道顺序,ADC就按顺序一个个转。适合周期性的采样任务,比如三相电流、母线电压这些。

注入组,有点像“插队”机制。当规则组正在转换时,注入组可以打断它,优先完成注入组的转换,然后再回来继续规则组。嗯,这个特性在FOC里特别有用。

我个人习惯这样分配:

  • 规则组:处理三相电流采样(Ia, Ib, Ic)
  • 注入组:处理母线电压、温度等慢速信号

为什么这么分?因为电流采样对时序要求极高,必须精确对齐PWM的开关时刻。而母线电压和温度,慢一点没关系。

核心配置要点:

  • ADC时钟:不要超过STM32手册规定的最大频率(一般是36MHz或30MHz)
  • 采样时间:根据信号源阻抗调整,我一般设3-7个周期
  • 对齐方式:FOC中必须用左对齐,方便后续计算
  • 触发源:用定时器的TRGO事件触发,保证与PWM同步

4.2 过采样技术:用时间换精度

你可能会问:ADC的位数不够怎么办?比如12位ADC,分辨率只有4096。对于高精度FOC,这确实有点捉襟见肘。

过采样技术就是解决方案。说白了,就是多采几次,然后取平均。12位ADC做过采样,理论上可以等效到16位甚至更高。

公式很简单:

过采样位数 = 原始位数 + log2(过采样次数) / 2

举个例子:

  • 4次过采样:等效13位
  • 16次过采样:等效14位
  • 64次过采样:等效15位

我在项目中用过16次过采样,效果不错。但要注意,过采样会降低采样率。你想想看,原来1MHz的采样率,做过采样后就变成62.5kHz了。所以要在精度和速度之间找个平衡点。

我的经验:对于10kHz的FOC控制环,16次过采样完全够用。如果控制环频率更高(比如20kHz),建议用4次或8次过采样。

4.3 电流重构算法:从两相到三相

FOC控制需要三相电流,但实际硬件上,我们通常只采样两相。为什么?因为三相电流之和为零(星形连接)。知道两相,第三相就能算出来。

公式:

Ic = -(Ia + Ib)

听起来很简单对吧?但实际做起来有几个坑。

第一个坑:采样时刻的选择

电流采样必须在PWM的特定时刻进行。我一般选择在PWM周期的中间点采样,这时候电流纹波最小,采样值最稳定。

第二个坑:单电阻采样的问题

有些低成本方案用单电阻采样,通过不同开关状态重构三相电流。但这种方法在低调制比区域会有盲区。我曾经在这个问题上折腾了一周,最后改用双电阻采样才解决。

注意:单电阻采样在扇区边界附近,电流重构会失效。如果必须用单电阻,建议加入电流重构补偿算法,或者限制调制比。

4.4 相电流偏置校准:消除直流偏移

ADC采回来的电流值,往往带有直流偏置。这个偏置可能来自运放的失调电压,也可能来自ADC本身的偏移误差。

偏置校准的原理很简单:

  1. 电机静止时,采集N次电流值
  2. 计算平均值,这就是偏置量
  3. 在运行时,把采样值减去这个偏置量

代码实现:

// 偏置校准函数
void current_offset_calibration(void)
{
    uint32_t sum_a = 0, sum_b = 0;
    uint16_t i;
    
    // 电机静止,采集100次
    for(i = 0; i < 100; i++)
    {
        sum_a += ADC_GetValue(ADC_CH_A);
        sum_b += ADC_GetValue(ADC_CH_B);
    }
    
    // 计算偏置
    offset_a = sum_a / 100;
    offset_b = sum_b / 100;
}

我曾经犯过一个错误:在电机运行时做偏置校准。结果偏置值一直在漂,电流控制完全乱套。记住,偏置校准必须在电机静止时做。

4.5 增益校准:让电流值更准确

偏置校准解决了零点偏移,但增益误差还在。增益误差来自采样电阻的精度、运放的放大倍数偏差等。

增益校准需要外部参考。我常用的方法:

  1. 给电机通一个已知的直流电流(比如1A)
  2. 读取ADC的原始值
  3. 计算增益系数:增益 = 实际电流 / ADC读数

实际项目中,我会把增益系数存到EEPROM里,每次上电时读取。这样即使更换硬件,校准数据也不会丢失。

完整的校准流程:

步骤 操作 说明
1 电机静止 确保无电流流动
2 采集偏置 多次采样取平均
3 通入参考电流 用精密电流源或已知负载
4 计算增益 实际值 / 采样值
5 保存参数 写入非易失存储器

4.6 本章知识体系

下面这张图,把ADC采样和标定的核心逻辑串起来了。你可以把它当作一个检查清单,做项目时对照着看。

ADC采样与标定知识体系 ADC采样与标定 ADC配置 规则组:三相电流采样 注入组:母线电压/温度 触发源:定时器TRGO 过采样技术 4次过采样 → 等效13位 16次过采样 → 等效14位 64次过采样 → 等效15位 电流重构算法 两相采样,第三相计算 PWM中点时刻采样 单/双/三电阻方案选择 偏置校准 增益校准 电机静止时采集偏置值 通入参考电流计算增益

这张图把整个ADC采样和标定的流程都串起来了。从ADC配置开始,到过采样提升精度,再到电流重构和最终的标定校准,每一步都环环相扣。

我的建议:做项目时,先把偏置校准和增益校准做好,再调电流环。否则你花大量时间调出来的PI参数,换个板子可能就废了。

好了,ADC采样和标定这部分就讲到这里。记住一句话:采样不准,控制白费。把基础打牢,后面的FOC控制才能稳如磐石。


专注资料整理