 
- UID
- 1023229
- 来自
- 中国
|

嵌入式系统在大射电望远镜5米模型上悬索控制中的应用之二
1.3 电机控制接口电路
AT91RM9200 有六个相同定时/计数器(TC), 可用这六个TC产生12路PWM信号,虽然一个TC可产生两路PWM信号,但是这两路PWM频率相同,只是脉冲宽度不同。图3是其中一个TC的部分原理图。本系统中TC控制交流伺服电机频率(控制电机的速度),8254控制脉冲的个数(控制电机的角位移)。
其基本工作原理:把TC配置成产生波形状态,选择AT91RM9200内部时钟或外部时钟作为16位TC的时钟源,启动计数器(CLKSTA), TC从零开始计数。
当TC中的值与RA中的值相等,输出控制器可使TIOA输出高电平;当TC中的值与RC中的值相等, 输出控制器可使TIOA输出低电平,同时复位TC,使TC重新计数。这样可产生方波信号。RC的值控制TIOA输出脉冲的频率,RA和RC可控制PWM的占控比。当TC的值达到RA、RB、RC的值时还可产生中断,也可把这些中断屏蔽掉。这样产生的PWM频率可从几赫兹到几兆赫兹。TIOB产生PWM信号的原理与TIOA完全一样。
本系统中把TIOA配置为脉冲输出口,TIOB为外部事件触发输入口(即伺服控制卡中的脉冲计数卡产生的中断), 当伺服控制卡中的脉冲计数器(8254)计数到设定值时产生中断,由TIOB通过RS触发器停止TC计数。这样可实现伺服电机的速度和位置控制。
伺服控制卡的脉冲计数器的核心器件是两片8254[5],可进行六路独立的脉冲计数,如图4所示。
 图3 TC部分原理图
 图4 伺服控制卡原理图
2 软件开发
由于目前大部分基于ARM9的嵌入式系统一般用Linux,用于实时性要求不高的的设备。采用μC/OS需要写ARM9启动代码,初始化SDAM、FLASH、USRT、SPI、触摸屏控制芯片、LCD控制芯片等。写这些底层驱动代码时,在Linux网站开放的源代码很值得借鉴和参考。
2.1 嵌入式实时操作系统μC/OS-II
目前商用的嵌入式操作系统产品很多,十分成熟,并且提供了强大的开发和调试工具,但开发成本昂贵且大部分不提供源代码,并不适合小型系统的开发。μC/OS-II面向中小型嵌入式系统,其主要特点:公开源代码、可移植性、可固化、可裁减、支持多任务、具有可确定性等[4]。本系统不需要网络和文件系统,μC/OS-II是一个很适合本系统的嵌入式系统。
μC/OS-II的移植过程比较简单。它在ARM7处理器上的移植相当成熟。在AT91RM9200上的移植与ARM7处理器上的移植类似, 由于篇幅的限制,本文不具体介绍μC/OS-II在AT91RM9200上的移植过程。μC/OS-II要求用户提供一个周期性的10~100次/秒时钟源,实现时间的延时和超时功能[4]。AT91RM9200内有一个Period Interal Timer(PIT),它是一个十六位的减法计数器, 使用它很容易给μC/OS-II提供10~100次/秒时钟节拍。 PIT计数器产生时钟节拍为100次/秒的程序代码如下:

2.2 应用程序
基于μC/OS-II的应用系统工作时,首先初始化CPU;接着进行操作系统初始化,主要完成任务控制块(TCB)初始化、TCB优先级表初始化、空任务的创建等;然后开始创建新任务;最后调用OSStart()函数启动多任务调度。应用程序的编写主要考虑任务如何划分、任务的优先级、任务之间的通讯。
本系统靠触摸屏实现人机接口,故把检测触摸屏状态设为优先级最高,每10ms检测一次触摸屏状态。控制界面采用类似Windows的控件编程方式,把每一个控件看作一个任务来处理, 以手动精调控制界面(见图5)为例,上面有10个控件:控制电机位置的滚动条控件(6个)、控制馈源舱运动速度的滚动条控件(1个)、6台电机位置复位按钮控件(1个)、切换到自动控制和手动控制按钮控件(各一个)、电机启动控件(1个),加上前面的触摸屏检测任务,在此需建11个任务。它们之间靠消息通讯,触摸屏任务主要完成给其它11个任务发消息。每当检测到ADS7846产生PENIRQ,通过SPI接口向ADS7846发送A/D转换和读A/D转换结果指令,把结果转换到当前触摸屏按下点的坐标值,再把这个坐标值以消息的形式发出去,然后调用OSTimeDly(1)函数延时10ms。其余10个任务调用OSQPend()等待消息(坐标值),如坐标值在此控件内,触发相应的事件。其程序部分代码如下:

要实现六轴联动,就必须在程序中加入控制算法。由于悬索与馈源舱控制系统具有精确模型难以得到、 变结构的特点且控制精度要求较高,可采用的算法能用于动态未知的系统,并能实时适应受控对象的变化,采用非参数模型自适应控制算法[6]。把这种算法加在RUN按钮事件下。
本程序中还有许多中断服务程序,都放在OS_CPU_C.C中。例如,为了使电机运转连续以保证悬索馈源舱系统做平稳的扫描运动,要求当前伺服指令执行后需要更新脉冲的频率(RC的值)和脉冲计数的个数(8254)在几毫秒内完成,同时又要有很好的实时性,必须采用中断服务方式实现。
3 测试
作者编写了底层硬件的驱动,把μC/OS-II成功地移植到AT91RM9200上,并编写了基于触摸屏图形控制界面。本系统中有三个可互相切换触摸屏图形控制界面,其中手动精调控制界面见图5。
本系统输出的脉冲可从7Hz到几MHz, AT91RM9200中TIOA(见图3)最高可输出15MHz的脉冲,但由于8254计数器的最高计数频率为10MHz,制约了整个系统的脉冲输出频率,这完全可以满足一般的伺服驱动器的要求。选择TC计数器(见图3)的CLK为TIMER_CLOCK2(7.5MHz),RA=1,RC=3,这时输出的频率应为CLK/RC=7.5/3=2.5MHz,占空比为(RC-RA)/RA=2,输出电压的平均值为3.3×2/3=2.2V,用Fluke 196C示波器测得实际输出波形与理论完全一致,如图6。
本系统在大射电望远镜5米模型上通过调试,运行良好。目前ARM处理器绝大部分都用于手持设备,对实时性要求不高,但工业控制中要求实时性高。本系统也只用到AT91RM9200处理器的部分资源,从某种角度上讲是有点浪费,但作者把ARM9处理器和μC/OS-II用在工业控制上是一次尝试,从控制的鲁棒性都证明了AR91RM9200和μC/OS-II在控制电机多轴联动的效果是令人满意的。如充分利用AT91RM9200集成的USB2.0接口、以太网10/100BaseT MAC控制器,完全可以满足复杂的工业控制。随着嵌入式系统和ARM处理器的发展,ARM处理器在工业控制中会越来越多。
 图5 手动精调控制界面
 图6 Fluke 196C示波器测得实际波形
参考文献:
1 段宝岩.新一代大射电望远镜机电光一体化设计研究[J]. 中国机械工程,1999;10(9):1002~1004
2 ARM920T Technical Reference Manual
3 Atmel Electronics. AT91RM9200.date sheet.768B-ATARM.
4 SHAO Bei-bei 译. MicroC/OS-II The Real-Time Kernel (Second Edition).北京: 北京航空航天大学出版社,2003
5 佘海波.基于ISA总线的八轴联动伺服卡在大射电望远镜悬索馈源系统中的应用[J]. 电子机械工程,2002;18(2)
6 张玉魁. 大射电望远镜控制软件系统的研究.西安电子科技大学硕士学位论文, 2001;01 |
|