第三节 电流采样与调理电路
电流采样,是FOC控制中最关键的一环。你想想看,整个矢量控制算法,说白了就是靠电流反馈来闭环的。采样不准,后面算得再漂亮也是白搭。我刚开始做FOC驱动时,就吃过这个亏——电流波形看着挺好,电机一转起来就嗡嗡响,查了三天才发现是采样电阻的布局出了问题。
这一节,我们重点聊三个问题:用什么方案采样、运放怎么选怎么配、ADC怎么触发才能采到准确值。
一、相电流采样方案:单电阻、双电阻、三电阻
目前主流的方案就这三种。我按自己的经验,一个一个说清楚。
1. 单电阻采样
单电阻采样,就是在直流母线上串一个采样电阻。通过检测母线电流,再结合当前PWM开关状态,重构出三相电流。
优点:
- 成本最低,只需要一个采样电阻和一个运放
- PCB布局简单,占用面积小
缺点:
- 电流重构算法复杂,低速和高速区都有盲区
- 对PWM占空比有限制,不能太窄也不能太宽
- 噪声较大,精度一般
2. 双电阻采样
双电阻采样,是在两相下桥臂各串一个采样电阻。比如A相和B相,C相通过计算得到(因为三相电流之和为零)。
优点:
- 成本适中,比单电阻多一个运放通道
- 电流重构简单,没有盲区问题
- 精度比单电阻好很多
缺点:
- 需要两路ADC同步采样
- 对PWM对称性有一定要求
关键点:双电阻采样时,两相电流必须在同一时刻采样。我见过有人用MCU的ADC轮流采样,结果相位差了几微秒,电流波形就出现了畸变。记住,一定要用ADC的同步触发功能。
3. 三电阻采样
三电阻采样,就是三相下桥臂各放一个采样电阻。每相电流直接测量,互不干扰。
优点:
- 精度最高,每相独立测量
- 算法最简单,直接读ADC值就行
- 没有PWM占空比限制
缺点:
- 成本最高,需要三个运放通道
- PCB面积大,布局要求高
- 功耗略大(三个电阻的损耗)
三种方案怎么选?我一般这样判断:
| 应用场景 | 推荐方案 | 理由 |
|---|---|---|
| 低成本风扇/水泵 | 单电阻 | 成本优先,性能要求低 |
| 通用工业驱动 | 双电阻 | 性价比最高,性能足够 |
| 伺服/机器人 | 三电阻 | 精度优先,算法简单 |
二、运放选型与偏置设计
采样电阻上的电压信号非常微弱,通常只有几十到几百毫伏。必须用运放放大到ADC的输入范围(一般是0~3.3V或0~5V)。
运放选型,我重点关注这几个参数:
- 失调电压(Vos):越低越好,最好小于1mV。失调电压会直接叠加到采样信号上,造成电流偏置误差。
- 共模抑制比(CMRR):至少80dB以上。电机驱动是强干扰环境,共模噪声很大。
- 带宽(GBW):至少1MHz以上。虽然电流信号频率不高(几kHz),但PWM开关噪声会耦合进来,运放需要能响应。
- 轨到轨输出:最好支持。这样能充分利用ADC的输入范围。
我常用的运放型号:
- TI的OPA4376(四通道,Vos=5μV,性价比高)
- ADI的AD8606(双通道,Vos=65μV,噪声低)
- ST的TSV912(双通道,轨到轨,便宜)
偏置设计这块,有个常见的坑。因为电流是双向的(电机正转和反转),采样电阻上的电压也是正负双向的。但ADC只能采集正电压,所以需要加一个偏置电压,把信号抬升到ADC的中间点。
举个例子:ADC输入范围0~3.3V,偏置电压设为1.65V。那么:
- 电流为零时,ADC读数为1.65V
- 正向电流时,ADC读数大于1.65V
- 反向电流时,ADC读数小于1.65V
偏置电路一般用电阻分压加电压跟随器实现。我习惯用精密基准源(比如TL431)来产生偏置电压,比直接用电源分压稳定得多。
三、ADC采样时序与同步触发
这部分是很多初学者容易忽略的。ADC什么时候采样?采样的值对不对?这直接决定了FOC控制的性能。
先说说为什么需要同步触发。PWM驱动电机时,电流波形是这样的:
- PWM导通期间,电流上升
- PWM关断期间,电流下降
- 在PWM周期的中间点(即对称PWM的谷底),电流纹波最小
所以,最理想的采样时刻就是PWM周期的中间点。这时候电流纹波最小,采样值最接近真实平均值。
具体怎么做?我以STM32为例说明:
// 配置定时器TIM1为PWM输出,中心对齐模式
// 配置TIM1的TRGO事件在更新事件时触发ADC
// ADC配置代码片段
void ADC_Config(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_7Cycles5);
// 使能ADC的触发模式,触发源为TIM1的TRGO
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
// 配置为注入组,用于同步采样两相电流
ADC_InjectedSequencerLengthConfig(ADC1, 2);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_7Cycles5);
ADC_InjectedChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_7Cycles5);
}
这里的关键是:
- PWM定时器配置为中心对齐模式
- TRGO事件在计数器等于0时触发(即PWM周期中间点)
- ADC配置为注入组,可以同时采样多路通道
还有一个细节:采样窗口的宽度。PWM周期中间点附近,电流纹波最小,但也不是一个点。一般来说,采样窗口宽度不要超过PWM周期的5%。比如PWM频率20kHz(周期50μs),采样窗口最好控制在2.5μs以内。
最后总结一下采样时序的要点:
- 使用中心对齐PWM模式
- 在PWM周期中间点触发ADC
- 多路电流必须同步采样
- 采样窗口尽量短
- 极端占空比时做特殊处理
嗯,电流采样这部分就聊到这里。下一节我们讲电流调理电路中的滤波器设计,那也是个容易踩坑的地方。