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協議的透明性分析
在(zai)同(tong)步(bu)傳(chuan)輸(shu)數(shu)據(ju)的(de)過(guo)程(cheng)中(zhong),幀(zhen)的(de)起(qi)始(shi)字(zi)節(jie)和(he)結(jie)束(shu)字(zi)節(jie)是(shi)非(fei)常(chang)重(zhong)要(yao)的(de),它(ta)能(neng)夠(gou)保(bao)證(zheng)數(shu)據(ju)幀(zhen)的(de)準(zhun)確(que)性(xing)。但(dan)因(yin)為(wei)這(zhe)兩(liang)個(ge)字(zi)節(jie)的(de)存(cun)在(zai),同(tong)時(shi)也(ye)引(yin)出(chu)了(le)另(ling)一(yi)個(ge)待(dai)解(jie)決(jue)的(de)問(wen)題(ti),就(jiu)是(shi)當(dang)數(shu)據(ju)場(chang)中(zhong)出(chu)現(xian)了(le)與(yu)起(qi)始(shi)字(zi)節(jie)相(xiang)同(tong)的(de)數(shu)據(ju)時(shi),很(hen)有(you)可(ke)能(neng)會(hui)導(dao)致(zhi)PC端duan把ba它ta看kan成cheng一yi個ge新xin的de幀zhen起qi始shi,從cong而er導dao致zhi數shu據ju的de處chu理li和he顯xian示shi錯cuo誤wu,這zhe也ye就jiu是shi數shu據ju傳chuan輸shu的de透tou明ming性xing問wen題ti。針zhen對dui串chuan口kou的de數shu據ju傳chuan輸shu,有you一yi種zhong比bi較jiao好hao的de解jie決jue方fang案an。該gai方fang法fa將jiang數shu據ju轉zhuan換huan成cheng為weiASCII字符來進行傳送,就是將每個字節的數據進行拆分,將一個16進製的字節拆分成兩個字節,如5AH,5BH,5CH,…,可以拆分為50H,0AH,50H,0BH,50H,OCH,…,PC機再接收到數據後,再將數據進行兩兩相或組合。這樣,隻需要32個字節就可以組合成為00H~0FFH中(zhong)任(ren)一(yi)個(ge)數(shu)據(ju)。但(dan)這(zhe)種(zhong)辦(ban)法(fa)的(de)缺(que)點(dian)也(ye)是(shi)顯(xian)而(er)易(yi)見(jian)的(de),應(ying)用(yong)它(ta)所(suo)發(fa)送(song)的(de)有(you)效(xiao)數(shu)據(ju)量(liang)是(shi)正(zheng)常(chang)發(fa)送(song)的(de)兩(liang)倍(bei),對(dui)於(yu)串(chuan)口(kou)這(zhe)種(zhong)傳(chuan)輸(shu)速(su)度(du)不(bu)高(gao)的(de)通(tong)信(xin)介(jie)質(zhi)而(er)言(yan),在(zai)數(shu)據(ju)量(liang)較(jiao)大(da)的(de)情(qing)況(kuang)下(xia),不(bu)是(shi)一(yi)種(zhong)可(ke)取(qu)的(de)方(fang)法(fa)。
在該接口卡中作者采取了另一種轉義字符的方法。首先定義一個轉義字符標識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協議的透明性分析
在(zai)同(tong)步(bu)傳(chuan)輸(shu)數(shu)據(ju)的(de)過(guo)程(cheng)中(zhong),幀(zhen)的(de)起(qi)始(shi)字(zi)節(jie)和(he)結(jie)束(shu)字(zi)節(jie)是(shi)非(fei)常(chang)重(zhong)要(yao)的(de),它(ta)能(neng)夠(gou)保(bao)證(zheng)數(shu)據(ju)幀(zhen)的(de)準(zhun)確(que)性(xing)。但(dan)因(yin)為(wei)這(zhe)兩(liang)個(ge)字(zi)節(jie)的(de)存(cun)在(zai),同(tong)時(shi)也(ye)引(yin)出(chu)了(le)另(ling)一(yi)個(ge)待(dai)解(jie)決(jue)的(de)問(wen)題(ti),就(jiu)是(shi)當(dang)數(shu)據(ju)場(chang)中(zhong)出(chu)現(xian)了(le)與(yu)起(qi)始(shi)字(zi)節(jie)相(xiang)同(tong)的(de)數(shu)據(ju)時(shi),很(hen)有(you)可(ke)能(neng)會(hui)導(dao)致(zhi)PC端duan把ba它ta看kan成cheng一yi個ge新xin的de幀zhen起qi始shi,從cong而er導dao致zhi數shu據ju的de處chu理li和he顯xian示shi錯cuo誤wu,這zhe也ye就jiu是shi數shu據ju傳chuan輸shu的de透tou明ming性xing問wen題ti。針zhen對dui串chuan口kou的de數shu據ju傳chuan輸shu,有you一yi種zhong比bi較jiao好hao的de解jie決jue方fang案an。該gai方fang法fa將jiang數shu據ju轉zhuan換huan成cheng為weiASCII字符來進行傳送,就是將每個字節的數據進行拆分,將一個16進製的字節拆分成兩個字節,如5AH,5BH,5CH,…,可以拆分為50H,0AH,50H,0BH,50H,OCH,…,PC機再接收到數據後,再將數據進行兩兩相或組合。這樣,隻需要32個字節就可以組合成為00H~0FFH中(zhong)任(ren)一(yi)個(ge)數(shu)據(ju)。但(dan)這(zhe)種(zhong)辦(ban)法(fa)的(de)缺(que)點(dian)也(ye)是(shi)顯(xian)而(er)易(yi)見(jian)的(de),應(ying)用(yong)它(ta)所(suo)發(fa)送(song)的(de)有(you)效(xiao)數(shu)據(ju)量(liang)是(shi)正(zheng)常(chang)發(fa)送(song)的(de)兩(liang)倍(bei),對(dui)於(yu)串(chuan)口(kou)這(zhe)種(zhong)傳(chuan)輸(shu)速(su)度(du)不(bu)高(gao)的(de)通(tong)信(xin)介(jie)質(zhi)而(er)言(yan),在(zai)數(shu)據(ju)量(liang)較(jiao)大(da)的(de)情(qing)況(kuang)下(xia),不(bu)是(shi)一(yi)種(zhong)可(ke)取(qu)的(de)方(fang)法(fa)。
在該接口卡中作者采取了另一種轉義字符的方法。首先定義一個轉義字符標識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可編程電源,賦能高端裝備製造
技術文章更多>>
- 邊緣AI的發展為更智能、更可持續的技術鋪平道路
- 每台智能體PC,都是AI時代的新入口
- IAR作為Qt Group獨立BU攜兩項重磅汽車電子應用開發方案首秀北京車展
- 構建具有網絡彈性的嵌入式係統:來自行業領袖的洞見
- 數字化的線性穩壓器
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索



