Re: 用30f4011产生SPWM的思路,请大家指点
|
||||
---|---|---|---|---|
中級會員
|
while(1);
{ } /* Infinite Loop */ 這樣的程式有可能會錯誤 應該是寫成 while(1) { ; } 才對 之前讓主程式什麼都沒做會發生執行錯誤 試試看吧
發表於: 2008/4/29 14:10
|
|||
|
Re: 用30f4011产生SPWM的思路,请大家指点
|
||||
---|---|---|---|---|
新會員
|
谢谢这位小哥的指点,固定占空比PWM我作过,没有问题。能把您的思路跟我说清楚吗,我是个初学者。你的思路是查表,具体怎么实现,还得请您赐教:)
發表於: 2008/4/28 15:58
|
|||
|
Re: 用30f4011产生SPWM的思路,请大家指点
|
||||
---|---|---|---|---|
資深會員
|
1.大爺您固定PWM輸出有試過嗎?
沒幫你看設定, 是否先試過固定PWM, 看實際單相或三相PWM正常(包含SPWM應該有的邏輯, 無論單極性或雙極性)? 固定PWM都不能正常工作, 那就沒得玩了. 這是第一步, 錯就要弄到對才能繼續. 注意!! 互補PWM一般有極大與極小值限制, 不然會錯誤, 甚至短路!! 2.PDC1 = p; /* 占空比 更新*/ i++; if(i=1999)i=0; 這段有點傻眼!! 執行一次, i假設由0開始, ++後=1. 請問Duty應該多少? i是不是應該在中斷內執行? 不然怎麼控制sin(delta t), 怎麼控制sin的頻率. 而且怎麼看都是只會更新PWM一次?? PWM不是在中斷給值, 也算是創舉. 3.你的設計思路, 我會稱為"原理", 思路應該包含如何產生delta t, 而且很少看過SPWM不是查表.
發表於: 2008/4/27 23:45
|
|||
Thanks,
Edward Lee |
||||
|
Re: 用30f4011产生SPWM的思路,请大家指点
|
||||
---|---|---|---|---|
新會員
|
期待大家和版主对小弟的指点:)
發表於: 2008/4/27 21:29
|
|||
|
用30f4011产生SPWM的思路,请大家指点
|
||||
---|---|---|---|---|
新會員
|
SPWM方法:对称采样法
程序设计思路:通过PWM中断来给PWM模块的占空比寄存器赋新值,从而实现SPWM。 程序主要部分如下: #include "p30f4011.h" #include "stdio.h" #include "math.h" /* Configuration Bit Settings */ _FOSC(CSW_FSCM_OFF & XT_PLL8); //XT with 4xPLL oscillator, Failsafe clock off _FWDT(WDT_OFF); //Watchdog timer disabled _FBORPOR(PBOR_OFF & MCLR_EN); //Brown-out reset disabled, MCLR reset enabled _FGS(CODE_PROT_OFF); //Code protect disabled /*****************************************************************************/ /* STANDARD PWM INITIALIZATION CODE */PWM初始化 /*****************************************************************************/ void init_PWM() { /* PWM1 I/O Control Register register */ PWMCON1bits.PEN1H = 1; /* PWM1H is controlled by GPIO module */ PWMCON1bits.PEN1L = 1; /* PWM1L is controlled by PWM module */ PWMCON1bits.PMOD1 = 0; /* Select Independent Output PWM mode */ PTCONbits.PTEN =1; /*PWM时基开启*/ PTCONbits.PTMOD = 0; PTCONbits.PTCKPS =0; /* Load PDTR1 and ALTDTR2 register with preset dead time value */ DTCON1bits.DTAPS = 0; /* Deadtime setting */ DTCON1bits.DTA =10; /* PWM Time Base Control Register */ IFS2bits.PWMIF =0; IEC2bits.PWMIE =1; IPC9 =7; } /*****************************************/ /*中断变量*/ /******************************************/ void __attribute__((__interrupt__,no_auto_psv)) _PWMInterrupt(void) { IFS2bits.PWMIF =0; p= long(abs(2000*sin(0.1*i)));/*对称采样得到占空比的公式*/ } /******************************************************************************/ /* MAIN ROUTINE */ /******************************************************************************/ int main() { TRISEbits.TRISE1 = 0; /* Set RE1 as a digital output */ TRISEbits.TRISE0 = 0; /* Set RE3 as a digital output */ init_PWM(); /* Load PDC1 register with initial Duty Cycle value */ PDC1 = p; /* 占空比 更新*/ i++; if(i=1999) i=0; /*周期*/ while(1); { } /* Infinite Loop */ } 问题:我的输出波形式一直是低电平。请大家多讨论一下,也多指点一下小弟:) 谢谢
發表於: 2008/4/26 8:13
|
|||
|