葉 蓓,何 強(qiáng)
(上海船舶運(yùn)輸科學(xué)研究所 艦船自動(dòng)化系統(tǒng)事業(yè)部,上海 200135)
國產(chǎn)芯片產(chǎn)業(yè)起步較晚,目前還不能滿足國內(nèi)市場的需求,且芯片產(chǎn)業(yè)與信息安全有著緊密的聯(lián)系,因此其戰(zhàn)略高度不容忽視。當(dāng)前在我國船舶自動(dòng)化系統(tǒng)領(lǐng)域,設(shè)計(jì)人員往往選用國外先進(jìn)的芯片來獲得較高的性能,但國外芯片在市場供應(yīng)和安全性上存在一定的不確定性,會(huì)帶來國家軍工安全方面的隱患,因此將國產(chǎn)芯片應(yīng)用到船舶自動(dòng)化系統(tǒng)領(lǐng)域中迫在眉睫[1]。
在船舶自動(dòng)化領(lǐng)域,4~20 mA電流是一個(gè)非常重要的參數(shù),某些應(yīng)用場景對(duì)其輸出裝置有非常高的要求。4~20 mA電流輸出裝置常用于對(duì)現(xiàn)場儀表進(jìn)行控制,當(dāng)前儀表控制正朝著高精度、高穩(wěn)定性和高可靠性的方向快速發(fā)展。目前使用的基于CAN(Controller Area Network)現(xiàn)場總線的4~20 mA電流輸出裝置的軟件程序已固化,只能適用于單一的自動(dòng)化控制系統(tǒng),移植性和可維護(hù)性較差,若該裝置直接在新的自動(dòng)化控制系統(tǒng)中使用,需更改軟件程序。本文提出一種以CAN現(xiàn)場總線為基礎(chǔ),以國產(chǎn)芯片GD32F407為主控芯片,外部設(shè)備(以下簡稱“外設(shè)”)配合多通道數(shù)模轉(zhuǎn)換器(Digital to Analog Converter, DAC)MAX5306,輸入CAN報(bào)文和輸出4~20 mA電流均可現(xiàn)場配置的電流輸出裝置設(shè)計(jì)方案,以該裝置的工作原理為基礎(chǔ),分別從硬件和軟件2方面探討該裝置的實(shí)現(xiàn)過程。
該4~20 mA電流輸出裝置系統(tǒng)結(jié)構(gòu)框圖見圖1,主要由上層CAN現(xiàn)場總線網(wǎng)絡(luò)、MCU(Micro Control Unit)微控制器單元、數(shù)模轉(zhuǎn)換單元和儀表單元組成。在上層CAN現(xiàn)場總線網(wǎng)絡(luò)與MCU微控制器單元之間采用CAN通信隔離單元,以減少CAN現(xiàn)場總線網(wǎng)絡(luò)中不同測量裝置之間的電磁干擾。MCU微控制器單元是4~20 mA電流輸出裝置的主控單元,主要完成對(duì)上層CAN現(xiàn)場總線網(wǎng)絡(luò)中相關(guān)CAN報(bào)文的解析和數(shù)模轉(zhuǎn)換單元的控制。根據(jù)4~20 mA電流輸出裝置的CAN報(bào)文協(xié)議的要求,MCU微控制器單元對(duì)接收到的CAN報(bào)文進(jìn)行解析。數(shù)模轉(zhuǎn)換單元主要完成數(shù)字量到模擬量的轉(zhuǎn)換,并通過SPI(Serial Peripheral Interface)接口和MCU微控制器單元進(jìn)行通信;該單元根據(jù)預(yù)先設(shè)定的量程將解析到的相應(yīng)通道數(shù)值轉(zhuǎn)換成4~20 mA電流,繼而輸出4~20 mA電流驅(qū)動(dòng)相應(yīng)的儀表單元[2-3]。
圖1 4~20 mA電流輸出裝置系統(tǒng)結(jié)構(gòu)框圖
圖2 裝置硬件接口框圖
該4~20 mA電流輸出裝置由核心板和基板組成,其對(duì)外接口主要由電源輸入接口、8路4~20 mA電流輸出接口、2路CAN通信接口和4個(gè)LED(Light-Emitting Diode)指示燈輸出組成,電流輸出范圍在4~20 mA,4~20 mA電流輸出裝置硬件接口框圖見圖2。
MCU芯片選用兆易創(chuàng)新的基于Cortex?-M4內(nèi)核的GD32F407微控制器芯片。該芯片具有功耗低、功能強(qiáng)、效率高和成本低等優(yōu)點(diǎn),最高主頻可達(dá) 168 MHz,并提供完整的DSP(Digital Signal Processing)指令集、并行計(jì)算能力和專用浮點(diǎn)運(yùn)算單元;為滿足多個(gè)外設(shè)同時(shí)運(yùn)行和嵌入式軟件協(xié)議棧資源開銷的需求,配備3 072 KB容量的內(nèi)置Flash和192 KB容量的SRAM(Static Random-Access Memory)。GD32F407微控制器芯片上集成有豐富的外設(shè)資源,包括12個(gè)定時(shí)器、6路UART、3路SPI總線、3路I2C總線、2路CAN控制器和1路10/100 M快速以太網(wǎng)控制器等外設(shè)資源,無需外接其他專用芯片即可滿足該裝置的各項(xiàng)功能和性能指標(biāo)的要求。
雖然GD32F407微控制器芯片內(nèi)部集成有2路CAN控制器,但不能對(duì)系統(tǒng)外部的電源和干擾信號(hào)進(jìn)行有效抑制,因此在GD32F407微控制器與CAN現(xiàn)場總線網(wǎng)絡(luò)之間增加ADM3053芯片作為CAN現(xiàn)場總線收發(fā)器的CAN通信隔離單元。ADM3053是一款隔離式控制器區(qū)域網(wǎng)絡(luò)(CAN)物理層收發(fā)器,集成隔離DC/DC轉(zhuǎn)換器,能有效抑制外部干擾。
MAX5306是12位、8通道、低功耗、電壓輸出的DAC,采用節(jié)省空間的16引腳TSSOP封裝,電源電壓范圍較寬(+2.7~+5.5 V),電源電流每通道小于215 μA(最大),更適于在低功耗和低電壓情況下應(yīng)用。MAX5306具有軟件關(guān)斷功能,關(guān)斷時(shí)能將電源電流降低至1 μA;具有加載DAC(/LDAC)功能,可同時(shí)更新所有DAC的輸出,允許通過單個(gè)軟件命令,分別或同時(shí)更新輸入和DAC寄存器。
該4~20 mA電流輸出裝置軟件由基于時(shí)間觸發(fā)設(shè)計(jì)模式的軟件架構(gòu)編寫的調(diào)度器構(gòu)成,通過調(diào)度器能獲取最簡單的協(xié)作式多任務(wù)操作系統(tǒng)。調(diào)度器是不同任務(wù)之間共享的定時(shí)器中斷服務(wù)程序,當(dāng)運(yùn)行多項(xiàng)任務(wù)時(shí),可使用同一臺(tái)調(diào)度器來完成。調(diào)度器中斷響應(yīng)函數(shù)是時(shí)間間隔為10 ms的“事件”,當(dāng)調(diào)度器被任務(wù)中的“事件”觸發(fā)之后,遍歷任務(wù)塊鏈表,根據(jù)任務(wù)的優(yōu)先級(jí)執(zhí)行需被調(diào)度執(zhí)行的任務(wù)[4]。
圖3 裝置軟件總體結(jié)構(gòu)
圖4 主程序流程
4~20 mA電流輸出裝置的軟件總體結(jié)構(gòu)見圖3,軟件設(shè)計(jì)分為以下3部分:
1)軟件平臺(tái)層與底層硬件相關(guān)的驅(qū)動(dòng),主要為芯片GD32F407的驅(qū)動(dòng),如CAN驅(qū)動(dòng)、SPI驅(qū)動(dòng)、TIMER驅(qū)動(dòng)、WDT驅(qū)動(dòng)和MAX5306驅(qū)動(dòng)等;
2)協(xié)作式多任務(wù)調(diào)度器,主要完成調(diào)度器初始化、多任務(wù)創(chuàng)建、多任務(wù)執(zhí)行、多任務(wù)銷毀和調(diào)度器啟動(dòng)等;
3)4~20 mA電流輸出裝置應(yīng)用程序設(shè)計(jì),如讀寫鐵電、4~20 mA電流輸出信號(hào)處理、CAN報(bào)文接收與發(fā)送和裝置標(biāo)定等。
主程序流程見圖4。4~20 mA電流輸出裝置首先需完成一系列初始化工作,隨后進(jìn)入標(biāo)定過程,從鐵電中讀取標(biāo)定狀態(tài)標(biāo)志位。若標(biāo)志位提示已標(biāo)定,從鐵電中讀出標(biāo)定值;若標(biāo)志位提示未標(biāo)定,則需標(biāo)定下限4 mA和上限20 mA。在標(biāo)定下限4 mA時(shí),按標(biāo)定協(xié)議發(fā)送CAN報(bào)文,采用萬用表電流檔測量該通道的電流值,直至測量電流值為4 mA,繼而將CAN報(bào)文標(biāo)定值存儲(chǔ)到鐵電中。同理,可標(biāo)定上限20 mA。參數(shù)設(shè)定包括CAN報(bào)文參數(shù)設(shè)定和各通道參數(shù)設(shè)定,在首次使用該裝置時(shí)必須對(duì)其進(jìn)行參數(shù)設(shè)定。最后,創(chuàng)建數(shù)據(jù)發(fā)送任務(wù)SendMsgTask、狀態(tài)顯示任務(wù)ErrStateTask和數(shù)據(jù)處理任務(wù)MsgProcessTask,啟動(dòng)調(diào)度器,按設(shè)定的調(diào)度時(shí)間遍歷任務(wù)鏈表。
該4~20 mA電流輸出裝置最大的優(yōu)點(diǎn)是首次完成程序燒寫之后,應(yīng)用到后續(xù)其他場景時(shí)無需再進(jìn)行程序燒寫,僅需按參數(shù)設(shè)定協(xié)議配置參數(shù),靈活方便,能大大縮短開發(fā)周期。因此,參數(shù)設(shè)定流程是4~20 mA電流輸出裝置的核心,對(duì)該裝置燒寫程序之后,需首先進(jìn)入?yún)?shù)設(shè)定流程,否則裝置無法正常工作。CAN通信接口是該裝置對(duì)外的唯一通信接口,裝置只有通過對(duì)接收到的CAN報(bào)文進(jìn)行解析,按參數(shù)設(shè)定協(xié)議將其轉(zhuǎn)換為相關(guān)通道的工作參數(shù),并存儲(chǔ)到相應(yīng)地址的鐵電中,才能正常工作。參數(shù)設(shè)定流程主要由CAN報(bào)文參數(shù)設(shè)定流程和各通道輸出參數(shù)設(shè)定流程組成。
3.3.1 CAN報(bào)文參數(shù)設(shè)定
CAN報(bào)文參數(shù)設(shè)定主要由該裝置的心跳CAN報(bào)文輸出設(shè)定和各通道4~20 mA輸出參數(shù)設(shè)定組成。裝置周期性地發(fā)送CAN報(bào)文信號(hào),向CAN現(xiàn)場總線網(wǎng)絡(luò)中的其他節(jié)點(diǎn)通告本節(jié)點(diǎn)的狀態(tài)。定義CAN報(bào)文結(jié)構(gòu)體CanFrame,包括CAN報(bào)文的ID(Identity Document)號(hào)、類型、格式、長度、數(shù)據(jù)字節(jié)數(shù)組和發(fā)送周期。CAN報(bào)文參數(shù)設(shè)定流程見圖5。
1)判斷讀到的CAN報(bào)文是否符合該CAN報(bào)文參數(shù)設(shè)定協(xié)議的要求,若不符合,跳轉(zhuǎn)到步驟11);否則跳轉(zhuǎn)到步驟2);
2)參照制訂的CAN報(bào)文參數(shù)設(shè)定協(xié)議,判斷是心跳CAN報(bào)文輸出設(shè)定,還是各通道輸出4~20 mA參數(shù)設(shè)定,由此初始化鐵電的首地址,跳轉(zhuǎn)到步驟3);
3)判斷命令字是否為寫命令字,若是,則跳轉(zhuǎn)到步驟4),否則跳轉(zhuǎn)到步驟7);
4)參照制訂的CAN報(bào)文參數(shù)設(shè)定協(xié)議解析CAN報(bào)文,判斷CAN報(bào)文是否符合設(shè)定的CAN報(bào)文的ID號(hào)、類型、格式、長度、數(shù)據(jù)字節(jié)數(shù)組和發(fā)送周期中的一種,將寫鐵電的地址與相應(yīng)類型的偏移量相加,跳轉(zhuǎn)到步驟5);
5)將解析到的CAN報(bào)文參數(shù)寫入鐵電相應(yīng)的地址中,跳轉(zhuǎn)到步驟6);
6)返回寫CAN報(bào)文參數(shù)設(shè)定的狀態(tài)值,跳轉(zhuǎn)到步驟7);
7)判斷命令字是否為讀命令字,若是,則跳轉(zhuǎn)到步驟8),否則跳轉(zhuǎn)到步驟11);
8)參照制訂的CAN報(bào)文參數(shù)設(shè)定協(xié)議對(duì)CAN報(bào)文進(jìn)行解析,判斷解析的CAN報(bào)文為設(shè)定CAN報(bào)文的ID號(hào)、類型、格式、長度、數(shù)據(jù)字節(jié)數(shù)組和發(fā)送周期中的哪一種,將讀鐵電的地址與相應(yīng)類型的偏移量相加,跳轉(zhuǎn)到步驟9);
9)從鐵電的相應(yīng)地址中讀取所需內(nèi)容,跳轉(zhuǎn)到步驟10);
10)返回讀CAN報(bào)文參數(shù)設(shè)定的狀態(tài)值,跳轉(zhuǎn)到步驟11);
11)CAN報(bào)文參數(shù)設(shè)定過程結(jié)束,進(jìn)入創(chuàng)建任務(wù)過程。
圖5 參數(shù)設(shè)定流程
3.3.2 各通道輸出參數(shù)設(shè)定
通道輸出參數(shù)設(shè)定流程與CAN報(bào)文參數(shù)設(shè)定流程基本上一致,各通道參數(shù)都是可配置的,具體可參照CAN報(bào)文參數(shù)設(shè)定流程。定義通道輸出參數(shù)結(jié)構(gòu)體AoParam,其變量及說明見表1,假設(shè)定義通道1的結(jié)構(gòu)體變量為AO1,其所有變量都需通過CAN報(bào)文配置,配置完成之后通道1才能正常工作。AO1.revCan為通道1設(shè)定的接收的自定義CAN報(bào)文;AO1.inVal為通道1接收的初始值。
表1 結(jié)構(gòu)體AoParam解析
圖6 數(shù)據(jù)處理任務(wù)流程
按通道輸出參數(shù)設(shè)定的協(xié)議要求,通道接收的輸入數(shù)值上下限和輸出數(shù)值上下限已確定,在已知通道接收的初始值的情況下,可根據(jù)線性關(guān)系計(jì)算出該通道初始值轉(zhuǎn)換之后的4~20 mA輸出值,計(jì)算式為
outVal=send[0]+(inVal-rev[0])×(send[1]-
send[0])/(rev[1]-rev[0])
(1)
式(1)中:rev[0]≤inVal≤rev[1];send[0]≤outVal≤send[1];rev[0] 通過式(1)可得出通道1接收到的初始值轉(zhuǎn)換之后的輸出值A(chǔ)O1.outVal。先將AO1.outVal轉(zhuǎn)換為MAX5306相應(yīng)的寄存器值A(chǔ)O1.regVal,再將AO1.regVal寫入MAX5306,即可輸出相應(yīng)的4~20 mA值,依照此步驟可完成其他通道的4~20 mA值的輸出。 數(shù)據(jù)處理任務(wù)流程見圖6,該任務(wù)主要是接收通道設(shè)定的相應(yīng)CAN報(bào)文并輸出相應(yīng)的4~20 mA值。首先,判斷CAN報(bào)文接收緩沖區(qū)是否有CAN報(bào)文:若沒有CAN報(bào)文,則通知Schedule OS 1 Ticks,調(diào)度器等待10 ms結(jié)束該任務(wù);若有CAN報(bào)文,則根據(jù)通道判斷該報(bào)文是否是該通道設(shè)定的CAN報(bào)文。若該報(bào)文不是該通道設(shè)定的CAN報(bào)文,則依次判斷是否是下一通道設(shè)定的CAN報(bào)文參數(shù),當(dāng)i≥8時(shí),通知Schedule OS 1 Ticks,調(diào)度器等待10 ms結(jié)束該任務(wù);若該報(bào)文是該通道設(shè)定的CAN報(bào)文,則按該通道的參數(shù)設(shè)定流程讀取CAN報(bào)文中該通道相應(yīng)的通道值。其次,將讀取的通道值轉(zhuǎn)換為相應(yīng)的MAX5306通道輸出值。最后,將通道輸出值寫入MAX5306中,輸出相應(yīng)通道的4~20 mA驅(qū)動(dòng)儀表。按上述過程依次判斷下一通道,不再贅述。 將該4~20 mA電流輸出裝置應(yīng)用到某主動(dòng)力系統(tǒng)中,使用周立功USBCAN-II模塊配合CANTest軟件向該裝置發(fā)送各通道的輸入CAN報(bào)文,同時(shí)使用萬用表電流檔測量各通道的電流輸出值,試驗(yàn)數(shù)據(jù)統(tǒng)計(jì)見表2。 表2 試驗(yàn)數(shù)據(jù)統(tǒng)計(jì) 由表2可知,誤差幾乎無差異,符合該裝置的設(shè)計(jì)要求。試驗(yàn)結(jié)果表明,該裝置的輸出電流誤差小于0.1 mA,輸入與輸出多樣化,且二者呈線性關(guān)系,配置靈活方便,可滿足實(shí)際應(yīng)用需求。 本文以CAN現(xiàn)場總線為基礎(chǔ),以國產(chǎn)芯片GD32F407為主控芯片,外設(shè)配合數(shù)模轉(zhuǎn)換器MAX5306,設(shè)計(jì)實(shí)現(xiàn)了一種輸入CAN報(bào)文、輸出4~20 mA均可現(xiàn)場配置的電流輸出裝置。該裝置測量精度高,測量誤差小,運(yùn)行穩(wěn)定可靠,抗干擾能力強(qiáng),誤差在0.1 mA以內(nèi),能滿足各類對(duì)儀表控制要求較高的船舶應(yīng)用場景的需求。該裝置的設(shè)計(jì)方案做到了軟件程序固化,后續(xù)開發(fā)無需重新編寫軟件程序,能大大縮短開發(fā)周期,可供后續(xù)船舶自動(dòng)化系統(tǒng)國產(chǎn)化相關(guān)裝置的開發(fā)和改進(jìn)參考。3.4 數(shù)據(jù)處理任務(wù)
4 試驗(yàn)數(shù)據(jù)結(jié)果分析
5 結(jié) 語