☛ 功能说明

利用 Arduino UNO 开发板控制步进马达 28BYJ-48 转动方向。步进马达的转动方向可以由 step() 函式来控制,当 steps 参数为负值时,马达正转,反之当 steps 为正值时,马达反转。本实习先使步进马达正转 50 步后,再使步进马达反转 50 步,然后步进马达停止转动。

步进马达 28BYJ-48 介绍

28BYJ-48 是一款 5 线单极步进电机,运行电压为 5V。它非常适合需要精确定位的项目,例如打开和关闭通风口。

由于电机不使用接触电刷,所以运动比较精确,相当可靠。

尽管尺寸较小,但该电机在 15 RPM 左右的速度下,可提供 34.3 mN.m 的不错扭矩。即使在静止状态下,它也能提供良好的扭矩,并在电机通电时,保持扭矩。

唯一的缺点是它有点耗电,即使静止也会消耗能量。

引脚排列

28BYJ-48 步进电机有 5 根线,引脚排列如下:

28BYJ-48 有两个线圈,每个线圈都有个中心抽头。这两个中心抽头在内部连接并作为第五根线 ( 红线 ) 引出。

线圈的一端和中心抽头一起形成一相。因此,28BYJ-48 共有 4 相。

红线始终拉高,因此当另一根线拉低时,该相通电。

仅当各相按称为步进顺序的逻辑顺序通电时,步进电机才会旋转。

齿轮减速比

根据数据表,28BYJ-48 电机以全步模式运行时,每步对应 11.25° 的旋转,这意味着每转有 32 步 ( 360° / 11.25° = 32 )。

此外,该电机还具有 1/64 减速齿轮组 ( 实际上是 1/63.68395 ,但 1/64 对于大多数用途来说已经足够近似 )。

这意味着实际上有 2038 步 ( 每转 32 × 63.68395 步 = 2037.8864 大约 2038 步 )。

步进电机 28BYJ-48 的步进角为 5.625°,即一个脉冲信号转 5.625°,64 个信号转 360°。减速比:1/64,即 电机壳里的电机转 64 圈,电机壳外边的部分转 1 圈。

能量消耗

28BYJ-48 通常消耗约 240 mA 的电流。

由于电机消耗大量电力,因此最好直接从外部 5V 电源供电,而不是从 Arduino 开发板上供电。

值得注意的是,即使在静止状态下,电机也会消耗功率以保持其位置。

技术规格

FT5754M 接脚图

☛ 使用材料

Arduino UNO R3  开发板 × 1、FT5754M 达林顿电晶体 × 1、步进马达 28BYJ-48 × 1。

☛ 电路图及面包板接线图

☛ 程式码

#include <Stepper.h>                          //使用 Stepper.h 函式库

#define STEPS 2038                            //步进马达转动一圈步进数
Stepper stepper(STEPS, 2, 3, 4, 5);           //建立 Steeper 资料形态的物件
int motoStep = 63.68395;                      //步进马达 28BYJ-48 每一步步进值
int i = 1;                                    //步进马达动作索引值

void setup()
{
     stepper.setSpeed(10);                    //设定步进马达的转速为 10 RPM
}

void loop()
{
     switch(i)
     {
           case 1:stepper.step(-50*motoStep); //马达正转 50 步
                  i++;
                  delay(500);                 //延迟 500ms
                  break;
           case 2:stepper.step(50*motoStep);  //马达反转 50 步
                  i++;
                  delay(500);                 //延迟 500ms
                  break;
           case 3:stepper.step(0*motoStep);   //马达停止转动
                  break;
    }
 }

 

☛ 练习

⑴ 设计 Arduino 程式。控制步进马达 28BYJ-48 正转一圈,再反转一圈,然后马达停止转动。

#include <Stepper.h>                          //使用 Stepper.h 函式库

#define STEPS 2038                            //步进马达转动一圈步进数
Stepper stepper(STEPS, 2, 3, 4, 5);           //建立 Steeper 资料形态的物件
int motoStep = 63.68395;                      //步进马达 28BYJ-48 每一步步进值
int i = 1;                                    //步进马达动作索引值

void setup()
{
     stepper.setSpeed(10);                    //设定步进马达的转速为 10 RPM
}

void loop()
{
     switch(i)
     {
           case 1:stepper.step(-32*motoStep); //马达正转一圈
                  i++;
                  delay(500);                 //延迟 500ms
                  break;
           case 2:stepper.step(32*motoStep);  //马达反转一圈
                  i++;
                  delay(500);                 //延迟 500ms
                  break;
           case 3:stepper.step(0*motoStep);   //马达停止转动
                  break;
    }
 }

 

⑵ 设计 Arduino 程式。控制步进马达 28BYJ-48 连续正转。

#include <Stepper.h>                          //使用 Stepper.h 函式库

#define STEPS 2038                            //步进马达转动一圈步进数
Stepper stepper(STEPS, 2, 3, 4, 5);           //建立 Steeper 资料形态的物件
int motoStep = 63.68395;                      //步进马达 28BYJ-48 每一步步进值

void setup()
{
     stepper.setSpeed(10);                    //设定步进马达的转速为 10 RPM
}

void loop()
{
     stepper.step(-32*motoStep);              //马达正转
}