在无刷电机控制领域,FOC(磁场定向控制)算法需要实时获取电机三相电流来实现精确的磁场控制。传统方案采用三个电流传感器分别测量各相电流,但这会增加硬件成本和PCB空间占用。单电阻采样方案通过在直流母线上放置单个采样电阻,配合特定的电流重构算法,实现了用1个传感器完成3相电流测量的目标。
这种方案最大的优势在于硬件成本降低约60%,特别适合对成本敏感的大规模量产产品。但硬币的另一面是,软件复杂度呈指数级上升——我们需要在PWM周期的特定窗口期采集电流信号,再通过数学变换重构出三相电流。
逆变器的开关状态直接影响相电压输出,这是电流重构的基础。我们建立的逆变器模型需要准确反映开关管状态与相电压的关系:
matlab复制function [ia, ib] = inverter_model(Vdc, Sa, Sb, Sc)
% 母线电压与开关状态映射
Va = (Sa - (Sb + Sc)/2) * Vdc;
Vb = (Sb - (Sa + Sc)/2) * Vdc;
Vc = (Sc - (Sa + Sb)/2) * Vdc;
% 等效相电流(假设电机阻抗已知)
R = 0.1; L = 0.0001;
global ia_prev ib_prev;
ia = (Va - R*ia_prev)/(L + R*0.0001);
ib = (Vb - R*ib_prev)/(L + R*0.0001);
ia_prev = ia; ib_prev = ib;
end
这个模型的关键点在于:
在PWM周期中,只有特定开关组合下母线电流才直接反映某相电流。例如当开关状态为[1,0,0]时:
其他有效采样窗口:
重要提示:实际采样窗口要比理论值更窄,必须考虑ADC转换时间和信号稳定时间。窗口过窄会导致采样值不稳定,过宽则会引入其他相电流干扰。
采样时机必须与PWM载波严格同步,这是实现可靠重构的前提:
matlab复制% PWM载波计数器
carrier = sawtooth(2*pi*f_pwm*t, 0.5);
if carrier >= duty_a - 0.05 && carrier <= duty_a + 0.05
sample_enable = true;
else
sample_enable = false;
end
参数选择经验:
由于功率器件开关过程中的电压突变会导致电流畸变,必须加入补偿项:
matlab复制V_comp = 0.5 * (1 - sign(adc_val)) * Vdc;
这个补偿项的作用是:
根据PWM矢量所在扇区选择不同的重构系数:
matlab复制function [Ia, Ib] = reconstruct_current(adc_val, sector)
% 电流解耦矩阵,不同扇区用不同系数
coeff = [2/3, -1/3, -1/3;
0, 1/√3, -1/√3];
% 母线电流补偿项
V_comp = 0.5 * (1 - sign(adc_val)) * Vdc;
switch sector
case 1
I_alpha = coeff(1,1)*(adc_val + V_comp);
I_beta = coeff(2,3)*(adc_val + V_comp);
% ...其他扇区类似
end
Ia = I_alpha;
Ib = (I_beta - I_alpha)/√3;
end
血泪教训:系数矩阵的极性必须严格验证。曾经有工程师将第三行系数写反,导致重构电流镜像翻转,系统完全失控。建议在静态条件下(固定PWM占空比)逐扇区验证极性。
通过Matlab仿真得到的典型误差特征:
误差主要来源:
针对过零换相时的电流毛刺,可采用动态卡尔曼滤波器:
matlab复制% 卡尔曼滤波器实现
Q = 0.01; % 过程噪声协方差
R = 0.1; % 观测噪声协方差
P = 1; % 误差协方差初始值
x_hat = 0;% 状态估计初始值
for k = 1:length(adc_val)
% 预测步骤
x_hat_minus = x_hat;
P_minus = P + Q;
% 更新步骤
K = P_minus / (P_minus + R);
x_hat = x_hat_minus + K*(adc_val(k) - x_hat_minus);
P = (1 - K)*P_minus;
filtered_val(k) = x_hat;
end
根据转速自动调整采样窗口:
实现方法:
matlab复制if rpm < 1000
window = 0.07;
elseif rpm < 5000
window = 0.05;
else
window = 0.03;
end
搭建的测试平台参数:
实测性能对比:
| 指标 | 三电阻方案 | 单电阻方案 |
|---|---|---|
| 静态误差 | ±1% | ±2.8% |
| 动态响应延迟 | 50μs | 85μs |
| 硬件成本 | 100% | 35% |
| CPU负载 | 5% | 18% |
典型问题排查指南:
在实际项目中,单电阻方案虽然软件复杂度高,但在成本敏感型应用中优势明显。经过2-3个项目的磨合后,我们的重构误差已能稳定控制在3%以内,完全满足大多数工业应用需求。