前兩天,幫一個客戶調試CAN總線,他的板子發數,USBCAN接收,但是總是調試不成。我接上示波器,量一下CANH與CANL之間的波形,發現他板子不連接USBCAN接口卡時,波形是正確的;可是一旦連接上USBCAN以后,波形就成了以下這個樣子:
本文引用地址:http://www.104case.com/article/201612/330355.htm就是剛發了第一個顯性位之后,就有個階梯的電壓下降,然后保持幾個位后,恢復到隱性電平,過了一會,才有正常的波形出來,可是這個幀只剩下一半了,肯定不可能發送成功。
我開始以為是收發器不匹配,換了幾個收發器都是一樣的。突然我想到這個很像錯誤幀。既然有錯誤幀,那就說明可能波特率不對。仔細看了程序,發現波特率是12M下算出來的,而晶振卻用了16M。立馬調整波特率,OK。通訊成功。那個階梯的波形也沒有了。
所以可以肯定,那就是一個錯誤幀。但為什么有個階梯呢?答案很簡單,因為CAN通訊的兩個節點的收發器的電源不同,比如,發送節點的電壓稍微高點,那么其CANH被拉高時電壓也高,故顯性位輸出時,差分電壓也高。所以當發送節點發送的顯性位被接收節點接收后,接收節點發現波特率不匹配,則馬上發出錯誤幀(6個位的顯性電平),但是接收節點電壓稍微低,故差分電壓也小一點,所以產生了一個“階梯”。
下面為錯誤幀的定義:

錯誤幀是節點收到信息,被認為錯誤時,而向總線廣播的一種幀。比如前面這個錯誤幀的作用就是:接收節點通知發送節點:你的發送有主動錯誤,你的發送錯誤計數器要加8;同時接收節點的接收錯誤計數器要加1。
這樣,不同波特率的總線下,少數不同波特率的發送節點總是先退出總線(錯誤計數器達256時,進入總線關閉狀態),保證了其他節點的正常通訊。
評論