51单片机控制步进电机启停,正反转速度——入门

这篇具有很好参考价值的文章主要介绍了51单片机控制步进电机启停,正反转速度——入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验器件

STC89C52RC的学习板子一个

DC 5V 4相5线步进电机 28YBJ-48 减速步进电机一个

元器件连接:

51单片机开发板51单片机控制步进电机启停,正反转速度——入门

 电气原理图

51单片机控制步进电机启停,正反转速度——入门

 51单片机控制步进电机启停,正反转速度——入门

 51单片机控制步进电机启停,正反转速度——入门

实验现象:下载程序后;

当按下KEY1键可调节电机旋转方向;

当按下KEY2键,电机加速;

当按下KEY3键,电机减速;

按下KEY4的时候,电机启动/停止;

(电机的速度程序中已经定义)

注意:将步进电机红色线对接到“步进电机模块”输出端子J47的5V上,其它相序依次接入。

#include "reg52.h"

typedef unsigned int u16;	
typedef unsigned char u8;   //对系统默认数据类型进行重定义


sbit IN1_A=P1^0;
sbit IN2_B=P1^1;
sbit IN3_C=P1^2;
sbit IN4_D=P1^3;            //定义ULN2003控制步进电机管脚


sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;             //定义独立按键控制脚 

#define KEY1_PRESS	1
#define KEY2_PRESS	2
#define KEY3_PRESS	3
#define KEY4_PRESS	4
#define KEY_UNPRESS	0        //使用宏定义独立按键按下的键值


#define STEPMOTOR_MAXSPEED        1      // 定义步进电机速度,值越小,速度越快
#define STEPMOTOR_MINSPEED        5  	 // 最小不能小于1


void delay_10us(u16 ten_us)           //延迟函数,ten/-us=1时,大约延时10us
{
	while(ten_us--);	
}

void delay_ms(u16 ms)                //ms延迟函数,ms=1时,大约延时1ms
{
	u16 i,j;
	for(i=ms;i>0;i--)
		for(j=110;j>0;j--);
}

void step_motor_28BYJ48_send_pulse(u8 step,u8 dir)   
//输出一个数据给ULN2003从而实现向步进电机发送一个脉冲
{
	u8 temp=step;
	//指定步进序号,可选值0~7
	if(dir==0)	//如果为逆时针旋转;方向选择,1:顺时针,0:逆时针
		temp=7-step;//调换节拍信号
	switch(temp)//8个节拍控制:A->AB->B->BC->C->CD->D->DA
	{
		case 0: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;break;
		case 1: IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;break;
		case 2: IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;break;
		case 3: IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;break;
		case 4: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;break;
		case 5: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;break;
		case 6: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;break;
		case 7: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;break;
		default: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=0;break;//停止相序	
	}			
}

u8 key_scan(u8 mode)
{
	static u8 key=1;

	if(mode)key=1;//连续扫描按键
	if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==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(KEY4==0)
			return KEY4_PRESS;	
	}
	else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)	//无按键按下
	{
		key=1;			
	}
	return KEY_UNPRESS;		
}

/*       
           检测独立按键是否按下,按下则返回对应键值

           mode=0:单次扫描按键;mode=1:连续扫描按键

           KEY1_PRESS:K1按下
		   KEY2_PRESS:K2按下
		   KEY3_PRESS:K3按下
		   KEY4_PRESS:K4按下
		   KEY_UNPRESS:未有按键按下
*/

//主函数
void main()
{	
	u8 key=0;
	u8 dir=0;//默认逆时针方向
	u8 speed=STEPMOTOR_MAXSPEED;//默认最大速度旋转
	u8 step=0;
    int stepmove=0;
	while(1)
	{			
		key=key_scan(0);
		if(key==KEY1_PRESS)//换向
		{
			dir=!dir;    
		}
		else if(key==KEY2_PRESS)//加速
		{
			if(speed>STEPMOTOR_MAXSPEED)
				speed-=1;			
		}
		else if(key==KEY3_PRESS)//减速
		{
			if(speed<STEPMOTOR_MINSPEED)
				speed+=1;			
		}
                   if(key==KEY4_PRESS)//按键一按下令步进电机旋转或停止
			{
				stepmove=!stepmove;
			}				
		
			if(stepmove==1)	//判断是否要让步进电机旋转
			{	
			step_motor_28BYJ48_send_pulse(step++,dir);
			if(step==8)step=0;	
			}
			delay_ms(speed);	//通过每一步的延时来调节步进电机的速度					
	         }		
}

欢迎大家在评论区发表评论和意见文章来源地址https://www.toymoban.com/news/detail-512074.html

到了这里,关于51单片机控制步进电机启停,正反转速度——入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【51单片机Keil+Proteus8.9】控制步进电机+LCD1602显示状态

    步进电机控制 设计思路 电路设计: 选用AT89C51单片机作为电路核心部件,外加LM016L液晶显示屏作为显示,显示步进电机的Fast,Slow,Stop的三个状态 将AT89C51单片机所选引脚与LM016L控制引脚相连,再将数据通过引脚与LCD接收引脚相连。 通过AT89C51单片机P0^0和P0^2两个引脚引出两个

    2024年01月20日
    浏览(55)
  • 7-3、S曲线生成器【51单片机控制步进电机-TB6600系列】

    摘要 :本节介绍步进电机S曲线生成器的计算以及使用 一.计算原理 根据上一节内容,已经计算了一条任意S曲线的函数。在步进电机S曲线加减速的控制中,需要的S曲线如图1所示,横轴为时间,纵轴为角速度,其中w0为起始角速度,w1为终止角速度 在S曲线加减速控制中,加减

    2024年02月08日
    浏览(43)
  • 51单片机STC15W4K56S4控制步进电机28BYJ-48正反转

    步进电机28BYJ-48(12V)介绍:       首先,我们看下步进电机28BYJ-48(12V)外观图,如下:         28BYJ-48(12V)含义如下:28表示电机直径28毫米,B表示电机 ,Y表示永磁,J表示带减速箱,48表示四相八拍。       下面解释下“4 相永磁式”的概念,28BYJ-48 的构造如下图所示

    2023年04月17日
    浏览(41)
  • 51单片机——步进电机实验,小白讲解,相互学习

    步进电机简介:         步进电机是将电脉冲信号转变为角位移或多线位移的开源控制元件。在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性的关系的存在

    2024年02月04日
    浏览(34)
  • 153、仿真-基于51单片机四相步进电机正反转控制系统设计(程序+Proteus仿真+参考论文+流程图+配套资料等)

    目录 一、设计功能 二、Proteus仿真图​ 三、程序源码 资料包括: 需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。

    2024年02月16日
    浏览(53)
  • 基于51单片机的步进电机驱动,亲测无误

    这一次要分享的项目是最近接单做的一个小玩意儿,基于51单片机的步进电机驱动。最近积压了两个月的小项目会在后面陆续发出,好了回归正题。本次步进电机驱动的话主要实现的功能就是实现: 步进电机的加速和减速,正转反转和开启或者停止工作。用LCD1602显示当前工作

    2023年04月09日
    浏览(43)
  • 51单片机双轴太阳能追光追日系统ULN2003步进电机

    功能介绍:    

    2023年04月09日
    浏览(50)
  • 基于单片机的步进电机控制系统设计与实现

    目 录 1 引言 1 2 总体设计方案 2 2.1 系统设计原理 2 2.2 总体设计框图 2 3系统硬件模块的组成 3 3.1单片机控制模块 3 3.1.1 STC89C52主要结构 3 3.1.2 STC89C52功能特性描述 3 3.1.3 时钟电路 6 3.1.4复位电路 6 3.2 步进电机模块 7 3.2.1 步进电机简介 7 3.2.2步进电机的结构 8 3.2.3 28BYJ-48步进电机

    2024年02月04日
    浏览(58)
  • 单片机设计_自动追光系统、光源跟踪系统(AT89C51 光敏电阻 步进电机)

    想要更多项目私wo!!!          51 单片机双轴自动追光系统主要由 STC89C52RC + 5516 光敏电阻 + ADC0832 + ULN2803 + 步进电机 + LCD1602 显示屏组成。         1.通过子电路板的上、下、左、右四个光敏电阻来感受四个方向的光强,自 动寻找光强最强的方向。四个光敏电阻的分压电

    2024年02月11日
    浏览(40)
  • 基于51单片机的FRID智能门禁系统(RFID,12864,AT24C02,步进电机......)

    目录 门禁系统 需要的器件 设计思路 流程图实现 技术实现 实物接线图 实物接线图  函数设计 部分主程序代码,截取片段 12864显示模块 步进电机模块以及蜂鸣器 FRID射频模块 AT24C02模块 功能实现及其源代码 完整文件         STC89C52,MFRC-522 RFID射频模块,AT24C02存储电路,

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包