基于CAN總線的分布式控制器設(shè)計(jì)和實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
機(jī)電系統(tǒng)執(zhí)行部件包括電機(jī)、舵機(jī)、液壓缸、液壓馬達(dá)等,傳感部分有接觸和非接觸的接近傳感器(光電傳感器)、圖像傳感器(CCD、辨色傳感器)、聲音傳感器(麥克風(fēng))等,如果采用集中式的設(shè)計(jì)方式,不僅提高了對(duì)設(shè)計(jì)者的要求,而且難以適應(yīng)控制要求不斷變化的情況。軟件設(shè)計(jì)方面,集中式的硬件設(shè)計(jì)會(huì)使得軟件構(gòu)架十分繁瑣,無法多人協(xié)同工作,維護(hù)困難??刂葡到y(tǒng)硬件安裝方面,集中式的硬件構(gòu)架很可能增加線束方面的困難。綜上所述,采用分布式的設(shè)計(jì)可以減小設(shè)計(jì)風(fēng)險(xiǎn),提高設(shè)計(jì)效率,增加系統(tǒng)柔性。
控制系統(tǒng)分為三部分:信號(hào)輸入部分、中央處理部分和信號(hào)輸出驅(qū)動(dòng)部分。信號(hào)輸入部分包括數(shù)字信號(hào)輸入和模擬信號(hào)輸入,信號(hào)輸出驅(qū)動(dòng)部分根據(jù)不同的驅(qū)動(dòng)部件設(shè)計(jì)相應(yīng)的驅(qū)動(dòng)電路。學(xué)生常用的執(zhí)行部件包括直流伺服電機(jī)、直流電機(jī)、氣動(dòng)控制閥等,后兩者同屬于一種控制模式,故驅(qū)動(dòng)部分主要為直流伺服驅(qū)動(dòng)和閥驅(qū)動(dòng)。因此分布式控制模塊可以分為:信號(hào)輸入模塊、主控模塊、直流伺服電機(jī)驅(qū)動(dòng)模塊、氣動(dòng)閥驅(qū)動(dòng)模塊等。
信號(hào)輸入模塊主要是傳感器信號(hào)的輸入和編碼,分為數(shù)字信號(hào)輸入和模擬信號(hào)輸入;主控模塊是信息的處理、決策和人機(jī)交互的平臺(tái),包括鍵盤輸入和LCD輸出;直流伺服電機(jī)控制驅(qū)動(dòng)模塊,采用LM629作為電機(jī)控制芯片,通過H橋驅(qū)動(dòng)完成直流電機(jī)的PID控制;閥驅(qū)動(dòng)模塊用于氣動(dòng)閥的開啟、關(guān)閉以及直流電機(jī)的驅(qū)動(dòng),故同樣通過H橋驅(qū)動(dòng)模式。各個(gè)模塊之間采用CAN總線構(gòu)架(如圖1)??刂菩酒捎肞89C58X2,用KeilC和CSOS系統(tǒng)進(jìn)行算法設(shè)計(jì),系統(tǒng)硬件和軟件構(gòu)架清晰,具有良好的擴(kuò)展性。
1 硬件電路構(gòu)架
1.1 直流伺服電機(jī)控制
P89C58X2與LM629之間采用總線方式連接,即單片機(jī)的P0口通過上拉電阻之后接LM629的數(shù)據(jù)輸入位,HI連接單片機(jī)的外部中斷口,編碼盤輸入A、B和IN口分別連接上拉電阻之后接電機(jī)的編碼盤,而LM629的輸出口PWM MAG和PWM SIG分別連接H橋電機(jī)驅(qū)動(dòng)的PWM和DIR、編碼盤和LM629,H橋與LM629之間均采用高速光隔6N137隔離,如圖2。
在單板上集成兩塊LM629,能使結(jié)構(gòu)更緊湊,算法更簡(jiǎn)單,通過軟件可以方便地設(shè)定LM629工作在速度模式或者位移模式。
1.2 CAN總線硬件設(shè)計(jì)
CAN總線是一種具有國(guó)際標(biāo)準(zhǔn)的性價(jià)比較高的現(xiàn)場(chǎng)總線,其最高傳輸速度可達(dá)1Mb/s,最遠(yuǎn)傳輸距離可達(dá)10km,性能穩(wěn)定,十分適合可靠性要求高的分布式系統(tǒng)。
本系統(tǒng)CAN總線控制芯片采用飛利浦公司的SJA1000,其支持CAN2.0B的標(biāo)準(zhǔn)協(xié)議,并且芯片可以工作在BasicCAN和PeliCAN兩種模式下。總線收發(fā)器采用飛利浦公司的TJA1050,它符合ISO11898標(biāo)準(zhǔn),實(shí)現(xiàn)CAN控制器和通信線路的物理連接,提高CAN總線的驅(qū)動(dòng)能力和可靠性。
SJA1000和P89C58X2之間同樣采用總線方式連接,連接方法同LM629,而SJA1000和TJA1050之間連接如下:SJA1000的TX0連接TJA1050的TXD,RX0連接RXD,RX1接Vref輸出,SJA1000的TX1下拉電阻接地,TJA1050的CANL和CANH就是CAN總線輸出。當(dāng)多節(jié)點(diǎn)連接時(shí),CANL和CANH之間需要加1~2個(gè)阻值為120Ω的端接電阻,能有效防止通訊總線上產(chǎn)生的信號(hào)反射(如圖3)。在軟件設(shè)計(jì)中,通過修改SJA1000的寄存器使CAN工作在PeliCAN、單濾波器、正常模式和擴(kuò)展幀模式下。
2 CAN應(yīng)用層協(xié)議
為了讓各個(gè)分布式模塊之間能協(xié)同高效工作,對(duì)數(shù)據(jù)傳輸之間的格式和意義做一個(gè)規(guī)定,這就是應(yīng)用層協(xié)議。
2.1 CAN總線的應(yīng)用層協(xié)議
控制系統(tǒng)之間需要一定的協(xié)議支持,本系統(tǒng)采用一主多從的控制模式,主控模塊作為傳感信號(hào)的接受者、處理者和驅(qū)動(dòng)信號(hào)的發(fā)布者;信號(hào)輸入模塊作為信息的采集者和過濾者;而伺服控制模塊和閥驅(qū)動(dòng)模塊作為動(dòng)作的執(zhí)行者(如圖4)。
在信息控制面,主控模塊要向其他控制模塊發(fā)送“建立連接”請(qǐng)求,在收到所有模塊的“連接應(yīng)答”之后才開始工作,否則發(fā)出連接錯(cuò)誤信息,并指出沒有連接的模塊。主控模塊可以通過“數(shù)據(jù)上報(bào)”命令和“數(shù)據(jù)停止上報(bào)”命令打開和關(guān)閉主控模塊與信號(hào)輸入模塊之間的鏈路。“執(zhí)行器開始”命令和“執(zhí)行器停止”命令用于開始或停止驅(qū)動(dòng)器,這里可以指直流電機(jī)或者氣動(dòng)閥。
2.2 CAN總線的數(shù)據(jù)幀結(jié)構(gòu)
CAN接受一幀最多為8字節(jié),本文規(guī)定了應(yīng)用層協(xié)議,如表1。
源地址是指命令的發(fā)起者;數(shù)據(jù)/命令表示本幀是命令面信息還是數(shù)據(jù)面信息;功能則表示本幀的作用,比如“建議連接”請(qǐng)求;數(shù)據(jù)位數(shù)表示數(shù)據(jù)的字節(jié)數(shù),最多四位,對(duì)于命令幀則忽略該位。
3 軟件開發(fā)平臺(tái)
根據(jù)不同機(jī)械系統(tǒng)的要求,設(shè)計(jì)人員可以選擇不同的硬件組合。為了方便軟件設(shè)計(jì),本控制器采用了筆者開發(fā)的CSOS操作系統(tǒng),該操作系統(tǒng)基于時(shí)間片輪換算法,支持多任務(wù)操作,各任務(wù)之間的數(shù)據(jù)通過全局變量傳遞,占用系統(tǒng)資源少、易學(xué)、易用,適合本控制系統(tǒng)的要求。
3.1 控制器的多任務(wù)操作
信息接受任務(wù),包括外部傳感器的信號(hào),或者總線上的命令信息和數(shù)據(jù)信息,將信息解包之后獲得有用的數(shù)據(jù)(如CAN協(xié)議幀中的有用信息段)扔向數(shù)據(jù)通道,提供其他任務(wù)調(diào)用。
算法處理任務(wù),從數(shù)據(jù)通道獲取信息字段,經(jīng)過計(jì)算將結(jié)果扔向數(shù)據(jù)通道。
信息輸出任務(wù),對(duì)算法任務(wù)數(shù)據(jù)結(jié)果進(jìn)行打包向驅(qū)動(dòng)器或者CAN總線發(fā)送,用于驅(qū)動(dòng)控制器或者向CAN總線投放數(shù)據(jù)包。
LCD顯示任務(wù)和鍵盤輸入任務(wù),這兩個(gè)任務(wù)分別負(fù)責(zé)數(shù)據(jù)顯示和鍵盤的輸入。
3.2 多任務(wù)分配實(shí)例
以主控制模塊的軟件為例對(duì)上述構(gòu)架進(jìn)行說明,如圖5。
每個(gè)任務(wù)獨(dú)自運(yùn)行,將各自的計(jì)算數(shù)據(jù)放入數(shù)據(jù)通道中,或者從數(shù)據(jù)通道中獲得相應(yīng)數(shù)據(jù)進(jìn)行計(jì)算,這樣的構(gòu)架結(jié)構(gòu)清晰,柔性強(qiáng)。
4 控制器應(yīng)用實(shí)例
筆者將該控制系統(tǒng)應(yīng)用于輪系機(jī)器人的尋線控制上,即讓機(jī)器人跟蹤地面上一定寬度的引導(dǎo)線。
4.1 硬件選擇
根據(jù)控制要求,硬件上需要信號(hào)輸入模塊,主控模塊和伺服驅(qū)動(dòng)模塊。
4.2 傳感器安置和信號(hào)輸入模塊
筆者采用光電傳感器,利用不同顏色對(duì)于光的反射效果不同的原理,區(qū)分出地面的指引線,光電傳感器布局如圖6。
機(jī)器人采用14個(gè)光電傳感器(數(shù)字量),黑色點(diǎn)表示在引導(dǎo)線上為0,白色點(diǎn)表示在引導(dǎo)線外為1,并且通過光電傳感器間距和引導(dǎo)線寬度之間的關(guān)系,保證最多只有3個(gè)光電傳感器在引導(dǎo)線內(nèi),從這樣的一系列邏輯組合就可以知道機(jī)器人現(xiàn)在的姿態(tài)。信號(hào)輸入模塊中的算法任務(wù)對(duì)采集信號(hào)做濾波,過濾誤信號(hào),之后將數(shù)據(jù)傳輸給信息輸出任務(wù),打包后發(fā)向總線。
4.3 尋線算法和主控模塊
主控模塊的信息接受任務(wù)獲得上述信息后,解包并將相關(guān)的數(shù)據(jù)扔向數(shù)據(jù)通道,算法任務(wù)獲得數(shù)據(jù)進(jìn)行運(yùn)算。
由圖6可知,7個(gè)光電傳感器和引導(dǎo)線之間有9種狀態(tài),上下兩組狀態(tài)就可以確定目前機(jī)器人的姿態(tài),其構(gòu)成一個(gè)9×9的二維矩陣,易知共有81種不同的組合。通過這個(gè)二維矩陣可獲得機(jī)器人現(xiàn)在的狀態(tài),用左極偏、左大偏、左中偏、左小偏、正常、右小偏、右中偏、右大偏和右極偏九種狀態(tài)來表示,對(duì)應(yīng)整數(shù)-4~+4。
給出機(jī)器人尋線控制PID表達(dá)式:
其中ΔVk是第k時(shí)刻需要的左右輪速度差,即在總線上傳輸?shù)碾姍C(jī)速度參數(shù);e表示偏移狀態(tài)和正常狀態(tài)之間的差,在這里就是狀態(tài)所對(duì)應(yīng)的整數(shù);kp,kI,kD分別為比例、積分和微分常數(shù)。
算法任務(wù)將ΔVk扔到數(shù)據(jù)通道中,由信息輸出任務(wù)將其打包后發(fā)送給CAN總線。
4.4 輸出驅(qū)動(dòng)和伺服驅(qū)動(dòng)模塊
該模塊接收到ΔVk之后采用“均分原理”,把差速均分增加在左右輪電機(jī)上,即:
VL和VR分別為左右輪的輸出轉(zhuǎn)速,Vm為無偏移情況下的左右輪輸出。
算法任務(wù)將VL和VR變?yōu)榉螸M629的參數(shù)格式之后發(fā)送到數(shù)據(jù)通道,信息輸出任務(wù)獲得該數(shù)據(jù)之后直接對(duì)LM629進(jìn)行驅(qū)動(dòng)。
整個(gè)基于CAN總線多任務(wù)構(gòu)架的控制系統(tǒng)信息流圖如圖7所示。
CAN總線在多任務(wù)操作系統(tǒng)的構(gòu)架下可以看成是透明的,模塊之間的通訊可以簡(jiǎn)單地看成各個(gè)任務(wù)之間的通訊,做到了各個(gè)模塊之間的無縫連接。在用該控制器進(jìn)行機(jī)電系統(tǒng)設(shè)計(jì)時(shí),設(shè)計(jì)者的注意力只需要放在各模塊的算法任務(wù)部分。本系統(tǒng)可以很好地滿足在校生科技創(chuàng)新的需求,方便學(xué)生構(gòu)架機(jī)電系統(tǒng)或者機(jī)器人的控制器,讓設(shè)計(jì)者把更多的精力放在機(jī)電控制算法上面。