• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

关于纯正正弦波的算法,有请钟工,老寿先生进来以及各位大侠高手来讨论

关于正弦波的修正算法,你们都是用什么方法去修正的?还有用SPWM做的话过零点需要注意什么。
全部回复(6)
正序查看
倒序查看
2010-07-22 23:15
基本上按等面积法。死区补偿可以按过零补偿最多波峰或波谷补偿最少。
0
回复
jackcai02
LV.2
3
2010-07-23 09:03
@xzszrs
基本上按等面积法。死区补偿可以按过零补偿最多波峰或波谷补偿最少。
那如果PI算出来的值是负的话,怎么转换成给PWM的DUTY,DUTY是个无符合寄存器呢。
0
回复
jackcai02
LV.2
4
2010-07-23 11:03
@jackcai02
那如果PI算出来的值是负的话,怎么转换成给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
回复
jackcai02
LV.2
5
2010-07-23 11:04
@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
回复
jackcai02
LV.2
6
2011-09-09 13:51
@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; 
现在回想起来,这个问题很简单,做稳压太简单了。哈哈。。。
0
回复
syrobots
LV.2
7
2012-06-27 12:15
@jackcai02
现在回想起来,这个问题很简单,做稳压太简单了。哈哈。。。
jackcai02您好!可不可以向你请您请教?方便留下邮箱或QQ吗?我的QQ:114513500
0
回复