
永磁同步电机与直流电机对拖控制:基于MATLAB的DSP程序生成与二次开发资料
永磁同步电机和直流电机对拖实验在工业传动领域挺常见的,今天咱们来聊聊怎么用Matlab自动
生成DSP控制程序。这玩意儿最大的好处就是能直接把仿真模型变成CCS工程,连手写代码的功夫都省了。
先看模型结构,Simulink里头的永磁同步电机模块直接和直流电机模块背靠背连着。重点在PWM生
成模块那边,用了个SVPWM算法,直接调用Matlab里Embedded Coder的函数库。下面这段是转速环PI控制的
代码原型:
```matlab
function y = PI_Controller(u)
%#codegen
persistent integrator;
if isempty(integrator)
integrator = 0;
end
Kp = 0.35;
Ki = 12.8;
error = u(1);
dt = u(2);
integrator = integrator + error * dt;
y = Kp*error + Ki*integrator;
```
注意开头的%#codegen指令,这是告诉Matlab要生成C代码的关键标记。生成的DSP代码里会变成带Q
格式定点的版本,比如TI的IQmath库操作。实测中发现Ki参数超过16位时会自动拆成多个运算,这点要特
别注意。
模型里最折腾人的是ADC采样同步问题。在Simulink里配置EPWM模块时,记得勾选"Generate ADC t
rigger"选项。生成的C代码里会出现这段:
```c
EPwm1Regs.ETCLR.bit.INT = 1; // 清中断标志
EPwm1Regs.ADCCTL.bit.SOCA = 1; // 触发ADC采样
while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0){} // 等待采样完成
```