如何設(shè)計基于DSP的分析儀器CAN網(wǎng)絡(luò)通信系統(tǒng)?
圖3 智能節(jié)點程序流程圖
本文引用地址:http://cafeforensic.com/article/201808/385076.htm智能節(jié)點端CAN模塊初始化(流程圖如圖4所示[4])主要包括三個方面的內(nèi)容:波特率的配置、郵箱分配(包括郵箱方向、標(biāo)識符分配等)、中斷寄存器初始化。波特率和標(biāo)識符的分配非常重要,是CAN網(wǎng)絡(luò)通信成功的關(guān)鍵所在。F2812內(nèi)置CAN控制器使用位時序配置寄存器CANBTC中的BRP、TSEG1和TSEG2來設(shè)置波特率,計算公式為:SYSCLK/(BRP+1)×[(TSEG1reg+1)+(TSEG2reg+1)+1],此處我們采用的晶振頻率為30MHZ,系統(tǒng)倍頻為1/2,BRP=9,TSEG1=10,TSEG2=2,因此波特率為100Kbps。標(biāo)識符就根據(jù)表1的描述來確定。
圖4 智能節(jié)點CAN模塊初始化流程圖
中斷程序中主要對從節(jié)點傳送的數(shù)據(jù)進(jìn)行處理,然后轉(zhuǎn)存到主節(jié)點的發(fā)送郵箱中,等待發(fā)送給上位機(jī)。在進(jìn)行數(shù)據(jù)處理的時候要把接收郵箱中的數(shù)據(jù)賦給中間變量,處理完后再把中間變量的值賦給發(fā)送郵箱,這個過程中要注意借助指針來完成。如下所示:
Mailbox = ECanaMboxes.MBOX0 + n; // n為郵箱號
receiveboxl = Mailbox->MDRL.all;
receiveboxh = Mailbox->MDRH.all;
3.2上位機(jī)端
PC機(jī)端主要完成對各分析平臺分析結(jié)果的采集、處理,采用適合快速開發(fā)的面向?qū)ο蟾呒壵Z言VB來編寫。KPCI-8110CAN適配卡提供.dll驅(qū)動和.lib庫函數(shù),通過在VB程序中調(diào)用相關(guān)的驅(qū)動函數(shù)就可以實現(xiàn)CAN適配卡的配置和數(shù)據(jù)的讀寫。數(shù)據(jù)的處理主要完成對各組分檢測結(jié)果中干擾背景氣的去除以及單位換算等工作。
上位機(jī)在接收主節(jié)點傳送過來的數(shù)據(jù)時,在SJA1000 CAN控制器采用單濾波器模式,只接收在界面中輸入的組分的數(shù)據(jù)。濾波規(guī)則為:驗收代碼位(ACR.7-ACR.0)和信息識別碼(標(biāo)識符)的高8位(ID.10-ID.3)相等,且與驗收屏蔽位(AMR.7-AMR.0)的相應(yīng)位相或為1[5]。例如,在上位機(jī)接收界面中輸入組分名“co2”,運(yùn)行程序時就會把“co2”對應(yīng)的一組驗收代碼值和驗收屏蔽值初始化為驗收濾波器的預(yù)設(shè)值。為了具有通用性,把驗收屏蔽碼設(shè)為ACR xor HFF。
由于SJA1000CAN控制器每個地址存儲8位的數(shù)據(jù),而F2812內(nèi)置CAN控制器每個地址存儲16位的數(shù)據(jù)而且標(biāo)準(zhǔn)數(shù)據(jù)幀的標(biāo)識符也不是從字節(jié)的起始位開始的,所以定義標(biāo)識符的時候要按照不同控制器的要求來定義。例如F2812內(nèi)置CAN控制器定義數(shù)據(jù)幀標(biāo)識符為1144 0000(bit28-bit18為標(biāo)識符位),SJA1000獨立控制器對應(yīng)的標(biāo)識符應(yīng)為8A20(bit15-bit5為標(biāo)識符位)。.
下圖為自己開發(fā)的接收界面成功接收到數(shù)據(jù):
圖5 上位機(jī)接收界面
4 結(jié)論
該通信系統(tǒng)在試驗中得到了良好的效果,滿足了多組分分析儀器的設(shè)計要求。數(shù)字化在線分析儀器作為網(wǎng)絡(luò)神經(jīng)元,有機(jī)地融入網(wǎng)絡(luò)系統(tǒng),實現(xiàn)信息實時傳輸、遠(yuǎn)程故障診斷是分析儀器的發(fā)展趨勢,也是工業(yè)化和信息化的發(fā)展趨勢。
評論