|
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、控制代码
- #include <Stepper.h>
- #include <IRremote.h>
- const int STEPS=32; //设置步进电机内部输出轴旋转一周:步数为32,减速比为1:64
- int Steps2Take; //2048步 = 1圈, 电机输出轴旋转一周为2048步
- int receiver = 12; //红外接收器信号针脚到Arduino数字针脚12
- // 设置电机驱动引脚的正确顺序
- //IN1, IN2, IN3, IN4的顺序为1-3-2-4步进器
- Stepper myStepper (STEPS, 8, 10, 9, 11);
- IRrecv irrecv(receiver); //创建"irrecv" 的实例
- decode_results results; //创建'decode_results'的实例
- void setup()
- {
- Serial.begin(9600);
- irrecv.enableIRIn(); //启动接收器
- }
-
- void loop()
- {
- if (irrecv.decode(&results))
- { //判断是否收到红外信号
- Serial.println(results.value,HEX);
- if (results.value==0xFFA857)
- { //按下了VOL+按钮
- myStepper.setSpeed(150); //设置速度为15步/分钟
- Steps2Take = 2048; //顺时针
- myStepper.step(Steps2Take);
- delay(2000);
- }
- if (results.value== 0xFF629D)
- { //按下了VOL-按钮
- myStepper.setSpeed(150); //设置电机转速
- Steps2Take = -2048; //逆时针旋转
- myStepper.step(Steps2Take);
- delay(2000);
- }
- irrecv.resume(); // 接收下一个值
- digitalWrite(8, LOW);
- digitalWrite(9, LOW);
- digitalWrite(10, LOW);
- digitalWrite(11, LOW);
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|