当前位置:文档之家› [电气工程自动化]直流无刷电机-运动控制实验报告

[电气工程自动化]直流无刷电机-运动控制实验报告

[电气工程自动化]直流无刷电机-运动控制实验报告
[电气工程自动化]直流无刷电机-运动控制实验报告

《运动控制系统综合实验》

实验报告

小组成员:

直流无刷电机实验报告

一、实验目的

通过对8257的编程控制,发出可以驱动直流无刷电机的六路PWM 波,实现对电机的控制。

二、实验原理

1.直流无刷电机驱动原理

这部分在PPT里有详细介绍,简单来说就是要根据转子上的三个霍尔传感器的状态发出下一步所需的三相电流。刚开始时我对这部分原理迟迟不能搞透彻,对着向量图思考了好久,就是不能把霍尔传感器的状态和所需电流方向对应起来。主要问题是那个PPT上的向量图没有清楚的思考步骤,导致我把定子的磁场一直当成转子的看,当然搞不清楚。后来在和身边同学交流后才明白。然后我按照六步驱动法得到了逆时针转动所需的霍尔状态表,如图1左,经验证此状态表是可以成功驱动电机的。

搞定逆时针转动后我趁热打铁,把顺时针转动的霍尔状态表也写了出来。但是最开始我想当然的以为把逆时针的状态倒过来对应霍尔传感器的值电机就会反转,经过试验后证明这种思路是错误的,电机还是逆时针转动。我想了好久没想明白,只好又从头推了一遍顺时针转动所需的状态表,如图一右。前后对比我们

发现相同霍尔状态时,正反所需的电流恰好相反,也即相差180°。再回想推导过程中实际是用下一个状态的电流对应本状态的霍尔值,我一下豁然开朗。我判断电机在某一位置时允许有60°的误差,逆时针转动时上一个状态加上60°,顺时针转动时则减去60°,所以顺时针逆时针转动正好差了180°。

霍尔传感器的状态和所需电流如下表:

2.相序确定

上述表格中A,B,C其实是我们假定的,与霍尔元件HaHbHc 对应的ABC并不对应,所以我们还要确定一下三相相序。考虑到我们只给三相电机提供A正B负的电流时,电机转子应该停在一个确定的位置,而这个位置对应的霍尔状态值为01

0。那么当我们任意通入一正一负的电流时,若霍尔状态值为010,此时正电流即A相,负电流即B相。按此方法即可确定相序,所用的A正B负程序如下:

写在main里面是为了一直发出A正B负的电流。

3.8257的编程原理

一直以来涉及到程序的地方都让我很头痛,不过这次还好,codewarrior采用C语言,还是可以熟练应用的。概括说

来,我们所编写的程序应能按照上述表格发射正确的PWM波,为此需添加PWM模块,并应用里面的Submodule子模块。每个

模块可以产生两路PWM,所以我们需要三个子模块。通过对

module里的value赋值可以控制该路波的发出与占空比,从

而发出所有的PWM。

三、实验中遇到的问题与解决

显然在实验过程家都碰到了许多问题,困扰我们的问题比较多,其中比较大比较重要的有以下几个:

1.PWM模块的配置

虽然关于PWM模块的设置助教老师讲过一遍,但怎奈需要配置的参数太多,前几周我都没能把PWM波完整的发出去,更

别提受控制的波形。好在通过查找相关资料我终于搞明白如何调整占空比,如下所示:

通过给VAL2、VAL3赋值即可控制PWM23开通的时间。这是一个Sub里的一个频道A,对频道B和其他Sub方法是一样的。

这样我们终于可以发出6路PWM,但此时这些PWM还不受控制,是一起输出的,下一个问题是怎么控制PWM的输出。

2.PWM输出的控制

开始时我想反正占空比是可以固定不变的,那就控制频道的输出与否就可以控制PWM的输出了。刚好我在PWM自带的函数库里看到了控制某路输出enable/diaable的函数,如下:

因此就采取这种方法进行编程。但是不知为何,采用enable/disable的方法编写的程序就是不能正确工作,而且逻辑上程序也没有错误,在多次讨论找不到错误后我就向身边的同学请教,又学会了另一种方法,即通过对三个模块的VAL2、VAL3、VAL4、VAL5的不断赋值来控制,相关函数如下:

采用这种方式要注意每次对某个模块复制后要加上一行LDOK,即将寄存器里的值赋给VAL,否则VAL的值不会改变。

相关主题
文本预览
相关文档 最新文档