Arduino基础入门篇(十六)步进电机

步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角),多用于雕刻机、3D打印机等需要精确控制的设备。本篇使用ULN2003驱动五线四相减速步进电机。

1. 步进电机介绍
步进电机每次能转动的最小角度叫做步距角。
每当步进电机接收到一个驱动信号后,步进电机将按照一定的方向转动一个固定的角度。
通过控制脉冲的个数来精确的控制步进电机的角位移量,通过控制脉冲的频率来控制电机转动的速度及加速度,从而达到调速的目的。
步进电机按照相数不同分为单相、双相、多相三种,励磁方式分为1相励磁方式和2相励磁方式。
本篇使用的步进电机型号为28BYJ-48,1相励磁方式驱动,通过给ABCD四相依次通电来实现转自不停转动。

2. ULN2003驱动介绍

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

3. 实验材料
Uno R3开发板
配套USB数据线
面包板连接线
ULN2003驱动板
步进电机
4. 实验步骤
1. 根据原理图搭建电路。
ULN2003驱动板上IN1、IN2、IN3、IN4分别连接UNO开发板的数字引脚2,3,4,5;驱动板电源输入+、-引脚分别连接UNO开发板的5V、GND。
实验原理图如下图所示:

实物连接图如下图所示:

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

void setup() {
  // put your setup code here, to run once:
  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(3);
      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(3);
      digitalWrite(i, LOW);
    }
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  clockwise(512);
  delay(10);
  anticlockwise(512);
}
3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

5. 实验现象

步进电机顺时针、逆时针交替旋转。

6. 实验分析
程序通过ABCD四相通电顺序实现步进电机正反转控制。步进电机旋转一周,程序中循环次数为什么是512次呢?这是根据我们使用的步进电机参数计算而来的:

步进电机电压5V,步距角5.625,减速比1:64
计算A-B-C-D通电一次转动的角度5.625X2X4/64=0.703125 (2是表示1相励磁方式每步是2倍的步距角,4表示走了4步, 64指电机减速比)
转动360度循环ABCD通电的次数360/0.7031=512

Arduino学习交流群:672088578
更多内容,欢迎关注我的公众号。 微信扫一扫下方二维码即可关注:

### 使用Arduino控制步进电机的教程与示例代码 使用Arduino控制步进电机是一项常见的嵌入式系统开发任务,能够实现对电机转动角度和速度的精确控制。以下内容将详细介绍如何通过Arduino UNO驱动步进电机,并提供应的示例代码。 #### 1. 硬件准备 在开始之前,需要准备好以下硬件组件: - Arduino UNO开发板[^2] - 步进电机(如28BYJ-48) - ULN2003电机驱动模块[^4] - 面包板和跳线 #### 2. 接线方法 根据ULN2003驱动模块的接线图,将步进电机连接到驱动模块上,同时将驱动模块的输入端与Arduino UNO的数字引脚连。具体接线如下: - IN1 -> Arduino Pin 11 - IN2 -> Arduino Pin 10 - IN3 -> Arduino Pin 9 - IN4 -> Arduino Pin 8 此外,确保驱动模块的电源正极连接到外部电源(通常为5V或12V),负极连接到GND。 #### 3. 示例代码 以下是三个不同的示例代码,分别展示了基本的步进电机控制、改进的速度控制以及高扭矩和高精度控制。 ##### 示例代码 1:基本步进电机控制 ```cpp const int IN1 = 11; const int IN2 = 10; const int IN3 = 9; const int IN4 = 8; int time = 5; void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); } void loop() { digitalWrite(IN1, HIGH); delay(time); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); delay(time); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); delay(time); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); delay(time); digitalWrite(IN4, LOW); } ``` 此代码通过简单的脉冲信号控制步进电机旋转。 ##### 示例代码 2:改进的速度控制 ```cpp #include <Stepper.h> const int stepsPerRevolution = 2048; // 根据步进电机规格调整 Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); void setup() { myStepper.setSpeed(60); // 设置转速为60 RPM } void loop() { myStepper.step(stepsPerRevolution); // 转一圈 delay(500); myStepper.step(-stepsPerRevolution); // 反转一圈 delay(500); } ``` 此代码使用Arduino的`Stepper`库来简化步进电机的控制逻辑,并允许更灵活地设置转速和方向[^3]。 ##### 示例代码 3:高扭矩和高精度控制 ```cpp const int IN1 = 11; const int IN2 = 10; const int IN3 = 9; const int IN4 = 8; int steps[] = {IN1, IN2, IN3, IN4}; int stepDelay = 1; void setup() { for (int i = 0; i < 4; i++) { pinMode(steps[i], OUTPUT); } } void loop() { for (int i = 0; i < 4; i++) { digitalWrite(steps[i], HIGH); delayMicroseconds(stepDelay); digitalWrite(steps[i], LOW); } } ``` 此代码通过减少延迟时间并优化脉冲序列,实现了更高的扭矩和更精确的控制。 #### 4. 应用场景 步进电机的控制可以应用于多个领域,包括但不限于: - **机器人**:用于机械臂的关节运动控制。 - **自动化系统**:用于生产线上的精确位置控制。 - **CNC机床**:用于加工设备中的坐标轴移动控制。 通过上述方法,可以实现步进电机的基本控制及高级应用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值