[請益] 28035 SPWM的CODE 請求高手解救

看板Electronics作者 (yo)時間13年前 (2012/11/13 23:33), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我正在做單相全橋變頻器, 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
文章代碼(AID): #1GecXOTo (Electronics)