☛ 功能说明
利用 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); //马达正转 }