周智勇,葉慶紅,王超群
(上海航天能源股份有限公司,上海, 201112)
Real Time-Thread (RT-Thread)是一種國產(chǎn)的包括線程管理、調(diào)度管理、中斷管理和系統(tǒng)時鐘管理的實時操作系統(tǒng),廣泛被學(xué)者引用學(xué)習(xí)[1~3]。文獻[4]采用功能分離機制,在STM32L431上實現(xiàn)RT-Thread的移植并將可執(zhí)行二進制程序和用戶程序分開下載到閃存。文獻[5]基于實時多線程系統(tǒng),設(shè)計一種水下潛航器,并進行通信測試,實現(xiàn)了RT-Thread操作系統(tǒng)的驅(qū)動移植和調(diào)試運行。在文獻[6]中,將Cortex-M3內(nèi)核與特定的變換加速模塊相結(jié)合,設(shè)計可用于數(shù)字信號預(yù)處理的專用處理器,簡單高效。在文獻[7]中,設(shè)計了物聯(lián)網(wǎng)多傳感器數(shù)據(jù)采集系統(tǒng),有效地實現(xiàn)了災(zāi)害的預(yù)警處理。然而聚焦于嵌入式實時操作系統(tǒng)與MCU及其外圍電路功能實現(xiàn)的文獻卻很少出現(xiàn)。
文章探討物聯(lián)網(wǎng)儀表板載PCB嵌入式MCU及其外圍電路的設(shè)計和功能驗證。行文思路首先是對外圍電路及功能驗證所用到的部分軟、硬件作簡要介紹(如表1所示);其次是對燃氣儀表主控板MCU及其電源切換、74LS148編碼器等外圍電路的設(shè)計;最后使用檢測板對主控板設(shè)計的電路逐一進行功能驗證。本文的貢獻如下:
(1)電源切換設(shè)計可滿足主控板多元化供電需求、引入74LS148優(yōu)先編碼器判斷傳感器或開關(guān)量的狀態(tài)、各功能狀態(tài)可在LCD顯示屏直觀展出,電流表可通過繼電器觸頭接入,用以判斷MCU在低功耗模式下主控板電源的功耗。
(2)對照圖17所示功能驗證流程,用檢測板對生產(chǎn)的儀表主控板功能進行檢測,功能異??煽焖俣ㄎ?,提高生產(chǎn)效率。
系統(tǒng)的部分軟、硬件及其作用如表1所示。圖1為系統(tǒng)的硬件連接,圖2是圖1的抽象結(jié)構(gòu)圖。主控板包含MCU及其外圍電路,燒錄有驗證程序的檢測板對主控板的電源控制、串口收發(fā)等功能進行驗證,轉(zhuǎn)接板用于傳感器及開關(guān)量的電平測試。
表1 系統(tǒng)軟、硬件
圖1 系統(tǒng)硬件連接
圖2 抽象結(jié)構(gòu)圖
為滿足嵌入式燃氣儀表的供電電源需求,設(shè)計有市電經(jīng)開關(guān)電源整流為直流5V或者電池3.6V供電。當(dāng)繼電器觸頭K1、K2均向上撥時,此時儀表主控板由電池電源+3.6V供電;當(dāng)繼電器觸頭K1向下?lián)堋2向上撥時,此時儀表主控板由外接電源+5V供電;當(dāng)繼電器觸頭K1、K2均向下?lián)軙r,AMP_IN接入3.6V,AMP_OUT為低電平,接入電流表,用以判斷是否滿足低功耗要求。通過switch()語句設(shè)置GPIO_k1、GPIO_k2的高低電平來控制繼電器觸頭K1、K2的撥向。切換控制圖如3所示。
復(fù)位電路可使MCU回到初始狀態(tài),若缺少復(fù)位電路可能使得MCU中RAM、FLASH、計數(shù)器、中斷等程序的錯亂[8~9]。圖4中,MCU采用低電位RC復(fù)位電路,開關(guān)S1按下時,RESET電位被拉低;松開時, RESET電位上升,實現(xiàn)復(fù)位。
圖4 MCU復(fù)位
對于FM33LG048MCU而言,芯片內(nèi)包含32kHz低頻晶體振蕩電路、最高36MHz高頻振蕩器、32kHz低功耗內(nèi)部環(huán)振、512kHz低頻環(huán)振和一個鎖相環(huán)。調(diào)試時,內(nèi)部晶振設(shè)置為12MHz,接入到MCU的晶振電路如圖5所示。
圖5 晶振電路
程序燒錄時選擇J-LINK調(diào)試器,與MCU接口連接電路如圖6所示。
圖6 下載電路
ADC,即將模擬量轉(zhuǎn)變?yōu)閿?shù)字量,分為采樣、量化、編碼等過程[10~11]。由于該MCU內(nèi)部集成了AD轉(zhuǎn)換模塊,所以只需要在MCU的輸入模擬量引腳進行采樣,然后在需要的數(shù)字量輸出設(shè)置測試點即可。本文需要進行ADC轉(zhuǎn)換的引腳有ADC_MCU、ADC_VDD_4G、ADC_SENSOR6、ADC_SENSOR5、ADC_SENSOR4、ADC_SENSOR3、ADC_SENSOR2、ADC_SENSOR1,轉(zhuǎn)換電路如圖7所示(給出了ADC_SENSOR1,剩余傳感器的轉(zhuǎn)換同理)。
圖7 MCU的外部ADC轉(zhuǎn)換電路圖
UART,用于串口異步收發(fā),是系統(tǒng)中各電路模塊通訊的“橋梁”[12]。UART有8種工作方式,如表2所示。為簡單起見,本文UART配置為工作方式0,波特為115200。
表2 UART工作方式
圖8為兩路UART交互示意圖,由圖可知,若要實現(xiàn)主從UART的串口通信,必須滿足:
圖8 UART之間的交互
(1) 主機端(儀表的MCU)通過UART1發(fā)送的指令從機端(串口指令接收端)要能夠接收到,并且從機端能對接收到的指令做出反饋,通過UART2發(fā)送反饋指令;
(2) 主機端能夠接收到從機端發(fā)來的反饋指令,以確保主機、從機端的發(fā)送和接收均為正常。
圖9為MCU與LCD的連接示意圖,LCD顯示使用I2C協(xié)議,要使顯示屏正常顯示,片選端CS需置為低電平[13]。
圖9 LCD顯示電路
讀數(shù)據(jù)時,字符有可能是中文或其他ASCII碼支持的形式。若存在中文時,首先應(yīng)將可能需要展示的中文字體庫列出,以便顯示屏顯示不出現(xiàn)亂碼。需要注意的是,顯示屏所支持的最大行數(shù)為4,當(dāng)顯示行數(shù)大于4時,需要考慮翻頁,具體為:
(1) 需要展示的行數(shù)為m,每頁支持的最大行數(shù)為n;若m <= n,則pages = 1,即用一頁就可展示;
(2) 若m > n,m%n == 0,則pages = m/n;
(3) 若m > n,(m%n) != 0,則pages = m/n + 1。
顯示屏的翻頁如圖10所示。
圖10 顯示屏翻頁
工業(yè)用燃氣儀表的工作環(huán)境在室外,需要眾多傳感器采集不同的參數(shù)。該儀表含有用六個傳感器接口(三個用于采集壓力、溫度、流量等,其余均為備用接口),并使用3片74LS148判斷傳感器IO接口及信號量的狀態(tài)。為便于對傳感器的檢測,將傳感器的引腳轉(zhuǎn)接到外部轉(zhuǎn)接板。在圖11中,A0、A1、A2為編碼器的輸出端(低電平有效),管腳0~7為編碼器的輸入端(低電平有效),EI端低電平有效。根據(jù)編碼器真值表,傳感器及開關(guān)量狀態(tài)判斷方法如下:
圖11 第一片74LS148編碼器電路
(1)首先將傳感器數(shù)字量輸入端引腳的GPIO引腳配置為輸出高電平模式;
(2)將編碼器的輸出端A0A1A2輸出全為高電平的情況下,再將傳感器各IO口配置為低電平,查看編碼功能是否完好;
(3)若三個編碼器的A0A1A2端均為低電平時,則傳感器的IO口正常;
(4)異常判斷:
在(2)和(3)的條件下,若三個編碼器中,有一個編碼器的A0A1A2端全為高電平時,則可判斷為傳感器1異常(100)或傳感器2異常(010)或傳感器3異常(001);
在(2)和(3)的條件下,若三個編碼器中,有兩個編碼器的A0A1A2端全為高電平時,則可判斷為傳感器4異常(110)或傳感器5異常(101)或傳感器6異常(011);
在(2)和(3)的條件下,若三個編碼器的A0A1A2端全為高電平時,則可判斷為開關(guān)量異常。
本部分用檢測板對MCU外圍電路進行功能驗證,具體為:
(1) 檢測主控板是否安裝到工裝上;
(2) 電源切換為3.6V,檢測ADC_MCU的3.3V工作電壓,如果異常將不再進行后續(xù)步驟,如圖12所示;
圖12 MCU電源檢測
(3) 檢測通訊串口功能,由檢測板發(fā)送字符串“test uart”,與主控板發(fā)送內(nèi)容是否一致進行對比,等待主控板返回信息“uart ok”,超時時間為2s。否則返回“uart error”,停止檢測后續(xù)步驟,如圖13所示;
圖13 串口通訊檢測
(4) 檢測LCD顯示功能,由檢測板發(fā)送字符串“test display”,用外層for循環(huán)遍歷顯示屏要顯示的行數(shù),執(zhí)行寫命令;內(nèi)層for循環(huán)遍歷顯示屏要顯示的列數(shù),執(zhí)行寫數(shù)據(jù),在執(zhí)行到的行、列地址處是否打印黑點,如果是返回“display ok”,超時時間為2s。否則返回“display error”,停止檢測后續(xù)步驟,圖10為正常顯示需要打印的黑點;
(5) 檢測板發(fā)送指令“test flash”,主控板接收到指令后開始對外部flash進行檢測。燒錄特定數(shù)據(jù)并讀取,若燒錄的數(shù)據(jù)與讀取的數(shù)據(jù)一致,則外部flash正常,返回“flash ok”,超時時間為2s。否則返回“flash error”,停止檢測后續(xù)步驟,如圖14所示;
圖14 flash檢測
(6) 傳感器IO口檢測,檢測板發(fā)送指令“test sensor”,先檢測傳感器的所有引腳是不是低電平,如果是返回“sensor ok”,并根據(jù)真值表在顯示屏顯示相應(yīng)傳感器狀態(tài),超時時間為2s。否則返回“sensor error”,停止檢測后續(xù)步驟,如圖10所示;
(7) 低功耗檢測,調(diào)用power_switch()使圖3中的K1、K2均向下?lián)?。主控板發(fā)送指令“test low_power”,MCU進入休眠狀態(tài)之前發(fā)送反饋“in sleep”,切換到電流表等待穩(wěn)定后,根據(jù)正確報文格式讀取電流信息。由表3及圖15可知,電源AMP_IN流經(jīng)的電流為9微安(數(shù)據(jù)區(qū)),功耗P=(3.6V)×(9μA)=32.4μW,滿足低功耗(要求100μW以內(nèi)),發(fā)送反饋“l(fā)ow_power ok”,否則發(fā)送反饋“l(fā)ow_power error”,檢測結(jié)束,如圖16所示。(1)~ (7)驗證流程如圖17所示。
圖3 切換控制圖
圖15 報文信息
圖17 功能驗證流程圖
表3 從設(shè)備在緩存中正確報文格式
圖16 低功耗檢測
本文以FM33LG048MCU為例,介紹了物聯(lián)網(wǎng)儀表板載PCB的MCU及其電源切換、74LS148編碼器等外圍電路。在Keil μVision5開發(fā)環(huán)境下,用檢測板對主控板串口、LCD顯示、flash、傳感器I/O、低功耗各功能模塊進行驗證,且均為ok狀態(tài)。主控板在低功耗工作模式下的功耗為32.4μW,小于百微瓦的最大功耗。生產(chǎn)過程中,按圖17驗證流程,如出現(xiàn)異??稍贚CD中快速定位,為嵌入式燃氣儀表的生產(chǎn)與檢測提供依據(jù)。