嵌入式系统是当今自动化领域技术发展的热点之一,它的出现为工业控制设备的实时、智能化提供了强有力的技术支持[1]。ARM微处理器是嵌入式处理器的典型代表,已经渗透到各个领域。作为32位的RISC架构,基于ARM核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展。Windows CE操作系统具有很高的实时性,已经在汽车工业、航空工业、工业控制、安全防护等领域中得到了广泛应用。Windows CE能从闪存启动,从而避免了暴露在灰尘、高温和震动环境下,使它可以适应恶劣的生产环境。因此Windows CE在工业控制领域有着很好的应用前景[2]。
1 系统概述
本系统是一个电机监控系统,运行在S3C2410硬件平台上,软件运行环境为Windows CE 5.0操作系统;由ActiveX控件构成电机监控软件界面。系统运行温度在0~100 ℃之间。通过界面,可以直观地看出当前直流电机和步进电机的转速以及电机运行时间和表面的温度,当温度超过75℃时立即控制电机停止运转;还可以控制电机的启动、停止、加速和减速。通过这些实现电机的监控。
2 硬件设计
硬件电路采用的是ARM9内核微处理器S3C2410A,扩展有64 MB SDRAM、64 MB NAND Flash、2 MB NOR Flash等存储器,可运行Windows CE 5.0操作系统。外设主要是直流电机、步进电机、温度传感电路、液晶屏等,硬件框如图1所示。
步进电机采用了达林顿管驱动芯片ULN2003来驱动四相步进电机。温度传感器和TFT液晶屏的驱动电路比较简单,下面重点介绍一下直流电机的驱动电路。
直流电机驱动电路如图2所示。直流电机控制使用了H桥驱动电路[3],控制口线为GPB0、GPH9(GPG0与GPH9为连接S3C2410A核心板时的引脚连接,图中标出的是连接S3C2410A核心板的引脚编号)。JP17可以断开直流电机控制电路与S3C2410A的连接。当GPB0输出高电平时(即ZDJ_A点为3.3 V),则Q2、Q3导通Q6导通MOTOR_B点为MGV+,Q6导通,MOTOR_A点为GND,此时直流电机将会正转。由于Q6的集电极通过一个二极管D7连接到H桥的另一个控制端ZDJ_B,将ZDJ_B控制端电压钳在1.0 V以下,因此不管GPH9输出是高电平还是低电平,Q4、Q5都会截止Q8截止,不会造成H桥短路故障。当GPB0输出为低电平(即ZDJ_A点为0 V)时,则Q3、Q6截止,Q7截止,GPH9的输出电平可以控制电机反转或停机。若GPH9输出高电平(即ZDJ_B点为3.3 V),则Q4、Q5导通Q8导通MOTOR_A点为MGV+,Q5导通MOTOR_B点为GND,此时直流电机将会反转。当GPH9输出低电平时,Q4、Q5都会截止Q8截止,电机停机。二极管D8~D11为续流二极管,用于释放电机线圈上产生的反电动势。电阻R162、R163为限流/保护电阻。PWM0输出信号通过一个电阻连接到一个电容上,信号通过R82和C127进行滤波,从而实现一个简单的DAC控制电路,将输出连接接到直流电机驱动电路,从而实现直流电机驱动[4]。
3 软件设计
软件设计是基于Windows CE操作系统之上构建的,软件框图如图3所示。
3.1 驱动部分
首先是定时器的分配。S3C2410A提供了5个定时器Timer0~Timer4,Timer4分配作为操作系统时钟Tick,将Timer3分配给触摸屏。PWM定时器驱动程序用Timer0和Timer1得到PWM输出信号。PWM定时器根据正弦函数sinx的值不断改变PWM的占空比,就可以输出一个正弦方波。
在本系统中会使用到GPIO、PWM等驱动,当使用这些驱动时,流式接口驱动程序把设备抽象成文件系统进行操作。首先电机监控器程序使用API对设备进行访问,文件API被操作系统转发到FileSys.exe进程中;然后FileSys.exe发现是对设备进行操作,就会把执行交到设备管理器,接着设备管理器根据具体的请求,调用不同的流式接口驱动程序中暴露的接口;最终,驱动程序负责与硬件交互。
3.2 线程部分
Windows CE的调度严格按照优先级来进行。具有最高优先级的线程如果处于就绪状态,总会被调度系统选中;如果系统中存在多个优先级相同的就绪任务,这些进程以时间片轮算法调度;如果线程的时间片大小被设置为0,那它会一直占有处理器,直到线程结束后进入阻塞挂起或休眠状态[5]。
主线程(流程图如图4所示):主要响应各种窗口消息事件。考虑到软件要能及时响应用户发出的各种事件,主线程的优先级设为THREAD_PRIORITY_HIGHEST(高于正常优先级2级)。
监控功能主要通过3个线程实现。温度监控线程:实现对两个电机温度的监控,一旦温度超过预定值,立刻停止电机转动,从而保护电机。因为此进程的任务必须及时处理,温度监控线程的优先级设为THREAD_ PRIORITY_TIME_CRITICAL(高于正常优先级3级,具有这个优先级的线程不会被抢占)。步进电机转动控制线程:步进电机控制口线为GPC0、GPC5、GPC6、GPC7,只有不停地控制时序,才可以控制电机转动,电机运行监控器软件单独使用一个线程来实现控制电机的转动。步进电机转动控制线程的优先级设为THREAD_ PRIORITY_NORMAL,拥有正常优先级。电机状态显示线程:电机运行监控器软件中有温度计,LED时钟,转速表3个控件分别用来显示电机的状态,任务量比较大,占用时间比较多,为了不影响电机运行监控器软件的实时性,电机状态显示线程的优先级设为THREAD_ PRIORITY_BELOW_NORMA L(低于正常优先级一级)。
3.3 界面部分
设计虚拟仪器面板。根据实物,在虚拟面板上放置设计好的ActiveX控件,在对象监视器中对各个控件的参数进行修改,使其与实际相符。再对各个控件进行编程,使其实现实际控件所具备的功能及各个控件之间的逻辑控制关系。LED数码管控件通过矩形背景绘制和数码管的绘制产生;温度计控件通过水银柱的绘制和刻度的绘制产生;圆形仪表盘控件通过一个仪表盘绘制和一个刻度的绘制产生;大字体按钮控件通过一个立体矩形的绘制和一个大字体的绘制产生。考虑到刷新可能对界面产生的影响,在绘制控件过程中均采用双缓冲技术。
4 系统测试
将软件与硬件联系起来,得到一个完整的系统。对系统的各项功能进行测试,可以达到预期的效果。对电机的运行时间、转速、表面温度等各个指标进行了监控,效果图如图5所示。
本文设计的是基于Windows CE操作系统的电机监控系统。由于硬件的限制,直流电机转速测量是根据PWM得到的估测值,如要得到比较理想的结果,可以使用转速传感器来实现测速。尽管如此,整个系统安全可靠,实时性和稳定性高,硬件成本低,软件界面友好,具有一定的推广前景,方便以后移植到实际工控设备中。
参考文献
[1] 吴晨曦,蒋嵘,伍新,等.电机运行监控系统的设计与实现[J].机械工程与自动化,2012(2):147-148.
[2] 王大鹏,范惠林,陈丹强,等.基于ARM-WinCE的某型航空发动机温控盒检测仪设计[J].电子技术应用,2013,39(5):8-11.
[3] 邹中华,吴陈,曾庆军.基于S3C2410的直流电机PWM调速系统[J].微计算机信息,2008(24):130-131.
[4] 周立功.ARM&WINCE实验与实践—基于S3C2410[M].北京:北京航天航空大学出版社,2007.
[5] 何宗键.WindowsCE嵌入式系统[M].北京:北京航天航空大学出版社,2007.