找回密码
 立即注册
查看: 1945|回复: 0

Arduino控制步进电机

[复制链接]

86

主题

0

回帖

894

积分

中级会员

积分
894
发表于 2024-6-4 14:50:54 | 显示全部楼层 |阅读模式
1、步进电机简介
步进电机是一种用电脉冲进行控制,将电脉冲(数字信号)转化为角位移的执行机构。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。


(ULN2003 步进电机驱动器)


- 型号:28BYJ-48


- 额定电压:5V


- 相位数:4(五相四线)


- 速度变化率:1/64


- 步距角:5.625° /64


- 频率:100Hz


转一圈的步数=360°/步距角


步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度/(转子齿数*运行拍数),以常规二、四相,转子齿为50齿电机为例。


四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步)


八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)


2、电路连接


3、控制代码
  1. #include <Stepper.h>
  2. #include <IRremote.h>
  3. const int STEPS=32;         //设置步进电机内部输出轴旋转一周:步数为32,减速比为1:64
  4. int Steps2Take;                //2048步 = 1圈, 电机输出轴旋转一周为2048步
  5. int receiver = 12;         //红外接收器信号针脚到Arduino数字针脚12
  6. // 设置电机驱动引脚的正确顺序
  7. //IN1, IN2, IN3, IN4的顺序为1-3-2-4步进器
  8. Stepper myStepper (STEPS, 8, 10, 9, 11);
  9. IRrecv irrecv(receiver);                                        //创建"irrecv" 的实例
  10. decode_results results;                                         //创建'decode_results'的实例
  11. void setup()
  12. {
  13.         Serial.begin(9600);
  14.     irrecv.enableIRIn();                                                //启动接收器
  15. }

  16. void loop()
  17. {
  18.     if (irrecv.decode(&results))
  19.     {                         //判断是否收到红外信号
  20.                 Serial.println(results.value,HEX);
  21.                 if (results.value==0xFFA857)
  22.                 {                //按下了VOL+按钮
  23.                         myStepper.setSpeed(150);                        //设置速度为15步/分钟
  24.                         Steps2Take = 2048;                                //顺时针
  25.                         myStepper.step(Steps2Take);
  26.                         delay(2000);
  27.                   }
  28.                   if (results.value== 0xFF629D)
  29.                 {                //按下了VOL-按钮
  30.                         myStepper.setSpeed(150);                        //设置电机转速
  31.                         Steps2Take = -2048;                                 //逆时针旋转
  32.                         myStepper.step(Steps2Take);
  33.                         delay(2000);
  34.                  }
  35.                 irrecv.resume(); // 接收下一个值
  36.                 digitalWrite(8, LOW);
  37.                 digitalWrite(9, LOW);
  38.                 digitalWrite(10, LOW);
  39.                 digitalWrite(11, LOW);
  40.         }  
  41. }
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EnMaking

GMT+8, 2025-3-28 07:38 , Processed in 0.053186 second(s), 24 queries .

Powered by Qiqirobot

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表