基于KW01-Zigbee MCU无线LED点阵屏控制系统的设计与实现

2017-01-17 05:49施连敏
关键词:通信协议微控制器构件

文 瑾,施连敏

(1. 昆明学院信息技术学院,云南 昆明 650214; 2. 苏州大学计算机科学与技术学院,江苏 苏州 215006)

基于KW01-Zigbee MCU无线LED点阵屏控制系统的设计与实现

文 瑾1, 2,施连敏2

(1. 昆明学院信息技术学院,云南 昆明 650214; 2. 苏州大学计算机科学与技术学院,江苏 苏州 215006)

在分析无线LED点阵屏控制技术特点基础上,给出一种基于ARM Cortex-M0+内核KW01-Zigbee微控制器的无线射频LED点阵屏控制系统的构件化设计方案. 该方案的硬件系统以KW01-Zigbee微控制器为核心,以通用LED点阵模组(P10板)为基础,充分考虑了灵活的组合方式. 软件设计中,以嵌入式软件工程理论为基础,给出可复用、可移植的LED动态刷新的底层驱动封装,通过优化算法解决屏幕闪烁. 讨论通信协议设计、协议帧内容格式等技术问题,为相关设计与应用提供一种实际参考.

ARM Cortex-M0+内核; KW01-Zigbee微控制器; 无线射频; LED点阵屏

0 引言

发光二极管(LED)自1962年诞生以来,随着半导体技术的进展,它的发光颜色、亮度等性能得以迅速提高. 进入上世纪90年代,开始形成LED点阵显示屏产品[1]. 近年来,LED点阵显示屏作为信息显示终端广泛应用于机场、码头、医院、商场、车站、宾馆、银行、证券市场、工业企业管理和其它公共场所[2]. 进入21世纪,随着无线通信技术的发展,避免有线介质从上位机将数据传送到LED点阵屏控制器存在的布线复杂,维护繁琐等缺点,使得无线LED点阵屏得到高速的发展[3]. 在无线LED点阵屏通信系统中,通信过程中的质量、通信终端和芯片的处理速度是保证系统正常工作的前提[4],但同时要满足一定的经济效益.

分析无线LED点阵屏控制的特点和难点后,提出一种基于ARM Cortex-M0+内核的KW01-Zigbee为核心[5],配合芯片自带的RF无线收发功能,完成数据的储存与无线传输、显示内容远程更新、亮度调节的LED点阵屏控制系统, 称为LED-KW01点阵屏. 采用单一的ARM微处理器对LED点阵屏进行控制与数据的无线传输,既节省微控制器的端口资源,降低生产成本,又进一步有效地简化控制系统的电路结构,提高系统的可靠性与稳定性.

设计中遵循嵌入式硬件构件化原则,将LED点阵屏接口电路及其功能描述封装成一个可重用的构件,为硬件的可重用性和可移植性提供参考. 以嵌入式软件工程理论为基础,采用构件化思想,对底层LED驱动构件进行封装,给出接口函数、参数等规范化设计的方法,通过优化解决屏幕闪烁问题. 对Zigbee无线通信技术协议的物理层、链路层、网络层和应用层,以及上位机软件所涉及的关键问题进行分析,给出通信协议帧格式和程序设计要点,对相关设计与应用有一定的现实价值和参考意义.

1 LED-KW01点阵屏的硬件设计

1.1 硬件系统总体结构

图1 硬件结构框图Fig.1 Hardware architecture

LED-KW01点阵屏硬件控制系统由上位机(PC机)、MCU(微控制器)、无线收发模块、LED点阵显示屏等四部分组成,其中PC结点和LED结点,是由集成MCU模块和无线收发模块的基于ARM Cortex-M0+内核的KW01-Zigbee微控制器组成. 硬件结构框图如图1所示.

上位机负责将显示数据转换为满足LED点阵屏扫描的数据,经由USB-TTL串口线送至PC结点的MCU模块,然后利用其自带的无线收发功能,通过基于Zigbee无线局域网,将屏幕扫描的数据[6],无线发送至LED结点的Flash中. 显示时,屏幕结点直接读取Flash的数据,送给扫描控制模块,通过GPIO口将数据传输到LED显屏上显示. 随着Flash中内容的改变,LED显屏内容也随之改变,实现点阵屏的无线实时更新.

采用基于ARM Cortex-M0+内核的KW01-Zigbee微控制器的硬件架构,设计的无线LED-KW01点阵屏控制系统,使用芯片内置的Flash对扫描数据进行存储和控制,处理器能够直接读写操作中的数据,节省对外设的操作,提高数据处理的速度和效率.

1.2 构件化LED接口电路设计

图2 LED接口电路构件应用Fig.2 LED interface component application

为提高软硬件设计的可重用性和可移植性,构件的制作与应用是基础与保障. 硬件构件是将硬件功能模块、支撑电路、功能描述封装成一个可重用的硬件实体,并提供一系列规范的输入、输出接口[7]. 遵循嵌入式硬件构件化设计原则,将LED点阵屏板16针引脚与微控制器相连的接口及其功能描述封装成一个可重用的实体构件,如图2虚线框内所示,该构件与系统目标功能无关. 当其被作为一个“零件”组装到具体系统中时,只需为其接口添加相应的接口网标,如图2虚线框外所示,其它内容不必改动,就能完成具体系统的硬件设计.

例如,在本文所设计的LED-KW01点阵屏的应用系统中,LED点阵屏的扫描信号线(LED_A、LED_B、LED_C)与KW01-Zigbee芯片PTE16、PTE17和PTE18引脚相连,其它端口与KW01-Zigbee芯片的连接如图2所示. 对该硬件操作时,只对虚线框内接口注释(如: LED_A)操作,在头文件中通过宏定义的方法把接口注释定义为虚线框外的接口网标(如: #define LED_A (PORTE|16)). 若要把该构件应用到其它芯片时,只需改变图2中虚线框外的芯片引脚,虚线框内的内容无需改变; 编写程序时,只要把头文件中构件的接口注释宏定义改为虚线框外的接口网标,其它内容无需改变,这为系统的复用和移植奠定了硬件基础.

2 底层驱动构件的封装及屏闪解决方法

2.1 底层驱动构件的封装方法

提高软件的可移植性、可复用性、完整性、独立性的最佳方法就是复用好的代码,软件构件技术就是软件复用的重要方法[8]. 底层驱动构件是硬件与软件的有机结合体,它的可靠性直接影响到系统的运行效率与稳定性,由头文件和源程序文件组成.

1) 头文件封装. 头文件用于说明构件的接口,若其它函数要调用该构件,可通过使用#include包含该头文件,就可以获取该构件的服务. 头文件主要包含: 用include语句包含所调用的构件、用以描述构件属性的宏定义、对外接口函数原型说明等内容. 关键代码如下:

① 调用的构件

#include "gpio.h" //用到gpio构件

② 宏定义构件的属性

端口及引脚宏定义,复用和移植构件,只需改变芯片引脚号,其它内容不需修改.

#define LED_A (PORTE|16) //定义端口

③ 对外接口函数说明

void LED_Show(uint_8* dis_buf [LED_ROW]); //送字上线并显示

2) 源程序文件封装. 源程序文件,用于实现封装构件的功能,主要内容是实现头文件中定义的对外接口函数,以及自身定义的内部函数功能. 其功能是通过服务接口(头文件中定义的对外接口函数)向外提供. 对于调用者只需通过服务接口获取服务,关键代码如下:

① 外部函数: 送字上线并显示函数LED_Show. 在调用LED_Show函数时,因所设计的LED点阵屏为四分之一扫描方式,定义静态变量,使其能从1至4重复,以避免使用全局变量传递参数,可能带来的安全隐患.

static uint_8i=0;

i++; if (i>=4) i=0;

送字上线程序片段中,字模提取用左移代替乘法,使用指针传参,提高程序执行效率.

*(block+m)=*(dis_buf[m]+k+(j<<4)+(i<<2));

② 内部函数LED_SendOnebyte(uint_8 data). 主要完成外部函数LED_Show所送来的1字节字模逐位送到点阵屏的列数据线. 传统设计中,通常是调用gpio构件,根据字模位将对应寄存器电位拉高或拉低,即置1或置0,再使CLK产生上升沿,将寄存器数据送到595移位寄存器,使LED屏幕上的点亮或暗.

i=0b10000000; //设置取位常数

for (j=1;j<=8;j++) //取data字中的一位,使其上线

{ if ((data&i)==0) //该位为0

gpio_set(LED_R1, 0); //亮

else

gpio_set(LED_R1,1); //暗

gpio_set(LED_CLK, 0); //CLK产生上升沿, 使数据送到595移位寄存器

gpio_set(LED_CLK, 1);

i=i>>1; //i右移一位,为取data_byte字节中的一位做准备

}

2.2 屏幕闪烁解决方法

内部函数LED_SendOnebyte的代码是整个底层驱动构件中执行最为频繁的,它的效率将直接影响LED点阵屏的显示效果. 使用以上传统方法编写的代码,用在基于ARM Cortex-M0+内核,最高主频仅为48MHz的KW01-Zigbee微控制器上,驱动LED点阵屏时,仅能驱动64字节的单元板6块,若再增加单元板,点阵屏将出现闪烁现象. 经分析主要是程序频繁调用其它构件,使其不断进栈出栈,降低了执行效率,使后续的扫描频率达不到最低要求,而出现的现象.

因此为提高程序执行效率进行以下二点改进,首先定义送字上线内部参数为指针类型,其次不调用gpio构件而对GPIO寄存器直接操作. 关键代码如下:

1) 使用指针传递参数.

void LED_SendOnebyte(uint_8 * data)

2) 根据芯片手册找出所使用的寄存器的基地址,给出不优化的32位指针变量.

volatile uint_32 *PA=(uint_32*)0x400FF000u; //设PORTA端口的GPIO基地址

volatile uint_32 *PE=(uint_32*)0x400FF100u; //设PORTE端口的GPIO基地址

3) 通过设置数据输出寄存器的相应位,指定相应引脚为低电平或高电平,对应值为0或1. 即将传统代码中gpio_set(LED_R1, 0)和gpio_set(LED_R1, 1),gpio_set(LED_CLK, 0)和gpio_set(LED_CLK, 1)分别用以下四句代替,其余不变.

*PA |= (1<<4); // PORTA4脚,即R1为1, 暗

*PA &=~ (1<<4); // PORTA4脚,即R1为0, 亮

*PE &= ~(1<<19); // PORTE19脚,即LED_CLK为0

*PE |= (1<<19); // PORTE19脚,即LED_CLK为1

经过优化后,扫描频率大幅提高,可驱动的单元板已由6块增加到32块,并且在其中还有150个指令周期的富余,提高了近6倍. 虽然构件的可移植性降低了,但是用一块KW01-Zigbee芯片可同时控制4排共32块LED显示板,降低系统成本,提高经济效率.

所设计的底层构件,做到将构件应用到不同的微控制中,只需修改头文件,对于源程序文件不必修改或改动很小. 同时对函数参数的个数、类型等进行全面考虑,注释详细,以增加程序的可读性. 另外,禁止使用全局变量传递参数,避免可能带来的安全隐患. 为了传递与全局有关的参数时,使用静态变量.

3 点阵屏的软件架构、通信协议和上位机程序设计要点

3.1 LED-KW01点阵屏嵌入式软件架构

LED-KW01点阵屏嵌入式软件架构包括嵌入式LED点阵屏应用软件层、操作系统层和驱动层3部分. 应用软件层由相对独立的任务组成,完成特定的功能,由LED-KW01点阵屏扫描控制模块、无线通信模块和指示灯闪烁模块组成. 本文系统所使用操作系统为MQX实时操作系统,包括内核、网络系统、文件系统、电源管理等. 驱动层是直接与硬件打交道的一层,提供所需的驱动支持,包括板级初始化、LED驱动、Flash驱动、gpio驱动、uart驱动、RF驱动等驱动程序.

3.2 LED-KW01点阵屏的协议设计

Zigbee 协议具有自组网、路由等功能,同时具有低功耗、低速率、低复杂度、低成本、双向无线通信等特点[9]. 在LED-KW01点阵屏中使用直接通信型路由协议,它是节点直接与汇聚节点通信. 协议对源地址、目的地址、数据格式以及其它状态码等统一规定,将通信协议设计成若干字节的帧封装并传输数据,适应Zigbee技术通信的特点,本文定义的物理层通信协议帧格式如表1所示.

表1 物理层通信协议帧格式

表1中: 数据内容为60个字节,被分成5个部分,命令字区为读、写Flash,读数据帧号等命令; 帧号区为数据存放在Flash中的开始扇区号; 数据区为要发送到Flash中的数据,大小可通过扩充或缩小后面的填充区进行调整; 填充区为预留,可以调整大小和填充任何内容.

3.3 LED-KW01点阵屏上位(PC)机程序设计要点

整个LED-KW01点阵屏的软件设计分为两部分,微控制器应用软件和用于人机交互的上位机应用软件. 微控制器应用软件主要实现两大功能: 一是驱动LED显示屏,对Flash内容更新; 二是实现PC节点和屏幕接点之间的通信. 操作界面如图3所示.

上位机负责输入数据并转换为扫描数据,送PC结点,并由PC结点发送至屏幕结点的Flash中. 主要分为串口设置、发送数据、接收数据、转换数据等部分,用C#语言开发. 其中: 串口设置部分有波特率选择框、串口号选择框. 发送数据部分,每包发送64个字节,格式见表1,不足部分用字符0补齐. 转换数据部分,将键盘输入的汉字字模转换为LED-KW01点阵屏所能扫描显示的字模格式. 实际显示效果如图4所示.

图3 上位机操作界面

图4 实际显示效果

4 结语

本文给出了无线LED点阵屏控制系统的实现方案,该方案完成对构件化LED接口电路、通信协议、上位机程序等的设计与开发,并在开发过程中贯穿嵌入式构件化的思想,实现以软件的可重用性、可移植性和可维护性为目的的LED动态刷新底层驱动构件封装. 同时,在开发中充分发挥软件编程的灵活性,最大限度挖掘KW01-Zigbee MCU硬件资源,降低系统成本. 此外,通过对寄存器地址的直接操作解决屏幕闪烁问题. 目前,整个系统已在昆明市物联网及泛在工程技术中心的实际项目中投入应用,实践应用表明,系统运行稳定、能耗较低、显示效果良好,为相关设计与应用提供一种实际参考.

[1] HUANG X Y,TIE Y,LI S H. Design and realization of ARM-based technological LED display system[J]. Advanced Materials Research,2012, 512/513/514/515: 2 697-2 700.

[2] 李小琴,陈光绒. 一种多功能可擦写式LED点阵显示屏的研制[J]. 电视技术,2014,38(1): 85-89.

[3] DENG C J,LIU W,ZOU K,etal. A solution of LED large screen display based on wireless communication[C]//2010 Asia-Pacific Conference on Wearable Computing Systems, 2010: 66-69. DOI: 10.1109/APWCS. 2010. 24.

[4] YANG B L,BAO S J,YANG S L. Design of LED display-screen system base on TMS320F2812[J]. Advanced Materials Research,2014, 834/835/836: 1 097-1 100.

[5] FREESCALE. MKW01Z128 Sub 1 GHz low power transceiver plus microcontroller reference manual[EB/OL]. [2014-10-12].http://cache.freescale.com/files/microcontrollers/doc/ref_manual/MKW01xxRM.pdf?fpsp=1.

[6] 朱仕浪,王宜怀,冯德旺. 飞思卡尔Kinetis L系列MCU的时钟运行机制分析与编程方法[J]. 福州大学学报(自然科学版),2014,42(5): 694-699.

[7] 王宜怀,朱仕浪,郭芸. 嵌入式技术基础与实践: ARM Cortex-M0+ Kinetis L系列微控制器[M]. 3版,北京: 清华大学出版社, 2013.

[8] 张策,崔刚,刘宏伟,等. 构件软件可靠性过程技术[J]. 计算机学报,2014,37(12): 2 586-2 612.

[9] 徐艳,王茜,武剑. ZigBee路由协议优化仿真研究[J]. 计算机仿真,2013,30(6): 292-295.

(责任编辑: 蒋培玉)

Design of wireless LED screen control system based on KW01-Zigbee MCU

WEN Jin1, 2,SHI Lianmin2

(1. College of Information Technology, Kunming University, Kunming, Yunnan 650214,China; 2.School of Computer Science and Technology,Soochow University,Suzhou, Jiangsu 215006,China)

This paper designs a component-based LED screen of radio frequency controlled by KW01-Zigbee MCU (microcomputer controller unit) based on ARM Cortex-M0+ kernel. We propose a system to use KW01-Zigbee MCU and the general LED dot matrix module (P10 board), and at the same time to consider flexible combinations in the hardware structure. In software design, we give a reusable and portable LED dynamic technology based on the embedded software engineering theory in encapsulating underlying drive. In addition,our studies solve the screen flicker problem through optimization algorithm,describe the communication protocol and protocol frame content, provide a the practical reference for related design and application.

ARM Cortex-M0+; KW01-Zigbee microcomputer controller unit; radio frequency; LED screen

10.7631/issn.1000-2243.2017.01.0032

1000-2243(2017)01-0032-05

2014-12-27

文瑾(1963-),男,副教授,主要从事嵌入式系统,物联网技术的研究,1341649561@qq.com

国家自然科学基金资助项目(60871086) ; 昆明学院物联网应用技术科研创新团队基金资助项目(2015CXTD040)

TP391

A

猜你喜欢
通信协议微控制器构件
基于Z-Stack通信协议栈的红外地温采集电路设计
物联网技术在微控制器实验教学中的应用
建筑构件
建筑构件
建筑构件
建筑构件
基于DMX512通信协议的多路转发器设计与研究
基于NS-3的PLC多频通信协议仿真平台设计与实现
Atmel针对新一代物联网应用发布全新32位微控制器
最新STM32设计工具增加对混合信号微控制器的支持