鄭杰1,,趙敬鳳1,王海江1,,李驚濤2,,歐陽(yáng)昱2,王峰2,,黃旭東1
?。?.安徽漢高電力科技有限公司,安徽 合肥 231202,;2.安徽省電力公司,,安徽 合肥 230022)
摘要:研制了一種基于STM32的多功能抄表機(jī),集成了多種信息采集模塊以及GPS/GPRS二合一模塊SIM908,,含有多種通信接口和大容量存儲(chǔ)空間,,利用IAP技術(shù)實(shí)現(xiàn)多應(yīng)用加載并設(shè)計(jì)了二次開(kāi)發(fā)平臺(tái)。該多功能抄表機(jī)具備成本低,、擴(kuò)展性好,、信息采集全面等特點(diǎn),滿足物聯(lián)網(wǎng)抄表需求,。
關(guān)鍵詞:STM32,;抄表機(jī);IAP,;SIM908
0引言
物聯(lián)網(wǎng)技術(shù)[1]的應(yīng)用使得各行各業(yè)的信息化水平越來(lái)越高,,尤其是在電力、供水,、供氣等領(lǐng)域,,自動(dòng)化抄表[2]正在大力推進(jìn)。隨著用戶對(duì)服務(wù)質(zhì)量要求的不斷提高,,對(duì)人工現(xiàn)場(chǎng)信息采集要求越來(lái)越高,,除了對(duì)用戶用量信息按時(shí)采集外,還要對(duì)使用現(xiàn)場(chǎng)環(huán)境和現(xiàn)場(chǎng)設(shè)備信息進(jìn)行采集,。比如在電力行業(yè),,除了對(duì)電表用電量信息進(jìn)行讀取外,還要求能夠采集電表資產(chǎn)條碼信息,、設(shè)備的經(jīng)緯度等信息,,同時(shí)對(duì)現(xiàn)場(chǎng)人員的移動(dòng)軌跡進(jìn)行定位和記錄,,便于管理。
由于行業(yè)抄表機(jī)的使用量比較大,,對(duì)抄表機(jī)的成本要求嚴(yán)格,,同時(shí)對(duì)抄表機(jī)的功能要求更多更全。這給抄表機(jī)的開(kāi)發(fā)帶來(lái)了挑戰(zhàn),。本文基于新型低成本低功耗的STM32處理器開(kāi)發(fā)了一種多功能抄表機(jī),,利用IAP技術(shù)[3]實(shí)現(xiàn)多應(yīng)用加載并設(shè)計(jì)了二次開(kāi)發(fā)平臺(tái),。抄表機(jī)集成了多種信息采集模塊以及GPS/GPRS二合一模塊SIM908[4],,含有多種通信接口和大容量存儲(chǔ)空間,具備成本低,、擴(kuò)展性好,、信息采集全面等特點(diǎn),還能實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)下載和上報(bào),,使得現(xiàn)場(chǎng)抄表成本大幅度下降,,提高了工作效率。
1技術(shù)原理
與其他儀表設(shè)備不同,,抄表機(jī)要具備靈活的二次開(kāi)發(fā)功能,,支持加載運(yùn)行不同的應(yīng)用程序。為了實(shí)現(xiàn)這個(gè)功能,,傳統(tǒng)的抄表機(jī)[5]開(kāi)發(fā)基于嵌入式操作系統(tǒng)如Linux[6]或WinCE[7],。操作系統(tǒng)的使用對(duì)CPU的性能要求高、對(duì)RAM和ROM等存儲(chǔ)空間要求大,,使得抄表機(jī)的總體成本上升,,運(yùn)行嵌入式操作系統(tǒng)的抄表機(jī)還存在開(kāi)機(jī)啟動(dòng)慢、界面操作復(fù)雜,、功耗過(guò)大等不足,,對(duì)于行業(yè)抄表這類應(yīng)用場(chǎng)合并非最佳選擇。利用低成本的微控制器開(kāi)發(fā)行業(yè)抄表機(jī)是最適合的,。
在應(yīng)用編程(InApplication Programming,,IAP)技術(shù)是應(yīng)用在Flash程序存儲(chǔ)器的一種編程模式。它可以在應(yīng)用程序正常運(yùn)行的情況下,,通過(guò)調(diào)用特定的IAP程序?qū)α硗庖欢纬绦騀lash空間進(jìn)行讀/寫(xiě)操作,,甚至可以控制對(duì)某段、某頁(yè),、某個(gè)字節(jié)的讀/寫(xiě)操作,,這為數(shù)據(jù)存儲(chǔ)和固件的現(xiàn)場(chǎng)升級(jí)帶來(lái)了更大的靈活性。目前大多數(shù)閃存式微控器都支持IAP功能,。
對(duì)于STM32這樣內(nèi)含F(xiàn)lash程序存儲(chǔ)器的低成本處理器,,IAP技術(shù)原本用來(lái)進(jìn)行軟件升級(jí)使用,。本文巧妙地利用IAP技術(shù),將原本的升級(jí)操作變成不同的應(yīng)用加載操作,,實(shí)現(xiàn)支持多應(yīng)用的功能,。利用IAP技術(shù),將內(nèi)部Flash程序存儲(chǔ)器分為兩部分,,低地址部分是主控臺(tái)程序區(qū),,高地址部分是應(yīng)用程序區(qū),如圖1所示,。
主控臺(tái)程序區(qū)只運(yùn)行固定的主控臺(tái)程序,,負(fù)責(zé)系統(tǒng)設(shè)置、應(yīng)用程序加載,、文件管理等基礎(chǔ)功能,。應(yīng)用程序區(qū)存儲(chǔ)并運(yùn)行由主控臺(tái)由SD卡中加載進(jìn)來(lái)的應(yīng)用程序。用戶在主控臺(tái)界面里可以選擇需要執(zhí)行的那個(gè)應(yīng)用,,主控臺(tái)負(fù)責(zé)加載并跳轉(zhuǎn)運(yùn)行,。應(yīng)用程序返回或退出后執(zhí)行復(fù)位再次回到主控臺(tái)程序。
2硬件設(shè)計(jì)
本文采用STM32F103ZET6作為控制單元,,STM32系列單片機(jī)基于ARM Cortex-M內(nèi)核[8],,專為要求高性能、低成本,、低功耗的嵌入式應(yīng)用設(shè)計(jì),,外設(shè)非常豐富。STM32F103ZET6屬于STM32增強(qiáng)型系列產(chǎn)品,,時(shí)鐘頻率達(dá)到72 MHz,,內(nèi)置64 KB SRAM和512 KB Flash,擁有多個(gè)定時(shí)器,、3個(gè)SPI/I2S,、2個(gè)I2C、5個(gè) 串口以及USB 2.0接口,,還有多個(gè)AD,、DA轉(zhuǎn)換器。
2.1硬件構(gòu)成
如圖2所示,,抄表機(jī)由STM32處理器和多種外設(shè)構(gòu)成,,包含:通過(guò)FSMC接口連接的分辨率為240×320的LCD顯示屏(并通過(guò)PWM調(diào)節(jié)LCD亮度),鋰電池供電單元,,由GPIO直接驅(qū)動(dòng)的31個(gè)物理按鍵和2個(gè)LED指示燈,,通過(guò)PWM方式驅(qū)動(dòng)的可以發(fā)出多種不同的聲音的無(wú)源蜂鳴器,分別由5個(gè)串口連接的RS232,、紅外收發(fā)模塊,、RS485,、電流環(huán)接口、條碼掃描模塊,、SIM908模塊,;通過(guò)STM32的SPI接口連接了W25Q16和SD卡,通過(guò)USB與上位機(jī)通信,;還采用了高精度的RTC芯片DS3231SN,,通過(guò)IC接口與STM32連接,配備了紐扣電池,。
2.2基于FSMC的LCD驅(qū)動(dòng)電路
可變靜態(tài)存儲(chǔ)控制器(Flexible Static Memory Controller,,F(xiàn)SMC)是STM32采用的一種新型的存儲(chǔ)器擴(kuò)展技術(shù)[9]。它在外部存儲(chǔ)器擴(kuò)展方面具有獨(dú)特的優(yōu)勢(shì),,可根據(jù)系統(tǒng)的應(yīng)用需要,,方便地進(jìn)行不同類型大容量靜態(tài)存儲(chǔ)器的擴(kuò)展,。STM32通過(guò)FSMC可以與SRAM,、ROM、PSRAM,、NOR Flash和NAND Flash存儲(chǔ)器的引腳直接相連,。本文利用FSMC對(duì)顯示屏的緩存進(jìn)行高速寫(xiě)操作,實(shí)現(xiàn)了快速顯示功能,。FSMC設(shè)置為NORSRAM操作模式,,使用該模式下Bank1的Sector4,用地址線A10作為數(shù)據(jù)命令區(qū)分線與LCD的RS腳連接,,16位數(shù)據(jù)線與LCD模塊的數(shù)據(jù)線連接,,剩余幾條重要的連線分別是FSMC_NE4連CS、FSMC_NWE連/WR,、FSMC_NOE連/RD,。
2.3按鍵、LED與蜂鳴器設(shè)計(jì)
抄表機(jī)一共有31個(gè)按鍵,,如圖3所示,。除了條碼掃描鍵、電源鍵和復(fù)位鍵,,采用了矩陣鍵盤(pán)電路設(shè)計(jì),,節(jié)約引腳。按鍵設(shè)計(jì)充分考慮到應(yīng)用需要,,支持漢字輸入和特殊符號(hào)輸入,,專門(mén)設(shè)計(jì)的復(fù)位鍵用于應(yīng)用程序死機(jī)后復(fù)位系統(tǒng)。F1~F4為用戶自定義功能鍵,??旖萱I也可以用戶自定義使用,。
2個(gè)LED分別代表充電狀態(tài),、工作狀態(tài),。蜂鳴器采用無(wú)源驅(qū)動(dòng)方式,通過(guò)STM32定時(shí)器產(chǎn)生PWM波形驅(qū)動(dòng)發(fā)聲,。通過(guò)改變PWM波形頻率,,可以發(fā)出不同音調(diào)的聲音,再通過(guò)程序進(jìn)行組合,,使得不同的事件有不同的聲音提示,,增強(qiáng)用戶使用體驗(yàn)。
2.4SIM908模塊電路設(shè)計(jì)
SIM908 是一款集成GPS導(dǎo)航技術(shù)的四頻GSM/GPRS模塊,。緊湊的模塊尺寸并將GPRS和GPS整合在SMT封裝里,,為實(shí)現(xiàn)內(nèi)嵌GPS的應(yīng)用節(jié)省了開(kāi)發(fā)時(shí)間和費(fèi)用。SIM908模塊上自帶GPS和GPRS天線連接器,,可以直接與陶瓷天線連接,,不用考慮射頻PCB走線問(wèn)題。本文采用UART5與SIM908模塊通信,,通過(guò)AT命令交互信息進(jìn)行GPRS通信和GPS定位信息獲取,。比如使用"AT+CGPSPWR=1"命令打開(kāi)GPS電源后,用"AT+CGPSPWR=1"命令進(jìn)行復(fù)位,,然后使用"AT+CGPSINF=32"獲取GPS定位信息,。
SIM908的電源直接由鋰電池提供,STM32通過(guò)P-MOS管SI2301來(lái)控制供電,。
2.5外設(shè)和接口
針對(duì)現(xiàn)場(chǎng)表計(jì)的通信接口,,本文研制的抄表機(jī)包含了紅外、RS232,、RS485和電流環(huán)接口,。紅外通信采用38 kHz的標(biāo)準(zhǔn)載波調(diào)制。通過(guò)MAX3232CSE芯片將USART1擴(kuò)展為RS232接口,。通過(guò)SP3485EEN芯片將USART3擴(kuò)展為RS485接口,,同時(shí)設(shè)計(jì)了電流環(huán)接口。UART4接條碼掃描模塊,,支持安裝一維或二維掃描模塊,。通過(guò)USB接口將抄表機(jī)驅(qū)動(dòng)在PC上虛擬成一個(gè)串口設(shè)備,進(jìn)行數(shù)據(jù)上下裝,,同時(shí)通過(guò)USB接口為鋰電池充電,。
2.6電池充電及電源設(shè)計(jì)
抄表機(jī)采用了充電電流最高1 A的線性鋰電池充電芯片TP4056對(duì)2 000 mAh鋰電池進(jìn)行充電管理。通過(guò)STM32的ADC對(duì)電池電壓進(jìn)行采集,當(dāng)電壓低于3.7 V時(shí),,用蜂鳴器進(jìn)行提示并啟動(dòng)關(guān)機(jī)倒計(jì)時(shí),。
本文采用了低壓差、低成本的LDO低壓差線性穩(wěn)壓芯片RT9013-33為系統(tǒng)提供3.3V電源,,它非常適合用于鋰電池供電的應(yīng)用場(chǎng)合,,通過(guò)EN引腳可以很方便地實(shí)現(xiàn)軟件自動(dòng)關(guān)機(jī)和按鍵開(kāi)關(guān)機(jī)功能,
3軟件設(shè)計(jì)
抄表機(jī)的軟件設(shè)計(jì)工作包括:基本驅(qū)動(dòng),、文件系統(tǒng)設(shè)計(jì),、主控臺(tái)功能設(shè)計(jì)、API接口設(shè)計(jì),。
3.1基本驅(qū)動(dòng)
基本驅(qū)動(dòng)主要包含一系列設(shè)備初始化以及讀寫(xiě)操作,,如時(shí)鐘初始化、定時(shí)器初始化,、串口初始化,、GPIO初始化配置(蜂鳴器、按鍵,、LED,、控制線)、FSMC 初始化及配置,、ADC初始化配置,、IIC/SPI接口初始化,、LCD模塊初始化,、SD卡文件系統(tǒng)初始化。STM32提供了豐富的硬件開(kāi)發(fā)庫(kù),,用戶可以方便地對(duì)片內(nèi)外設(shè)進(jìn)行編程,。
3.2文件系統(tǒng)
本文采用了FatFs文件系統(tǒng)[10]來(lái)對(duì)SD卡進(jìn)行文件讀寫(xiě)。它是一個(gè)通用的文件系統(tǒng)模塊,,用于在小型嵌入式系統(tǒng)中實(shí)現(xiàn)FAT文件系統(tǒng),。FatFs的編寫(xiě)遵循ANSI C,不依賴于硬件平臺(tái),??梢院苋菀椎匾浦驳礁鞣N單片機(jī)平臺(tái)。FatFs文件系統(tǒng)支持fat16,、fat32,,包含ff.h、diskio.h,、integer.h,、ffconf.h 4個(gè)頭文件以及ff.c 文件系統(tǒng)實(shí)現(xiàn)。要實(shí)現(xiàn)具體的應(yīng)用移植,主要工作是根據(jù)diskio.h實(shí)現(xiàn)其diskio.c 底層驅(qū)動(dòng),,包含如下功能函數(shù):disk_initialize 初始化磁盤(pán)驅(qū)動(dòng)器,;disk_status 獲取磁盤(pán)狀態(tài);disk_read 讀扇區(qū),;disk_write 寫(xiě)扇區(qū),;disk_ioctl 設(shè)備相關(guān)的控制特性;get_fattime 獲取當(dāng)前時(shí)間,。
3.3主控臺(tái)功能設(shè)計(jì)
主控臺(tái)程序負(fù)責(zé)系統(tǒng)設(shè)置,、應(yīng)用程序加載、文件管理等基礎(chǔ)功能,。主控臺(tái)的流程如下,。
如圖4所示,系統(tǒng)開(kāi)機(jī)后首先進(jìn)行設(shè)備初始化,,然后進(jìn)入主菜單,,顯示主菜單,根據(jù)用戶選擇跳入各功能模塊,。功能模塊的顯示和操作方法與主菜單一樣,,阻塞方式檢測(cè)到按鍵后進(jìn)行不同處理,通過(guò)返回鍵可以回到上級(jí)菜單,。通過(guò)運(yùn)行應(yīng)用模塊將直接跳轉(zhuǎn)到應(yīng)用程序區(qū)運(yùn)行已經(jīng)加載的應(yīng)用,,省去加載時(shí)間。而應(yīng)用選擇模塊通過(guò)文件系統(tǒng)接口將SD卡中的應(yīng)用文件羅列出來(lái),,用戶選定某一個(gè)后,,將程序文件從SD卡中寫(xiě)入到STM32的內(nèi)部Flash的應(yīng)用程序區(qū),并跳轉(zhuǎn)執(zhí)行,。在菜單界面運(yùn)行中,,后臺(tái)會(huì)執(zhí)行3種中斷處理:定時(shí)任務(wù)、串口接收,、USB驅(qū)動(dòng)處理,。定時(shí)任務(wù)主要負(fù)責(zé)周期性的電量檢測(cè)和狀態(tài)條刷新,以及記錄閑置時(shí)間執(zhí)行關(guān)機(jī),。
3.4API接口設(shè)計(jì)
為了便于用戶二次開(kāi)發(fā),,本文設(shè)計(jì)了一系列的API接口,幫助用戶快速開(kāi)發(fā)應(yīng)用程序,。主要包括:(1) LCD顯示相關(guān)函數(shù),,如繪圖、文字顯示,;(2)按鍵獲??;(3)文件系統(tǒng)接口;(4) 多功能輸入法接口,;(5)時(shí)間獲?。唬?)定時(shí)器,;(7)條碼掃描接口,;(8)紅外/RS485/RS232收發(fā)接口;(9)USB通信接口及通信協(xié)議,;(10) SIM908通信接口,;(11)對(duì)話框接口;(12)簡(jiǎn)單圖形界面控件,。
4應(yīng)用開(kāi)發(fā)平臺(tái)設(shè)計(jì)
由于用戶二次開(kāi)發(fā)的應(yīng)用要在應(yīng)用程序區(qū)運(yùn)行,,需要在編譯時(shí)對(duì)中斷向量表的地址進(jìn)行偏移,同時(shí)要對(duì)程序起始地址進(jìn)行設(shè)置,。為了便于用戶快速開(kāi)發(fā),,本文設(shè)計(jì)了專用的IDE開(kāi)發(fā)平臺(tái),將API接口庫(kù)和ARM編譯庫(kù)集成到一起,,同時(shí)配置好中斷向量表和起始地址以及其他配置和編譯選項(xiàng),,用戶只需關(guān)注應(yīng)用程序開(kāi)發(fā)。平臺(tái)還集成了USB通信協(xié)議,,可以直接將程序下載到抄表機(jī)中并運(yùn)行,。
5結(jié)論
本文設(shè)計(jì)的多功能抄表機(jī)具備成本低、擴(kuò)展性好,、信息采集全面等特點(diǎn),,提升現(xiàn)場(chǎng)抄表作業(yè)的工作效率和信息化管理水平。這種抄表機(jī)目前已經(jīng)在安徽和江蘇的電力系統(tǒng)中廣泛使用,。參考文獻(xiàn)
?。?] 王保云. 物聯(lián)網(wǎng)技術(shù)研究綜述[J]. 電子測(cè)量與儀器學(xué)報(bào), 2009, 23(12):17.
[2] 曾維, 富饒. 基于電力載波的遠(yuǎn)程抄表電能表的設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2013, 32(16):8789.
?。?] 李婉婉, 李宏. 單片機(jī)IAP升級(jí)方法在血液分析儀中的應(yīng)用[J].微型機(jī)與應(yīng)用, 2014, 33(21):1618.
[4] 郭堅(jiān). 基于SIM908的無(wú)人機(jī)空氣質(zhì)量監(jiān)測(cè)系統(tǒng)設(shè)計(jì)與研究[D]. 天津:天津大學(xué), 2013.
?。?] 夏丹. 手持PDA抄表終端系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 武漢:華中科技大學(xué), 2007.
?。?] 陳立定, 呂盛林. 嵌入式Linux監(jiān)控終端的多進(jìn)程控制[J]. 自動(dòng)化儀表, 2011,32(1):1315.
[7] 羅健飛, 吳仲城, 沈春山,等. 基于ARM和WinCE下的設(shè)備接口驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 自動(dòng)化與儀表, 2009,,24(3):13.
?。?] 任順航, 呂鵬鵬, 王立鵬,等. 基于STM32的電能手抄系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用, 2014, 40(1):7578.
[9] 潘輝. STM32FSMC機(jī)制的NORFlash存儲(chǔ)器擴(kuò)展技術(shù)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2009(10):3134.
?。?0] 李世奇, 董浩斌, 李榮生. 基于FatFs文件系統(tǒng)的SD卡存儲(chǔ)器設(shè)計(jì)[J]. 測(cè)控技術(shù), 2011,30(12):7981.