每天一点单片机知识单片机学习

步进电机

2019-03-18  本文已影响1人  风情云
Snipaste_2019-03-17_18-50-17.png
假定电机的起始状态就如图 9-4 所示,逆时针方向转动,起始时是 B 相绕组的开关闭合,B 相绕组导通,那么导通电流就会在正上和正下两个定子齿上产生磁性,这两个定子齿上的磁性就会对转子上的 0 和 3 号齿产生最强的吸引力,就会如图所示的那样,转子的 0 号齿在正上、3 号齿在正下而处于平衡状态;此时我们会发现,转子的 1 号齿与右上的定子齿也就是 C 相的一个绕组呈现一个很小的夹角,2 号齿与右边的定子齿也就是 D 相绕组呈现一个稍微大一点的夹角,很明显这个夹角是 1 号齿和 C 绕组夹角的 2 倍,同理,左侧的情况也是一样的。
接下来,我们把 B 相绕组断开,而使 C 相绕组导通,那么很明显,右上的定子齿将对转子 1 号齿产生最大的吸引力,而左下的定子齿将对转子 4 号齿,产生最大的吸引力,在这个吸引力的作用下,转子 1、4 号齿将对齐到右上和左下的定子齿上而保持平衡,如此,转子就转过了起始状态时 1 号齿和 C 相绕组那个夹角的角度。再接下来,断开 C 相绕组,导通 D 相绕组,过程与上述的情况完全相同,最终将使转子
2、5 号齿与定子 D 相绕组对齐,转子又转过了上述同样的角度。那么很明显,当 A 相绕组再次导通,即完成一个 B-C-D-A 的四节拍操作后,转子的 0、3 号齿将由原来的对齐到上下 2 个定子齿,而变为了对齐到左上和右下的两个定子齿上,即转子转过了一个定子齿的角度。依此类推,再来一个四节拍,转子就将再转过一个齿的角度,8 个四节拍以后转子将转过完整的一圈,而其中单个节拍使转子转过的角度就很容易计算出来了,即 360 度/(84)=11.25 度,这个值就叫做步进角度。而上述这种工作模式就是步进电机的单四拍模式——单相绕组通电四节拍。
我们再来讲解一种具有更优性能的工作模式,那就是在单四拍的每两个节拍之间再插入一个双绕组导通的中间节拍,组成八拍模式。比如,在从 B 相导通到 C 项导通的过程中,假如一个 B 相和 C 相同时导通的节拍,这个时候,由于 B、C 两个绕组的定子齿对它们附近的转子齿同时产生相同的吸引力,这将导致这两个转子齿的中心线对比到 B、C 两个绕组的中心线上,也就是新插入的这个节拍使转子转过了上述单四拍模式中步进角度的一半,即 5.625度。这样一来,就使转动精度增加了一倍,而转子转动一圈则需要 8
8=64 拍了。另外,新增加的这个中间节拍,还会在原来单四拍的两个节拍引力之间又加了一把引力,从而可以大大增加电机的整体扭力输出,使电机更“有劲”了。

让电机转起来

再重新看一下上面的步进电机外观图和内部结构图:步进电机一共有 5 根引线,其中红色的是公共端,连接到 5V 电源,接下来的橙、黄、粉、蓝就对应了 A、B,C、D 相;那么如果要导通 A 相绕组,就只需将橙色线接地即可,B 相则黄色接地,依此类推;再根据上述单四拍和八拍工作过程的讲解,可以得出下面的绕组控制顺序表,如表 9-1 所示:


Snipaste_2019-03-18_14-49-53.png

假如橙黄粉蓝线依次接低4口,那编码为0XE,0XC,0XD,0X9,0XB,0X3,0X7,0X6。让某低四口依次变换此顺序,电机即可工作,反转即是此顺序反过来,但要注意,每次变换的时间至少间隔1.8ms。这是电机反应最快的时间。


Snipaste_2019-03-18_14-59-17.png
上面那个启动时间就是反应时间,单位是每秒脉冲数,1/550=1.8ms。还有就是这个点击转起来是不是有点慢,感觉这是不是出错了。肯定地说没有,上面那种写法是转子转一圈并不是外面轴转一圈。
Snipaste_2019-03-18_15-00-16.png

看上图可知,步进电机有几个齿轮来减速,再来看看上上图的表中的减速比,1:64,这个就说明是轮子转64圈,轴才转一圈。

驱动

由于单片机的输出电流过小,无法直接带动步进电机。所以要用达林顿驱动器ULN2803。接法如下图,还有一个针脚省略的是接GND。c脚那边是放大电流后的,接步进电机。


微信图片编辑_20190318201326.jpg

也可以用三极管做驱动电路。


Snipaste_2019-03-18_14-59-50.png
步进电机的基本情况已经介绍,接下来就是上程序。

例子

#include<reg52.h>
void delay()   //2ms
{
    unsigned char x=200;
    while(x--);
}
int main (void)
{
    unsigned char table[]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};
    unsigned char i;
    for(i=0;i<8;i++)
    {
        P1=table[i];
        delay();
    }
    return 0;
}

步进电机告一段落。

上一篇下一篇

猜你喜欢

热点阅读