μCOS-Ⅱ在无刷直流电机位置伺服系统中的应用
μCOS-Ⅱ在无刷直流电机位置伺服系统中的应用
综MC/OS-在无刷直流电机位置伺服系统中的应用刘卫国胡亚山刘朝芳西北工业大学稀土永磁电机及控制技术研究所,西安710072)刷直流电机位置伺服系统该系统充分利用了DSP周边外设丰富既运算速度快的简化硬件系统,而PC/OS-I,能最大限度地缩短软件开发周期。
0概述TMS320F240(以下简称F240)是T1公司的一款应用于运动控制领域的定点DSP,运算速度快,外围设备丰富,功能强大,价格便宜,成为应用于电机控制领域的理想微处理器,为高性能数字伺服系统提供了实现手段。但是当应用于较复杂的系统中时,它要同时完成采样计算、控制、通讯等任务,没有一个实时多任务操作系统是不行的。PC/OS-是一种源码公开的占先式实时多任务操作系统绝大部分的源代码是用移植性很强的ANSIC写的,和微处理器相关的部分是用汇编语言写的。汇编语言写的部分已经压到最低程度由于与硬件相关的代码仅200行左右,且注解很清楚,使得PC/OS-能很方便地移植到微处理器上,包括F240处理器。F240与PC/OS-的结合,使得位置伺服系统的硬件设计和软件设计都变得非常简单,能极大限度地降低开发难度和缩短软件开发周期1系统硬件构成本硬件系统主要由功率驱动*MOSFET逆变电路和逻辑控制电路及必要的保护电路构成,还包括完成位置伺服功能所必需的电流、转速和位移检测功能其系统硬件构成如所示本系统采用F240为主要控制单元转子位置传感器采用霍尔传感器,其输出送入F240的快速捕获单元(CAP模块),采用查询的方式或中断的方式,F240将获知当前转子所处的位置,改变控制PWM波形的方式控制ACTR内部的事理管理器模块(EV)将产生无刷直流电机所需要的6路PWM波形,以便进行正确地换相,从而完成电机的控制与驱动DSP除了完成无刷直流电机的控制驱动这一基本功能之外,还要进行系统的故障检测与系统保护以及位置环速度环电流环三环控制。三环控制规律和算法的实现,都是在F240内部实现的。为了提高系统的快速特性,必须加入电流环。电流检测电路检测流过无刷直流电机的电流大小,送到F240的A/D转换模块,以便进行处理。F240获得从外界给定一个位置信号后0g和从位置传感器获得反馈回来的当前的位置信号0f,通过一定的控制算法,驱/模2伺服系统软件软件是基于上述硬件的基础上设计的。正确的硬件系统是软件设计的前提。本系统采用MC/OS-实时多任务操件系统编程,这与平时用到的前后台系统编程思想不同不太复杂的的小系统一般设计成前后台系统应用程序是一个无限循环,在循环中调用相应的函数完成相应操作,这部分称为后台行为,而中断服务程序处理异步事件,这部分称为前台行为。但是当情况比较复杂时,一般用一个适当的操作系统降低系统开发的难度,使得应用程序的开发比较容易。而MC/OS-就是一个开发中小型项目比较合适的嵌入式实时操作系统MC/OS-是源码公开的嵌入式实时多任务操作系统,它可移植到很多处理器上,包括我们用到的F240它的源代码可裁剪,可以减少MC/OS-所需的存储器空间(RAM和ROM),稳定性和可靠性都很高。自1992年以来,世界上已有很多人在各个领域使用MC/OS-I例如,照相机行业医疗器械、音响设施、发动机控制1丨网络设备、高速公路电话系统、自动提款机、工业机器人等等。
为了实现在多任务操作系统MC/OS-在基于F240位置伺服系统中的应用,首要的任务就是要实现MC/OS-在F240上的移植,使得实时内核能在F240上运行。MC/OS-的移植相对来说比较简单移植MC/OS-,主要是修改它与处理器有关的3个文件OSCPU.HOSCPU内部机理,掌握如何实现任务之间的调度以及系统堆栈数据的压入压出对成功地移植极为重要。
在F240中,可采用定时器1周期中断T1PNT或实时中断RTI作为时钟节拍源,时钟节拍的频率一般在10Hzr 100Hz左右采用软件中断作为任务切换的中断服务例程。
代码移植结束后,下一步就是测试可以让内核自己测试自己,也可以运行一些简单的任务和时钟节拍中断服务程序一旦多任务调度成功地运行起来了,一个实时多任务操作系统平台就建立起来了。
2.2多任务操作系统流程整个软件的流程如所示其中OSInU()函数用于初始化MC/OS-所有的变量和数据结构。OSInit()同时还建立空闲任务,这个任务总是处于就绪态的。空闲任务OSTaskidle()的优先级最低,即OSLOWESTPRIO若有统计任务,还得建立统计任务OSTaskST(),并让其进入就绪态,其1同时,根据系统的配置初始化4个数据结构缓冲区,包括任务控制块缓冲区、事件缓冲区、队列缓冲区和存储器缓冲区。创建任务进程部分主要用于创建用户的任务。OSStart()用于启动多任务,在启动MC/OS-之前,用户至少要建立一个应用任务。当调用OSStarL()时,OSStart()从任务就绪表中找出用户建立的优先级最高任务的控制块,然后调用高优先级就绪任务启动函数OSSLarLHighRdy()函数OS-SLarLHighRdy()将最高优先级任务中任务堆栈中保存的值弹回到CPU寄存器中,然后执行一条中断返回指令。中断返回指令强制执行该任务代码,然后在最高优先级任务中初始化时钟节拍中断函数,以后就可以进行任务调度了。
主要的工作就是将F240要完成的任务合理地服系统要完成如下的任务:产生驱动无刷直流电机的6路PWM波形;对给定的位置信号及反馈回来的位置信号进行采样并进行位置闭环调节;计算转速值并进行速度闭环的调节;对流过无刷直流电机的电流进行采样并进行电流环调节。
2.3.1故障检测及保护这里的保护主要是指过流保护。当流过无刷直流电机的电流过大时,故障信号低有效将发送到F240的功率中断PDPINT端,定时器比较输出信号将立即变为高阻态,封锁6路PWM输出,从而关断逆变电路的所有开关管,起到保护的作用。
2.3.2无刷直流电机的驱动产生驱动无刷直流电机的6路PWM波形有两种方法,一种是采用查询方法,另一种是采用中断方法。若采用查询方法,CPU的大部分时间都浪费在查询当前的转子位置信号上,显得不合理因此,本系统采用中断方式。首先在主程序的开头,启动无刷直流电机,然后在捕获中断中实现电机的换柜在捕获中断程序中,首先将CAP对应的引脚设置为普通的IO口功能并设置为输入模式,读取当前的转子位置信号。根据当前的转子位置信号,决定要开通哪两个功率管,从而决定PWM输出方式控制字ACTR的值。事件管理器(EV)输出满足要求的PWM波形,完成无刷直流电机的电子换相,然后恢复CAP对应引脚的捕获功能,最后清除中断标志位,捕获中断程序结束。
2.3.3位置环速度环和电流环的实现过流保护及无刷直流电机的驱动都是用中断来实现的。与它们不同,位置环、速度环、电流环均采用任务调度方式来实现在此任务中,位置环的优先级最高,速度环的优先级次之,电流的优先级最低。在三环控制系统中,一般电流环速度环、位置环的周期相差一个数量级。在此系统中,假设进行了30个电流环调节后进行一次速度环调节,进行10次速度环之后进行一次位置环调节。
位置环的实现位置环的主要任务是采集给定的位置信号与反馈回来的位置信号,然后经过一定的算法,如传统的PI算法,模糊控制算法等,给出中间环速度环的速度值。在此系统中,给定的位置信号和反馈回来的信号均为模拟量,它们经过信号处理电路后送入F240中A/D转换器的引脚上由于位置环是所有任务中优先级最高的任务,故系统在开始进行多任务调度时,调度的第一个任务即是PositionTask()器中断放在系统初始化函数OSInit()之后,调用多任务系统启动函数OSStart()之前。这里潜在的危险是,时钟节拍中断有可能在MC/OS-n启动第一个任务之前发生,此时MC/OS-处于一种不确定的状态,用户应用程序有可能会崩溃在本系统中,我们在PositionTask()程序中for(;)语句之前,也即死循环之前,启动时钟节拍中断采用F240的实时中断RTI中断时钟节拍中断。
与RTI中断有关的只有两个寄存器,为实时中断计数寄存器RTICNT和实时中断控制寄存器RTI-CR配置RTI十分简单,只要将RTICR中的中断允许位RTIENA置1,同时,设置实时中断预分频位RTIPS2-RTIPS()确定实时中断的频率我们把位置环作为一个任务进行调度下面为此任务程序清单。
务初始化时钟节拍中断函数;速度环完成后发送的信号量获得ADC资源;发送A/D采样开始命令,采样给定的位置信号和反馈的位置信号;进行位置闭环算法,给出速度值;同时,在主程序创建任务的代码区中添加如下代码;//W创建位置环任务建立任务的一个函数。其中传递的第一个参数为任务的名字,即任务的入口地址第二个参数为任务开始执行时传递给任务的参数的指针,第三个参数为分配给任务的堆栈顶指针,第四个参数为分配给任务的优先级。
添加完上述代码后,就将位置环任务添加到操作系统中去了。
在此任务中代码中,在等待获得ADC资源和等待速度环给出的信号量时,PositionTask()这个任务将被挂起,这时将会切换到别的优先级最高的就绪态任务运行速度环的实现速度环为三环控制系统中的中间环,它的给定值为位置的输出,反馈值为当前无刷直流电机的转速,输出为内环电流环的给定值。为此必须测出电机的转速可以从转子位置传感器的信号通过计算来获得转速如果无刷直流电机是2对极的,则必须经过12次电子换相,电机才转动一凰可以在固定的时间内统计无刷直流电机换了多少次相,从而计算得出电机的转速也可以统计在换固定值次相后统计经过了多少时间的方法来获得转速当然,也可采用计算位移传感器的在单位时内的变化量求转速下面为速度环任务的程序清单:voidpositionTask(void*pdata)//速度环任务/防止出现编译错误for(;)内环电流环的电流值;(SpeedLoop);//给位置环发送信号量,调度位置任务同时,在主程序创建任务的代码区中添加如下代码:/创建速度环任务添加完上述代码后,就将速度环任务添加到操作系统中去了电流环的实现电流环为三环控制系统中的内环它的调节周期一般很短,假设周期为15(Ps为了避免产生电磁噪声,选择PWM波形的开关频率为20kHz,即定时周期为5(Ps当定时器中断三次时,进行电流闭环,改变定时器比较寄存器的值,即改变PWM波形的占空比,从而达到改变通过电机电流的目的下面为电流环任务的程序清单:/防止出现编译错误for(;)获得ADC资源;发送A/D采样开始命令,采样给定的位置信号和反馈的位置信号;等待A/D采样结束;读取A/D转换结果;释放ADC资源;进行电流闭环算法,给出占空比大小,改变PWM方式控制字ACTR的值;电流环次数加1;(CurrentLoop);/给速度环发送信号时,调度速度环任务;同时,在主程序创建任务的代码区中添加如下代码:/创建电流环任务添加完上述代码后,就将电流环任务添加到操作系统中去了。