管理員
Joined
: 2004/4/28 19:29 最後登入時間
: 9/30 21:56
Group:
註冊會員 站務管理者
Level : 18 HP : 0 / 430 MP : 127 / 25738 EXP : 23
|
今天有客戶問到 dsPIC30F CAN Modile 的 Baud Rate 設定問題 . 但很抱歉的是小弟在找到答案後卻無法找到這位朋友的電話, 想想就發表於此來和大家一起分享吧 !! 計算 CAN 的 Baud Rate , 其實是要計算出如何將控制暫存器做設定 , 才能得到我們想要的 Baud Rate !! 因為 Baud Rate 是個已知的值.
在 dsPIC30F 的 CAN Module , 有一個 bit 特別重要 , 那就是 CANCKS 位元(位置在 C1CTRL or C2CTRL ) CANCKS 位元控制著所謂 TCAN 的時間 , 若 CANCKS = 0 , 則 FCAN = 4FCY , 也就是 FCAN 的頻率為加至 CPU 的頻率(在 dsPIC30F , FCY = 1/4 FOSC , 也就是 CPU 要 4 個 clock 才執行一個指令 )
現在就以下列條件來做為計算的示範 :
1. 電路上的 Crystal = 4 Mhz 2. Configuration bits 的 "Primary Oscillator Mode" 選為 XT w/PLL 4X (如此的 FOSC = 16Mhz , FCY = 4Mhz) 3. 需要的 Baud Rate = 125 K -> Bit Time = 8 us 4. 讓 CANCKS = 0 (Reset 後的預設值) , 所以 FCAN = 16 Mhz 5. 假設總 TQ 數為 16 (最大可為 25 , 但技巧性的我們用 16 先試試 , 因為 FCAN = 16Mhz) 6. TQ = 8us/16 = 500 ns 7. 利用公式 TQ = 2*(BRP+1)*TCAN >> TQ/TCAN = 2BRP + 2 >> 2BRP = (TQ/TCAN) - 2 >> BRP = (TQ/(2*TCAN)) - 1 --> TCAN = 1/16Mhz = 62.5ns >> BRP = (500/(2*62.5)) - 1 >> BRP = 500/125 - 1 >> BRP = 4 - 1 = 3
希望以上的講解還算清楚 , 接下來就是使用 MPLAB C30 的 CAN Library 來 config CAN module 了. 以下為範例 , 詳細的還請參考 MPLAB C30 對周邊 Library 的說明 :)
** 30F Reference Manual 請到網站下載最新的版本 , 舊的版本說明有些有誤 ...
CAN1Initialize( CAN_SYNC_JUMP_WIDTH3 & CAN_BAUD_PRE_SCALE(4), CAN_WAKEUP_BY_FILTER_DIS & CAN_PHASE_SEG2_TQ(6) & CAN_PHASE_SEG1_TQ(6) & CAN_PROPAGATIONTIME_SEG_TQ(3) & CAN_SEG2_FREE_PROG & CAN_SAMPLE1TIME ) ;
發表於: 2009/6/8 19:07
|