新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于CAN總線通信協議的設計與實現

        基于CAN總線通信協議的設計與實現

        作者: 時間:2009-06-18 來源:網絡 收藏

        1 前言
        控制器局域網(-Controller Area Network)屬于現場(Fieldbus)的范疇,是眾多的屬于現場標準之一,它適用于工業控制系統,具有速率高、可靠性強、連接方便、性能價格比高等諸多特點。它是一種有效支持分布式控制或實時控制的串行網絡,以其短報文幀及CSMA/CD-AMP(帶有信息優先權及沖突檢測的載波監聽多路訪問)的MAC(媒介訪問控制)方式而倍受工業自動化領域中設備互連的厚愛。的應用范圍遍及從高速網絡到低成本的多線路網絡,它可以應用于汽車系統、機械、技術設備和工業自動化里幾乎任何類型的數據具有如一下優點:
        1)使用簡單方便。許多CAN控制器了CAN物理層及數據鏈路層的大部分功能,用戶只須對CAN控制器進行初始化和對CAN上的數據進行收發操作即可通信;
        2)高可靠性。CAN上的最大通信速率可達1Mbps,CAN總線是多主節點,各節點通過總線仲裁獲得總線控制權。完善的錯誤處理機制保證了高噪聲干擾環境下數據傳送的安全可靠;
        3)系統可擴展性能好。CAN總線是發送報文的編碼,而不是對CAN控制節點進行編碼,故增添或刪除CAN節點不會對系統造成太大的影響。
        CAN總線以報文為單位進行信息傳送,它支持4種不同類型的報文幀:數據幀、遠程幀、超載幀和錯誤幀。報文中包含信息標識符ID,它標志了報文的優先權。CAN總線上各個節點都可主動發送,總線上的報文采用標識符ID進行仲裁,ID值越小,優先級越高。具有最高優先權報文的節點贏得總線使用權,而其它節點自動停比發送。在總線再次空閑后,這些節點將自動重發原報文。網絡中的所有節點都可由ID來自動決定是否接收該報文。每個節點都有ID寄存器和屏蔽寄存器接收到的報文只有與該屏蔽的功能相同時,該節點才開始正式接收報文,否則它將不理睬ID后面的報文。這使CAN系統非常靈活,可任意擴展或改變網絡組成。
        C8051F系列是集成的混合信號片上系統SOC(System on chip),具有與MCS-51內核及指令集完全兼容的微控制器,除具有標準8051的數字外設部件之外,片內還集成數據采集和控制系統中常用的模擬部件和其它數字外設及功能部件。正是由于其體積小、集成度高、功能多、配置容易、使用方便等特點,已被廣泛應用于智能儀表、數據采集、自動化控制等領域。因此本文采用CAN總線通信,充分發揮其體積小、可靠性高的特點。是完全集成的混合信號片上系統MCU芯片,具有64個數字I/O引腳(100腳TQFP封裝)。
        2 數據傳輸格式的制定
        在CAN2.0規范中規定,每次收發最多只能傳送8字節.這可以滿足大多數工業領域中控制命令、工控狀態和測試數據的一般要求;但實際應用中,往往出現傳送多于8字節的要求,此時應通過報文的拆卸和拼接技術予以實現。本文在CAN2.0A的基礎上,定義了簡單的傳輸格式,完成了單幀數據和多幀數據準確快捷的傳輸。
        信息傳遞格式如表一所示:

        本文引用地址:http://www.104case.com/article/158038.htm

        其中,各位的含義如下:
        FF:0表示為標準格式,1表示為擴展格式;
        RTR:0表示為數據幀,1表示為遠程幀;
        DLC.X:數據長度代碼位(0~8);
        ID.X:信息標識符位:
        ID.28~ID.26為信息功能標識
        ID.25~ID.21為接收任務標識
        ID.20~ID.18為接收節點地址標識
        X :保留位,默認為0,不能對保留位進行寫操作;
        DATAO:數據場的第一個字節,本中用來表明數據的屬性;
        DATA0.7~DATAO.5為發送節點地址標識;
        DATA0.4~DATAO.1為數據功能標識
        DATA0.0 0為擴展位,‘0’ 表明數據長度小于8不用擴展,‘1’ 表示數據長度大于8需要擴展DATA1作傳遞次數索引。
        DATA1: DATAO.0為0時,傳遞數據;DATAO.0為1時,為數據傳遞次數的索引。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 长海县| 观塘区| 合阳县| 通江县| 乐昌市| 张家川| 阆中市| 马边| 泰来县| 廉江市| 商都县| 慈溪市| 万年县| 平远县| 当阳市| 江永县| 永定县| 镇平县| 邹城市| 滕州市| 集安市| 扬州市| 巢湖市| 台东市| 仁怀市| 瑞金市| 彰武县| 夹江县| 鄂托克前旗| 沁源县| 遵义县| 北票市| 龙山县| 宁安市| 松潘县| 健康| 翼城县| 陆川县| 清涧县| 墨脱县| 安国市|