前兩天,幫一個客戶調(diào)試CAN總線,他的板子發(fā)數(shù),USBCAN接收,但是總是調(diào)試不成。我接上示波器,量一下CANH與CANL之間的波形,發(fā)現(xiàn)他板子不連接USBCAN接口卡時,波形是正確的;可是一旦連接上USBCAN以后,波形就成了以下這個樣子:
本文引用地址:http://m.butianyuan.cn/article/201612/330355.htm就是剛發(fā)了第一個顯性位之后,就有個階梯的電壓下降,然后保持幾個位后,恢復到隱性電平,過了一會,才有正常的波形出來,可是這個幀只剩下一半了,肯定不可能發(fā)送成功。
我開始以為是收發(fā)器不匹配,換了幾個收發(fā)器都是一樣的。突然我想到這個很像錯誤幀。既然有錯誤幀,那就說明可能波特率不對。仔細看了程序,發(fā)現(xiàn)波特率是12M下算出來的,而晶振卻用了16M。立馬調(diào)整波特率,OK。通訊成功。那個階梯的波形也沒有了。
所以可以肯定,那就是一個錯誤幀。但為什么有個階梯呢?答案很簡單,因為CAN通訊的兩個節(jié)點的收發(fā)器的電源不同,比如,發(fā)送節(jié)點的電壓稍微高點,那么其CANH被拉高時電壓也高,故顯性位輸出時,差分電壓也高。所以當發(fā)送節(jié)點發(fā)送的顯性位被接收節(jié)點接收后,接收節(jié)點發(fā)現(xiàn)波特率不匹配,則馬上發(fā)出錯誤幀(6個位的顯性電平),但是接收節(jié)點電壓稍微低,故差分電壓也小一點,所以產(chǎn)生了一個“階梯”。
下面為錯誤幀的定義:
錯誤幀是節(jié)點收到信息,被認為錯誤時,而向總線廣播的一種幀。比如前面這個錯誤幀的作用就是:接收節(jié)點通知發(fā)送節(jié)點:你的發(fā)送有主動錯誤,你的發(fā)送錯誤計數(shù)器要加8;同時接收節(jié)點的接收錯誤計數(shù)器要加1。
這樣,不同波特率的總線下,少數(shù)不同波特率的發(fā)送節(jié)點總是先退出總線(錯誤計數(shù)器達256時,進入總線關(guān)閉狀態(tài)),保證了其他節(jié)點的正常通訊。
評論