Re: dspic33ck128MP505 capture頻率
|
||||
---|---|---|---|---|
新會員
|
謝謝管理員以及版主回答,目前將測試值回傳已經可以將Capture抓到的值丟到第二組PWM中做鎖頻的功能,100kHz以上都可以鎖到,但雖然頻率能鎖到
但在相位中不同頻率下他會個別固定相移一個值,但在PGxPHASE暫存器中都有先清零且沒有讓他產生相位,還在找尋原因當中
發表於: 2021/1/12 13:34
|
|||
|
dspic33ck128MP505 capture頻率
|
||||
---|---|---|---|---|
新會員
|
各位先進好,最近在使用dspic33ck系列的capture功能,目前測試使用一組捕捉去抓取第一組PWM頻率,
接著把捕捉中斷抓到的值丟到第二組PWM的PGxPER暫存器,使兩者的頻率相同,目前遇到的狀況是10k-60kHz狀況下 第二組PWM都能和第一組PWM頻率相同,但是在提升到100kHz時頻率卻抓不到了,以下是我的程式麻煩各位先進們可以幫忙解決 這邊是使用外部震盪器16MHz,而FOSC為200MHz,Fp為100MHz #define System_OSC 16000000UL #define System_PLLFBDIV 50 #define System_PLLPRE 2 #define System_POST1DIV 1 #define System_POST2DIV 1 #define System_FPLLO System_OSC*(float)((float)System_PLLFBDIV/((float)System_PLLPRE*(float)System_POST1DIV*(float)System_POST2DIV)) #define System_FVCO System_OSC*(float)((float)System_PLLFBDIV/(float)System_PLLPRE) #define System_FOSC (System_FPLLO/2) #define System_FCY (System_FOSC/2) #define System_FP (System_FOSC/2) 這邊是初始捕捉,時脈選擇FP為100MHz,而捕捉模式為PWM每次上升沿抓取值 void Initial_CCP3(void) { CCP3CON1Lbits.CLKSEL=0; CCP3CON1Lbits.T32=0; CCP3CON1Lbits.CCSEL=1; CCP3CON1Lbits.MOD=1; CCP3TMRL=0; CCP3TMRH=0; CCP3CON1Lbits.CCPON=1; IFS2bits.CCP3IF=0; IEC2bits.CCP3IE=1; _CCP3IP=7; } 這邊是中斷每進一次把值丟給第二組PWM之後捕捉buffer清零 void __attribute__((interrupt, no_auto_psv)) _CCP3Interrupt() { { unsigned int uitemp; if(CC=1){ CCP3_FirstValue=CCP3BUFL; } CC=1; CCP3TMRL=0; CCP3TMRH=0; CCP3BUFL=0; _CCP3IF=0; } } 下面是我固定第一組時脈100MHz下頻率為85kHz,而B是抓取到的值,C是B的一半固定開50%Duty PG1DC=588; PG1PER=1176; PG2DC=C; PG2PER=B; 而PWM時脈也是選擇100MHz,當捕捉和PWM選擇100MHz時最多只能操作在10-60kHz,當我時脈調到200MHz時PWM能正常運作且能產生100kHz方波,但捕捉時脈調到200MHz時卻沒辦法準確抓到值
發表於: 2020/12/25 14:51
|
|||
|