基于單片機(jī)控制的CAN與RS-232轉(zhuǎn)換器的研究與設(shè)計(jì)
3.1 基于RS-232協(xié)議的數(shù)據(jù)接收與發(fā)送程序設(shè)計(jì)
由于RS-232接口發(fā)送數(shù)據(jù)是以字節(jié)為單位,而CAN總線接收數(shù)據(jù)以多字節(jié)組成的數(shù)據(jù)幀為單位,因此為了避免指針指向的混亂,程序中統(tǒng)一使用相同長(zhǎng)度的通用幀來(lái)保存數(shù)據(jù)。RS-232協(xié)議模塊將通用的幀使用SLIP協(xié)議進(jìn)行封裝后發(fā)送,并將接收到的SLIP幀轉(zhuǎn)為通用幀格式轉(zhuǎn)入緩沖區(qū)。系統(tǒng)啟動(dòng)后,主程序調(diào)用RS232_Receive函數(shù)檢測(cè)CAN接收緩沖區(qū)的內(nèi)容,如果緩沖區(qū)內(nèi)有數(shù)據(jù),則調(diào)用RS_Read()函數(shù)讀取緩沖區(qū)中的一幀數(shù)據(jù)并將其送入RS232_Receive()函數(shù)參數(shù)buf指向的緩沖區(qū)后返回。在讀取CAN接收緩沖區(qū)數(shù)據(jù)后會(huì)交由RS232_Send()函數(shù)發(fā)送,并將幀數(shù)據(jù)保存至臨時(shí)發(fā)送緩沖區(qū)bufRS_S。程序通過(guò)ChkEndR()函數(shù)檢測(cè)數(shù)據(jù)幀是否發(fā)送完畢。
3.2 CAN控制器SJA1000初始化程序設(shè)計(jì)
CAN控制器SJA1000完成CAN總線幀的發(fā)送和接收任務(wù)。程序中,使用INITCAN()函數(shù)完成對(duì)CAN接口芯片的初始化。初始化程序設(shè)計(jì)對(duì)轉(zhuǎn)換器的正常工作相當(dāng)重要。它主要完成模式設(shè)置、時(shí)鐘輸出寄存器設(shè)置、接受碼寄存器ACR設(shè)置、接收屏蔽碼寄存器AMR設(shè)置、總線定時(shí)器設(shè)置和輸出控制寄存器設(shè)置。
3.3 基于CAN總線協(xié)議的數(shù)據(jù)接收與發(fā)送程序設(shè)計(jì)
主程序啟動(dòng)后調(diào)用CAN_Recive()函數(shù)檢查CAN接收緩沖區(qū)中是否有數(shù)據(jù)存在,如果檢查到數(shù)據(jù),則程序從緩沖區(qū)中讀取一幀數(shù)據(jù)并將其送入?yún)?shù)buf指定的緩沖區(qū)中。主程序如果發(fā)現(xiàn)RS-232接收緩沖區(qū)內(nèi)有數(shù)據(jù),則讀取該數(shù)據(jù)幀并將其交由CAN_Send()函數(shù)發(fā)送至CAN總線。這里CAN_Send()函數(shù)接收到的數(shù)據(jù)幀格式為通用幀格式,需要先將其中的DesDevID SouDevID Length 等信息從通用幀中提取出來(lái),填入CAN總線格式幀的各個(gè)位置,再通過(guò)命令寄存器傳遞發(fā)送請(qǐng)求。此外,主程序通過(guò)ChkEndC()函數(shù)檢測(cè)數(shù)據(jù)幀是否發(fā)送完畢。
4. 結(jié)論
本設(shè)計(jì)完成了CAN總線與RS-232轉(zhuǎn)換器的電路與軟件設(shè)計(jì)。本設(shè)計(jì)的創(chuàng)新點(diǎn)是:由于CAN總線與RS-232接口數(shù)據(jù)通信速率以及通信幀格式都不同,本設(shè)計(jì)最大優(yōu)點(diǎn)是解決了這兩點(diǎn)不同,從而實(shí)現(xiàn)了數(shù)據(jù)在CAN總線與RS-232接口之間的傳輸。在設(shè)計(jì)中由于使用了CAN總線進(jìn)行數(shù)據(jù)傳輸這就使得通信方式多主性。網(wǎng)絡(luò)上任意節(jié)點(diǎn)可以任意時(shí)刻主動(dòng)地向網(wǎng)絡(luò)上其他節(jié)點(diǎn)發(fā)送信息而不分主從??梢渣c(diǎn)對(duì)點(diǎn),點(diǎn)對(duì)多點(diǎn)或全局廣播方式發(fā)送和接收數(shù)據(jù)。
參考文獻(xiàn):
[1].RS-232datasheethttp://www.dzsc.com/datasheet/RS-232_584855.html.
[2].AT89C51datasheethttp://www.dzsc.com/datasheet/AT89C51_810155.html.
[3].X25045datasheethttp://www.dzsc.com/datasheet/X25045_722886.html.
[4].MAX232datasheethttp://www.dzsc.com/datasheet/MAX232_1074207.html.
[5].TTLdatasheethttp://www.dzsc.com/datasheet/TTL_1174409.html.
[6].PCA82C250datasheethttp://www.dzsc.com/datasheet/PCA82C250_18.html.
[7].SJA1000datasheethttp://www.dzsc.com/datasheet/SJA1000_609075.html.
[8].TLP113datasheethttp://www.dzsc.com/datasheet/TLP113_652822.html.
[9].ACRdatasheethttp://www.dzsc.com/datasheet/ACR_2278911.html.
評(píng)論