基于CAN Bus MCU的電梯控制器和監(jiān)測(cè)應(yīng)用設(shè)計(jì)
CAN Bus(Controller Area Network),控制器區(qū)域網(wǎng),起源于80年代,由國(guó)際標(biāo)準(zhǔn)化組織(ISO)所發(fā)布,因?yàn)槔秒p線差動(dòng)(two-wired differential),使其即使在電器條件惡劣環(huán)境下,也可正常運(yùn)作的一種傳輸總線。又因雙線溝通的特性,大幅縮減了其應(yīng)用線路的使用量,也降低傳統(tǒng)線路復(fù)雜易造成錯(cuò)誤的發(fā)生機(jī)會(huì)。
本文引用地址:http://www.ex-cimer.com/article/201609/303611.htm基于以上特性,CAN Bus一大應(yīng)用層面即被導(dǎo)入于汽車工業(yè),因傳統(tǒng)的汽車使用線路復(fù)雜,使得早期汽車內(nèi)部線路易于發(fā)生故障時(shí)且較難以排除。因此雙線差動(dòng)訊號(hào)式CAN Bus的電器特性即被快速導(dǎo)入并廣泛運(yùn)用在各交通工具領(lǐng)域(航空、輪船與汽車)或是工業(yè)控制。
強(qiáng)健的協(xié)議與其編碼格式
CAN Bus基本的協(xié)議可分為CAN2.0A與CAN2.0B兩個(gè)版本,A版與B版的主要差別在于識(shí)別子(ID)長(zhǎng)度分別為11位與29位。如圖1所示為一個(gè)CAN 2.0協(xié)議傳輸?shù)臄?shù)據(jù)封包(Data Frame)。
圖1. CAN協(xié)議編碼格式圖
圖1為一個(gè)CAN數(shù)據(jù)封包的格式,可分為起始域、仲裁域、控制域、數(shù)據(jù)域、CRC域、應(yīng)答域和結(jié)束域。每個(gè)封包(Frame)最長(zhǎng)可達(dá)128位,以下分別說(shuō)明各域的意義,其它詳細(xì)資料可參考BOSCH公司的相關(guān)CAN Bus技術(shù)文件。
●起始域(SOF, Start of Frame):該值必為0,表示封包的開(kāi)始。
●仲裁域(Arbitration Field):用于確定封包的優(yōu)先級(jí),由11位或29位識(shí)別子(ID)加上一位的RTR(Remote Transfer Request),當(dāng)RTR為0時(shí),表示傳出資料;RTR為1則表示為接收資料。
●控制域(Control Field):包含兩個(gè)保留位(一般為0)和表示數(shù)據(jù)域內(nèi)的數(shù)據(jù)長(zhǎng)度DLC0~DLC3共有4位。
●數(shù)據(jù)域(Data Field):0~8個(gè)Byte的被傳送數(shù)據(jù)
●CRC域(CRC Field):從SOF到Data Field的CRC驗(yàn)證碼,用于檢測(cè)傳輸上的錯(cuò)誤,共有15位的長(zhǎng)度。
●應(yīng)答域(ACK Field):確認(rèn)對(duì)方接收是否正常,若接收成功則會(huì)回傳1。
●結(jié)束域(EOF, End of Frame):表示封包的結(jié)束,為7位連續(xù)的1。
CAN Bus的特征與優(yōu)點(diǎn)
●CAN Bus可透過(guò)簡(jiǎn)單的信息濾波設(shè)定實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)、一對(duì)多個(gè)點(diǎn)或全網(wǎng)絡(luò)廣播等資料的傳輸方式。
●沒(méi)有特定的主從端,且可以以多個(gè)主端方式工作,因此Bus上各節(jié)點(diǎn)均可在任一時(shí)刻主動(dòng)發(fā)送信息至其它節(jié)點(diǎn)。
●藉由封包內(nèi)仲裁域內(nèi)的識(shí)別子來(lái)判定優(yōu)先權(quán),而非藉由地址,因CAN Bus為非破壞性的總線仲裁之技術(shù),當(dāng)優(yōu)先層級(jí)不同的事件發(fā)生,層級(jí)低的節(jié)點(diǎn)會(huì)主動(dòng)放棄總線訪問(wèn)的權(quán)利,而高優(yōu)先層級(jí)的可繼續(xù)傳輸而不受影響。
●因具有優(yōu)先層級(jí)之特性,大幅節(jié)省了當(dāng)總線發(fā)生沖突時(shí)的仲裁時(shí)間,提升系統(tǒng)的實(shí)時(shí)性,而不會(huì)出現(xiàn)網(wǎng)絡(luò)癱瘓的機(jī)會(huì)。
●具有良好的擴(kuò)充性,因CAN Bus協(xié)議是定義信息,非以站臺(tái)方式定義,因此可不需為軟件硬件做修改即可增加站臺(tái)。
●傳輸?shù)木嚯x與傳輸速度成反比,當(dāng)傳輸距離達(dá)10km時(shí)傳輸速率約為5Kbps,若需較高的傳輸速率1Mbps,此時(shí)的傳輸距離為40m。
●在CAN Bus上的每個(gè)封包具有強(qiáng)大的CRC檢驗(yàn)與防錯(cuò)機(jī)制,大幅降低了資料的出錯(cuò)率。
●CAN Bus的通訊介質(zhì)可為光纖、同軸電纜與常見(jiàn)的雙絞線,相較其它通訊方式較為彈性。
CAN Bus的架構(gòu)與輸出準(zhǔn)位
CAN Bus為利用一種雙線的差動(dòng)訊號(hào)傳輸規(guī)格,典型的CAN節(jié)點(diǎn)皆會(huì)由一個(gè)機(jī)械控制單元(Micro Controller Unit, MCU)來(lái)做控制,如圖2所示,MCU中CAN Controller透過(guò)CAN_TX與CAN_RX傳送/接收訊號(hào)至CAN Transceiver轉(zhuǎn)換成差動(dòng)訊號(hào)CAN_H與CAN_L。而終端電阻120歐姆能有效的吸收CAN網(wǎng)絡(luò)上的反射波,有效地增強(qiáng)信號(hào)。
圖2. CAN Bus架構(gòu)圖
圖3為CAN Bus輸出準(zhǔn)位圖,當(dāng)CAN_H與CAN_L均為2.5V時(shí),數(shù)據(jù)值為邏輯1(隱性);而CAN_H = 3.5V與CAN_L = 1.5V時(shí),數(shù)據(jù)值為邏輯0(Dominant)。
圖3. CAN Bus輸出準(zhǔn)位圖
強(qiáng)大且可靠的自我檢測(cè)能力
CAN Bus協(xié)議中具有五種錯(cuò)誤偵測(cè)的方法,其中三個(gè)是屬于信息(Message)層級(jí),而另外兩個(gè)位(Bit)層級(jí)的檢查。當(dāng)一個(gè)信息發(fā)生錯(cuò)誤,使該節(jié)點(diǎn)不接收這個(gè)信息,并產(chǎn)生一個(gè)錯(cuò)誤的封包,而發(fā)送端會(huì)嘗試重新發(fā)送新的一個(gè)信息。通過(guò)以下的偵錯(cuò)方法使CAN Bus的錯(cuò)誤率低于4.7x10-11。
1. CRC:循環(huán)冗余校驗(yàn),CRC檢查為一個(gè)15位的CRC,計(jì)算其傳送訊息結(jié)尾的FCS(Frame Check Sequence)并進(jìn)行比對(duì),如果不同則為CRC錯(cuò)誤。
2. ACK Errors:接收的一端在接收訊息后會(huì)發(fā)送ACK告知發(fā)送端,如果發(fā)送訊息的一端沒(méi)有收到則為ACK錯(cuò)誤。
3. Frame Check:檢查封包中的幾個(gè)特定位,來(lái)驗(yàn)證內(nèi)容是否正確。
4. Monitoring:將一個(gè)位的資料寫至CAN Bus在讀回來(lái)驗(yàn)證是否發(fā)生錯(cuò)誤。
5. Bit Stuffing:用于訊號(hào)同步使用。
基于優(yōu)先權(quán)的仲裁特色解決多節(jié)點(diǎn)發(fā)生沖突的問(wèn)題
CAN Bus采用了非破壞性的仲裁(Non-Destructive Bitwise Arbitration),因?yàn)槊總€(gè)訊息封包都具其優(yōu)先權(quán),而優(yōu)先權(quán)由仲裁域內(nèi)部的識(shí)別子決定。當(dāng)許多結(jié)果同時(shí)發(fā)送訊息時(shí),只有發(fā)送高優(yōu)先權(quán)的封包的節(jié)點(diǎn)才能成為CAN Bus上的主站。
基于在各優(yōu)先層級(jí)的仲裁來(lái)自于識(shí)別子與跟隨在識(shí)別子后的傳送請(qǐng)求(RTR)決定,具有兩個(gè)不同識(shí)別子的封包中,較高優(yōu)先權(quán)的識(shí)別子具有較低的二進(jìn)制數(shù)值。因此注意到的是,在一個(gè)系統(tǒng)中每條訊息都需給予唯一的是識(shí)別子;具有指定的識(shí)別子和Data Length Code (DLC)的數(shù)據(jù)封包僅可由一個(gè)節(jié)點(diǎn)所激活。
當(dāng)CAN Bus閑置時(shí)呈現(xiàn)隱性電壓準(zhǔn)位,這時(shí)任何一個(gè)節(jié)點(diǎn)都可以發(fā)送一個(gè)顯性電壓準(zhǔn)位做為一個(gè)封包的開(kāi)始;若有兩個(gè)以上的節(jié)點(diǎn)發(fā)送,即產(chǎn)生了競(jìng)爭(zhēng),而CAN Bus解決的方式為對(duì)識(shí)別子進(jìn)行仲裁,各發(fā)送節(jié)點(diǎn)除了一邊向CAN Bus發(fā)送電壓準(zhǔn)位,同時(shí)與回收CAN Bus進(jìn)行比較,若電壓準(zhǔn)位相同,則繼續(xù)發(fā)送下一位,若電壓準(zhǔn)位不同則不向下發(fā)送,退出競(jìng)爭(zhēng)。因此識(shí)別子為隱性準(zhǔn)位時(shí),競(jìng)爭(zhēng)的優(yōu)先級(jí)就較低,而最高優(yōu)先級(jí)的識(shí)別子應(yīng)該全是顯性準(zhǔn)位。
評(píng)論