基于PMSM无刷电机非线性磁链模型的Matlab仿真:整型标幺化离散模型的研究与实现
更为贴近mcu实际代码,且更容易在低端mcu中实现,如ARM-M0核,仿真中测试加入了阶跃信号,波形见下图,仿真并没有很详细调节参数。更为贴近mcu实际代码,且更容易在低端mcu中实现,如ARM-M0核,仿真中测试加入了阶跃信号,波形见下图,仿真并没有很详细调节参数。注意实际单片机里直接用整数运算,连除法都不用做。不同于其它模型,此模型为标幺值模型,所有环节均为整型标幺化离散模型,三角函数计算采用
Pmsm无刷电机非线性磁链模型的matlab仿真,无需强拉,直接零速带载启动。 不同于其它模型,此模型为标幺值模型,所有环节均为整型标幺化离散模型,三角函数计算采用查表法。 更为贴近mcu实际代码,且更容易在低端mcu中实现,如ARM-M0核,仿真中测试加入了阶跃信号,波形见下图,仿真并没有很详细调节参数
直接零速带载启动的PMSM控制方案总让人头大,这次咱们搞个能塞进单片机里的硬核方案。这个模型最有趣的地方在于所有运算都做了整型标幺化处理,就连三角函数都直接查表搞定,ARM-M0这种小身板的芯片也能跑得飞起。

先看标幺化怎么玩。传统模型里电流电压都是实际值,这里全部用uint16存0-65535范围。比如三相电流采样值:
% 电流标幺化示例
adc_max = 4095; //12位ADC
Iu_raw = 2000; //原始采样值
Iu_pu = uint16( (Iu_raw / adc_max) * 65535 ); //转标幺值
这种操作在定点MCU里直接位移+查表就能完成,根本不用浮点运算。实测在M0核上比浮点运算快8倍不止。
磁链模型的核心是查表替代三角函数。咱们提前算好sin/cos值存成数组:
% 生成1024点正弦表
sin_table = int16(32767 * sin(2*pi*(0:1023)/1024));
cos_table = int16(32767 * cos(2*pi*(0:1023)/1024));
% 查表调用示例
theta = 512; //电角度对应表位置
sin_val = double(sin_table(theta+1)) / 32767; //转回浮点仿真
注意实际单片机里直接用整数运算,连除法都不用做。仿真时为了波形显示才转回浮点,真实代码里这些转换都是多余的。

Pmsm无刷电机非线性磁链模型的matlab仿真,无需强拉,直接零速带载启动。 不同于其它模型,此模型为标幺值模型,所有环节均为整型标幺化离散模型,三角函数计算采用查表法。 更为贴近mcu实际代码,且更容易在低端mcu中实现,如ARM-M0核,仿真中测试加入了阶跃信号,波形见下图,仿真并没有很详细调节参数
转速环的处理更暴力——直接拿Q15格式做微积分:
//转速PI伪代码
int32 speed_err = target_speed - actual_speed;
int32 P_term = (Kp * speed_err) >> 15; //Q15乘法
integral += Ki * speed_err;
I_term = integral >> 15;
output = (P_term + I_term) >> 2; //防溢出处理
这种整型运算在低端MCU里执行时间可控,不会出现浮点库调用那种不可预测的耗时波动。

仿真时随便怼了个阶跃信号,电流环响应居然没崩(虽然波形有点抖)。重点是这个模型在零速时直接给70%负载,电机居然能踉踉跄跄转起来,这在常规模型里早就报过流故障了。参数根本没细调,估计把积分限幅搞一搞还能更稳。
最后说个坑:标幺值转换时千万别手贱用浮点做中间变量。仿真时用Matlab的Fixed-Point Toolbox验证整型运算,确保和实际芯片表现一致。毕竟在8位单片机里,0.5这种数都能要了老命。
更多推荐



所有评论(0)