51单片机步进电机

目录

1.步进电机简介

步进电机是将电脉信号转变为角位移或线位移的开环控制元件。

2步进电机双极性工作原理

1.A正 = 1, A负B正负 = 0

2.A正B正 = 1, B负A负 = 0

3.B正 = 1,B负A正负 = 0

4.B正A负 = 1, A正B负 = 0

5.A负 = 1, A正B正负 = 0

6.A负B负 = 1, A正B正 = 0

  1. B负 = 1, A正负B正 = 0

8.B负A正 = 1, B正A负 = 0

通过双极性线圈通电从而控制位移角度

3.28BYJ-48步进电机


4.实现的功能

通过ULN2003驱动模块控制28BYJ-48步进电机方向及速度,当按下key1键可调节电机旋转方向,当按下key2键,电机加速,当按下key3键,电机减速。

5. 步进电机代码

c 复制代码
#include <reg51.h>

typedef unsigned int u16;
typedef unsigned char u8;

sbit IN1D_ORANGE = P1^0;  //橙
sbit IN1C_YELLOW = P1^1;  //黄
sbit IN1B_POWER = P1^2;	  //粉
sbit IN1A_BLUE = P1^3;	  //蓝

sbit KEY1 = P3^0;
sbit KEY2 = P3^1;
sbit KEY3 = P3^2;

#define KEY1_PRESS   1
#define KEY2_PRESS   2
#define KEY3_PRESS   3
#define KEY0_UNPRESS 0

#define STEPTOMOR_MAXSPEED 1
#define STEPTOMOR_MINSPEED 10
void delay_10us(u16 us) {
	while(us--);
}

void delay_ms(u16 ms)
{															  
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);
}

//独立按键
u8 key_scan(u8 mode) {
	static u8 key = 1;	 //单次按下

	if (mode) key = 1;	 //连续按下
	if (key == 1 && (KEY1 == 0 || KEY2 == 0 || KEY3 == 0)) {
		delay_10us(1000);
		key = 0;

		if (KEY1 == 0) 
			return KEY1_PRESS;
		else if (KEY2 == 0)
			return KEY2_PRESS;
		else if (KEY3 == 0)
			return KEY3_PRESS;
	}
	else if (KEY1 == 1 && KEY2 == 1 && KEY3 == 1) {
		key = 1;
	}
	return KEY0_UNPRESS;	
}

//步进电机
void step_motor_28BYJ48_send_pulse(u8 step, u8 dir) {
	u8 temp = step;
	if (dir == 0)
		temp = 7 - step;
	switch(temp) {
		case 0:	IN1A_BLUE = 1; IN1B_POWER = 1; IN1C_YELLOW = 1; IN1D_ORANGE = 0; break;
		case 1:	IN1A_BLUE = 1; IN1B_POWER = 1; IN1C_YELLOW = 0; IN1D_ORANGE = 0; break;
		case 2:	IN1A_BLUE = 1; IN1B_POWER = 1; IN1C_YELLOW = 0; IN1D_ORANGE = 1; break;
		case 3:	IN1A_BLUE = 1; IN1B_POWER = 0; IN1C_YELLOW = 0; IN1D_ORANGE = 1; break;
		case 4:	IN1A_BLUE = 1; IN1B_POWER = 0; IN1C_YELLOW = 1; IN1D_ORANGE = 1; break;
		case 5:	IN1A_BLUE = 0; IN1B_POWER = 0; IN1C_YELLOW = 1; IN1D_ORANGE = 1; break;
		case 6:	IN1A_BLUE = 0; IN1B_POWER = 1; IN1C_YELLOW = 1; IN1D_ORANGE = 1; break;
		case 7:	IN1A_BLUE = 0; IN1B_POWER = 1; IN1C_YELLOW = 1; IN1D_ORANGE = 0; break;
	}	
}

void main() {
	u8 key = 0;
	u8 dir = 0;
	u8 step = 0;
	u8 steed = STEPTOMOR_MAXSPEED;
	while(1) {
		key = key_scan(0);
		if (key == KEY1_PRESS)
			dir = !dir;
		else if (key == KEY2_PRESS) {
			if (steed > STEPTOMOR_MAXSPEED)
				steed -= 1;
		}
		else if (key == KEY3_PRESS) {
			if (steed < STEPTOMOR_MINSPEED)
				steed += 2;   
		}
		step_motor_28BYJ48_send_pulse(step++, dir);
		if (step == 8) step = 0;
		delay_ms(steed);	
	}		   
}

6.步进电机电路图

相关推荐
tobias.b2 小时前
408真题解析-2010-12-计组-程序执行时间
单片机·嵌入式硬件·fpga开发·计算机考研·408真题解析
List<String> error_P3 小时前
独立看门狗IWDG原理详解
stm32·单片机·嵌入式硬件·定时器
王然-HUDDM3 小时前
技术领跑:HUDDM-7D系统L4级功能安全预研验证
人工智能·嵌入式硬件·安全·车载系统·汽车
shansz20203 小时前
CDC虚拟串口与硬件串口传输速度的对比测试
单片机·嵌入式硬件
一个云朵3 小时前
【江协科技】KEIL如何下载离线支持包
单片机·嵌入式硬件
云山工作室4 小时前
基于单片机的居家智能音箱系统(论文+源码)
单片机·嵌入式硬件·毕业设计·毕设·智能音箱
单片机系统设计5 小时前
基于STM32的智能防摔报警系统
stm32·单片机·嵌入式硬件·毕业设计·防摔报警·短信报警·号码设置
人间不清醒ab5 小时前
FREERTOS检测任务栈内存情况
c语言·单片机
boneStudent7 小时前
智能电池管理系统(BMS)
stm32·单片机·嵌入式硬件