[請益] 28035 SPWM的CODE 請求高手解救
我正在做單相全橋變頻器,
DC400/AC110 60HZ Fs=12K hz
以下是我的CODE的部份,我是利用晶片TI 28035
interrupt void adc_isr(void)
{
Vo_sence= AdcResult.ADCRESULT4;//B4
Vo_real=(Vo_sence - 3200 );
sin_number++;
E = (((sin_table[sin_number]/4096) * ref - Vo_real));///stable 110Vrms
E2 = ((E * 66)-(E1 * 67))/300;
//E2 = ((E * 66.087)-(E1 * 67.843))/300;
// E2 = ((((E) * 2.49)-((E1) * 2.99))/10000) * 120;
// Ma = (((Ma_1 * 2.1)-(Ma_2 * 1.1)) + E2) ;
Ma = (Ma_1 + E2) ;
if(sin_number >=200){
sin_number=0;
}
if(Ma >1000)//limit 5%
{
Ma =1000;//
}
if(Ma < -1000)//limit 95%
{
Ma = -1000;//
}
// Ma=1750;
// Ma=510;
duty1 = ((1250) - ((sin_table[sin_number]/4096) * Ma )); //begin 2083
rise 4096 to 4096 down 2083(half cycle)
duty2 = ((1250) + ((sin_table[sin_number]/4096) * Ma ));
EPwm1Regs.CMPA.half.CMPA = duty1 ;
EPwm2Regs.CMPA.half.CMPA = duty2 ;
E1 = E ;
Ma_2 = Ma_1;
Ma_1 = Ma ;
/////////////////resave//////////////
// Acknowledge this interrupt to receive more interrupts from group 1
buffer1[buffer_index]=Vo_real;
buffer2[buffer_index]=duty1;
// buffer2[buffer_index]=Vo_sence;
buffer_index++;
if (buffer_index >= 400){
buffer_index = 0;
}
// Reinitialize for next ADC sequence
AdcRegs.ADCINTFLGCLR.bit.ADCINT9 = 1; // Reset SEQ1
// Clear INT SEQ1 bit
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
return ;
}------------------------------------------------------
我發現這兩組A跟B好像開的DUTY不等長,一直TRY,看不出個關係!
有高手可以相救一下嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.124.43.225