Re: dspic33ck128MP505 capture頻率
|
||||
---|---|---|---|---|
新會員
|
謝謝管理員以及版主回答,目前將測試值回傳已經可以將Capture抓到的值丟到第二組PWM中做鎖頻的功能,100kHz以上都可以鎖到,但雖然頻率能鎖到
但在相位中不同頻率下他會個別固定相移一個值,但在PGxPHASE暫存器中都有先清零且沒有讓他產生相位,還在找尋原因當中
發表於: 2021/1/12 13:34
|
|||
|
Re: dspic33ck128MP505 capture頻率
|
||||
---|---|---|---|---|
版主
|
還有,如果 PWM 是使用傳統 MCCP 的 PWM Module,這 PWM 的解析度只到 14-bit 。但 Catptue 的解析度基本就是 16-bit 的標配。
如此問題來了? 你如如何將 16-bit 的 Capture 值田給 14-bit 的 PWM? 輸入如是高頻應該沒問題,但是低頻時就會出現問題。
發表於: 2021/1/12 11:12
|
|||
|
Re: dspic33ck128MP505 capture頻率
|
||||
---|---|---|---|---|
版主
|
理論上是可以算出 PWM 與 Capture 的值,但因不易觀測真正的數值是否與計算出的數值有差異? 而且實際的硬體是否可達到所要求的效能,這有時是會陷入一個模糊地帶的。
建議先將這兩的模組分開來測試。可以用 printf( ) 的函數將所要即時觀測的資料用 UART 送出來 (一般是送給一個 UART to USB 的裝置給終端機來顯示) 或也可以送給 LCD 模組做述職的顯示。也可以送到一個 8-bit PORT 輸出到 LED 上顯示。總之,就是要有一個可以即時觀察變數的即時顯示器是最好的。再不然你就需要使用 PK3 之類的開發工具在 Debug Mode 下在適當的地方設定斷點來觀測其數值。 建議先單獨檢查一下 Capture 可以抓到的範圍實際是多少,如果輸入的測量頻率超過 50KHz 時是否可以考慮啟用 Capture 的 Prescaler (1/1, 1/4, 1/16) 將輸入頻率做降頻使用 16-bit 計數模式,並用一個旗號設定預除器的使用及降頻的倍率。我們必須先確定所使用的 Capture 所能抓取的頻率範圍後再去送給 PWM。 dspic33ck128MP505 的 PWM 有兩種,一為高速 Moter 或 Digital Power 用的超高速 PWM (250pS 解析度) 或是使用傳統的 MCCP/SCCP 模組的 PWM。
發表於: 2021/1/11 11:36
|
|||
|
Re: dspic33ck128MP505 capture頻率
|
||||
---|---|---|---|---|
管理員
|
MCU:dsPIC33CK256MP506
將PWM1時脈:100MHz、PWM1頻率:100K 送進去Input Capture時脈:100MHz 透過UART傳輸資料出來 Capture捕捉到1000 Attach file: Link only for registered users
發表於: 2021/1/8 16:54
|
|||
|
Re: dspic33ck128MP505 capture頻率
|
||||
---|---|---|---|---|
新會員
|
感謝管理員回覆,您的回答我能了解,但目前的問題點在於我現在PWM和Capture時脈一樣是選擇100MHz,且PWM可以操作到100kHz
,但我的Capture的Count無法追到我的PWM頻率,只要超過65kHz就沒辦法捕捉到,Capture應該要捕捉到100M/100k=1000,請問一下是我時脈要調整還是哪個部分要改變呢,再麻煩管理員解答一下謝謝。
發表於: 2021/1/8 14:22
|
|||
|
Re: dspic33ck128MP505 capture頻率
|
||||
---|---|---|---|---|
管理員
|
Input Capture時脈:100MHz
PWM時脈:100MHz PWM頻率:40K PWM上升沿抓取值 Capture數值是計算在PWM的兩個上升沿中間有多少個Count 所以,如上述條件 Capture抓到的數值會是100M/40K = 2500 所以,當你改變PWM時脈,Capture抓到的數值 還是會依造你的PWM頻率為基礎。
發表於: 2021/1/7 14:16
|
|||
|
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
|
|||
|