郑杰1,赵敬凤1,王海江1,李惊涛2,欧阳昱2,王峰2,黄旭东1
(1.安徽汉高电力科技有限公司,安徽 合肥 231202;2.安徽省电力公司,安徽 合肥 230022)
摘要:研制了一种基于STM32的多功能抄表机,集成了多种信息采集模块以及GPS/GPRS二合一模块SIM908,含有多种通信接口和大容量存储空间,利用IAP技术实现多应用加载并设计了二次开发平台。该多功能抄表机具备成本低、扩展性好、信息采集全面等特点,满足物联网抄表需求。
关键词:STM32;抄表机;IAP;SIM908
0引言
物联网技术[1]的应用使得各行各业的信息化水平越来越高,尤其是在电力、供水、供气等领域,自动化抄表[2]正在大力推进。随着用户对服务质量要求的不断提高,对人工现场信息采集要求越来越高,除了对用户用量信息按时采集外,还要对使用现场环境和现场设备信息进行采集。比如在电力行业,除了对电表用电量信息进行读取外,还要求能够采集电表资产条码信息、设备的经纬度等信息,同时对现场人员的移动轨迹进行定位和记录,便于管理。
由于行业抄表机的使用量比较大,对抄表机的成本要求严格,同时对抄表机的功能要求更多更全。这给抄表机的开发带来了挑战。本文基于新型低成本低功耗的STM32处理器开发了一种多功能抄表机,利用IAP技术[3]实现多应用加载并设计了二次开发平台。抄表机集成了多种信息采集模块以及GPS/GPRS二合一模块SIM908[4],含有多种通信接口和大容量存储空间,具备成本低、扩展性好、信息采集全面等特点,还能实现远程数据下载和上报,使得现场抄表成本大幅度下降,提高了工作效率。
1技术原理
与其他仪表设备不同,抄表机要具备灵活的二次开发功能,支持加载运行不同的应用程序。为了实现这个功能,传统的抄表机[5]开发基于嵌入式操作系统如Linux[6]或WinCE[7]。操作系统的使用对CPU的性能要求高、对RAM和ROM等存储空间要求大,使得抄表机的总体成本上升,运行嵌入式操作系统的抄表机还存在开机启动慢、界面操作复杂、功耗过大等不足,对于行业抄表这类应用场合并非最佳选择。利用低成本的微控制器开发行业抄表机是最适合的。
在应用编程(InApplication Programming,IAP)技术是应用在Flash程序存储器的一种编程模式。它可以在应用程序正常运行的情况下,通过调用特定的IAP程序对另外一段程序Flash空间进行读/写操作,甚至可以控制对某段、某页、某个字节的读/写操作,这为数据存储和固件的现场升级带来了更大的灵活性。目前大多数闪存式微控器都支持IAP功能。
对于STM32这样内含Flash程序存储器的低成本处理器,IAP技术原本用来进行软件升级使用。本文巧妙地利用IAP技术,将原本的升级操作变成不同的应用加载操作,实现支持多应用的功能。利用IAP技术,将内部Flash程序存储器分为两部分,低地址部分是主控台程序区,高地址部分是应用程序区,如图1所示。
主控台程序区只运行固定的主控台程序,负责系统设置、应用程序加载、文件管理等基础功能。应用程序区存储并运行由主控台由SD卡中加载进来的应用程序。用户在主控台界面里可以选择需要执行的那个应用,主控台负责加载并跳转运行。应用程序返回或退出后执行复位再次回到主控台程序。
2硬件设计
本文采用STM32F103ZET6作为控制单元,STM32系列单片机基于ARM Cortex-M内核[8],专为要求高性能、低成本、低功耗的嵌入式应用设计,外设非常丰富。STM32F103ZET6属于STM32增强型系列产品,时钟频率达到72 MHz,内置64 KB SRAM和512 KB Flash,拥有多个定时器、3个SPI/I2S、2个I2C、5个 串口以及USB 2.0接口,还有多个AD、DA转换器。
2.1硬件构成
如图2所示,抄表机由STM32处理器和多种外设构成,包含:通过FSMC接口连接的分辨率为240×320的LCD显示屏(并通过PWM调节LCD亮度),锂电池供电单元,由GPIO直接驱动的31个物理按键和2个LED指示灯,通过PWM方式驱动的可以发出多种不同的声音的无源蜂鸣器,分别由5个串口连接的RS232、红外收发模块、RS485、电流环接口、条码扫描模块、SIM908模块;通过STM32的SPI接口连接了W25Q16和SD卡,通过USB与上位机通信;还采用了高精度的RTC芯片DS3231SN,通过IC接口与STM32连接,配备了纽扣电池。
2.2基于FSMC的LCD驱动电路
可变静态存储控制器(Flexible Static Memory Controller,FSMC)是STM32采用的一种新型的存储器扩展技术[9]。它在外部存储器扩展方面具有独特的优势,可根据系统的应用需要,方便地进行不同类型大容量静态存储器的扩展。STM32通过FSMC可以与SRAM、ROM、PSRAM、NOR Flash和NAND Flash存储器的引脚直接相连。本文利用FSMC对显示屏的缓存进行高速写操作,实现了快速显示功能。FSMC设置为NORSRAM操作模式,使用该模式下Bank1的Sector4,用地址线A10作为数据命令区分线与LCD的RS脚连接,16位数据线与LCD模块的数据线连接,剩余几条重要的连线分别是FSMC_NE4连CS、FSMC_NWE连/WR、FSMC_NOE连/RD。
2.3按键、LED与蜂鸣器设计
抄表机一共有31个按键,如图3所示。除了条码扫描键、电源键和复位键,采用了矩阵键盘电路设计,节约引脚。按键设计充分考虑到应用需要,支持汉字输入和特殊符号输入,专门设计的复位键用于应用程序死机后复位系统。F1~F4为用户自定义功能键。快捷键也可以用户自定义使用。
2个LED分别代表充电状态、工作状态。蜂鸣器采用无源驱动方式,通过STM32定时器产生PWM波形驱动发声。通过改变PWM波形频率,可以发出不同音调的声音,再通过程序进行组合,使得不同的事件有不同的声音提示,增强用户使用体验。
2.4SIM908模块电路设计
SIM908 是一款集成GPS导航技术的四频GSM/GPRS模块。紧凑的模块尺寸并将GPRS和GPS整合在SMT封装里,为实现内嵌GPS的应用节省了开发时间和费用。SIM908模块上自带GPS和GPRS天线连接器,可以直接与陶瓷天线连接,不用考虑射频PCB走线问题。本文采用UART5与SIM908模块通信,通过AT命令交互信息进行GPRS通信和GPS定位信息获取。比如使用"AT+CGPSPWR=1"命令打开GPS电源后,用"AT+CGPSPWR=1"命令进行复位,然后使用"AT+CGPSINF=32"获取GPS定位信息。
SIM908的电源直接由锂电池提供,STM32通过P-MOS管SI2301来控制供电。
2.5外设和接口
针对现场表计的通信接口,本文研制的抄表机包含了红外、RS232、RS485和电流环接口。红外通信采用38 kHz的标准载波调制。通过MAX3232CSE芯片将USART1扩展为RS232接口。通过SP3485EEN芯片将USART3扩展为RS485接口,同时设计了电流环接口。UART4接条码扫描模块,支持安装一维或二维扫描模块。通过USB接口将抄表机驱动在PC上虚拟成一个串口设备,进行数据上下装,同时通过USB接口为锂电池充电。
2.6电池充电及电源设计
抄表机采用了充电电流最高1 A的线性锂电池充电芯片TP4056对2 000 mAh锂电池进行充电管理。通过STM32的ADC对电池电压进行采集,当电压低于3.7 V时,用蜂鸣器进行提示并启动关机倒计时。
本文采用了低压差、低成本的LDO低压差线性稳压芯片RT9013-33为系统提供3.3V电源,它非常适合用于锂电池供电的应用场合,通过EN引脚可以很方便地实现软件自动关机和按键开关机功能,
3软件设计
抄表机的软件设计工作包括:基本驱动、文件系统设计、主控台功能设计、API接口设计。
3.1基本驱动
基本驱动主要包含一系列设备初始化以及读写操作,如时钟初始化、定时器初始化、串口初始化、GPIO初始化配置(蜂鸣器、按键、LED、控制线)、FSMC 初始化及配置、ADC初始化配置、IIC/SPI接口初始化、LCD模块初始化、SD卡文件系统初始化。STM32提供了丰富的硬件开发库,用户可以方便地对片内外设进行编程。
3.2文件系统
本文采用了FatFs文件系统[10]来对SD卡进行文件读写。它是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。FatFs的编写遵循ANSI C,不依赖于硬件平台。可以很容易地移植到各种单片机平台。FatFs文件系统支持fat16、fat32,包含ff.h、diskio.h、integer.h、ffconf.h 4个头文件以及ff.c 文件系统实现。要实现具体的应用移植,主要工作是根据diskio.h实现其diskio.c 底层驱动,包含如下功能函数:disk_initialize 初始化磁盘驱动器;disk_status 获取磁盘状态;disk_read 读扇区;disk_write 写扇区;disk_ioctl 设备相关的控制特性;get_fattime 获取当前时间。
3.3主控台功能设计
主控台程序负责系统设置、应用程序加载、文件管理等基础功能。主控台的流程如下。
如图4所示,系统开机后首先进行设备初始化,然后进入主菜单,显示主菜单,根据用户选择跳入各功能模块。功能模块的显示和操作方法与主菜单一样,阻塞方式检测到按键后进行不同处理,通过返回键可以回到上级菜单。通过运行应用模块将直接跳转到应用程序区运行已经加载的应用,省去加载时间。而应用选择模块通过文件系统接口将SD卡中的应用文件罗列出来,用户选定某一个后,将程序文件从SD卡中写入到STM32的内部Flash的应用程序区,并跳转执行。在菜单界面运行中,后台会执行3种中断处理:定时任务、串口接收、USB驱动处理。定时任务主要负责周期性的电量检测和状态条刷新,以及记录闲置时间执行关机。
3.4API接口设计
为了便于用户二次开发,本文设计了一系列的API接口,帮助用户快速开发应用程序。主要包括:(1) LCD显示相关函数,如绘图、文字显示;(2)按键获取;(3)文件系统接口;(4) 多功能输入法接口;(5)时间获取;(6)定时器;(7)条码扫描接口;(8)红外/RS485/RS232收发接口;(9)USB通信接口及通信协议;(10) SIM908通信接口;(11)对话框接口;(12)简单图形界面控件。
4应用开发平台设计
由于用户二次开发的应用要在应用程序区运行,需要在编译时对中断向量表的地址进行偏移,同时要对程序起始地址进行设置。为了便于用户快速开发,本文设计了专用的IDE开发平台,将API接口库和ARM编译库集成到一起,同时配置好中断向量表和起始地址以及其他配置和编译选项,用户只需关注应用程序开发。平台还集成了USB通信协议,可以直接将程序下载到抄表机中并运行。
5结论
本文设计的多功能抄表机具备成本低、扩展性好、信息采集全面等特点,提升现场抄表作业的工作效率和信息化管理水平。这种抄表机目前已经在安徽和江苏的电力系统中广泛使用。参考文献
[1] 王保云. 物联网技术研究综述[J]. 电子测量与仪器学报, 2009, 23(12):17.
[2] 曾维, 富饶. 基于电力载波的远程抄表电能表的设计[J].微型机与应用,2013, 32(16):8789.
[3] 李婉婉, 李宏. 单片机IAP升级方法在血液分析仪中的应用[J].微型机与应用, 2014, 33(21):1618.
[4] 郭坚. 基于SIM908的无人机空气质量监测系统设计与研究[D]. 天津:天津大学, 2013.
[5] 夏丹. 手持PDA抄表终端系统的设计与实现[D]. 武汉:华中科技大学, 2007.
[6] 陈立定, 吕盛林. 嵌入式Linux监控终端的多进程控制[J]. 自动化仪表, 2011,32(1):1315.
[7] 罗健飞, 吴仲城, 沈春山,等. 基于ARM和WinCE下的设备接口驱动设计与实现[J]. 自动化与仪表, 2009,24(3):13.
[8] 任顺航, 吕鹏鹏, 王立鹏,等. 基于STM32的电能手抄系统设计与实现[J].电子技术应用, 2014, 40(1):7578.
[9] 潘辉. STM32FSMC机制的NORFlash存储器扩展技术[J]. 单片机与嵌入式系统应用, 2009(10):3134.
[10] 李世奇, 董浩斌, 李荣生. 基于FatFs文件系统的SD卡存储器设计[J]. 测控技术, 2011,30(12):7981.