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.步进电机电路图

相关推荐
G***技23 分钟前
IB3-771嵌入式主板6 TOPS真实算力怎么用:从PyTorch到RKNN的量化落地
人工智能·嵌入式硬件
国科安芯28 分钟前
低轨卫星姿轨控系统中抗辐射MCU的选型依据与工程实践
单片机·嵌入式硬件·算法·架构·系统安全·低轨卫星·抗辐射
国科安芯30 分钟前
卫星电源管理系统中高可靠MCU的功耗特性与电源监控功能分析
人工智能·单片机·嵌入式硬件·mcu·安全·电源管理系统·抗辐射
qq_402995752 小时前
诊断协议栈配置Agent
arm开发·人工智能·stm32·单片机·mcu
西城微科方案开发2 小时前
制氧机方案——方案开发商西城微科
单片机·嵌入式硬件
国科安芯2 小时前
小卫星综合电子系统中功能安全与抗辐射加固的协同设计研究
嵌入式硬件·安全·架构·risc-v·抗辐射·小卫星·综合电子系统
LCG元2 小时前
STM32L4 STOP2 模式下 LPUART 串口唤醒:三种唤醒方式实测对比与避坑指南
stm32·单片机·嵌入式硬件
意法半导体STM322 小时前
【官方原创】STM32CubeMX2 1.1.0新版本发布
stm32·单片机·嵌入式硬件·mcu
周洲08302 小时前
【无标题】STM32 串口 Printf 重定向|标准库 + HAL库 两套极简通用代码(无需MicroLIB)
stm32·单片机·嵌入式硬件
深圳市恒锐丰科技杨生2 小时前
EG27324 2.8‑20V 双通道低侧栅极驱动芯片|带 SD 逐周关断外置 MOS 驱动方案
嵌入式硬件·硬件工程