多視覺(jué)傳感器CAN總線檢測(cè)系統(tǒng)的設(shè)計(jì)
傳感器節(jié)點(diǎn)的CAN總線軟件設(shè)計(jì)
傳感器節(jié)點(diǎn)的CAN 總線軟件設(shè)計(jì)主要包括三個(gè)部分: CAN 節(jié)點(diǎn)初始化、報(bào)文發(fā)送和報(bào)文接收。CAN 節(jié)點(diǎn)的通訊實(shí)質(zhì)上就是對(duì)CAN 控制器內(nèi)部各寄存器進(jìn)行讀寫(xiě),由于這些寄存器或發(fā)送、接收緩沖器均有確定的地址,CPU 可通過(guò)外設(shè)訪問(wèn)指令對(duì)它們進(jìn)行讀寫(xiě)操作。CAN 總線通訊的成功與否重點(diǎn)是SJA1000 的初始化設(shè)置,初始化程序通過(guò)將CAN 控制器的寄存器寫(xiě)入控制字,確定CAN 的工作方式。用P89C668 的P217 作為片選信號(hào)與SJA1000 的CS引腳相連,SJA1000 的片內(nèi)寄存器和P89C668 單片機(jī)寄存器是重疊編址的,因此SJA1000 寄存器尋址時(shí)要定義成片外RAM 尋址。
由于視覺(jué)傳感器檢測(cè)系統(tǒng)要進(jìn)行的視覺(jué)檢測(cè)任務(wù)多為在線檢測(cè),實(shí)時(shí)性要求較強(qiáng),這里各傳感器節(jié)點(diǎn)采用中斷接收方式接收上位機(jī)的控制命令,節(jié)點(diǎn)初始化后,當(dāng)收到上位機(jī)發(fā)出的一幀信息后,判斷其報(bào)文標(biāo)志符是否符合自己的接收代碼寄存器和驗(yàn)收屏蔽寄存器的設(shè)置,若不符則不接收,若通過(guò)則確認(rèn)為本節(jié)點(diǎn)應(yīng)收信息后裝入接收緩沖器,SJA1000 的INT 腳會(huì)產(chǎn)生中斷信號(hào),該信號(hào)連接到單片機(jī)P89C668 的外部中斷0 引腳,在外部中斷0中斷處理程序執(zhí)行如圖5 所示的程序流程,讀出接收緩沖器的數(shù)據(jù)并保存在RAM 中,并啟動(dòng)本視覺(jué)傳感器節(jié)點(diǎn)進(jìn)行測(cè)量。
系統(tǒng)中發(fā)送報(bào)文采用查詢(xún)方式,傳感器節(jié)點(diǎn)在收到主控機(jī)的數(shù)據(jù)請(qǐng)求命令后發(fā)送數(shù)據(jù),發(fā)送模塊首先進(jìn)行狀態(tài)查詢(xún),判定總線是否空閑,如空閑,則將目的節(jié)點(diǎn)地址寫(xiě)入發(fā)送標(biāo)志符寄存器,數(shù)據(jù)寫(xiě)入發(fā)送緩沖器,完成一幀CAN 信息發(fā)送。若同時(shí)有多個(gè)節(jié)點(diǎn)都向總線發(fā)送報(bào)文,且都符合驗(yàn)收濾波器的設(shè)置,則報(bào)文標(biāo)識(shí)碼的二進(jìn)值越低的報(bào)文優(yōu)先級(jí)越高,從而在總線仲裁過(guò)程中首先占據(jù)總線訪問(wèn)的優(yōu)先權(quán)。系統(tǒng)軟件采用Keil C51 語(yǔ)言來(lái)編寫(xiě),具有模塊化功能強(qiáng)且簡(jiǎn)潔易讀等特點(diǎn)。CAN 控制器的發(fā)送緩沖區(qū)被分為描述符區(qū)和數(shù)據(jù)區(qū)兩部分,描述符區(qū)的第一個(gè)字節(jié)是幀信息字節(jié),它說(shuō)明了幀格式(標(biāo)準(zhǔn)幀或擴(kuò)展幀) 、遠(yuǎn)程幀或數(shù)據(jù)幀和數(shù)據(jù)的長(zhǎng)度,擴(kuò)展幀有四個(gè)字節(jié)的標(biāo)志符,數(shù)據(jù)區(qū)最多長(zhǎng)八個(gè)數(shù)據(jù)字節(jié),存有實(shí)際要發(fā)送的數(shù)據(jù)。本例中只用到前兩個(gè)數(shù)據(jù),第一個(gè)表示傳感器地址,第二個(gè)字節(jié)表示選擇傳感器里的兩路攝像機(jī)中的哪一路采集圖像。
CAN 節(jié)點(diǎn)之間通訊成功的另一個(gè)關(guān)鍵是波特率的設(shè)置,不僅CAN 總線上的各下位機(jī)節(jié)點(diǎn)要設(shè)置相同的波特率,總線與上位PC 機(jī)相連的USBCAN 接口卡也要有相同的波特率,這樣才能保證通訊暢通。由于USBCAN 接口卡內(nèi)的CAN 控制器SJA1000 用的是16MHz 的晶振,而各傳感器節(jié)點(diǎn)內(nèi)的SJA1000與P89C668 使用12MHz 的晶振,因此對(duì)于不同的通訊速率一定要計(jì)算出兩種晶振都相一致的總線時(shí)序寄存器BTR0 、BTR1 來(lái)設(shè)置總線波特率。本例中使用400kbps 作為總線通訊的波特率,效果很好。
結(jié)束語(yǔ)
本文主要著重于多視覺(jué)傳感器控制系統(tǒng)的設(shè)計(jì)研究。鑒于CAN 網(wǎng)絡(luò)的優(yōu)良性能,能夠快速、可靠地交換信息,特別適合多通訊節(jié)點(diǎn)的互連,形成多主機(jī)控制器局部網(wǎng),實(shí)驗(yàn)表明控制系統(tǒng)能做到各個(gè)視覺(jué)傳感器的快速切換傳輸視頻圖像,且切換時(shí)圖像抖動(dòng)小,效果好。該系統(tǒng)具有較好的網(wǎng)絡(luò)擴(kuò)展能力,在系統(tǒng)工作過(guò)程中靈活地增減一些傳感器節(jié)點(diǎn)不會(huì)影響系統(tǒng)工作,只需對(duì)主控軟件進(jìn)行少量修改即可。本控制系統(tǒng)的另一個(gè)特點(diǎn)是:傳感器的照明燈的電源功率大小可以由計(jì)算機(jī)通過(guò)CAN 總線由傳感器控制單元自動(dòng)調(diào)節(jié),以適應(yīng)現(xiàn)場(chǎng)環(huán)境光強(qiáng)的變化。本文所設(shè)計(jì)的多視覺(jué)傳感器測(cè)控系統(tǒng),可以廣泛用于各種工業(yè)現(xiàn)場(chǎng)實(shí)時(shí)在線視覺(jué)測(cè)量系統(tǒng)中。
評(píng)論