引言 CAN是Controller Area Network的縮寫(xiě),是ISO國際標準化的串行通信協(xié)議。CAN屬于現場(chǎng)總線(xiàn)范疇,具有通信實(shí)時(shí)性好、糾錯能力強,結構簡(jiǎn)單等優(yōu)點(diǎn)。RS-232是美國電子丁業(yè)協(xié)會(huì )EIA制定的一種串行物理接口標準。它作為計算機串行通信接口,已經(jīng)被廣泛的使用。RS-232的缺點(diǎn)就是傳輸距離短,而且只能點(diǎn)對點(diǎn)通信,無(wú)法組建多點(diǎn)通信網(wǎng)絡(luò )。CAN總線(xiàn)正好彌補了RS-232的這些缺點(diǎn)。因此設計RS-232轉CAN總線(xiàn)協(xié)議的適配器,既可以發(fā)揮RS-232的通用性強的優(yōu)點(diǎn),又可以利用CAN總線(xiàn)解決遠程通信網(wǎng)絡(luò )的問(wèn)題,具有很高的應用價(jià)值。 1 CAN協(xié)議幀功能及結構分析 CAN協(xié)議使用5種幀來(lái)完成通信。分別是數據幀、遠程幀、錯誤幀、過(guò)載幀、幀間間隔。其中,數據幀就是發(fā)送單元向接收單位發(fā)送數據所用的幀。數據幀分兩種,具有11位標識符的幀叫做標準格式,具有29位標識符的幀叫做擴展格式。 2 RS-232轉CAN總線(xiàn)協(xié)議適配器的總體設計及工作原理 RS-232轉CAN總線(xiàn)協(xié)議適配器分為RS-232接口部分,微處理器和CAN總線(xiàn)接口部分。結構框圖如圖1所示。 ![]() 圖1 RS-232轉CAN總線(xiàn)協(xié)議適配器的結構框圖 當串口向CAN總線(xiàn)接口發(fā)送數據時(shí),數據通過(guò)串口輸送到MAX232進(jìn)行電平轉換,將RS-232電平轉換成TrL電平,然后STC89C51對數據進(jìn)行提取,將有效數據提取出來(lái).增加幀結構信息、幀類(lèi)型、字節長(cháng)度和標識符等,這樣就生成CAN報文格式.然后由CAN總線(xiàn)控制器MCP2510發(fā)送出去。 當CAN總線(xiàn)接口向串口發(fā)送數據時(shí),總線(xiàn)控制器MCP2510接受到數據,然后輸送給STC89C51.進(jìn)行格式轉換,轉換為RS-232通信格式,然后輸送給MAX232進(jìn)行電平轉換,就得到了符合RS-232格式的數據。 3 RS-232轉CAN總線(xiàn)協(xié)議適配器的軟硬件設計 3.1硬件設計 3.1.1微處理器 微處理器采用的是STC89C51,帶4K字節的FLASHFPROM,高性能的8位單片機。STC89C51的作用就是數據轉換,以及總線(xiàn)控制器的初始化。 3.1.2 RS-232接口部分 RS-232接口部分的電路圖如圖2所示。 ![]() 圖2 RS-232接口部分的電路圖 RS-232接口部分由MAX232芯片構成。使用5v單電源供經(jīng)發(fā)送結束。處理器將要發(fā)送的數據寫(xiě)入MCP2510的緩沖區電?蓪(shí)現rI'IIJCMOS電平與RS-232電平的轉換,包含2路接收和驅動(dòng)器,。MAX232可以把5 v電壓變換成RS-232輸出電平所需的+10 V電壓。 3.1.3 CAN總線(xiàn)接口部分 CAN總線(xiàn)接口部分由CAN總線(xiàn)控制器和CAN總線(xiàn)收發(fā)器組成。 (1) CAN總線(xiàn)控制器MCP2510 MCP2510是一種帶有SPI接口的CAN控制器,它支持CAN技術(shù)規范V2.0MB,并能夠發(fā)送和接收標準的和擴展的信息幀同時(shí)具有接收濾波和信息管理的功能。MCP2510通過(guò)SPI接口與MCU進(jìn)行數據傳輸,最高數據傳輸速率可達5Mb/s,MCU可通過(guò)MCP2510與CAN總線(xiàn)上的其它MCU單元通訊。MCP2510內含三個(gè)發(fā)送緩沖器、二個(gè)接收緩沖器。同時(shí)還具有靈活的中斷管理能力.這些特點(diǎn)使得MCU對CAN總線(xiàn)的操作變得非常簡(jiǎn)便。 (2)CAN總線(xiàn)高速收發(fā)器TJA1050 TJAl050是CAN總線(xiàn)協(xié)議控制器和物理總線(xiàn)之間的接口.可以為總線(xiàn)提供不同的發(fā)送性能.為CAN總線(xiàn)控制器提供不同的接收性能.而且它與IS01 1898標準完全兼容。采用TJAl050的目的是增大通信距離、提高系統的瞬間抗干擾能力、保護總線(xiàn)、降低射頻干擾及實(shí)現熱防護等。CAN總線(xiàn)接口部分的電路圖如圖3所示。 ![]() 圖3 CAN總線(xiàn)接口部分的電路圖 3.2 軟件設計 RS-232轉CAN總線(xiàn)協(xié)議適配器的軟件設計包括單片機STC89C51的初始化,CAN總線(xiàn)控制器的初始化,數據的發(fā)送、接收以及錯誤處理等。具體流程如圖4所示。 ![]() 圖4軟件設計流程圖 (1) STC89C51的初始化 單片機STC89C51上電復位后,要對單片機的定時(shí)/計數控制寄存器、串行控制器、中斷優(yōu)先級控制器、中斷使能寄存器等進(jìn)行初始化。 (2)CAN總線(xiàn)控制器的初始化 要實(shí)現CAN通信。首先要對CAN控制器進(jìn)行初始化。MCP2510中有3個(gè)發(fā)送緩沖區,可以循環(huán)使用,也可以只使用一個(gè)發(fā)送緩沖區,但必須保證在發(fā)送的時(shí)候.前一次的數據已經(jīng)發(fā)送結束。處理器將要發(fā)送的數據寫(xiě)入MCP2510的緩沖區之后,調用RTS命令即可將數據發(fā)送的CAN總線(xiàn)上。 這里定義了一個(gè)結構體MCP2510_Data作為傳輸數據的結構體。 struet{ int id_CAN; char datalength; char data[8]; int IsExt; im rxRTR; }MCP25 10_Data; id_CAN是CAN信息的ID號,datalength是傳輸數據的長(cháng)度,data是要傳輸的消息數據,IsExt指是否使用擴展1D,rxRTR指使用數據幀還是遠程幀。 定義了一個(gè)MCP2510_Rev結構體用于記錄緩沖區的各種狀態(tài)。 struct{ MCP25 10_Data candata; int nCANREV; int nCANREAD; int loop; }MCP25 10一Rev; nCANREV表示接收緩沖區數據狀態(tài),nCANREAD表示讀取緩沖區數據狀態(tài),loop表示是否支持回環(huán)模式。 (3)數據的發(fā)送與接收 數據的發(fā)送接收.包括串行中斷程序和CAN總線(xiàn)中斷程序。中斷流程圖如圖5所示。 ![]() 圖5中斷流程圖 函數MCP2510_Write和MCP2510_Read負責對緩沖區讀寫(xiě)數據,MCP25lO_Open負責打開(kāi)CAN總線(xiàn)控制器,并清空3個(gè)發(fā)送緩沖區,MCP2510_Close負責關(guān)閉CAN總線(xiàn)控制器,MCP2510 Comm負責向CAN總線(xiàn)控制器發(fā)送各種控制命令。 4 結束語(yǔ) 本文作者創(chuàng )新點(diǎn):使用STC89C51設計了RS-232與CAN總線(xiàn)協(xié)議轉換的硬件電路,解決了RS-232與CAN總線(xiàn)數據轉換與傳輸的問(wèn)題。這樣將使很多具有RS-232接口的設備可以與CAN總線(xiàn)一起構成一個(gè)遠程的通信網(wǎng)絡(luò ),既節省了成本,又 保證了設備的兼容性。 作者:謝曜聰 來(lái)源:《微計算機信息》2009年第7-2期 |