關(guān)于純正正弦波的算法,有請鐘工,老壽先生進來以及各位大俠高手來討論
關(guān)于正弦波的修正算法,你們都是用什么方法去修正的?還有用SPWM做的話過零點需要注意什么。
全部回復(fù)(6)
正序查看
倒序查看
@jackcai02
那如果PI算出來的值是負的話,怎么轉(zhuǎn)換成給PWM的DUTY,DUTY是個無符合寄存器呢。
//180~360 degree close loop algorithmn
VoltageError = -SineTable_50Hz[PwmTabIndex] + InverterOutPutVoltageTmp;
VoltageErrorSum = VoltageErrorSum + Voltage_kCoeffs[1]*VoltageError;
Temp1 = Voltage_kCoeffs[0]*VoltageError;
Temp1 = Temp1+VoltageErrorSum;
if(Temp1 > 32767)
Temp1 = 32767;
if(Temp1 < -32767)
Temp1 = -32767;
Temp1 = abs(Temp1);
PWM_Mutiply_Data = ((__builtin_muluu((int)Temp1,(int)INVERTER_PERIOD_VALUE))>>15);
if(PWM_Mutiply_Data > INVERTER_PERIOD_VALUE)
PWM_Mutiply_Data = INVERTER_PERIOD_VALUE;
0
回復(fù)
@jackcai02
//180~360degreecloseloopalgorithmnVoltageError=-SineTable_50Hz[PwmTabIndex]+InverterOutPutVoltageTmp; VoltageErrorSum=VoltageErrorSum+Voltage_kCoeffs[1]*VoltageError; Temp1=Voltage_kCoeffs[0]*VoltageError; Temp1=Temp1+VoltageErrorSum; if(Temp1>32767) Temp1=32767; if(Temp1<-32767) Temp1=-32767; Temp1=abs(Temp1); PWM_Mutiply_Data=((__builtin_muluu((int)Temp1,(int)INVERTER_PERIOD_VALUE))>>15); if(PWM_Mutiply_Data>INVERTER_PERIOD_VALUE) PWM_Mutiply_Data=INVERTER_PERIOD_VALUE;
//0~180 degree close loop algorithmn 其中在180°,360°的時候把VoltageErrorSum = 0
VoltageError = SineTable_50Hz[PwmTabIndex] - InverterOutPutVoltageTmp;
VoltageErrorSum = VoltageErrorSum + 5*VoltageError;
Temp1 = 22*VoltageError;
Temp1 = Temp1 +VoltageErrorSum;
if(Temp1 > 32767)
Temp1 = 32767;
if(Temp1 < -32767)
Temp1 = -32767;
Temp1 = abs(Temp1);
PWM_Mutiply_Data = ((__builtin_muluu((int)Temp1,(int)INVERTER_PERIOD_VALUE))>>15);
if(PWM_Mutiply_Data > INVERTER_PERIOD_VALUE)
PWM_Mutiply_Data = INVERTER_PERIOD_VALUE;
0
回復(fù)
@jackcai02
//0~180degreecloseloopalgorithmn其中在180°,360°的時候把VoltageErrorSum =0VoltageError=SineTable_50Hz[PwmTabIndex]-InverterOutPutVoltageTmp; VoltageErrorSum=VoltageErrorSum+5*VoltageError; Temp1=22*VoltageError; Temp1=Temp1+VoltageErrorSum; if(Temp1>32767) Temp1=32767; if(Temp1<-32767) Temp1=-32767; Temp1=abs(Temp1); PWM_Mutiply_Data=((__builtin_muluu((int)Temp1,(int)INVERTER_PERIOD_VALUE))>>15); if(PWM_Mutiply_Data>INVERTER_PERIOD_VALUE) PWM_Mutiply_Data=INVERTER_PERIOD_VALUE;
現(xiàn)在回想起來,這個問題很簡單,做穩(wěn)壓太簡單了。哈哈。。。
0
回復(fù)