主题中讨论的其他器件:PMP23069、 PMP23338、 PMP40988
我正在尝试在 CCS 中对 DSOGI PLL 进行编码。 PLL 在 PLECS 和 Typhoon 虚拟模拟中运行良好。 但是、当我在 CCS 中对 PLL 进行编码以获取台风带来的输入并显示台风中 PLL 通过 DAC 的输出时、d 轴电压和频率在前几个周期内良好、此后不断恶化。 但这是数据类型的问题。 在 PLL 的最后一个积分器中、积分部分需要变量、该部分来自 double 数据类型。 那么、是否可以在 TI LaunchPad 中使用 double 数据类型? ADC 和 DAC 工作正常。
输入电压在0至85V 范围内变化、频率在16Hz 至30Hz 范围内变化。 代码如下:
//转换为 LN 数量
VA = DEBUG_Vsp1;
VB = DEBUG_Vsp2;
Vc = DEBUG_ISP1;
//abc 至 α β
v_alpha =((2.0/3.0)*Va )-((1.0/3.0)*Vb )- Vc );
V_BETA =((1.0/1.7320508)* Vb)-((1.0/1.7320508)* Vc);
//Sogi 1
AFTER_GAIN=(V_alpha-I)* GAIN;
//反馈 β 电压
Ix;
//生成 α 电压
ERROR=AFTER_GAIN_SUM*Omega_DASH;
i=ip+(1.35e-5)*errorp);
IP=I;
errorp=错误;
//生成 β 电压
errorx=i*Omega_dash;
Ix = IXP+(1.35e-5)*errorxp);
IXP= Ix;
errorxp=错误;
//SOGI1完成
V_al=I;
qv_al = Ix;
// Sogi 2
//使 V_BETA 和 QV_BETA 生效
//生成 V_BETA
ERROR_BETA=(((V_BETA-I_BETA)* 0.8)- Ix_BETA)* Omega_DASH;
i_Beta=ip_Beta+((1.35e-5)* errorp_Beta);
IP_BETA=I_BETA;
errorp_Beta=错误 β;
//生成 QV_BETA 电压
errorx_Beta=i_Beta*Omega_dash;
ix_Beta=ixp_Beta+((1.35e-5)*errorxp_Beta);
iXP_BETA=Ix_BETA;
errorxp_Beta="错误 x_Beta";
//SOGI2完成
// SOGI1和 SOGI 2的输出为 I、Ix、I_BETA 和 Ix_BETA
V_be=i_BETA;
qv_be=ix_Beta;
//正序列计算
//Valpha=(v_al-qv_be)*0.5;
//vbeta=(qv_al+v_be)*0.5;
vbeta =(v_al+qv_be)*0.5;
Valpha =(v_BE-qv_al)* 0.5;
//part 2//转换为 α β 变量、并使 dq 为 θ
//alpha_beta 至 DQ
Vd1=(Valpha*cos (wt))+(Vbeta*sin (wt));
Vq1=(Vbeta*cos (wt))-(Valpha*sin (wt));
//PI PLL 的控制器代码
errorz = Vq1-0;
YN=Previos+(errorz*Ki*0.5*(1.35e-5)+(errorzprev*Ki*0.5*(1.35e-5));
errorzprev="错误";
previynos=yn;
y1=(errorz*Kp)+yn;
//将 PLL 输出的 theta 和 wt
OMEGA_dash=y1+(2*pi*30);
错误= Omega_DASH;
iy=Iyp+(0.5*(1.35e-5)*(errory+erroryp);
Iyp=Iy;
errorp=错误;
频率= Omega_DAS*(1/(2)*pi);
wt=Iy;//这是 Angle_theta
thetaout = wt;
如果(thetaout > 2*pi){
while (阈值> 2*pi)
thetaout = thetaout - 2 * pi;
}
否则、如果(thetaout < 0){
while (thetaout < 0)
thetaout = thetaout + 2*pi;
}
//输出将是 θ、频率、VD1
DAC_VD1=(VD1*45.5111111);
dac_theta=(thetaout*652.23);