运动控制综合实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运动控制综合实验
实验报告
电气工程系
2012年6月
一、实验目的及思想
本实验的主要思想是通过Freescale软件-Code Warrior IDE的程序编写去启动直流无刷电动机(软启动),并控制电动机的旋转方式(正转、反转)。
首先,必须通过软件能顺利地产生PWM波形去控制IGBT功率管,实现对功率管的导通与关断,同时接上电动机,通过手动旋转电动机,霍尔传感器感应转子的位置,从而决定定子通电流的状态,这样通过不断的规律的改变电动机三相定子电流的通断来驱动电动机的旋转。
基于上诉思想,采用六步控制法,利用三个中断子程序,判断三个霍尔传感器的状态,每个传感器都有两个状态,当转子转到不同状态时,各传感器的状态不一样,对应不同的定子电流通断情况。改变PWM的占空比,能改变电动机的转速。
(by曾军栋)
二、
(by
三、问题及解决
1、PWM波形产生问题
PWM波形的产生,是整个实验的最初阶段,也是最重要的一步,PWM能否顺利产生直接影响到下面实验的进行。在该阶段,我按照助教老师给定的四步PWM 产生法去参考所给资料,来编写这四条程序。开始一味的相信参考资料上的程序代码格式是没有错的,但我们组测试好久都不能产生PWM波形,对着资料思考好久还是不行,到最后没有办法,只好请教助教,助教帮着将那四行代码依次改动,最后证明资料上的代码是错的,问题得到解决。
图3-1 错误指导
(by曾军栋)
2、中断问题
在进中断这一环节,程序编写好之后,接上电动机,通过手动旋转电动机,控制板上对应的进中断产生的PWM波形的LED灯未亮,这就是未进入中断的现象,也就是中断里的程序并未运行,也就未产生相应的PWM波形。经检查,程序方面并没有错误,问题出在配置文件上,配置文件中断设置方式不对,应该对timer进行中断边沿触发配置,如图3-2
图3-2中断配置文件
在修改后,程序顺利进入中断,但当给电机通上直流电时,直流电源显示没有电流通过,也就是虽然触发了中断,产生了PWM,但由于没有使能PLD,导致驱动电路没有正常启动工作。这一问题困扰了我们半节课的时间,现在想起来,感觉当时助教提到过这个问题,但是由于我们的疏忽没有能够引起足够的重视,导致了一个小问题耽误了时间,也很大的影响到组员的情绪。利用配置函数,控制PLD使能的GPIO_B_2口设置为output,同时延时控制关闭环流电感短路开关GPIO_B_3,如图3-3和图3-4
图3-3 PLD使能PLD和短路开关配置文件
图3-4 使能PLD和短路开关配置函数
(by 曾军栋)
3、起动问题
第一次采用手动起动,即需要手动让电机转起来,霍尔传感器跳变后触发中断,之后由程序控制。不能自起动的主要原因是,我们采取的是中断控制,而不是查询控制。而进入中断的条件是需要霍尔值产生翻转,即所谓的边沿触发,配置文件如下图3-5,而静止电机无法产生翻转,所以无法直接起动。
图3-5 计数中断配置文件
第二次,我们对程序进行修改,这时由于已经有其他组用查询方式实现电机控制,我们想到在不改变用中断控制的基础上,在起动第一次采用查询的方式,原理与查询方式相同,即获取GPIO_C对应的霍尔值,从而取得静止电机的磁场位置,这时再利用switch语句,针对六个PWM控制方式,选择对应磁场位置的PWM控制方式,产生力矩带动电机。一旦电机开始转动,则控制部分可以交给中断函数实现。具体的起动函数如图3-6
图3-6 起动查询代码
可以看到,用h_start与0x0058,目的是取出GPIO_C的反馈霍尔值的三个bit 值,pwmControl函数,是为了方便多次利用而自己写的函数,六个参数对应三组六个IGBT的PWM控制。经过改动之后,电机可以达到自起动。
但继而产生了另一个问题,就是当设置转速较高(即duty cycle较大)时,电机起动第一下脉动较大,而且通过观察直流电源,开始时的电流冲击也很大,可以达到正常运行是的3倍多。而这时其他组的同学也又开始尝试软启动,所以我们开始进行起动代码的第二次改动。
我们的思路也很简单:利用循环语句,将初始duty从零开始调整,每次进中断提高一定的duty值,直到达到预设duty值,通过控制开关导通时间,控制平均电压,从来使电机缓慢逐步提升转速,减小起动冲击。代码如图3-7
图3-7 软起动中断控制部分
但情况却并没有我们想的那么简单,当从零开始调整duty值时,电机根本转不动,而是仍然需要我们手拨动才能获得继续的动力,并可以慢慢由低速上升。经过我们的分析,我们认为:必须要考虑电机停转时的摩擦阻力,由于电机静摩擦力要大过滑动摩擦力很多,所以当用手拨动使电机摩擦力变为滑动摩擦时,则这个问题可以较好解决。经过十几次的尝试,我们确定在该电机下,duty值在350左右,可以使电机克服静摩擦,顺利起动,之后再利用图3-7中的控制程序,完成软启动,
同时设置了pwm_start_end参数,界定起动结束。如图3-8
图3-8 软起动参数配置
这里我们还遇到一个小问题,由于在delta值的设定上,一开始我们设置过大,在50左右,由于电机每转一圈,要触发六次中断函数,所以这时电机转速上升过快,几乎看不到起动过程,所以我们将delta值设置为最小的1,保证了起动的过程缓慢平稳。
至此,起动的问题基本得到解决,但在后期测试中,我们还发现了一个奇怪的现象:就是有时候电机起动的一下,会产生反向的力矩使电机反向晃动,造成连锁反应从而造成电机反转,而因为我们设置的是正转中断,所以会有严重脉动。这个问题我们一直没有能够很好的解决,我们认为虽然开始起动的那一下,起动冲击已经较硬起动小了很多,但还是存在起动冲击,可能冲击力矩产生时在阻力等多方面因素的影响,会导致电机反向震动,而连锁到后面的过程,造成起动不成功。
(by张成博)
4、正反转问题
最初的初始设置,我们组都是以正转情况为缺省值。正转时,在正交的90度坐标系里,转矩方向落后磁场方向120度,以拉动转子顺时针旋转。而在反转时,则是转矩方向超前磁场方向120度,以拉动转子逆时针旋转。当然,单独控制任意一种转向是容易实现的,但要控制电机由正转到反转,或者反转到正转,则需要编程中加以一定的技巧。
开始,我们设置方法是:当按动反转按钮时,即触发发转中断函数(用if语句实现正反转的判断),实现代码如图3-9
图3-9 直接反转控制
这时遇到了很大的问题,因为按下反转按钮时,由于正转转子的惯性作用,无法立刻很快反转,过渡过程脉动很大,甚至无法过渡到反转阶段,而是卡在中间停止不转。经过分析,我们认为,需要将正转转速降低到一定程度(但不能停止,否则无法触发中断),之后再实现反转,这样或许可以消除脉动。由于是中断方式,所以需要设置反转标志位,当转速降低到可以起动反转函数时利用标志位实现反转。
如图3-10