步进电机如何让动起来?步进电机转动原理

工业控制

1221人已加入

描述

一、实验原理

之前已经讲过了基于51单片机——步进电机控制实验,原理和那个类似。

先简单介绍一下42步进电机,42步进电机是一种常见的步进电机类型,是一种将电脉冲信号转换为机械转动的设备,42步进电机通常由两相或四相驱动,每相都有一个线圈,今天咱们介绍的是两相四线步进电机,通过依次激活不同的线圈,可以使电机按照一定的步进角度旋转。42步进电机广泛应用于各种自动化设备和机械系统中,例如打印机、数控机床、纺织机械等。它具有结构简单、控制方便、定位精度高等优点。

下图是关于步进电机的基本参数介绍:

51单片机

需要注意的是电机两相绕组是怎么绕的,A+、A-、B+、B-四根线代表的是什么意思,还有关键参数步距角:1.8°和额定电流1.0A。

1、步进电机的构造,拆开之后如图所示:

51单片机

51单片机

42步进电机的步距角为1.8°,是由定子和转子的齿数共同决定的,定子有48齿,转子有50齿,具体是怎么算的,感兴趣的同学可以自行学习,今天的重点是让步进电机如何让动起来。

2、步进电机转动原理:下图为步进电机定子和转子的简化图:

51单片机

定子分为8组,每六个齿为一组,一共48个,转子有50个齿,其中1、3、5、7号绕组是一条线,2、4、6、8号绕组是另一条线,所以称为两相,A+和A-为一相,称为A相,B+和B-为一相,称为B相。通过特定的绕线方式实现在同一相中,相对的绕组磁极都是相同的,相邻的绕组磁极是相反的,假如A相中的1和5是S极,那么3和7就是N极,B相同理。(初学者不要在这里钻牛角尖,总是在想为什么是这样,为什么不能是那样,步进电机的发明者就是这样设计的,目前我们能学会它的构造和原理,会使用就行,至于为什么这样,等咱们的水平到位了再研究吧。)步进电机的动力是磁力,同性相排斥,异性相吸引,现在我们从位置“1”顺时针转动,讲解控制方法。

①想要让1位置的定子绕组齿和转子齿对齐,需要让1位置绕组靠近转子的一端磁极为N极,这样才能吸引转子转到这个位置,根据“右手定则”可知,需要给A+高电平,A-低电平,B+和B-均为低电平。

②此时2位置的定子绕组齿和转子齿之间的角度为1.8°,想要让他们对齐,需要给B+高电平,B-低电平,A+和A-均为低电平,这样他们也对齐了,转子便顺时针转了1.8°。

③此时3位置的定子绕组齿和转子齿之间的角度为1.8°,想要让他们对齐,需要给A-高电平,A+低电平,B+和B-均为低电平,这样他们也对齐了,转子便顺时针又转了1.8°。

④此时4位置的定子绕组齿和转子齿之间的角度为1.8°,想要让他们对齐,需要给B-高电平,B+低电平,A+和A-均为低电平,这样他们也对齐了,转子便顺时针又转了1.8°。

⑤此时5位置的定子绕组齿和转子齿之间的角度为1.8°,想要让他们对齐,需要给A+高电平,A-低电平,B+和B-均为低电平,这种情况和在1位置时一样,开始循环1到4。

列一个表把上述位置对应的电平状态表示出来:

51单片机

上述方式是四拍的驱动方式,也是整步驱动,步进电机每次转动都是一个步距角1.8°,如果想实现更小角度的步进,可以用八拍的方式驱动,也是半步驱动,在1位置和2位置之间,2位置和3位置之间等,都可以停止,这样步进电机每转一小步是0.9°。举个例子,比如想要让转子转到1位置和2位置之间,可以让A+和B+定子绕组都吸引转子,二力平衡后,转子就运动到了1和2之间。这样需要给A+高电平,A-低电平,B+高电平,B-低电平。

其他的中间位置同理,八拍驱动对应的电平状态表示出来:

51单片机

按照上表中从上到下一次运行暂且叫为正转,那么从下往上就是反转了,这样步进电机转向的问题就解决了。

那么如何控制速度呢,当转子转到1位置时,我们让他延时一段时间再到下一个位置,这样就可以控制速度了,延时的时间越长,速度就越慢,延时的时间越短速度就越快,当然时间也不是随意的,要根据步进电机特性,找一个范围,这样步进电机转速的问题就解决了。

到这里步进电机的驱动原理差不多就结束了,对应原理把程序写出来就可以了。

3、步进电机驱动板(L298N)

51单片机

本次实验使用的驱动板是L298N,这款驱动板小巧简单,实验演示用足够了,下面是它的基本参数:(注意供电电压在要求范围内)

51单片机

4、实验过程中可能会出现的问题

①如何区分A+、A-、B+、B-?

方法1:我们在购买步进电机时可以问一下店家,一般红色的线是A+,蓝色A-,绿色B+,黑色B-;也有可能是反过来,一般都是绿色和黑色是A相,红色和蓝色是B相。

方法2: 因为A相和B相分别是一条导线绕出来的,所以可以使用万用表欧姆档来测量电阻,同一相的阻值很小,只有几欧姆,不是同一相的阻值无限大,测出来同一相后,至于是A+还是A-那是人为规定的。

方法3:拿任意一根线和剩余三根线依次连接,连接后用手转动步进电机,当发现某两根线连接后转动步进电机时比较费劲,就说明这两根线是同一相。

②程序没问题步进电机就是不转?

大概率是接线问题,确保A、B相区分正确,任意调换A相或者B相的两根线,就可以了。

二、关键程序

/*
dir:旋转方向    枚举类型
speed:转速
*/
//速度控制:
void stepper(unsigned int dir, unsigned int speed)
{
  if(dir == Pos)//正转
  {
    //step1:
    IN1_HIGH;IN2_LOW;IN3_LOW;IN4_LOW;Delay(speed);
    
    //step2:  
    IN1_HIGH;IN2_LOW;IN3_HIGH;IN4_LOW;Delay(speed);


    //step3:    
    IN1_LOW;IN2_LOW;IN3_HIGH;IN4_LOW;Delay(speed);


    //step4:
    IN1_LOW;IN2_HIGH;IN3_HIGH;IN4_LOW;Delay(speed);


    //step5:
    IN1_LOW;IN2_HIGH;IN3_LOW;IN4_LOW;Delay(speed);


    //step6:
    IN1_LOW;IN2_HIGH;IN3_LOW;IN4_HIGH;Delay(speed);


    //step7:
    IN1_LOW;IN2_LOW;IN3_LOW;IN4_HIGH;Delay(speed);


    //step8:
    IN1_HIGH;IN2_LOW;IN3_LOW;IN4_HIGH;Delay(speed);
  }
  else  //反转
  {
    //step1:
    IN1_HIGH;IN2_LOW;IN3_LOW;IN4_HIGH;Delay(speed);


    //step2:    
    IN1_LOW;IN2_LOW;IN3_LOW;IN4_HIGH;Delay(speed);


    //step3:    
    IN1_LOW;IN2_HIGH;IN3_LOW;IN4_HIGH;Delay(speed);


    //step4:
    IN1_LOW;IN2_HIGH;IN3_LOW;IN4_LOW;Delay(speed);


    //step5:
    IN1_LOW;IN2_HIGH;IN3_HIGH;IN4_LOW;Delay(speed);


    //step6:
    IN1_LOW;IN2_LOW;IN3_HIGH;IN4_LOW;Delay(speed);


    //step7:
    IN1_HIGH;IN2_LOW;IN3_HIGH;IN4_LOW;Delay(speed);


    //step8:
    IN1_HIGH;IN2_LOW;IN3_LOW;IN4_LOW;Delay(speed);
  }
}


//按键程序:


unsigned char Key()
{
  unsigned char KeyNumber=0;
  
  if(P3_1==0){Delay(1000);while(P3_1==0);Delay(1000);KeyNumber=1;}
  if(P3_0==0){Delay(1000);while(P3_0==0);Delay(1000);KeyNumber=2;}
  if(P3_2==0){Delay(1000);while(P3_2==0);Delay(1000);KeyNumber=3;}
  if(P3_3==0){Delay(1000);while(P3_3==0);Delay(1000);KeyNumber=4;}
  
  return KeyNumber;
}


//主函数:实现步进电机启停、加减速、正反转。
void main()
{
  
  while(1)
  {
    stepper(dir, speed);
    
    KeyNum=Key();
    
    if(KeyNum==1)//正反转
    {
     dir = ~dir;
    }
    if(KeyNum==2)//加速
   {
     speed-=30;
     if(speed <= 50)speed = 50;
     i=speed;
   }
    if(KeyNum==3)//减速
   {
     speed+=30;
     if(speed >= 170)speed = 170;
     i=speed;
   }
    if(KeyNum==4)//启停
    {
      flag=~flag;
      if(flag==0)speed=0;
      else speed=i;
    }
  }
}

以上是关键代码,大家对应八拍的电平状态表看看是不是一一对应的关系,现在就可以实现对步进电机的启停、加减速、正反转的控制。

审核编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分