周智勇,葉慶紅,王超群
(上海航天能源股份有限公司,上海, 201112)
Real Time-Thread (RT-Thread)是一種國產的包括線程管理、調度管理、中斷管理和系統時鐘管理的實時操作系統,廣泛被學者引用學習[1~3]。文獻[4]采用功能分離機制,在STM32L431上實現RT-Thread的移植并將可執行二進制程序和用戶程序分開下載到閃存。文獻[5]基于實時多線程系統,設計一種水下潛航器,并進行通信測試,實現了RT-Thread操作系統的驅動移植和調試運行。在文獻[6]中,將Cortex-M3內核與特定的變換加速模塊相結合,設計可用于數字信號預處理的專用處理器,簡單高效。在文獻[7]中,設計了物聯網多傳感器數據采集系統,有效地實現了災害的預警處理。然而聚焦于嵌入式實時操作系統與MCU及其外圍電路功能實現的文獻卻很少出現。
文章探討物聯網儀表板載PCB嵌入式MCU及其外圍電路的設計和功能驗證。行文思路首先是對外圍電路及功能驗證所用到的部分軟、硬件作簡要介紹(如表1所示);其次是對燃氣儀表主控板MCU及其電源切換、74LS148編碼器等外圍電路的設計;最后使用檢測板對主控板設計的電路逐一進行功能驗證。本文的貢獻如下:
(1)電源切換設計可滿足主控板多元化供電需求、引入74LS148優先編碼器判斷傳感器或開關量的狀態、各功能狀態可在LCD顯示屏直觀展出,電流表可通過繼電器觸頭接入,用以判斷MCU在低功耗模式下主控板電源的功耗。
(2)對照圖17所示功能驗證流程,用檢測板對生產的儀表主控板功能進行檢測,功能異常可快速定位,提高生產效率。
系統的部分軟、硬件及其作用如表1所示。圖1為系統的硬件連接,圖2是圖1的抽象結構圖。主控板包含MCU及其外圍電路,燒錄有驗證程序的檢測板對主控板的電源控制、串口收發等功能進行驗證,轉接板用于傳感器及開關量的電平測試。

表1 系統軟、硬件

圖1 系統硬件連接

圖2 抽象結構圖
為滿足嵌入式燃氣儀表的供電電源需求,設計有市電經開關電源整流為直流5V或者電池3.6V供電。當繼電器觸頭K1、K2均向上撥時,此時儀表主控板由電池電源+3.6V供電;當繼電器觸頭K1向下撥、K2向上撥時,此時儀表主控板由外接電源+5V供電;當繼電器觸頭K1、K2均向下撥時,AMP_IN接入3.6V,AMP_OUT為低電平,接入電流表,用以判斷是否滿足低功耗要求。通過switch()語句設置GPIO_k1、GPIO_k2的高低電平來控制繼電器觸頭K1、K2的撥向。切換控制圖如3所示。


復位電路可使MCU回到初始狀態,若缺少復位電路可能使得MCU中RAM、FLASH、計數器、中斷等程序的錯亂[8~9]。圖4中,MCU采用低電位RC復位電路,開關S1按下時,RESET電位被拉低;松開時, RESET電位上升,實現復位。

圖4 MCU復位
對于FM33LG048MCU而言,芯片內包含32kHz低頻晶體振蕩電路、最高36MHz高頻振蕩器、32kHz低功耗內部環振、512kHz低頻環振和一個鎖相環。調試時,內部晶振設置為12MHz,接入到MCU的晶振電路如圖5所示。

圖5 晶振電路
程序燒錄時選擇J-LINK調試器,與MCU接口連接電路如圖6所示。

圖6 下載電路
ADC,即將模擬量轉變為數字量,分為采樣、量化、編碼等過程[10~11]。由于該MCU內部集成了AD轉換模塊,所以只需要在MCU的輸入模擬量引腳進行采樣,然后在需要的數字量輸出設置測試點即可。本文需要進行ADC轉換的引腳有ADC_MCU、ADC_VDD_4G、ADC_SENSOR6、ADC_SENSOR5、ADC_SENSOR4、ADC_SENSOR3、ADC_SENSOR2、ADC_SENSOR1,轉換電路如圖7所示(給出了ADC_SENSOR1,剩余傳感器的轉換同理)。

圖7 MCU的外部ADC轉換電路圖
UART,用于串口異步收發,是系統中各電路模塊通訊的“橋梁”[12]。UART有8種工作方式,如表2所示。為簡單起見,本文UART配置為工作方式0,波特為115200。

表2 UART工作方式
圖8為兩路UART交互示意圖,由圖可知,若要實現主從UART的串口通信,必須滿足:

圖8 UART之間的交互
(1) 主機端(儀表的MCU)通過UART1發送的指令從機端(串口指令接收端)要能夠接收到,并且從機端能對接收到的指令做出反饋,通過UART2發送反饋指令;
(2) 主機端能夠接收到從機端發來的反饋指令,以確保主機、從機端的發送和接收均為正常。
圖9為MCU與LCD的連接示意圖,LCD顯示使用I2C協議,要使顯示屏正常顯示,片選端CS需置為低電平[13]。

圖9 LCD顯示電路
讀數據時,字符有可能是中文或其他ASCII碼支持的形式。若存在中文時,首先應將可能需要展示的中文字體庫列出,以便顯示屏顯示不出現亂碼。需要注意的是,顯示屏所支持的最大行數為4,當顯示行數大于4時,需要考慮翻頁,具體為:
(1) 需要展示的行數為m,每頁支持的最大行數為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 顯示屏翻頁
工業用燃氣儀表的工作環境在室外,需要眾多傳感器采集不同的參數。該儀表含有用六個傳感器接口(三個用于采集壓力、溫度、流量等,其余均為備用接口),并使用3片74LS148判斷傳感器IO接口及信號量的狀態。為便于對傳感器的檢測,將傳感器的引腳轉接到外部轉接板。在圖11中,A0、A1、A2為編碼器的輸出端(低電平有效),管腳0~7為編碼器的輸入端(低電平有效),EI端低電平有效。根據編碼器真值表,傳感器及開關量狀態判斷方法如下:

圖11 第一片74LS148編碼器電路
(1)首先將傳感器數字量輸入端引腳的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端全為高電平時,則可判斷為開關量異常。
本部分用檢測板對MCU外圍電路進行功能驗證,具體為:
(1) 檢測主控板是否安裝到工裝上;
(2) 電源切換為3.6V,檢測ADC_MCU的3.3V工作電壓,如果異常將不再進行后續步驟,如圖12所示;

圖12 MCU電源檢測
(3) 檢測通訊串口功能,由檢測板發送字符串“test uart”,與主控板發送內容是否一致進行對比,等待主控板返回信息“uart ok”,超時時間為2s。否則返回“uart error”,停止檢測后續步驟,如圖13所示;

圖13 串口通訊檢測
(4) 檢測LCD顯示功能,由檢測板發送字符串“test display”,用外層for循環遍歷顯示屏要顯示的行數,執行寫命令;內層for循環遍歷顯示屏要顯示的列數,執行寫數據,在執行到的行、列地址處是否打印黑點,如果是返回“display ok”,超時時間為2s。否則返回“display error”,停止檢測后續步驟,圖10為正常顯示需要打印的黑點;
(5) 檢測板發送指令“test flash”,主控板接收到指令后開始對外部flash進行檢測。燒錄特定數據并讀取,若燒錄的數據與讀取的數據一致,則外部flash正常,返回“flash ok”,超時時間為2s。否則返回“flash error”,停止檢測后續步驟,如圖14所示;

圖14 flash檢測
(6) 傳感器IO口檢測,檢測板發送指令“test sensor”,先檢測傳感器的所有引腳是不是低電平,如果是返回“sensor ok”,并根據真值表在顯示屏顯示相應傳感器狀態,超時時間為2s。否則返回“sensor error”,停止檢測后續步驟,如圖10所示;
(7) 低功耗檢測,調用power_switch()使圖3中的K1、K2均向下撥。主控板發送指令“test low_power”,MCU進入休眠狀態之前發送反饋“in sleep”,切換到電流表等待穩定后,根據正確報文格式讀取電流信息。由表3及圖15可知,電源AMP_IN流經的電流為9微安(數據區),功耗P=(3.6V)×(9μA)=32.4μW,滿足低功耗(要求100μW以內),發送反饋“low_power ok”,否則發送反饋“low_power error”,檢測結束,如圖16所示。(1)~ (7)驗證流程如圖17所示。

圖3 切換控制圖

圖15 報文信息

圖17 功能驗證流程圖

表3 從設備在緩存中正確報文格式

圖16 低功耗檢測
本文以FM33LG048MCU為例,介紹了物聯網儀表板載PCB的MCU及其電源切換、74LS148編碼器等外圍電路。在Keil μVision5開發環境下,用檢測板對主控板串口、LCD顯示、flash、傳感器I/O、低功耗各功能模塊進行驗證,且均為ok狀態。主控板在低功耗工作模式下的功耗為32.4μW,小于百微瓦的最大功耗。生產過程中,按圖17驗證流程,如出現異常可在LCD中快速定位,為嵌入式燃氣儀表的生產與檢測提供依據。