51单片机通过驱动器精准控制步进电机

51单片机驱动器控制步进电机

本文写到的实物图

文章简介

本文是前段时间玩步进电机精准控制的总结,关于51单片机驱动步进电机的程序(用脉冲频率控制)及接线方法。

1.驱动器简介

如图所示,以下为两相电机驱动器实物图,ENA+为驱动器使能信号+,ENA-为驱动器使能信号-。PUL+是脉冲信号+,PUL-是脉冲信号-。DIP是方向信号。 DC接供电电源,电压为24V~42V。

驱动器实物图

驱动器还可通过拨码开关调电流和调细分,上方有PU的表格为调细分的,通过拨码开关S1,S2,S3进行控制,下方有PK的表格为调电流的,通过拨码开关S4,S5,S6进行控制。拨码开关往下拨就是ON状态(开启状态)。(其他驱动器可根据规格表对比,基本同理)

驱动器拨码开关图

2.驱动器和单片机接线方法

驱动器上A+、A-、B+、B-端通过电机上说明,按照颜色接即可。

电机实物图

然后驱动器ENA-,DIP-,PUL-三个端共地,接单片机的GND

共地接法

这里是驱动器拨码开关的图在这里插入图片描述

接着PUL+,DIR+两个端根据代码写的端口接到单片机上,下面是实物连接图。

驱动器和单片机实物接线图

3.单片机程序

程序通过用按键控制发送的脉冲频率,通过发送脉冲,给驱动器口PUL驱动电机, 通过按键来控制发送 500 个脉冲,精准控制步进电机在直尺上转动 1cm 。

按键一功能是发送500个脉冲,从而精准控制一厘米,为什么是发送500个脉冲,是因为驱动器可以通过拨动开关调电流,调细分,我用的是200个脉冲转一圈的状态,经过调试200个脉冲刚好转动0.4厘米,经过换算,500个脉冲为1厘米,所以实现精准控制1厘米,同理可得,其他距离的脉冲数。
按键二的功能为使电机反转,通过转换引脚电平,给驱动器DIR口状态取反,DIR控制电机正方转,故按键二控制电机方向。
两个外部中断是响应接近开关,使电机转换方向,防止电机超过限位。

#include <stc15f2k60s2.h>
#include <intrins.h>
#define u8 unsigned char
#define u16 unsigned int
 unsigned int h;		//无符号整形变量

sbit maichong=P1^1;		//定义脉冲输出脚(PUL)
sbit zhuang=P0^3;		//定义方向引脚(DIR)
sbit  K1=P2^0;			//脉冲发送
sbit  K2=P2^1;			//转向
sbit  K3=P2^2;			//调试按键,调试中断是否能进入,可注释掉
sbit  right=P3^2		//右限位
sbit  left=P3^3;		//左限位
sbit  yuan=P0^2;		//坐标原点

/**CSDN博墨**************************************/
/********CSDN博墨********************************/
/****************CSDN博墨************************/
/*************************CSDN博墨***************/
/**********************************CSDN博墨******/


void Delay400us()		//400微秒延时函数	
{
	unsigned char i, j;

	i = 5;
	j = 74;
	do
	{
		while (--j);
	} while (--i);
}

void Delay10ms()		//10毫秒延时函数
{
	unsigned char i, j;

	i = 108;
	j = 145;
	do
	{
		while (--j);
	} while (--i);
}

void right_EXINT0() interrupt 0		//外部中断函数0
{
	if(right==1)
	{
		Delay10ms(); 
		if(right==1)
		{
			zhuang=~zhuang;
		}
	}
}
	
void left_EXINT1() interrupt 2		//外部中断函数1
{
	if(left==1)
	{
		Delay10ms(); 
	if(left==1)
		{
			zhuang=~zhuang;
		}
	}
}	

void EXINT_init()			//外部中断初始化
{

	IT0=0;
	IT1=0;
	IE0=0;
	IE1=1;
	EA =1;
	EX0=1;
	EX1=1;
}

void main ()				//主函数
{
	EXINT_init();
	P0M0=0XFF;
	P0M1=0X00;
	while(1)
	 {
	    if (K1==0)			//按键1判断
		{
			 Delay10ms();   //延时
			 if (K1==0)
			{	
				for(h=0;h<500;h++)//for 循环500次,发送500个脉冲
					{
					maichong=0;           
					Delay400us();      
					maichong=1;            
					Delay400us();
					}  
			}		
		}	 
		if (K2==0)			//判断按键2
			{
			 Delay10ms();  //延时
			 if (K2==0)
				{
				zhuang=~zhuang;		//引脚状态取反
				while(K2==0);		//判断是否松开按键
					
				}
				
			}
	if(K3==0)
	{
		if(K3==0)
		{
			P1=0X00;
		}
	}
	else{
		P1=0Xff;
	}
	}
}
/**CSDN博墨**************************************/
/********CSDN博墨********************************/
/****************CSDN博墨************************/
/*************************CSDN博墨***************/
/**********************************CSDN博墨******/

4.实物演示视频

51单片机驱动器控制步进电机

以上是之前程序调试完的视频,文章中如果有错误的地方,欢迎各位大佬指正。

版权声明:本文为CSDN博主「博墨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_59552290/article/details/122124843

51单片机驱动器控制步进电机

本文写到的实物图

文章简介

本文是前段时间玩步进电机精准控制的总结,关于51单片机驱动步进电机的程序(用脉冲频率控制)及接线方法。

1.驱动器简介

如图所示,以下为两相电机驱动器实物图,ENA+为驱动器使能信号+,ENA-为驱动器使能信号-。PUL+是脉冲信号+,PUL-是脉冲信号-。DIP是方向信号。 DC接供电电源,电压为24V~42V。

驱动器实物图

驱动器还可通过拨码开关调电流和调细分,上方有PU的表格为调细分的,通过拨码开关S1,S2,S3进行控制,下方有PK的表格为调电流的,通过拨码开关S4,S5,S6进行控制。拨码开关往下拨就是ON状态(开启状态)。(其他驱动器可根据规格表对比,基本同理)

驱动器拨码开关图

2.驱动器和单片机接线方法

驱动器上A+、A-、B+、B-端通过电机上说明,按照颜色接即可。

电机实物图

然后驱动器ENA-,DIP-,PUL-三个端共地,接单片机的GND

共地接法

这里是驱动器拨码开关的图在这里插入图片描述

接着PUL+,DIR+两个端根据代码写的端口接到单片机上,下面是实物连接图。

驱动器和单片机实物接线图

3.单片机程序

程序通过用按键控制发送的脉冲频率,通过发送脉冲,给驱动器口PUL驱动电机, 通过按键来控制发送 500 个脉冲,精准控制步进电机在直尺上转动 1cm 。

按键一功能是发送500个脉冲,从而精准控制一厘米,为什么是发送500个脉冲,是因为驱动器可以通过拨动开关调电流,调细分,我用的是200个脉冲转一圈的状态,经过调试200个脉冲刚好转动0.4厘米,经过换算,500个脉冲为1厘米,所以实现精准控制1厘米,同理可得,其他距离的脉冲数。
按键二的功能为使电机反转,通过转换引脚电平,给驱动器DIR口状态取反,DIR控制电机正方转,故按键二控制电机方向。
两个外部中断是响应接近开关,使电机转换方向,防止电机超过限位。

#include <stc15f2k60s2.h>
#include <intrins.h>
#define u8 unsigned char
#define u16 unsigned int
 unsigned int h;		//无符号整形变量

sbit maichong=P1^1;		//定义脉冲输出脚(PUL)
sbit zhuang=P0^3;		//定义方向引脚(DIR)
sbit  K1=P2^0;			//脉冲发送
sbit  K2=P2^1;			//转向
sbit  K3=P2^2;			//调试按键,调试中断是否能进入,可注释掉
sbit  right=P3^2		//右限位
sbit  left=P3^3;		//左限位
sbit  yuan=P0^2;		//坐标原点

/**CSDN博墨**************************************/
/********CSDN博墨********************************/
/****************CSDN博墨************************/
/*************************CSDN博墨***************/
/**********************************CSDN博墨******/


void Delay400us()		//400微秒延时函数	
{
	unsigned char i, j;

	i = 5;
	j = 74;
	do
	{
		while (--j);
	} while (--i);
}

void Delay10ms()		//10毫秒延时函数
{
	unsigned char i, j;

	i = 108;
	j = 145;
	do
	{
		while (--j);
	} while (--i);
}

void right_EXINT0() interrupt 0		//外部中断函数0
{
	if(right==1)
	{
		Delay10ms(); 
		if(right==1)
		{
			zhuang=~zhuang;
		}
	}
}
	
void left_EXINT1() interrupt 2		//外部中断函数1
{
	if(left==1)
	{
		Delay10ms(); 
	if(left==1)
		{
			zhuang=~zhuang;
		}
	}
}	

void EXINT_init()			//外部中断初始化
{

	IT0=0;
	IT1=0;
	IE0=0;
	IE1=1;
	EA =1;
	EX0=1;
	EX1=1;
}

void main ()				//主函数
{
	EXINT_init();
	P0M0=0XFF;
	P0M1=0X00;
	while(1)
	 {
	    if (K1==0)			//按键1判断
		{
			 Delay10ms();   //延时
			 if (K1==0)
			{	
				for(h=0;h<500;h++)//for 循环500次,发送500个脉冲
					{
					maichong=0;           
					Delay400us();      
					maichong=1;            
					Delay400us();
					}  
			}		
		}	 
		if (K2==0)			//判断按键2
			{
			 Delay10ms();  //延时
			 if (K2==0)
				{
				zhuang=~zhuang;		//引脚状态取反
				while(K2==0);		//判断是否松开按键
					
				}
				
			}
	if(K3==0)
	{
		if(K3==0)
		{
			P1=0X00;
		}
	}
	else{
		P1=0Xff;
	}
	}
}
/**CSDN博墨**************************************/
/********CSDN博墨********************************/
/****************CSDN博墨************************/
/*************************CSDN博墨***************/
/**********************************CSDN博墨******/

4.实物演示视频

51单片机驱动器控制步进电机

以上是之前程序调试完的视频,文章中如果有错误的地方,欢迎各位大佬指正。

版权声明:本文为CSDN博主「博墨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_59552290/article/details/122124843

生成海报
点赞 0

博墨

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

常兴串口调试助手

1,支持常用的300-9600波特率,能设置端口参数; 2,能以ASCII码或十六进制收发数据,真正支持中文字符的收发; 3,接收到的16进制数据选中后能以10进制和2进制显示。方便查看数

单片机项目:音乐喷泉

1.项目需求 利用Arduino控制器,能利用蓝牙模块与手机设备进行通讯,接收手机端发送的指令;接收到手机发送的 播放、暂停、上一首、下一首 等指令后,能够控制音乐播放器做出相应的反应&