Simulink仿真
基于DQ解耦控制搭建了单相PWM整流器,可以实现单位功率因素运行,直流侧输出电压可控,功率因素可调。
输入端220V交流电,直流侧期望输出电压800V.
仿真文件已上传资源,需要自取.
注:Simulink版本为2021b
完整框图
仿真结果
输入电压与输入电流
输出电压波形
无功电流跟踪
有功电流跟踪
关键代码部分
alpha轴信息移相90°得到beta轴信息
利用数组存储物理量,改变索引值到达移相的效果。
void GetBeta()
{
static Uint16 count_alpha = 0;
// orthogonal signal
U[count_alpha] = Ualpha;
I[count_alpha] = Ialpha;
if (count_alpha >= 125)
Flag_Alpha = 1;
if (Flag_Alpha == 1) // finished 1/4 cycle
{
if (count_alpha < 125)
{
Ubeta = U[count_alpha + 375];
Ibeta = I[count_alpha + 375];
}
else if (count_alpha < 500 && count_alpha >= 125)
{
Ubeta = U[count_alpha - 125];
Ibeta = I[count_alpha - 125];
}
}
count_alpha++;
if (count_alpha >= 500)
count_alpha = count_alpha - 500;
}
Park变换
在simulink搭建仿真的过程中,到dq轴变换模块还有一个参数。
详细讲解可以参考该位博主的讲解
Matlab的dq变换模块到底选哪一种变换方式?90 degree behind phase A axis和 Aligned with phase A axis有什么区别?
Aligned with phase A axis-基于余弦的变换,中国课本大多沿用。
90 degree behind phase A axis-基于正弦的变换,国外课本大多沿用。
不同的参考轴需要不同的控制策略。
基于余弦的变换下,D轴是有功分量,而Q轴是无功分量。
譬如本例子将DQ用于单相PWM整流,要实现单位功率因数则需要Q轴电流为0,即无无功分量。电压外环的输出作为D轴电流的指令值。
基于正弦的变换下,Q轴是有功分量,而D轴是无功分量。
该情况多用于电机控制中,如PMSM。速度外环的输出作为Q轴电流的指令值,而D轴电流指令值为0。再得到UdUq、判断扇区生成SVPWM。
void ParkTrsfm()
{
Ud = Sin * Ualpha - Cos * Ubeta;
Uq = Cos * Ualpha + Sin * Ubeta;
Id = Sin * Ialpha - Cos * Ibeta;
Iq = Cos * Ialpha + Sin * Ibeta;
}
调制发波
在Simulink中的载波我们通常都是设为正负半周对称的三角波,而在利用DSP芯片实现时,TBCTR是载波,CMP是调制波。
芯片的特性使得载波是一个位于0轴线以上的三角载波,而调制波也相应的是一个非负值。
解决办法是在数字芯片中,抬升载波,以TBPRD/2为0轴线,从而使得调制波在0轴线上下波动,从而正确发波。
void GeneratePWM()
{
temp1 = 0.5 * tbprd + Modulation * ModulateWave;
temp2 = 0.5 * tbprd - Modulation * ModulateWave;
// limit modulate wave // 限幅考虑死区时间的占空比
if (temp1 > 0.98 * tbprd)
temp1 = 0.98 * tbprd;
if (temp1 < 0.02 * tbprd)
temp1 = 0.02 * tbprd;
if (temp2 > 0.98 * tbprd)
temp2 = 0.98 * tbprd;
if (temp2 < 0.02 * tbprd)
temp2 = 0.02 * tbprd;
// assign modulate wave
EPwm1Regs.CMPA.bit.CMPA = (Uint16) temp1;
EPwm2Regs.CMPA.bit.CMPA = (Uint16) temp2;
}