• slider image 263
  • slider image 264
  • slider image 265
  • slider image 267
  • slider image 268
  • slider image 269
:::


Browsing this Thread:   1 Anonymous Users






dspic33ck128MP505 capture頻率
#1
新會員
新會員


查看用戶資訊
各位先進好,最近在使用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時卻沒辦法準確抓到值

發表於: 12/25 14:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dspic33ck128MP505 capture頻率
#2
管理員
管理員


查看用戶資訊
Input Capture時脈:100MHz
PWM時脈:100MHz
PWM頻率:40K
PWM上升沿抓取值
Capture數值是計算在PWM的兩個上升沿中間有多少個Count
所以,如上述條件
Capture抓到的數值會是100M/40K = 2500
所以,當你改變PWM時脈,Capture抓到的數值
還是會依造你的PWM頻率為基礎。

發表於: 1/7 14:16
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dspic33ck128MP505 capture頻率
#3
新會員
新會員


查看用戶資訊
感謝管理員回覆,您的回答我能了解,但目前的問題點在於我現在PWM和Capture時脈一樣是選擇100MHz,且PWM可以操作到100kHz
,但我的Capture的Count無法追到我的PWM頻率,只要超過65kHz就沒辦法捕捉到,Capture應該要捕捉到100M/100k=1000,請問一下是我時脈要調整還是哪個部分要改變呢,再麻煩管理員解答一下謝謝。

發表於: 1/8 14:22
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dspic33ck128MP505 capture頻率
#4
管理員
管理員


查看用戶資訊
MCU:dsPIC33CK256MP506
將PWM1時脈:100MHz、PWM1頻率:100K
送進去Input Capture時脈:100MHz
透過UART傳輸資料出來
Capture捕捉到1000

Attach file:


Link only for registered users

發表於: 1/8 16:54
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dspic33ck128MP505 capture頻率
#5
版主
版主


查看用戶資訊
理論上是可以算出 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。

發表於: 1/11 11:36
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dspic33ck128MP505 capture頻率
#6
版主
版主


查看用戶資訊
還有,如果 PWM 是使用傳統 MCCP 的 PWM Module,這 PWM 的解析度只到 14-bit 。但 Catptue 的解析度基本就是 16-bit 的標配。
如此問題來了? 你如如何將 16-bit 的 Capture 值田給 14-bit 的 PWM? 輸入如是高頻應該沒問題,但是低頻時就會出現問題。

發表於: 1/12 11:12
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dspic33ck128MP505 capture頻率
#7
新會員
新會員


查看用戶資訊
謝謝管理員以及版主回答,目前將測試值回傳已經可以將Capture抓到的值丟到第二組PWM中做鎖頻的功能,100kHz以上都可以鎖到,但雖然頻率能鎖到
但在相位中不同頻率下他會個別固定相移一個值,但在PGxPHASE暫存器中都有先清零且沒有讓他產生相位,還在找尋原因當中

發表於: 1/12 13:34
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: dspic33ck128MP505 capture頻率
#8
版主
版主


查看用戶資訊
我想像一下: 因為 Capture 抓到的頻率值,總是會有一段延遲的時間後才會送到 PWM 裡,這就又延遲的產生,如果是中斷處理也會又延遲的。

你是否 Capture 抓一次數值後就馬上更新 PWM 的週期。可否多抓幾次取平均後再更新 PWM,或使用 Timer 計時約每 n 個 mS 後啟動 Capture 抓頻率 (Capture 可以不用中斷方式,直接透過 timer 來啟動) 後再刷新 PWM 的輸出?

發表於: 1/12 17:12
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://edm.microchip.com.hk/webapp/opt-in/website/tc/form.htm
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

Microchip CAE 空中教室

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源