會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





dsPIC30F6015 CANBUS 正常模式異常
新會員
註冊日期:
2017/05/26 16:29
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86
HP : 0 / 21
MP : 3 / 136
離線
各位先進好:
我使用dsPIC30F6015的晶片撰寫CANBUS,在Loopback mode使用上都正常,但normal operation mode無法動作,目的是想要讓CANBUS一秒能傳送一次資料,想請問以下幾點問題:
1.我如何檢查自我設定的Baud Rate.
2.DataSheet有關Baud Rate相關計算是否有錯?如圖移項之後不是變除2?

3.以下是我的Baud Rate設定,不知是否正確?
速率設定為500Kbps; 總共TQ數為10;
由於我使用的外部震盪源為10MHz,config FOSFPR = HS2_PLL4,因此Fosc=20MHz,使用Fcy=5MHz,且CANCKS=0;Fcan=20MHz ;
因此TQ=(1/500K)/10=200ns; BRP=1; SEG1PH=2Tq, SEG2PH=3Tq, PRSEG=2Tq;



以下是Microchip的範例程式,將他修改成我所設計的鮑率
C1CTRLbits.CANCKS = 0; // Fcan = 4Fcy = 20MHz
C1CFG1bits.SJW = 2; //SJW=3Tq
C1CFG1bits.BRP = 1;
C1CFG2 = 0x0289;

C1INTF = 0;
IFS1bits.C1IF = 0;
C1INTE = 0x00FF;
IEC1bits.C1IE = 1;

C1RXM0SID = C1RXM1SID = 0x1FFD;
C1RXF0SID = 0x0AA8;
C1RXF2SID = 0x1555;

C1TX0CON = 0x0003; // High priority
C1TX0SID = 0x50A8; // SID
C1TX0EID = 0x0000;


C1TX0B1 = OutData0[0];
C1TX0B2 = OutData0[1];
C1TX0B3 = OutData0[2];
C1TX0B4 = OutData0[3];

C1TX1CON = 0x0002; // High Intermediate priority
C1TX1SID = 0xA855; // SID
C1TX1EID = 0x0004; // EID


C1TX1B1 = OutData1[0];
C1TX1B2 = OutData1[1];

C1CTRLbits.REQOP = 0;
while (C1CTRLbits.OPMODE != 0);

while(1){


if (T1FLAG) {
T1FLAG=0;
C1TX0DLC = 0x01C0;
C1TX1DLC = 0x8DA0;
C1TX0CONbits.TXREQ = 1;
C1TX1CONbits.TXREQ = 1;
}
}


void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void) {
_T1IF = 0;
T1FLAG=1;
}

附加檔案:



jpg  擷取.JPG (50.89 KB)
53211_5cb1804a08407.jpg 691X553 px

4月13日 14:26:42
轉換PDF檔 列印


Re: dsPIC30F6015 CANBUS 正常模式異常
資深會員
註冊日期:
2004/07/23 16:25
所屬群組:
註冊會員
文章: 1196
等級: 30; EXP: 15
HP : 0 / 728
MP : 398 / 31940
離線
CAN BUS 上至少要有兩個 DEVICE 才能正常運作

至少要有一個以上的設備 回 ACK 才行

4月15日 09:56:56
轉換PDF檔 列印


Re: dsPIC30F6015 CANBUS 正常模式異常
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14799
等級: 73; EXP: 52
HP : 1087 / 1813
MP : 4933 / 80675
離線
1. CAN 在做正式的傳輸時,至少在 CAB Bus 至少要有一個 CAB Node 的連接,且 CAN+ & CAN- 要接上一個 220 ohm 的終端電阻。CAN Node 之間建議還要有第項相連接。因為 CAN Node 傳送資料出去時會檢查資料上的 ACK Field 的 2-bit 的電位以確定這個 CAN Message 是否有人收到。

* Acknowledge Error (當無“告知收到”位元發生時)
- 傳送中的 node 在A ckSlot 時檢查 Ack 位元, 此時它送出一個recessive 位元並檢查是否有收到 dominant 位元
- 如果偵測到 dominant 位元發生, 表示至少有一個 node 已正確地收到 Message
- 否則, 將視為有 Ack 錯誤發生, 將產生一個“示誤封包(Error Message)”並重新傳送此次的資料

所有一定要在接上另一片的 CAN 板子。

2. 建議先使用 125Kbps 的速度來操作。Syne =1, Prog Seg. =2, Phase Seg1 = 3, Phase Seg2=3。
基本上自己的板子只要雙方都設成同一個 Baud Rate 都可以通的。

4月15日 10:29:35
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2019 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project