第二十二篇、基于Arduino uno,控制五线四相步进电机实现正转和反转——结果导向

0、结果

说明:步进电机可以旋转指定角度,例如转了九十度就停止,如果想一直转也是可以的,程序里面已写,而且也有正反转。如果是你想要的,可以接着往下看。

1、外观

说明:五线四相步进电机如下,需要对应的驱动电路,ULN2003驱动板如下。


2、连线

 说明:只需要连接六根线。

  • uno————五线四相步进电机
  • GND-------------GND
  •   5V-------------VCC
  •    2---------------IN1
  •    3---------------IN2
  •    4---------------IN3
  •    5---------------IN4

3、源程序

说明:采用非阻塞方式编写,一定时间驱动一次步进电机,执行的时候不会影响别的程序,而且可以转动指定角度,也可以一直转动,并将对应功能进行函数化,方便移植。

/****************************************step54 part****************************************/
/*
  接线:
  GND----------GND
  5V----------VCC
  2------------IN1
  3------------IN2
  4------------IN3
  5------------IN4
*/
#define step54TimeInterval 10                                                 //检测一次的时间间隔                   
unsigned long step54Times = 0;                                                //记录设备运行时间
int runStepCount = 0;
#define step54TimeInterval1 10                                                //检测一次的时间间隔                   
unsigned long step54Times1 = 0;                                               //记录设备运行时间
int runStepCount1 = 0;
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(9600);                                                         //设置串口波特率为9600
  for (int i = 2; i < 6; i++) {
    pinMode(i, OUTPUT);                                                       //初始化四个引脚为输出模式
  }
  Serial.println("设备上线!");
}
void loop() {
  clockwise(512);                                                             //顺时针旋转512步为一圈
  //anticlockwise(512);                                                       //逆时针旋转512步为一圈
}
/****************************************step54 part****************************************/
/*顺时针旋转512步为一圈*/
void clockwise(int num) {
  //只转一次指定的角度
  if (runStepCount < num) {
    if (millis() - step54Times >= step54TimeInterval) {                       //一定时间执行一次
      step54Times = millis();
      runStepCount++;                                                         //计数
      for (int i = 2; i < 6; i++) {
        digitalWrite(i, HIGH);
        delay(2);                                                             //可以控制速度,建议不要小于2
        digitalWrite(i, LOW);
      }
    }
  }
  //不注释下面的if会一直转
  if (runStepCount >= num) {                                                  //重复转,一直转
    runStepCount = 0;
  }
}
/*逆时针旋转512步为一圈*/
void anticlockwise(int num) {
  if (runStepCount1 < num) {
    if (millis() - step54Times1 >= step54TimeInterval1) {                     //一定时间执行一次
      step54Times1 = millis();
      runStepCount1++;
      for (int i = 5; i > 1; i--) {
        digitalWrite(i, HIGH);
        delay(2);                                                             //可以控制速度,建议不要小于2
        digitalWrite(i, LOW);
      }
    }
  }
  //不注释下面的if会一直转
  //    if (runStepCount1 >= num) {                                              //重复转,一直转
  //      runStepCount1 = 0;
  //    }
}

4、注意事项

说明:步进电机所需的驱动电路模块ULN2003驱动板,输入的电压范围5V~12V,电压越大,电机力气也越大。电机速度越快,力气越小,成反比。电机速度最快也不是很快,如果速度太快,电机来不及转动就会停止,一直卡在那里。

5、基本原理

        当给定一个脉冲信号时,电机控制器会将输入信号转换成相应的控制信号,从而激活电机内部的驱动电路。
        电机内部的驱动电路会依次驱动电机的四组线圈,使得电机按照特定的顺序执行步进运动。
        根据电机的型号和具体接线方式,电机的步进运动可能包括单步、半步或者微步等多种模式。
         在Arduino中,通过控制脉冲信号的频率和方向,可以控制电机的转速和转向。
        需要注意的是,五线四相步进电机的驱动方式有多种,其中最常见的是全(双)桥式步进电机驱动器。在使用过程中,需要注意电机的额定电压、电流和步进角度等参数,以及驱动电路的性能和稳定性,以保证电机可以正常工作并且不会因为过载或者其他因素而受损。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值