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本身的偏移误差。
偏置校准的原理很简单:
- 电机静止时,采集N次电流值
- 计算平均值,这就是偏置量
- 在运行时,把采样值减去这个偏置量
代码实现:
// 偏置校准函数
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 增益校准:让电流值更准确
偏置校准解决了零点偏移,但增益误差还在。增益误差来自采样电阻的精度、运放的放大倍数偏差等。
增益校准需要外部参考。我常用的方法:
- 给电机通一个已知的直流电流(比如1A)
- 读取ADC的原始值
- 计算增益系数:增益 = 实际电流 / ADC读数
实际项目中,我会把增益系数存到EEPROM里,每次上电时读取。这样即使更换硬件,校准数据也不会丢失。
完整的校准流程:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 电机静止 | 确保无电流流动 |
| 2 | 采集偏置 | 多次采样取平均 |
| 3 | 通入参考电流 | 用精密电流源或已知负载 |
| 4 | 计算增益 | 实际值 / 采样值 |
| 5 | 保存参数 | 写入非易失存储器 |
4.6 本章知识体系
下面这张图,把ADC采样和标定的核心逻辑串起来了。你可以把它当作一个检查清单,做项目时对照着看。
这张图把整个ADC采样和标定的流程都串起来了。从ADC配置开始,到过采样提升精度,再到电流重构和最终的标定校准,每一步都环环相扣。
我的建议:做项目时,先把偏置校准和增益校准做好,再调电流环。否则你花大量时间调出来的PI参数,换个板子可能就废了。
好了,ADC采样和标定这部分就讲到这里。记住一句话:采样不准,控制白费。把基础打牢,后面的FOC控制才能稳如磐石。