单电阻采样在PMSM无感FOC控制中是个既经济又巧妙的设计,但实际操作时会遇到一个棘手问题:采样窗口太窄导致电流重构失败。这就像用手机拍摄高速运动的物体,如果快门时间不够,拍出来的照片就是模糊的。在电机控制中,当PWM调制产生的有效矢量作用时间小于ADC采样所需的最小时间Tmin时,相电流数据就会"失焦"。
我调试过不少单电阻方案,发现这个问题的根源在于SVPWM调制特性。当电机运行在两种特殊状态时尤其明显:
这两种情况下,基本矢量的有效作用时间可能只有几微秒。而根据我的实测数据,典型系统中Tmin通常需要:
想象你在玩桌上冰球游戏,当球正好停在两个玩家区域的中间线时,双方都很难有效击球。电机矢量控制中的扇区过渡区就是这种"尴尬位置"。具体表现为:
我在测试第3扇区过渡区时记录到一组典型数据:
| 参数 | 常规区域 | 过渡区 |
|---|---|---|
| V010作用时间 | 8μs | 15μs |
| V011作用时间 | 6μs | 0.8μs |
| 采样成功率 | 99.9% | 32.7% |
这种情况下,虽然能采集到V010对应的IB电流,但V011对应的-IA电流几乎无法获取,导致重构出的IC电流误差可能超过50%。
当电机轻载或低速运行时,就像汽车挂高档位爬坡,油门踩得很浅。此时:
实测某800W电机在5%负载时:
这会导致重构电流出现周期性"丢失",我在示波器上观察到电流波形每隔60°电角度就会出现一次畸变脉冲,严重时会引起转速波动。
移相法的精髓就像调整会议时间表:把短会议合并,给重要议程留出足够时间。具体操作时:
我在STM32G4系列MCU上实现的移相算法核心代码如下:
c复制void PhaseShift_Adjust(PWM_HandleTypeDef *hpwm) {
// 找出最大最小占空比
uint16_t min_duty = MIN(hpwm->CCR1, hpwm->CCR2, hpwm->CCR3);
uint16_t max_duty = MAX(hpwm->CCR1, hpwm->CCR2, hpwm->CCR3);
// 计算需要移动的时间量
uint16_t shift_time = Tmin - min_duty/2;
// 执行移相操作
if(min_duty == hpwm->CCR1) {
hpwm->CCR1 -= shift_time;
hpwm->CCR3 += shift_time;
}
// 其他相位判断分支...
}
任何技术方案都有trade-off,移相法主要会带来两个问题:
通过实验对比发现:
一个实用的补偿方法是动态调整移相量:
math复制Δt_{actual} = k·(Tmin - Tcurrent)
其中k取0.3~0.6,可以在采样可靠性和波形质量间取得平衡。
找到最佳采样点就像调整显微镜焦距,需要同时考虑:
我的经验公式是:
code复制触发点 = 死区结束 + max(开关导通时间, 振铃时间) + 0.2μs余量
实测不同功率等级电机的推荐参数:
| 功率等级 | 推荐触发延迟 |
|---|---|
| 100W | 1.8μs |
| 1kW | 2.3μs |
| 10kW | 3.5μs |
在PCB布局阶段就要注意:
有个踩坑经历:某次设计将采样走线布设在MOSFET开关节点附近,导致采样信号包含20mVpp的开关噪声。后来改用双绞线+磁环才解决问题。
除了移相法,工程师还可以考虑:
对于多数中小功率应用,移相法仍是性价比最高的选择。建议按以下流程决策:
在最近的一个扫地机器人电机项目中,我们最终选用移相法+动态补偿的组合方案,将非观测区的电流重构误差控制在3%以内,整套方案BOM成本仅增加0.2美元。