基于ARM的网络型电能质量监测装置人机交互研发
0 引言
非线性、非对称、非平稳电力设备的大量使用,给保证供电质量带来了严峻的挑战。电能质量问题已经越来越引起用户和供电部门的重视。采取技术措施来对电能质量进行改善,首先就要对电能质量进行及时准确的监测。具有图形化接口的人机交互功能作为必不可少的功能之一,在电能质量监测装置的开发中占有重要的地位。文献[3-4]都实现了人机交互功能,但文献[3]只移植了μC /GUI 图形接口,而没有使用μC /OS-Ⅱ,系统对多任务的支持不够;文献[4]中完成了一定的人机交互功能,图形化程度不高,而且它们都是基于S3C44B0X 处理器。LPC2478 作为32 bit ARM7 处理器,集成了非常丰富的功能模块,可以大大减少外部芯片的使用,显着降低开发成本。在LPC2478 上进行人机交互功能的研究有很大的实际意义。本文采用LPC2478 微处理器,以RealView MDK 为开发平台,移植了实时嵌入式操作系统μC /OS-Ⅱ和μC /GUI 图形接口,在此基础上进行了用户程序的编写,最终实现了网络型电能质量监测装置的具有图形化接口的人机交互功能。
1 硬件结构及功能
1. 1 硬件结构
硬件结构图如图1 所示,网络型电能质量监测装置采用了双CPU 及双口RAM 的结构,2 个CPU 分别采用的是DSP( TMS320F2812) 和ARM(LPC2478)。TMS320F2812 的高速保证了装置的实时性,LPC2478 提供的丰富的接口大大增强了装置的可扩展性。双口RAM 采用的是IDT70V9289。其中,DSP 的主要作用是进行电力信号的采集、计算与分析及实现故障报警、事件记录;ARM 则主要负责人机交互功能和通信功能。
网络型电能质量监测装置硬件结构框图
图1 网络型电能质量监测装置硬件结构框图。
装置中人机交互功能在硬件方面主要通过LPC2478 微处理器和6 个按键及LCD 液晶屏(AT056TN52)实现。装置所采用的液晶屏TFT-LCD 为AT056TN52,它有18 根数据线,设计中将其与LPC2478 处理器的数据总线相连; 解析度为640 × 480像素,每个像素可以显示最多26 万种颜色,完全可以满足装置的显示需求。
键盘采用的是6 个按键,LPC2478 的GPIO 中断功能使键盘的实现变得非常简单。该装置中每个按键都与I /O 口直接相连,另一端接地。为每个按键并联上一个电容可以有效防止按键抖动。
1. 2 网络型电能质量监测装置的功能
装置的主要功能:① 基本电力参数监测功能;② 电能质量参数监测功能;③ 人机交互功能;④ 报警功能;⑤ 网络通信功能。
针对装置丰富的功能,需要有强大的人机交互功能做为支持。为便于操作,装置的人机交互界面需要以中文窗口界面实现。用于人机交互功能的窗口分为两类:对话框和菜单。对话框的功能是参数的设置与显示,菜单的功能是为用户提供选择界面,接受用户的选择,并根据选择结果运行相应的程序。
设计人机界面时,首先要根据实际需求确定需要几级菜单,然后确定各级菜单中选择项的数量,最后确定每个选择项对应的窗口。装置的菜单结构如图2 所示。菜单中每个汉字为24 × 24点阵,对话框中的小字为21 × 21 点阵。本文设计了三级菜单,在屏幕下方显示一级菜单,选择一级菜单中的对应项后弹出二级菜单,二级菜单下又包含三级菜单。用户可以通过方向键以及确认键来进行选择并加以确认。
装置菜单结构图
图2 装置菜单结构图。
2 人机交互功能的软件开发
要实现装置的有图形接口的人机交互功能,必须进行嵌入式操作系统和图形接口在LPC2478微处理器上的移植。嵌入式操作系统的使用可以大大提高装置的可靠性和实时性,图形接口的移植则可以显着提高图形化系统的开发效率,缩短开发周期。在比较了几种主流的图形接口之后,最终选择μC /OS-Ⅱ嵌入式操作系统和μC /GUI图形接口,因为它们的代码量少,而且功能强大,非常适合移植在资源有限的嵌入式硬件平台上。
2. 1 μC/OS-Ⅱ的移植
μC /OS-Ⅱ嵌入式操作系统的移植工作包含以下几个内容:编写硬件初始化启动代码;编写设备驱动代码;修改操作系统与硬件相关的代码。
所谓启动代码,就是处理器在启动的时候执行的一段代码,主要任务是定义程序入口指针;设置异常向量;初始化处理器各模式下的堆栈和寄存器;配置 CPU 时钟源;初始化系统功能模块;跳转到C 语言主程序中等等。由于以上的操作均与处理器体系结构和系统配置密切相关,所以一般由汇编来编写。在装置中示意性的启动代码为:
PRESERVE8
Vectors LDR PC,Reset_Addr
LDR PC,Undef_Addr
LDR PC,SWI_Addr
LDR PC,PA^_Addr
LDR PC,DA^_Addr
LDR PC,IRQ_Addr
LDR PC,FIQ_Addr
Reset_Addr
为每一种处理器模式初始化堆栈;
地址重映射,设置MEMMAP = 1;
配置时钟源,设置Fpclk = 72M;
初始化FLASH;
初始化SDRAM;
IMPORT __main
LDR R0,= __main
BX R0;跳转到主程序中
设备驱动代码是操作系统和硬件之间的桥梁。通过驱动代码,用户可以不用了解具体硬件的细节,只需调用驱动层所提供的函数就能对硬件进行操作。在移植μC /OS-Ⅱ时,亦只需根据硬件环境编写必要的硬件驱动程序即可。在此移植中,涉及到人机交互功能的硬件除微处理器LPC2478 外主要是键盘和液晶,液晶部分的驱动代码包含在了μC /GUI 图形接口的移植步骤中。而键盘的主要功能为接受用户的输入,在微处理器LPC2478 中,可以使用I /O 中断的功能来实现对键盘输入的监测,驱动代码则为键盘的中断处理程序:
void Key_Handler(void)
{ DWORD key_n = 0;
key_n = IO0_INT_STAT_F; / /读取中断状态
IO0_INT_EN_F & = 0xE07F8FFF; / /禁止中断
IO0_INT_CLR | = 0xFFFFFFFF; / /清除中断
if ((key_n&0x00800000) = = 0x00800000)
{ OSMboxPost(Keybox,(void * )1);}
if ((key_n&0x01000000) = = 0x01000000)
{ OSMboxPost(Keybox,(void * )2);}
if (key_n&0x02000000) = = 0x02000000)
{ OSMboxPost(Keybox,(void * )3);}
if ((key_n&0x08000000) = = 0x08000000)
{ OSMboxPost(Keybox,(void * )4);}
if ((key_n&0x10000000) = = 0x10000000)
{ OSMboxPost(Keybox,(void * )5);}
if ((key_n&0x00001000) = = 0x00001000)
{ OSMboxPost(Keybox,(void * )6);}
IO0_INT_EN_F | = 0x1F807000; / /开启中断
}
编写完硬件初始化启动代码和设备驱动代码之后,在修改操作系统与硬件相关的代码之前,应该了解μC /OS-Ⅱ的体系结构如图3 所示。移植μC /OS-Ⅱ,最主要的工作就是移植与硬件相关的3 个文件,即OS _CPU. H、OS _CPU_C. C 和OS _CPU_A. ASM。OS_CPU. H 中含有用#define 定义的与处理器有关的常量、宏和类型定义。通过对此处定义的修改,可以使源代码中对数据类型的使用不依赖于具体的处理器。移植时,只要使处理器、编译器和 μC /OS-Ⅱ三者之间数据类型统一即可。在此文件中还有一个μC /OS-Ⅱ对堆栈增长方式的定义OS_STK_GROWTH,由于Keil 只支持递减堆栈,因此,此处需要定义OS _ STK _GROWTH 的值为1。OS_CPU_C. C 文件中,需要进行的工作是编写任务堆栈初始化函数OSTask-StkInit()。该函数在创建一个任务时被调用。根据微处理器的寄存器结构,就可以确定在本次移植中针对LPC2478 应该使用的任务的堆栈结构,从而可以写出堆栈初始化函数代码。在OS_CPU_A. ASM 文件中,有4 个函数需要编写,分别是启动最高优先级就绪任务函数OSStartHighRdy(),时钟节拍中断服务子程序OSTickISR(),任务级任务切换函数OS_TASK_SW( ) 及中断级任务切换函数OSIntCtxSw()。
μC/OS-Ⅱ的体系结构图
实时操作系统 图形接口 电能质量监测装置 人机交互 相关文章:
- 电源设计小贴士 1:为您的电源选择正确的工作频率(12-25)
- 用于电压或电流调节的新调节器架构(07-19)
- 超低静态电流电源管理IC延长便携应用工作时间(04-14)
- 电源设计小贴士 2:驾驭噪声电源(01-01)
- 负载点降压稳压器及其稳定性检查方法(07-19)
- 电源设计小贴士 3:阻尼输入滤波器(第一部分)(01-16)