Arduino控制步进电机

目录

1、步进电机简介

2、电路连接

3、控制代码


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);
	}  
}

猜你喜欢

转载自blog.csdn.net/m0_58857684/article/details/130619135