CAN/RS-232接口卡的設計與實現
發布時間:2010-06-09 來源:21IC
中心議題:
前者具有傳輸速度快的特點,但卻要占用一個計算機的插槽,並且設計上十分困難;後者的傳輸速度也很快,且價格較便宜,但要花費很大的精力進行USB的固件開發和維護,並要編寫複雜的驅動程序。根據此,需要設計一種能夠方便讀取CAN總線數據,並通過RS232串行口將數據送給PC機處理和顯示的接口卡;此外還需對其串行傳輸的協議進行加強,以使能有效地降低傳輸過程中出現的錯誤。
接口卡的硬件設計
硬件部分主要包括主控製器、CAN總線控製器、CAN總線收發器以及與計算機的RS232通信接口芯片等。係統的總體結構如圖1所示。主控製器通過CAN總線接口接收和緩存數據。根據PC機的命令進行選擇性的數據傳輸。

1與CAN總線接口
如圖2所示,接口卡的控製器選用Atmel公司的AT89S51,該單片機的引腳和功能與8051兼容,並且內部含有4KB的FLASHROM,支持在係統編程(ISP),這樣可以很方便地將應用程序下載到單片機裏。
CAN總線控製器選用Philips公司生產的SJA1000,該芯片是PCA82C200CAN控製器的替代品,而且新增加了一種PeliCAN工作模式,能夠支持CAN2.0B協議。它還支持錯誤中斷、報警限製、驗收濾波器擴展和自接收請求等功能。在係統中,將SJA1000的中斷輸出引腳INT接到單片機的中斷輸入引腳,這樣可以在接收數據或者總線錯誤時產生中斷,由控製器進行相應的處理。SJA1000的片選CS端接單片機的P2.7引腳,這樣SJA1000的地址就確定為7F00H~7FFFH。
[page]
選用芯片82C250作為CAN控製器和物理總線間的驅動接口,可以提供對總線的差動發送能力和對CAN控製器的差動接收能力,其最高速可達1Mb/s。由於實際係統中存在幹擾,故增加高速光隔6N137,以起到隔離的作用。電氣接口很簡單,有CANH和CANL兩根線,用以完成CAN的數據傳輸。在CAN總線的兩端有一個120Ω的電阻,其作用為匹配總線阻抗,用於提高數據通信的抗幹擾性及可靠性。具體電路如圖2所示。

2與RS232接口
RS232標準是美國電子工業聯合會(EIA)製定的一種串行物理接口標準,它適合於數據傳輸率在O~20000b/s範圍內的通信,目前廣泛用於計算機與終端或外設之間的近端連接。實際工作時,應保證電平在5~15V之間。所以為了與單片機進行通信。必須對其電平進行轉換。現在常用的轉換芯片是MAX232。MAX232內部有電壓倍增電路和轉換電路,隻需5V電源便可實現TTL電平與RS232電平的轉換,使用十分方便。串口接口電路如圖3所示。
[page]
接口卡的軟件設計
1RS232接口軟件設計
單片機與PC端的數據通信需要設計一個通信協議,采用同步通信方式進行。將通信協議分成命令幀、應答幀和數據幀三種格式。每種幀都包含有起始字節、數據長度、校驗字節和幀結束字節。具體格式如圖4所示。

命令幀共6個字節,傳輸方向為PC機到單片機。以0X00H作為幀起始,數據長度為2,當數據1和數據2同為0X00時,表示啟動接口卡,單片機接收到該信號後.會初始化SJA1000,並將結果反饋給PC機(成功或失敗);當數據1和數據2同為0XFFH時,表示要求接口卡停止工作,單片機會讓SJA1000進入睡眠模式,以退出總線;當數據1為0X01H時,表示PC機要求隻接收某個節點的數據,數據2則表示該接點的節點號,單片機會重新設置SJA1000的驗收濾波器,屏蔽掉其他不需要的節點數據。
應答幀共6個字節,傳輸方向為單片機到PC機。以0X11H作為幀起始,數據長度為2,當單片機接收到PC機的啟動或停止命令,並設置成功後,發送兩字節數據同為0X00H給PC,若設置失敗,則發送兩字節數據同為0XFFH給PC;對於PC要求讀取特定節點的命令,單片機以0X10H作為應答起始,並以兩字節同為0X00H表示成功,兩字節同為0XFFH表示失敗。
數據幀為接口卡從總線上讀到的數據,因為總線上數據有標準幀、遠程幀等之分,而且每個幀中裝載的數據長度未知,所以數據幀的長度不定,其傳輸方向也為單片機到PC,起始字節為0X22H。SJA1000每次接收到有效數據後會讓單片機產生接收中斷,單片機則在中斷處理中將數據首先讀入到RAM中暫時存放,然後計算其數據長度和校驗和,將數據封裝成幀,然後將幀通過串口送給PC處理和顯示。
各種類型的幀以0X33H作為幀結束標識。校驗和字節用來保證數據的準確性,單片機在發送數據前將各個字節相加,並將結果填人校驗字節。PC端接收到數據後,重新計算校驗和,並與單片機發送的校驗和相比較,相同則正確接收,否則要求單片機重新發送。
2協議的透明性分析
zaitongbuchuanshushujudeguochengzhong,zhendeqishizijiehejieshuzijieshifeichangzhongyaode,tanenggoubaozhengshujuzhendezhunquexing。danyinweizhelianggezijiedecunzai,tongshiyeyinchulelingyigedaijiejuedewenti,jiushidangshujuchangzhongchuxianleyuqishizijiexiangtongdeshujushi,henyoukenenghuidaozhiPCduanbatakanchengyigexindezhenqishi,congerdaozhishujudechulihexianshicuowu,zheyejiushishujuchuanshudetoumingxingwenti。zhenduichuankoudeshujuchuanshu,youyizhongbijiaohaodejiejuefangan。gaifangfajiangshujuzhuanhuanchengweiASCII字符來進行傳送,就是將每個字節的數據進行拆分,將一個16進製的字節拆分成兩個字節,如5AH,5BH,5CH,…,可以拆分為50H,0AH,50H,0BH,50H,OCH,…,PC機再接收到數據後,再將數據進行兩兩相或組合。這樣,隻需要32個字節就可以組合成為00H~0FFHzhongrenyigeshuju。danzhezhongbanfadequedianyeshixianeryijiande,yingyongtasuofasongdeyouxiaoshujuliangshizhengchangfasongdeliangbei,duiyuchuankouzhezhongchuanshusudubugaodetongxinjiezhieryan,zaishujuliangjiaodadeqingkuangxia,bushiyizhongkequdefangfa。
在該接口卡中作者采取了另一種轉義字符的方法。首先定義一個轉義字符標識OXDBH。對於CAN總線而言,其每個幀的最大數據長度為8,即使將CAN的幀信息和識別碼全部當作數據發送,其長度最大也隻有13B。這樣可以肯定的是,正常情況下數據幀中數據長度字節的高4位必然為0。因此在數據發送之前,首先檢查該數據中是否有與起始字節0X22H、結束字節0X33H和轉義標識0XDBH相同的數據,如果沒有,則正常發送;如果有,則檢測出與這兩個字節相同數據的個數,並將該個數填充到數據長度字節的高4位中;同時,將這些數據前添加轉義字符標識,並將該數據進行轉義。如數據0X22H。0X33H,0XDBH…,則轉義成0XDBH。0XD2H。0XDBH,0XD3H,0XDBH,0XDDH…。PC機在接收到數據幀後,首先檢查數據長度字節,看其高4位是否為0,如果為0,說明該數據組不存在轉義字符,可以直接處理;如果為N。則表明數據組中存在N個轉義字符,並且每個轉義字符都以0XDB開始,需要首先將它們重新修改回原始數據。相比而言,這種辦法有很好的穩定性和接口利用率,其數據流量也不會很高。
3CAN接口程序設計
CAN總線的接口程序主要就是進行SJA1000的初始化過程和後麵的接收中斷處理過程。CAN初始化主要是設置CAN的通信參數。需要初始化的CAN控製寄存器有:模式寄存器(MOD)、驗收代碼寄存器(ACR)、驗收屏蔽寄存器(AMR)、總線定時寄存器(RTR)、輸出控製寄存器(OC)、中斷寄存器(IR)和中斷使能寄存器(IER)等。這些寄存器都隻能在SJA1000處於複位狀態下才可寫訪問。當SJA1000進jin入ru工gong作zuo模mo式shi後hou,就jiu能neng夠gou自zi動dong接jie收shou總zong線xian上shang的de數shu據ju,並bing將jiang其qi放fang入ru接jie收shou緩huan衝chong區qu,同tong時shi產chan生sheng接jie受shou中zhong斷duan,單dan片pian機ji進jin入ru中zhong斷duan後hou將jiang數shu據ju從cong緩huan衝chong區qu中zhong讀du出chu,並bing釋shi放fang緩huan衝chong區qu。中zhong斷duan返fan回hui後hou,再zai將jiang數shu據ju封feng裝zhuang成cheng幀zhen發fa送song給geiPC機。
4PC端程序設計
PC端程序使用VB6.0進行開發。VB6.O在圖形界麵的製作上比較方便,使用Mscomm組件能夠輕鬆地製作串口的監視環境。隻要在軟件設計時將上述協議添加進行。圖5給出了使用VB6.0開發的軟件調試情況。

該CAN總線接口卡經過實驗驗證,證明可以達到預期的要求,能夠良好地監視總線上的數據,而且結構簡單,有較大的利用價值。當CAN總線係統數據流量較大時,可以考慮使用USB接口和PC機進行通信,這樣就能夠更好地解決速度匹配和應用場合受限的問題。
- 接口卡的硬件設計
- 接口卡的軟件設計
- 接口卡的係統調試
- 采用同步通信方式進行
- 選用芯片82C250作為CAN控製器和物理總線間的驅動接口
前者具有傳輸速度快的特點,但卻要占用一個計算機的插槽,並且設計上十分困難;後者的傳輸速度也很快,且價格較便宜,但要花費很大的精力進行USB的固件開發和維護,並要編寫複雜的驅動程序。根據此,需要設計一種能夠方便讀取CAN總線數據,並通過RS232串行口將數據送給PC機處理和顯示的接口卡;此外還需對其串行傳輸的協議進行加強,以使能有效地降低傳輸過程中出現的錯誤。
接口卡的硬件設計
硬件部分主要包括主控製器、CAN總線控製器、CAN總線收發器以及與計算機的RS232通信接口芯片等。係統的總體結構如圖1所示。主控製器通過CAN總線接口接收和緩存數據。根據PC機的命令進行選擇性的數據傳輸。

1與CAN總線接口
如圖2所示,接口卡的控製器選用Atmel公司的AT89S51,該單片機的引腳和功能與8051兼容,並且內部含有4KB的FLASHROM,支持在係統編程(ISP),這樣可以很方便地將應用程序下載到單片機裏。
CAN總線控製器選用Philips公司生產的SJA1000,該芯片是PCA82C200CAN控製器的替代品,而且新增加了一種PeliCAN工作模式,能夠支持CAN2.0B協議。它還支持錯誤中斷、報警限製、驗收濾波器擴展和自接收請求等功能。在係統中,將SJA1000的中斷輸出引腳INT接到單片機的中斷輸入引腳,這樣可以在接收數據或者總線錯誤時產生中斷,由控製器進行相應的處理。SJA1000的片選CS端接單片機的P2.7引腳,這樣SJA1000的地址就確定為7F00H~7FFFH。
[page]
選用芯片82C250作為CAN控製器和物理總線間的驅動接口,可以提供對總線的差動發送能力和對CAN控製器的差動接收能力,其最高速可達1Mb/s。由於實際係統中存在幹擾,故增加高速光隔6N137,以起到隔離的作用。電氣接口很簡單,有CANH和CANL兩根線,用以完成CAN的數據傳輸。在CAN總線的兩端有一個120Ω的電阻,其作用為匹配總線阻抗,用於提高數據通信的抗幹擾性及可靠性。具體電路如圖2所示。

2與RS232接口
RS232標準是美國電子工業聯合會(EIA)製定的一種串行物理接口標準,它適合於數據傳輸率在O~20000b/s範圍內的通信,目前廣泛用於計算機與終端或外設之間的近端連接。實際工作時,應保證電平在5~15V之間。所以為了與單片機進行通信。必須對其電平進行轉換。現在常用的轉換芯片是MAX232。MAX232內部有電壓倍增電路和轉換電路,隻需5V電源便可實現TTL電平與RS232電平的轉換,使用十分方便。串口接口電路如圖3所示。
[page]接口卡的軟件設計
1RS232接口軟件設計
單片機與PC端的數據通信需要設計一個通信協議,采用同步通信方式進行。將通信協議分成命令幀、應答幀和數據幀三種格式。每種幀都包含有起始字節、數據長度、校驗字節和幀結束字節。具體格式如圖4所示。

命令幀共6個字節,傳輸方向為PC機到單片機。以0X00H作為幀起始,數據長度為2,當數據1和數據2同為0X00時,表示啟動接口卡,單片機接收到該信號後.會初始化SJA1000,並將結果反饋給PC機(成功或失敗);當數據1和數據2同為0XFFH時,表示要求接口卡停止工作,單片機會讓SJA1000進入睡眠模式,以退出總線;當數據1為0X01H時,表示PC機要求隻接收某個節點的數據,數據2則表示該接點的節點號,單片機會重新設置SJA1000的驗收濾波器,屏蔽掉其他不需要的節點數據。
應答幀共6個字節,傳輸方向為單片機到PC機。以0X11H作為幀起始,數據長度為2,當單片機接收到PC機的啟動或停止命令,並設置成功後,發送兩字節數據同為0X00H給PC,若設置失敗,則發送兩字節數據同為0XFFH給PC;對於PC要求讀取特定節點的命令,單片機以0X10H作為應答起始,並以兩字節同為0X00H表示成功,兩字節同為0XFFH表示失敗。
數據幀為接口卡從總線上讀到的數據,因為總線上數據有標準幀、遠程幀等之分,而且每個幀中裝載的數據長度未知,所以數據幀的長度不定,其傳輸方向也為單片機到PC,起始字節為0X22H。SJA1000每次接收到有效數據後會讓單片機產生接收中斷,單片機則在中斷處理中將數據首先讀入到RAM中暫時存放,然後計算其數據長度和校驗和,將數據封裝成幀,然後將幀通過串口送給PC處理和顯示。
各種類型的幀以0X33H作為幀結束標識。校驗和字節用來保證數據的準確性,單片機在發送數據前將各個字節相加,並將結果填人校驗字節。PC端接收到數據後,重新計算校驗和,並與單片機發送的校驗和相比較,相同則正確接收,否則要求單片機重新發送。
2協議的透明性分析
zaitongbuchuanshushujudeguochengzhong,zhendeqishizijiehejieshuzijieshifeichangzhongyaode,tanenggoubaozhengshujuzhendezhunquexing。danyinweizhelianggezijiedecunzai,tongshiyeyinchulelingyigedaijiejuedewenti,jiushidangshujuchangzhongchuxianleyuqishizijiexiangtongdeshujushi,henyoukenenghuidaozhiPCduanbatakanchengyigexindezhenqishi,congerdaozhishujudechulihexianshicuowu,zheyejiushishujuchuanshudetoumingxingwenti。zhenduichuankoudeshujuchuanshu,youyizhongbijiaohaodejiejuefangan。gaifangfajiangshujuzhuanhuanchengweiASCII字符來進行傳送,就是將每個字節的數據進行拆分,將一個16進製的字節拆分成兩個字節,如5AH,5BH,5CH,…,可以拆分為50H,0AH,50H,0BH,50H,OCH,…,PC機再接收到數據後,再將數據進行兩兩相或組合。這樣,隻需要32個字節就可以組合成為00H~0FFHzhongrenyigeshuju。danzhezhongbanfadequedianyeshixianeryijiande,yingyongtasuofasongdeyouxiaoshujuliangshizhengchangfasongdeliangbei,duiyuchuankouzhezhongchuanshusudubugaodetongxinjiezhieryan,zaishujuliangjiaodadeqingkuangxia,bushiyizhongkequdefangfa。
在該接口卡中作者采取了另一種轉義字符的方法。首先定義一個轉義字符標識OXDBH。對於CAN總線而言,其每個幀的最大數據長度為8,即使將CAN的幀信息和識別碼全部當作數據發送,其長度最大也隻有13B。這樣可以肯定的是,正常情況下數據幀中數據長度字節的高4位必然為0。因此在數據發送之前,首先檢查該數據中是否有與起始字節0X22H、結束字節0X33H和轉義標識0XDBH相同的數據,如果沒有,則正常發送;如果有,則檢測出與這兩個字節相同數據的個數,並將該個數填充到數據長度字節的高4位中;同時,將這些數據前添加轉義字符標識,並將該數據進行轉義。如數據0X22H。0X33H,0XDBH…,則轉義成0XDBH。0XD2H。0XDBH,0XD3H,0XDBH,0XDDH…。PC機在接收到數據幀後,首先檢查數據長度字節,看其高4位是否為0,如果為0,說明該數據組不存在轉義字符,可以直接處理;如果為N。則表明數據組中存在N個轉義字符,並且每個轉義字符都以0XDB開始,需要首先將它們重新修改回原始數據。相比而言,這種辦法有很好的穩定性和接口利用率,其數據流量也不會很高。
3CAN接口程序設計
CAN總線的接口程序主要就是進行SJA1000的初始化過程和後麵的接收中斷處理過程。CAN初始化主要是設置CAN的通信參數。需要初始化的CAN控製寄存器有:模式寄存器(MOD)、驗收代碼寄存器(ACR)、驗收屏蔽寄存器(AMR)、總線定時寄存器(RTR)、輸出控製寄存器(OC)、中斷寄存器(IR)和中斷使能寄存器(IER)等。這些寄存器都隻能在SJA1000處於複位狀態下才可寫訪問。當SJA1000進jin入ru工gong作zuo模mo式shi後hou,就jiu能neng夠gou自zi動dong接jie收shou總zong線xian上shang的de數shu據ju,並bing將jiang其qi放fang入ru接jie收shou緩huan衝chong區qu,同tong時shi產chan生sheng接jie受shou中zhong斷duan,單dan片pian機ji進jin入ru中zhong斷duan後hou將jiang數shu據ju從cong緩huan衝chong區qu中zhong讀du出chu,並bing釋shi放fang緩huan衝chong區qu。中zhong斷duan返fan回hui後hou,再zai將jiang數shu據ju封feng裝zhuang成cheng幀zhen發fa送song給geiPC機。
4PC端程序設計
PC端程序使用VB6.0進行開發。VB6.O在圖形界麵的製作上比較方便,使用Mscomm組件能夠輕鬆地製作串口的監視環境。隻要在軟件設計時將上述協議添加進行。圖5給出了使用VB6.0開發的軟件調試情況。

該CAN總線接口卡經過實驗驗證,證明可以達到預期的要求,能夠良好地監視總線上的數據,而且結構簡單,有較大的利用價值。當CAN總線係統數據流量較大時,可以考慮使用USB接口和PC機進行通信,這樣就能夠更好地解決速度匹配和應用場合受限的問題。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 大聯大世平集團首度亮相北京國際汽車展 攜手全球芯片夥伴打造智能車整合應用新典範
- 2026北京車展即將啟幕,高通攜手汽車生態“朋友圈”推動智能化體驗再升級
- 邊緣重構智慧城市:FPGA SoM 如何破解視頻係統 “重而慢”
- 如何使用工業級串行數字輸入來設計具有並行接口的數字輸入模塊
- 意法半導體將舉辦投資者會議探討低地球軌道(LEO)發展機遇
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
接口IC
介質電容
介質諧振器
金屬膜電阻
晶體濾波器
晶體諧振器
晶體振蕩器
晶閘管
精密電阻
精密工具
景佑能源
聚合物電容
君耀電子
開發工具
開關
開關電源
開關電源電路
開關二極管
開關三極管
科通
可變電容
可調電感
可控矽
空心線圈
控製變壓器
控製模塊
藍牙
藍牙4.0
藍牙模塊
浪湧保護器



