用AT89C52單片機(jī)實(shí)現(xiàn)RS422到CAN總線的轉(zhuǎn)換
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
RS422是串行通訊中應(yīng)用較廣的標(biāo)準(zhǔn)總線。他能很方便地把各種計(jì)算機(jī)、外部設(shè)備、測(cè)量?jī)x器有機(jī)地連接起來(lái),構(gòu)成一個(gè)測(cè)量、控制系統(tǒng)。但是,他傳輸速率低、傳輸距離短并且接口處信號(hào)間易產(chǎn)生串?dāng)_,因此不能直接應(yīng)用于工業(yè)控制。
CAN總線剛好以其高性能、高可靠性及獨(dú)特的設(shè)計(jì)贏得了工業(yè)界的高度重視。例如,奔馳S型轎車(chē)上采用的就是CAN總線系統(tǒng),美國(guó)商用車(chē)輛制造商們也將注意力轉(zhuǎn)向了CAN總線,美國(guó)一些企業(yè)已將CAN作為內(nèi)部總線應(yīng)用在生產(chǎn)線和機(jī)床上。同時(shí),由于CAN總線可以提供較高的安全性,因此在醫(yī)療領(lǐng)域、紡織機(jī)械及電梯控制中也得到了廣泛應(yīng)用??梢?jiàn),實(shí)現(xiàn)RS422總線和CAN總線之間的轉(zhuǎn)換非常有必要。
2硬件設(shè)計(jì)
2.1總體設(shè)計(jì)分析
在該系統(tǒng)中,采用AT89C52單片機(jī)。RS422總線傳輸過(guò)來(lái)的信號(hào)經(jīng)過(guò)收發(fā)器后進(jìn)入89C52,處理后送到CAN控制器中,然后到收發(fā)器,最后由CAN出口發(fā)出。為了保證系統(tǒng)的安全工作,在CAN控制器上加了一個(gè)“看門(mén)狗”??傮w設(shè)計(jì)框圖如圖1所示。
2.2CAN控制器與CPU接口設(shè)計(jì)對(duì)于CPU來(lái)說(shuō),CAN控制器是確保雙方獨(dú)立工作的存貯器映象外圍設(shè)備。CAN控制器與外部CPU的接口是通過(guò)控制器接口邏輯(CIL)實(shí)現(xiàn)的, AT89C52 CPU通過(guò)將地址總線(AB)和數(shù)據(jù)總線(DB)連接到CIL上來(lái)完成與CAN控制器之間的信息交換,不需要專(zhuān)門(mén)的控制總線(CB),CPU與82C200之間的狀態(tài)、控制和命令信號(hào)的交換在CAN控制器中完成。
2.3電子看門(mén)狗設(shè)計(jì)
為了提高系統(tǒng)的抗干擾性能,采用X25045來(lái)做一個(gè)電子看門(mén)狗。X25045把3種常用的功能:看門(mén)狗定時(shí)器、電壓監(jiān)視和 E?2PROM組合在單個(gè)封裝之內(nèi)。這種組合降低了系統(tǒng)成本,并減少了對(duì)電路板空間的要求??撮T(mén)狗定時(shí)器對(duì)微控制器提供了獨(dú)立的保護(hù)系統(tǒng)。當(dāng)系統(tǒng)出現(xiàn)故障時(shí),在可選的超時(shí)周期( timeout interval )之后, X25045 看門(mén)狗將以 RESET 信號(hào)作出響應(yīng)。
3軟件設(shè)計(jì)
CAN總線系統(tǒng)的初始化設(shè)計(jì)是軟件設(shè)計(jì)的關(guān)鍵,在初始化之前,應(yīng)設(shè)置輸出控制寄存器(OCR)的復(fù)位請(qǐng)求位為高,再設(shè)置其他寄存器。命令寄存器(CMR)控制緩存器的收發(fā)狀態(tài);中斷寄存器(IR)、狀態(tài)寄存器(SR)查詢82C200的工作狀態(tài);接收碼寄存器(ACR)設(shè)定工作地址;接收屏蔽寄存器(AMR)設(shè)定工作形式;總線定時(shí)寄存器(BTR0、BTR1)設(shè)定工作頻率、采樣頻率;輸出控制寄存器(OCR)一般為正常輸出方式,最后應(yīng)使復(fù)位請(qǐng)求位從高變低,使CAN控制器進(jìn)入正常工作狀態(tài)。主程序框圖如圖2。
3.2轉(zhuǎn)換主程序設(shè)計(jì)如下:
結(jié)語(yǔ)
CAN總線以其高性能、高可靠性及其獨(dú)特的設(shè)計(jì)越來(lái)越受到人們的重視,并被公認(rèn)為最有前途的總線之一。把RS422轉(zhuǎn)換到CAN正是適應(yīng)了這一趨勢(shì),期望有更多的智能電子產(chǎn)品設(shè)計(jì)者加入到這一領(lǐng)域的應(yīng)用研究中來(lái)。