基STM32單片機(jī)的單線CAN總線隔離中繼器設(shè)計(jì)
本文針對CAN總線在現(xiàn)場運(yùn)用中存在的一些限制因素,及煤礦井下液壓支架電液控制系統(tǒng)CAN總線組網(wǎng)控制中存在的問題,提出了一種基于意法半導(dǎo)體公司STM32單片機(jī)的單線CAN總線隔離中繼器。充分利用了STM32F105系列單片機(jī)內(nèi)部集成的雙bxCAN控制器和飛思卡爾MC33879的單線CAN收發(fā)器的特性,構(gòu)成了一種軟中繼器。實(shí)踐證明該設(shè)計(jì)有效解決了多點(diǎn)供電、網(wǎng)絡(luò)規(guī)模限制、電磁兼容性的問題,對提高煤礦自動(dòng)化生產(chǎn)安全和效率具有較大意義。
CAN總線是一種多主方式的串行通信總線,具有優(yōu)良的穩(wěn)定性、實(shí)時(shí)性、遠(yuǎn)程通信能力以及超強(qiáng)的硬件CRC糾錯(cuò)等特性;CAN總線技術(shù)的應(yīng)用不再僅限于汽車行業(yè),而擴(kuò)展到了能源、制造等行業(yè),并被公認(rèn)為是最有前途的現(xiàn)場總線之一;因此,CAN總線在煤礦各種系統(tǒng)中得到了越來越多的應(yīng)用。由于受制于CAN收發(fā)器,CAN總線通信距離和網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)被分別限制在10 km和110個(gè)節(jié)點(diǎn)之內(nèi)。但在煤礦現(xiàn)場設(shè)備節(jié)點(diǎn)多、距離長、供電系統(tǒng)復(fù)雜系統(tǒng)中需要用CAN總線中繼器對CAN總線網(wǎng)絡(luò)進(jìn)行擴(kuò)展。
CAN中繼器是系統(tǒng)組網(wǎng)的關(guān)鍵技術(shù)設(shè)備之一,使用中繼器可以提高網(wǎng)絡(luò)的節(jié)點(diǎn)數(shù)和通信距離,并且可以連接兩個(gè)不同波特率的CAN總線網(wǎng)絡(luò),極大地?cái)U(kuò)展其使用范圍。針對于此設(shè)計(jì)出了一種基于STM32的單線CAN總線隔離中繼器,并將于此應(yīng)用到液壓支架電液控制系統(tǒng)中,實(shí)現(xiàn)了液壓支架間、液壓支架與上位機(jī)監(jiān)控系統(tǒng)的通信。
1 系統(tǒng)整體方案
CAN總線中繼器的設(shè)計(jì)方法一般2種:一種采用硬中繼方式,即只通過門電路與一些分立器件的組合來設(shè)計(jì)電路,但轉(zhuǎn)發(fā)效率不高;另一種采用軟中繼方式,即采用CPU來接收、轉(zhuǎn)發(fā)CAN總線兩側(cè)的數(shù)據(jù),該方案雖然結(jié)構(gòu)復(fù)雜,但轉(zhuǎn)發(fā)效率較高。兩側(cè)的數(shù)據(jù)經(jīng)過CPU接收后再轉(zhuǎn)發(fā)到另一側(cè),軟中繼器的優(yōu)勢除了具有程序?yàn)V波和自診斷功能外,還能實(shí)現(xiàn)不同速率網(wǎng)段的連接,滿足實(shí)際應(yīng)用要求;故本設(shè)計(jì)采用軟中繼的方式。
2 硬件設(shè)計(jì)
2.1 主控電路設(shè)計(jì)
為煤礦井下嚴(yán)酷的工業(yè)環(huán)境中設(shè)計(jì)的中繼器硬件電路除了需穩(wěn)定可靠外,還需保證其低功耗特性。該中繼器的CPU采用ST公司基于Cort ex—M3內(nèi)核的STM32F105系列單片機(jī)。STM32F105系列是專門針對快速和簡單的編程而設(shè)計(jì)的,可用于高度集成與低功耗工業(yè)應(yīng)用。STM32F105系列的工作頻率可達(dá)到72 MHz,相對于同等性能的單片機(jī),功耗卻要小很多。另外,它還帶有具有在系統(tǒng)編程(ISP)的128KB片上FLASH程序存儲(chǔ)器,從而為數(shù)據(jù)存儲(chǔ)與固件升級等操作帶來極大的靈活性。STM32F105系列內(nèi)部集成了2個(gè)獨(dú)立的CAN控制器,簡化了中繼器的硬件電路設(shè)計(jì);其CAN控制器的驗(yàn)收濾波器具有快速的硬件搜索算法,支持大量的CAN標(biāo)識符,并且允許11位和29位CAN標(biāo)識符的明確定義與分組定義,簡化了系統(tǒng)的軟件設(shè)計(jì)和運(yùn)行負(fù)擔(dān)。
2.2 通信電路設(shè)計(jì)
CAN總線接口電路如圖2所示。圖中CAN收發(fā)器選用單線CAN收發(fā)器MC33897。它是飛思卡爾公司推出的用于由地構(gòu)成回路的單總線CAN總線收發(fā)器芯片,主要用于多路傳輸應(yīng)用方面。它為CAN總線控制器之間的數(shù)據(jù)傳輸提供一單線的物理接口,也就是說相對傳統(tǒng)CAN總線收發(fā)器,它只需要一根信號線即可完成CAN總線通信,這為節(jié)點(diǎn)之間相互通信節(jié)省了通信成本,方便了系統(tǒng)的安裝和后期的維護(hù)。另外,CAN總線接口與CPU之間采用雙路磁耦A(yù)DuM1201隔離,相比于高速光耦,磁耦時(shí)延小且功耗小。該設(shè)計(jì)方法解決不同的支架間用不同電源供電信號不共地的傳輸問題,并且提高抗干擾的能力。
3 軟件設(shè)計(jì)
3.1 初始化子程序
STM32的CAN控制器初始化直接關(guān)系到CAN控制器能否正常工作。STM32的CAN控制器初始化主要包括CAN基本單元和過濾器的初始化。因?yàn)镾T公司推出了一套針對于STM32的固件庫,所以只需在程序開始時(shí)做出相應(yīng)的設(shè)置即可。在該初始化子程序中關(guān)鍵的環(huán)節(jié)是設(shè)置CAN的波特率,STM32數(shù)據(jù)手冊中的波特率的計(jì)算公式如下:
其中tq=(BRP[9:0]+1)xtPCLK。如上述CAN單元初始化子程序中:tBS1=tq×(TS1[3:0]+1),tBS2=tqx(TS2[2:0]+1),BRP[9:0]、TS1[3:0]和TS2[2:0]均在CAN_BTR寄存器中設(shè)置,STM32的CAN時(shí)鐘有APB1提供。假設(shè)系統(tǒng)時(shí)鐘為72 MHz,APB1為系統(tǒng)時(shí)鐘的9分頻,結(jié)合初始化子程序,BRP[9:0]=0、TS1[3:0]=7、TS2[2:0]=6,代入波特率計(jì)算公式即可求的其波特率為500Kb/s。在該中繼器中,CAN控制器的過濾器設(shè)置工作在屏蔽位模式下,對標(biāo)識符的任何一位采用必須匹配或不用關(guān)心的原則處理。在中繼器中,由于需要轉(zhuǎn)發(fā)所有總線上的數(shù)據(jù),則過濾器不必詳細(xì)設(shè)置,只需設(shè)置接收任何ID號的數(shù)據(jù)即可。
3.2 數(shù)據(jù)轉(zhuǎn)發(fā)子程序
中繼器的任務(wù)實(shí)質(zhì)上就是實(shí)現(xiàn)報(bào)文的轉(zhuǎn)發(fā)。STM32F105內(nèi)部集成了雙bxCAN控制器,它包括3個(gè)發(fā)送郵箱和2個(gè)3級深度的FIFO。結(jié)合STM32 F105的特性,采用雙FIFO的轉(zhuǎn)發(fā)機(jī)制,其原理如圖3所示。依據(jù)圖3,當(dāng)STM32F105接收到新的報(bào)文時(shí),經(jīng)過數(shù)據(jù)處理模塊處理,在數(shù)據(jù)轉(zhuǎn)發(fā)進(jìn)程的管理下,對兩路bxCAN控制器的接收FIFO緩沖區(qū)進(jìn)行監(jiān)視,如某一路緩沖區(qū)非空則向另一路轉(zhuǎn)發(fā)。
STM32F105發(fā)送報(bào)文的流程為:應(yīng)用程序選擇1個(gè)空置的發(fā)送郵箱;設(shè)置標(biāo)識符、數(shù)據(jù)長度和待發(fā)送數(shù)據(jù);然后對CAN_TIxR寄存器的TXRQ位置1,來請求發(fā)送。TXRQ位置1后,郵箱就不再是空郵箱;一旦郵箱不再為空置,軟件對郵箱寄存器就不再有寫的權(quán)限。TXRQ位置1后,郵箱馬上進(jìn)入掛號狀態(tài),并等待成為最高優(yōu)先級的郵箱。一旦郵箱成為最高優(yōu)先級的郵箱,其狀態(tài)就變?yōu)轭A(yù)定發(fā)送狀態(tài)。當(dāng)CAN總線進(jìn)人空閑狀態(tài),預(yù)定發(fā)送郵箱中的報(bào)文就馬上被發(fā)送。在郵箱中的報(bào)文被成功發(fā)送后,它馬上變?yōu)榭罩绵]箱;硬件相應(yīng)地對CAN_TSR寄存器的RQCP和TXOK位置1,表明一次成功發(fā)送。
為了提高中繼器數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性,CAN報(bào)文的接收采用中斷方式。所以在CAN初始化過程中應(yīng)使能CAN1和CAN2外設(shè)中斷,并設(shè)置其相應(yīng)的中斷向量表,設(shè)定其相應(yīng)的中斷等級。數(shù)據(jù)接收模塊流程如圖4所示。
另外,假設(shè)CAN總線上A點(diǎn)發(fā)出的數(shù)據(jù)總時(shí)間為t,則在軟中繼器另一側(cè)B點(diǎn)接收到該數(shù)據(jù)的最短時(shí)間為t。當(dāng)總線速率不大且對各總線設(shè)備時(shí)序要求不高時(shí),該時(shí)間可以忽略。但在一些節(jié)點(diǎn)間交換數(shù)據(jù)頻繁的CAN總線系統(tǒng),則須注意這個(gè)問題,盡量使其對系統(tǒng)的影響降至最低。
4 結(jié)論
該CAN總線中繼器充分利用內(nèi)部集成雙bxCAN控制器簡化了硬件電路的設(shè)計(jì),及豐富的固件庫函數(shù)縮短了開發(fā)周期。實(shí)踐表明,該單線CA N總線隔離中繼器完成了各項(xiàng)設(shè)計(jì)指標(biāo),符合工程的要求,在液壓支架電液控制系統(tǒng)中能夠有效的完成數(shù)據(jù)的轉(zhuǎn)發(fā)和網(wǎng)絡(luò)的拓展,具有較高的實(shí)用價(jià)值。