《武汉工程大学学报》  2015年07期 40-44   出版日期:2015-07-31   ISSN:1674-2869   CN:42-1779/TQ
CortexA8与M3的多CPU控制平台构建方案


0 引 言控制平台是指用特定的技术方案实现的具有通用控制功能和较强的扩展应用功能的基础系统. 常见的嵌入式控制平台以各种档次的处理器为核心,结合了半导体、传感器、通讯、计算机、自动化等技术,已被广泛应用到各行各业. 作为高端的嵌入式控制平台,例如手机,因为在通信领域有巨大的优势,已经成为众多专家重点研究的控制系统[1].近些年来,由于带有各种智能系统的手机、平板电脑等给人们带来了更佳的触控体验,各种智能触控平台以其独特的优势纷纷进入工控领域,医疗设备行业也同样如此,特别是大型全自动化设备对智能触控平台的需求日益强烈. 而且随着物联网的发展,带有智能系统的医疗平台才能更符合医疗单位对数字化、信息化设备的要求. 这种新型医疗设备将带来新一轮的更新换代,而多CPU控制平台在控制实时性、并发性、独立性方面展现出独特的优势. 与此同时,一般的基于可编程逻辑控制器实现的系统已不能满足轧钢、大型传动、交通、磁悬浮以及航空航天等高性能控制领域的高速、高采样精度、高可靠性的控制要求. 所以多CPU控制平台正在成为工业自动化领域中的热点之一,同时也会产生巨大的市场. 多CPU控制平台的研究一直是嵌入式热门研究的领域,国内外出现了多种模式的多CPU控制平台,并且得到了广泛应用. 如基于RS-485的多CPU控制系统,此种控制系统基于网络TCP/IP 模型,制定出一种适用于基于RS-485总线的多CPU控制系统的简化网络模型和通讯协议. 另外有基于VME总线的多CPU控制系统,它采用实时操作系统VxWorks作为软件平台,还有基于高速双口RAM的双CPU控制平台,无论是在并行模式中进行共享内存,还是在流水模式中传送数据,数据畅通性更佳. 使用多CPU架构的系统,可以采用性价比更高的CPU,随着MCU的价格不断降低,成本也会快速降低,将会获得更好的效益. 1 CPU平台整体设计方案多CPU控制平台采用分层架构,上层平台使用以CortexA8为内核的主控芯片S5PV210,装载Android4.0系统和应用程序. 下层平台使用以CortexM3为内核的主控芯片STM32F103ZET6,板载按照需求开发的高效任务管理器以及外设驱动程序. 上下层平台之间使用自定义的通讯协议进行串口通讯,上位机发送命令到下位机,下位机接收命令并处理后将结果反馈给上位机App,App将实时的数据图像化现实在软件界面上从而实现对下位机平台的控制. 不仅可以满足实时控制,而且用户界面更加美观,其总体架构如图1所示.图1 总体架构图Fig.1 Overall architecture diagram 双平台之间建立自定义的可靠通讯协议,Android应用程序向下位机平台发送命令和命令参数后,下位机平台接收命令后首先进行校验,然后解析和执行,并将执行后结果依照对应的格式反馈给上位机Android程序[2]. 1.1 A8平台构建S5PV210处理器需要外加内存和Flash ROM以确保Android系统正常运行,处理器外围电路还包括有电源管理,时钟信号,复位电路,JTAG电路、以及外部存储电路,LCD屏,串口模块等. S5PV210最小系统如图2所示. 图2 CortexA8上位机平台框架Fig.2 Cortex A8 upper machine platform framework电源的稳定性直接影响嵌入式系统的性能,嵌入式系统的供电方案的选择非常重要,电源的输入电压范围,输出电压变化幅值,功耗和成本需要综合考虑. CortexA8处理器相对较为复杂,外设多种多样,内核、内存、外设所需的供电电压各不相同. 根据最小系统板的需要,选定XC6209 为S5PV210供电,XC6209为低压差稳压电源,选定EUP3412为DDR供电,RT8024为NAND Flash供电. 内存是系统的程序代码运行和进行数据处理的地方,其性能的稳定性对于系统的整体性能至关重要. 本设计给ARM Cortex-A8核心板使用4片三星公司出产的K4T1G084QQ-BCF7芯片,DDR2SDRAM存储器总共为1GBit.,时钟频率可高达800 MHz. Flash也就是闪存(Flash Memory),是目前广泛应用的非易失性存储器. Flash分为NOR Flash和NAND Flash,后者更适宜于大容量文件系统的构建. 因此本设计选用Samsung公司K9GAG08U0F型号、2 GBytes NAND FLASH. 主要用于存储内核代码、应用程序和用户数据文件. ARM Cortex-A8系统时钟源为四个外部无源晶振,系统主时钟和锁相环时钟的输入输出端为XXT1/XXT0,频率为24 MHZ,USB工作时钟输入输出端为Xusb/XusbXT0,频率也为24 MHz,RTC时钟输入输出端为XrtcXTI/XrtcXTO,频率32.768 kHz, VEDIO时钟输入输出端为XhdmiXT/XhdmiXTO,频率是 27 MHz. 串口是平台通讯中的重要组成部分,是链接上位机和下位机的桥梁. 为提高通讯距离和使用计算机调试系统的方便,上位机和下位机平台的串口通讯都使用了232电平. 1.2 M3平台构建下位机控制系统使用以CortexM3为内核的STM32f103ZET6为主控芯片,系统框架如图3所示.图3 M3平台的硬件架构图Fig.3 M3 platform hardware architecture diagram 外设包括:串口通讯模块,用于实现和上位机平台的通讯;电位器模块,用于模拟AD采样功能;电机驱动模块;蓝牙模块,用于无线模式下双平台的通讯控制;还有基本的蜂鸣器和信号灯控制模块. 如图3所示. STM32F103ZET6的工作电压范围(VDD)是2.0~3.6 V. 内置电压调节器自动提供内部所需的1.8 V电压. 实时时钟和备份寄存器在系统主电源掉电后,通过电池供电. 本设计中无需外置备用电池,所以VBAT脚和外部的供电电源连在一起[3-4]. 系统使用HSE外部晶体/陶瓷谐振器和HSE用户外部时钟为系统提供高速时钟. 为使系统启动后尽快稳定,以及减少时钟失真,提供时钟的晶振、负载电容器须尽可能的靠近振荡器. 负载电容大小需要根据所用的振荡器匹配. 如果使用外部时钟源,需要提供外部时钟. 频率最高可达25 MHz. 通过配置寄存器HSEBYP和HSEON来选择这种运行模式. 本设计选用东芝公司的TB6560作为步进电机驱动的主芯片. TB6560AHQ是一款低功耗、高集成的两相混合式步进电机通用驱动芯片,它仅使用一个时钟信号和一个方向信号,就可以提供正向和反向驱动给两相双极步进电机,配合简单的外围电路即可实现高性能的电机驱动. 调整脉冲输入的频率可实现调速,也可以通过设置相关引脚,来调整驱动电流和相位的细分参数,以便驱动各种不同的步进电机. 2 通讯控制协议通讯协议是本系统的重要组成部分,是连接CortexA8与CortexM3 的桥梁,直接关系到系统的稳定性. 本设计根据实际应用的基本需求,自定义了一套简单的基于串口的通讯协议. 此通讯协议内容包括:串口通讯基本参数的约定(如波特率);数据帧格式;校验方法约定;自定义部分[5]. 此通讯协议只是通讯的基本约定,数据帧中包括可自定义的命令字、数据、状态,具体含义可根据具体应用自定义. 串口通讯参数约定:8位数据位、1停止位、无校验、9 600 bps;数据帧包括发送帧和返回帧,数据帧格式如下:发送帧如表1所示,返回帧如表2所示. 表1 通讯协议发送帧格式Table 1 Format of communication protocol frame表2 通讯协议返回帧格式Table.2 The format communication protocol of the response frame起始符:0x0D03结束符:0x55AA帧编号:在0~255之间循环变化,返回帧的帧编号和发送帧的帧编号须相同. 校验字:从包号开始到数据最后一字节进行异或取反.自定义部分:是本设计根据医疗控制平台的基本需求定义的一套命令字、状态字、数据. 通讯程序流程如图4所示,上位机发送命令后,首先启动定时器,然后定时检测是否接受到下位机上传的命令,如果收到命令进行帧检测和校验,如果校验通过,则按照命令分类处理后将处理结果以返回帧格式发送到上位机并关闭定时器,如果检验错误,则返回错误帧,帧状态中包含错误的状态类型,然后检测返回帧是否超时,如果没有,则继续检测,如果超时则关闭定时器. 图4 通讯程序流程图Fig.4 Communication program flow chart3 CortexA8上位机软件设计上位机平台使用以CortexA8为内核的芯片S5PV210,装载Android4.1系统,系统使用Eclipse进行软件开发,开发语言为Java. 3.1 Andorid主程序软件框架Android主程序使用从TabActivity类派生的一个主类TabActivity,由这种类派生的软件本身就是一个大的Tab,可以方便的加入一个模块程序. TabActivity类位于android SDK中android.app.TabActivity下,它本身继承自ActivityGroup,主要功能是实现多个activity或者view之间的切换和显示. 要使用该类必须新建一个类来继承TabActivity,并且该类的xml配置文件中必须包含<TabHost>、<TabWidget>、<FrameLayout>三个视图(View),其中后面两个标签是前面一个标签的子标签,<TabWidget>表示tab页的选项卡,相当于菜单页,<FrameLayout>表示显示内容的区域. 另外为增加动画效果,使用了从TabHost派生的一个新类AnimationTabHost,此类用于对TabAcitivity中的TabHost控件进行升级,使用此类后,切换页面时会产品动态的切换效果,使主程序界面更加美观. 3.2 串口通讯程序开发CortexA8串口通讯直接使用SerialPortOpt函数库,该库是一个专门用于串口开发的一个类库,其中包括了串口操作的所有函数,如打开串口、关闭串口、设置波特率、读取数据、发送数据. 为了方便测试,为Android串口模块设计了一个Android界面程序. 程序中通过使用Spinner类和Spinner控件来完成对串口号,波特率,数据位,校验位,停止位的选择. 主要实现了串口参数的基本配置,打开串口和关闭串口等基本功能. Android串口通讯样例界面如图5所示. 图5 串口应用程序效果图Fig.5 Communication program flow chart4 CortexM3下位机程序设计CortexM3中的程序是下位机平台的主要程序,此部分程序对上层提供执行命令的服务,对硬件层需要执行驱动层的API函数. 为了便于开发和维护,此程序被设计成两层:主程序层(main)和应用层(任务层). 主程序的分层结构和程序执行流程图如图6所示. 图6 CortexM3下位机程序框图Fig.6 CortexM3 under machine program block diagram主程序层为核心中枢,但是此层程序无需知道如何获取任务或者消息,无需知道是什么任务,也不需要关心任务该如何处理,而只需要管理好两个消息映射表和一个消息池. 消息映射表分别是消息采集映射表和消息处理映射表. 消息采集映射表是一个消息采集函数的地址到一个消息的地址映射,消息处理映射表是消息处理函数地址的映射,此表由上层应用程序模块进行注册,即应用程序将消息采集函数的地址、消息、消息处理函数注册到主程序的消息表和消息池中[6]. 主程序无需关心此消息表和消息池的具体内容,只需要循环从消息采集函数地址获得消息后,投递到消息池,然后把消息池中的消息交由消息处理函数处理即可. 应用程序层无需知道主程序的执行过程,只需要关心自己需要处理的任务. 即获取自己需要的消息,并且处理消息. 在应用程序初始化时将这些全部注册到主程序的消息映射表和消息池中. 5 结 语以一套高低搭配的双CPU控制平台为目标,研究了多CPU控制平台的架构,平台内部的通讯协议,并实现了上层和下层平台的通讯和控制功能. 通过实际应用,证明本研究方案能够满足实际医疗设备控制和监测的基本需求. 多CPU控制平台与目前智能化医疗设备的研究方向和发展现状相符合,满足多种医用仪器类产品的升级换代需求,具有较强的实用价值和经济效益. 致 谢感谢吴云幍老师对论文提出宝贵的指导意见!