background image

等待三次位速度环调节完成

while(ADCFlag);//等待 ADC 资源的释放 ADCFlag=1;//占

ADC 资源启动 AD 转换;等待转换结束;ADCFlag=0;//释放 ADC 资源对转换结果进行

软件滤波;采用模糊

PID 算法实现位置环控制;}由以上的示意性代码可以看出,当三次速

度环调节没有完成或者

ADC 资源被其他任务占据,则位置环任务将被挂起,uC/OS-开始

进行任务调度,此时处于就绪态的具有最高优先级的任务将投入运行。因此,为保证高优级
的任务尽可能快地得到执行,每个任务占用

ADC 的资源的时间不能过长,一旦转换结束,

应马上释放该资源;这也是在基于

uC/OS-编程中必须遵循的思想。

  上下位机通信任务通信任务主要完成

F2812 向主控计算机传送反馈位置、出错报告等信

息,以便上位机及时了解下位机的工作状态并完成相应的控制功能。串口通信是一个耗时的
任务,如果不采用实时多任务调度机制,将对系统的实时性构成严重的威胁,以

9600bps

的波特率来计算,完成一个字节的传送就将耗掉近

1ms 的时间,要传送一批数据所需的时

间就非常可观了。采用

uC/OS-按优先级进行任务的自动调度,它就可以在高优先级任务执

行的空隙里完成传送任务,这样既满足了实时性,又大大提高了

CPU 的使用效率。在多任

务运行之前,首先要建立任务,任务的建立非常简单,在此不再赘述。
  实验结果及结论实验中上位机提供

8 的阶跃信号,其中一个电机的位置跟随情况如所

示,该图是将反馈的位置数据通过串口传到上位机,在

Matlab 中画图得到的。位置响应实

验曲线可以看出,当

uC/OS-成功移植到 F2812 以后,编写起程序就非常简单。只要把要完

成的功能分成若干个任务,每个任务单独编程就可以了,而无需考虑整个程序的结构。
  实践证明,基于

uC/OS-的编程方式非常适用于比较复杂的多电机位置伺服系统,它大

大增强了系统的实时性和可靠性,并且极大地提高了系统的可扩展性,将来如果要扩展系
统功能,只需单独添加相应的任务就行了,而无需对整个程序的结构进行修改。