本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
摘 要: 关键词: 报站器;控制芯片;HMI;MFC;RS232串口通信
上海地铁5号线报站器是一个单片机系统,随着上海地铁建设的快速发展,在未来几年,上海地铁5号线将会延长,停车站数量将会随之增加,报站器的人机接口(HMI)也要做相应的修改。如果采用传统的报站器软件设计方式,必须要对报站器控制芯片的源代码进行修改,再编译后重新进行烧录,这会浪费大量人力物力[1-2]。针对这一问题,本文利用MFC中的串口通信技术,设计一种报站器的可扩展HMI模块,只要使用串口通信数据线结合PC机端的用MFC开发的上位机软件,无需对单片机本身进行任何改动即可由用户自己通过简单的操作实现报站器操作界面的改动。相对于以往使用的进口报站器系统,具有改动成本低、操作简便、可扩展性强等特点。
1 上海地铁5号线报站器的总体结构
上海地铁5号线报站器采用ATmega128单片机为控制核心,本文侧重于介绍报站器的人机交互(HMI),因此将报站器分为核心模块、键盘操作模块、显示模块和RS232串口通信模块几部分,结构框图如图1所示。报站器的主要操作方式是操作员通过观察显示模块的信息,采用键盘输入对核心模块进行操作,输出要报站的音频。显示模块、键盘操作模块和核心模块的一部分共同构成人机交互接口(Human Machine Interface)。RS232模块主要负责HMI修改时报站器核心模块与PC端的数据交换。
1.1 核心模块
报站器控制模块主要由主控芯片、音频解码芯片和音频文件存储卡组成。主控芯片采用Atmel公司AVR系列单片机中的RISC结构单片机ATmega128。AVR单片机功率低,内部分别集成Flash、EEPROM和SRAM三种不同性能和用途的存储器,具有在线编程和在应用编程的特点[3]。音频解码芯片采用芬兰VLSI公司生产的单芯片MP3/WMA音频解码芯片VS1003,其控制通过命令接口(SCI)和数据接口(SDI)实现[4]。核心模块的主要工作过程是,ATmega128从CF卡中读取音频文件,传输给VS1003芯片进行音频解码,然后输出音频。
1.2 键盘操作模块和显示模块
键盘采用4×3下按式键盘,其工作原理是:有一个按键被按下时,主控制芯片上会有两个引脚接收到高电平信号,通过在中断函数内判断引脚的电平即可准确定位按键。常用的按键功能分别定义为向上、向下、向左、向右、确定、取消、设置等。
显示模块采用液晶显示屏和ST7920控制器, ST7920同时作为控制器和驱动器,在驱动器ST7921的配合下,最多可以驱动256×32点阵液晶。
1.3 RS232串口通信模块
RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通信的标准。由于报站器的控制芯片ATmega128自带串口通信引脚,因此可直接通过数据线接到PC机上与PC机进行通信。
2 可扩展HMI设计与实现
要实现报站器的可扩展的HMI,总体思路就是在报站器端设计出菜单显示数据与菜单功能相分离的菜单结构,将菜单的相关数据存储在EEPROM中,保证掉电不遗失[5]。在PC机端设计串口通信程序,将报站器中有关界面菜单显示的内容读到PC机端,由用户根据自己的需求进行更改后,再通过RS232接口传入报站器的控制芯片,以实现可扩展性。难点在于RS232数据传输较慢,用户在PC机端软件上进行操作时会有较强的延时感。本文采取的解决方案是在PC机的串口通信程序中设置一个缓冲区,先将用户要修改的内容存入缓存区,修改完毕确认后再一起传回控制芯片。
2.1 报站器菜单结构功能设计
菜单的数据结构体中只需要两个属性,一个用来表示当前菜单页的ID,一个用来表示当前菜单页中被选中项的ID。在显示菜单时,判断当前的菜单页,菜单结构体如下所示:
typedef struct{
int hmi_page;//当前菜单页
int hmi_item;//当前选中的项
}st_hmi_par,*st_hmi_par_ptr;//菜单结构体的类型和
指针类型
st_hmi_par_ptr hmi_ptr; //全局菜单结构体指针
菜单显示的内容以三维字符数组的形式存放在EEPROM中。在报站器中,线路只需要存放站名的序号:
eeprom char name[][]={ {"莘庄"},//站名
…
};
eeprom char line[][]={ {0,1,2,3,4,5,6,7,8,9,10,11},
//线路名
…//待扩展的线路n
};
正常报站模式下,报站器中每一页对应一条线路,每一项即对应一个站名。图2所示为根据按键响应显示页面的流程图,在显示菜单时,只要判断当前的菜单页即可,显示时调用显示函数,显示当前线路当前项所对应的站名,即为name[line[hmi_ptr->hmi_page][ hmi_ptr->hmi_item],注意一页有4个站:
|