Maxwell和Simplorer联合仿真——永磁同步电机SVPWM控制 本仿真用AnsysEM实现永磁同步电机(PMSM)的仿真模拟,控制方式采用空间矢量控制,闭环方式采用电流环速度环双闭环控制。 文件中包含一个仿真文件,以及仿真搭建的简单介绍以及SVPWM算法的详细过程,根据教程可将已经搭建好的不同参数的电机放到Simplorer中仿真验证,查看结果。
最近在搞永磁同步电机控制,发现Maxwell和Simplorer这俩工具配合起来真是香。直接在Simplorer里搭控制算法,Maxwell负责精确的电磁场计算,这种软硬件联合仿真模式特别适合验证SVPWM这种需要兼顾电磁特性的控制策略。
先说联合仿真这茬。从Maxwell导出电机模型时得注意定子绕组的相位设置,我之前踩过坑——某个相序接反直接导致电机倒转。导出的.sml文件扔进Simplorer后,记得在Options里勾选Enable cosimulation选项,这一步没设置的话仿真数据根本传不过去。
双闭环控制这块,速度环外头套着电流环的结构挺有意思。贴段实际在用的PI调节代码:
void PI_Regulate(PI_TypeDef *pi) { float error = pi->ref - pi->fdb; pi->integral += error * pi->Ts; pi->output = pi->Kp * error + pi->Ki * pi->integral; //抗积分饱和处理 if(pi->output > pi->out_max){ pi->output = pi->out_max; pi->integral -= error * pi->Ts; } }这段代码干了两件重要的事:一是把采样周期Ts揉进了积分项,避免每次修改控制频率都得重新调参;二是加了积分分离的逻辑,实测能有效抑制启动时的电流冲击。调参时有个小技巧——先把Ki设为零,调Kp到系统开始震荡,再取0.6倍震荡时的Kp值作为基准。
SVPWM的实现重点在扇区判断和矢量作用时间计算。我习惯用查表法处理那堆三角函数,毕竟DSP资源有限。分享个生成基本电压矢量的代码片段:
void SVPWM_Generate(uint8_t sector, float T0, float T1, float T2) { switch(sector) { case 1: CMPA = (uint16_t)((T1 + T2 + T0/2) * PWM_PERIOD); CMPB = (uint16_t)((T2 + T0/2) * PWM_PERIOD); break; case 2: CMPA = (uint16_t)((T1 + T0/2) * PWM_PERIOD); CMPB = (uint16_t)((T1 + T2 + T0/2) * PWM_PERIOD); break; //...其他扇区类似 } }这里有个细节容易翻车——PWM载波的对称对齐方式会影响谐波含量。建议在Simplorer里用FFT工具扫一下相电压波形,THD超过5%就得检查死区补偿参数了。
联合仿真跑起来后,重点看反电动势波形是否平滑。遇到过转子位置信号抖动导致电流环震荡的情况,后来在Maxwell里把网格细分到0.5mm级别才解决。转速突变时的力矩响应曲线最能暴露问题,正常情况应该是先有个小超调然后快速收敛。
最后说个实用技巧:在Simplorer里右键电机模型选Export to Maxwell可以直接回注参数,改个永磁体材料或者充磁方向什么的,不用重新导模型。需要模型的朋友评论区喊一声,我这存着不同极槽配合的现成案例。