Arduino篇—步进电机的控制

电子说

1.3w人已加入

描述

课程目标

  • 了解步进电机的原理及应用
  • 学习步进电机的控制方式
  • 了解步进电机的不同励磁方式

相关知识

步进电机: 步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。简单来说当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。

步进电机原理: 利用电磁铁原理,各个线圈绕组通电,利用电生磁原理,产生磁力,带动中央转子铁芯转动从而将脉冲信号转换成线位移或角位移。

Arduino

步进电机介绍:

  • 步进电机每次能转动的最小角度叫做步距角。
  • 每当步进电机接收到一个驱动信号后,步进电机将按照一定的方向转动一个固定的角度。
  • 通过控制脉冲的个数来精确的控制步进电机的角位移量,通过控制脉冲的频率来控制电机转动的速度及加速度,从而达到调速的目的。
  • 步进电机按照相数不同分为单相、双相、多相三种,励磁方式分为全步励磁和半步励磁,全步励磁分1相励磁方式、2相励磁方式;半步励磁又称1-2相励磁方式。
    Arduino

**ULN2003电机驱动:**由于Arduino开发板的通用IO驱动能力有限,有些外设不能直接使用IO进行驱动,需要借助一些驱动电路间接控制大功率器件。ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载。

Arduino

Arduino

电路搭建

所需材料:

ArduinoUNO * 1
28BYJ-48步进电机 * 1
ULN2003电机驱动模块 * 1
杜邦线若干

电路连接:

ULN2003驱动板上IN1、IN2、IN3、IN4分别连接UNO开发板的数字引脚2,3,4,5;驱动板电源输入+、-引脚分别连接UNO开发板的5V、GND。

Arduino

程序编写

练习一:一相励磁方式****控制步进电机正转90°再反转90°

一相励磁控制方式及特点: 在每一个瞬间,步进电机只有一个线圈导通,每送一个信号,步进电机能转1.8°。这种方式,其精确度好、消耗电力小,但是输出转矩最小,振动较大。

一相****励磁顺序表:

Arduino

图形化方式:

Arduino

代码方式:

/* 项目名称:一相励磁控制步进电机正反转90°
 * 项目时间:2022.03.21
 * 项目作者:MRX
 */
void setup() {
  for (int i = 2; i < 6; i++) {
    pinMode(i, OUTPUT);
  }
}


void clockwise(int num)
{
  for (int count = 0; count < num; count++)
  {
    for (int i = 2; i < 6; i++)
    {
      digitalWrite(i, HIGH);
      delay(5);
      digitalWrite(i, LOW);
    }
  }
}


void anticlockwise(int num)
{
  for (int count = 0; count < num; count++)
  {
    for (int i = 5; i > 1; i--)
    {
      digitalWrite(i, HIGH);
      delay(5);
      digitalWrite(i, LOW);
    }
  }
}


void loop() {
  clockwise(130);
  delay(1000);
  anticlockwise(130);
  delay(1000);
}

练习二:二相励磁方式控制步进电机正转90°再反转90°****

相励磁控制方式及特点: 在每一个瞬间,步进电机有两个线圈导通,每送一个信号,步进电机能转1.8°。这种方式,其输出转矩最大,振动较小。是现在较常用的一种控制方式。

二相励磁顺序表:

Arduino

图形化方式:

Arduino

代码方式:

/* 项目名称:二相励磁控制步进电机正反转90°
 * 项目时间:2022.03.21
 * 项目作者:MRX
 */
void setup() {
  for (int i = 2; i < 6; i++) {
    pinMode(i, OUTPUT);
  }
}


void clockwise(int num)
{
  for (int count = 0; count < num; count++)
  {
    digitalWrite(2,HIGH);
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,HIGH);
    delay(5);
    digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
    delay(5);
    digitalWrite(2,LOW);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    delay(5);
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    delay(5);
  }
}


void anticlockwise(int num)
{
  for (int count = 0; count < num; count++)
  {
    digitalWrite(2,HIGH);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);
    digitalWrite(3,HIGH);
    delay(5);
    digitalWrite(2,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(4,LOW);
    digitalWrite(3,LOW);
    delay(5);
    digitalWrite(2,LOW);
    digitalWrite(5,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(3,LOW);
    delay(5);
    digitalWrite(2,LOW);
    digitalWrite(5,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(3,HIGH);
    delay(5);
  }
}


void loop() {
  clockwise(130);
  delay(1000);
  anticlockwise(130);
  delay(1000);
}

练习三:一二相励磁方式控制步进电机正****

一二相励磁控制方式及特点: 为一相和二相交替导通的方式,每送一个信号,步进电机能转0.9°。这种方式,其分辨率高,运转平滑。也是现在较常用的一种控制方式。

二相励磁顺序表:

Arduino

图形化方式:

Arduino

代码方式:

/* 项目名称:1-2相励磁控制步进电机正转
 * 项目时间:2022.03.21
 * 项目作者:MRX
 */
void setup() {
  for (int i = 2; i < 6; i++) {
    pinMode(i, OUTPUT);
  }
}


void S1()
{
    digitalWrite(2,HIGH);
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
    delay(5);
    digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
    delay(5);
    digitalWrite(2,LOW);
    digitalWrite(3,HIGH);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
    delay(5);
    digitalWrite(2,LOW);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    delay(5);
}


void S2()
 {
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    delay(5);
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    delay(5);
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,HIGH);
    delay(5);
    digitalWrite(2,HIGH);
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,HIGH);
    delay(5);
}


void loop() {
  for (int i = 1; i <= 130; i++) 
  {
    S1();
    S2();
  }
  delay(1000);
}

程序分析:

需求为旋转90°,在程序中循环次数为什么是130次呢?这是根据我们使用的步进电机参数计算而来的:

1、步进电机电压5V,步距角5.625,减速比1:64。

2、计算A-B-C-D通电一次转动的角度5.625X2X4/64=0.703125 (2是表示1相励磁方 式每步是2倍的步距角,4表示走了4步, 64指电机减速比)。

3、转动360度循环ABCD通电的次数360/0.7031=512。

4、那么转动90度循环ABCD通电的次数90/0.7031≈130。

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

全部0条评论

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

×
20
完善资料,
赚取积分