单片机控制步进电机

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

之前学习了单片机控制直流电机,下一步我们一起来学习如何控制步进电机


提示:以下是本篇文章正文内容,下面案例可供参考

一、步进电机的工作原理是什么?

电机怎么控制转多少度!原理最容易理解的电机!步进电机的工作原理!

https://www.bilibili.com/video/BV1cN4y197TG/?spm_id_from=333.337.search-card.all.click

常用驱动器

一分钟学会控制步进电机

https://www.bilibili.com/video/BV11h4y1V7vK/?spm_id_from=333.337.search-card.all.click

51单片机控制步进电机输出一定的角度、转速和转向(可提供源代码)

https://www.bilibili.com/video/BV1Dq4y1E7Xj/?spm_id_from=333.337.search-card.all.click

ABCD A-AB-B-BC-C-CD-D-DA-A 有字母就是1 否则是0

1000 1100 0100 0110 0010 0011 0001 1001

0x80 0xc0 0x40 0x06 0x02 0x03 0x01 0x09

双四拍,一次给两个1: ABCD 1001 1100 0110 0011 ->1001
单四拍,一次只给一个1:ABCD 1000 0100 0010 0001 ->1000
单双八拍, 1001 1000 1100 0100 0110 0010 0011 0001 ->1001
根据我们看到步进电机的原理,电池很忙,才能让步进电机按照顺序转起来

从左往右给脉冲正转, 从右往左就是反转。

ULN2003绿色板资料下载链接:https://pan.baidu.com/s/1EqgUEpMWoq91wRWK6gaang

提取码:8888

ULN2003蓝色板资料下载链接:https://pan.baidu.com/s/1r9JF2EX3bA3JRBuEZfW5Gg

提取码:8888

二、连线图

三、程序

1.参考程序

代码如下(示例):

c 复制代码
unsigned char ta[4]={0x01,0x02,0x04,0x08};

void delay(unsigned char ms)
{
	//
	for(x=0;x<ms;x++)
	{
		for(y=0;y<100;y++);
	}
}
void main()
{

	while(1)
	{
		for(i=0;i<4;i++)//正转
		{
					P1=ta[i];
					delay(1);
		}
		for(i=0;i<4;i++)//反转
		{
					P1=ta[3-i];
					delay(1);
		}
	}
	
}

2.实际测试

四、开发板

1.原理图

2.实际连接图

3.参考程序

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

unsigned char ta[4]={0x01,0x02,0x04,0x08};

void delay(unsigned char ms)
{
	//
	unsigned char x,y;
	for(x=0;x<ms;x++)
	{
		for(y=0;y<100;y++);
	}
}
void main()
{
	
	unsigned char i;

	while(1)
	{
		for(i=0;i<4;i++)//正转   一直再转
		{
					P1=ta[i];
					delay(10);
		}
//		for(i=0;i<4;i++)//反转
//		{
//					P1=ta[3-i];
//					delay(10);
//		}
	}
	
}

4.测试

5. 思考

1.控制步进电机转速

2.控制步进电机方向

  1. 控制步进电机转动指定角度

加入按键?

按键1 :控制正反

按键2: 速度

按键3:角度 90度

程序框架

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

unsigned char ta[4]={0x01,0x02,0x04,0x08};

void delay(unsigned char ms)
{
	//
	unsigned char x,y;
	for(x=0;x<ms;x++)
	{
		for(y=0;y<100;y++);
	}
}

void zhengzhuan()
{
		for(i=0;i<4;i++)//正转   一直再转
		{
					P1=ta[i];
					delay(10);
		}
}
void fanzhuan()
{
	for(i=0;i<4;i++)//反转
		{
				P1=ta[3-i];
				delay(10);
		}
}
void main()
{
	
	unsigned char i;

	while(1)
	{
		
		if(key1==0)
		{
			zhengzhuan();
			
		}
		else
		{
			fanzhuan();	//  num
		}
		if(key2==0)
		{
			//num
		}
		if(key3==0)  //转动90度
		{
			
			zhengzhuan(90,);
		}

	}
	
}

五、步距角

步距角: 5.625度

转360度: 360/5.625=64 , 64一圈

由于有减速箱:1/64

所以实际想要转一圈需要 : 64*64=4096个脉冲

实际计算:根据八拍来运行

步距角: 5.625度

转360度: 360/5.625=64 , 64一圈

由于有减速箱:1/32 (实际算得减速比是32)

所以实际想要转一圈需要 : 32*64=2048个脉冲

参考程序:

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

/*
ABCD   A-B-C-D  
1000 0100 0010 0001  
0X80 0X40 0X20 0X01
*/
unsigned char ta[4]={0x01,0x02,0x04,0x08};  //  5.625*2=11.25

unsigned char ta8[8]={0x80,0xc0,0x40,0x06,0x02,0x03,0x01,0x09};  //5.625
/*
ABCD     A-AB-B-BC-C-CD-D-DA-A      有字母就是1 否则是0 
1000 1100 0100 0110 0010 0011 0001 1001
0x80  0xc0  0x40  0x06  0x02  0x03 0x01 0x09*/
void delay(unsigned char ms)
{
	//
	unsigned char x,y;
	for(x=0;x<ms;x++)
	{
		for(y=0;y<100;y++);
	}
}
void main()
{
	
	unsigned int i,j;
// 转一圈	
	for(j=0;j<256;j++)  //5.625   360/5.625=64   64*32=2048   2048/8=256 	
	{
		for(i=0;i<8;i++)//正转
		{
						P1=ta8[i];
						delay(5);
		}
	}

	while(1)
	{
	}

}

总结

相关推荐
hollq2 小时前
STM32F103RCT6+STM32CubeMX+keil5(MDK-ARM)+Flymcu实现串口重定向
arm开发·stm32·嵌入式硬件
小鱼儿电子3 小时前
17-基于STM32的宠物饲养系统设计与实现
stm32·嵌入式硬件·物联网·宠物·宠物饲养系统
小莞尔5 小时前
【51单片机】【protues仿真】基于51单片机四层电梯系统
单片机·嵌入式硬件
CFZPL5 小时前
使用江科大串口发送函数发送freertos的vTaskList出现跑飞
单片机
F133168929576 小时前
WD5030A,24V降5V,15A 大电流,应用于手机、平板、笔记本充电器
stm32·单片机·嵌入式硬件·51单片机·硬件工程·pcb工艺
易享电子7 小时前
基于单片机电器断路器保护器系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
爱倒腾的老唐9 小时前
01、如何学习单片机
单片机·嵌入式硬件·学习
点灯小铭9 小时前
基于单片机的夹具压力控制系统设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计
雾削木15 小时前
stm32解锁芯片
javascript·stm32·单片机·嵌入式硬件·gitee
璞致电子17 小时前
fpga开发板ZYNQ 璞致 PZ7010/7020 邮票孔核心板简介-ZYNQ7000系列小系统学习板
linux·嵌入式硬件·学习·fpga开发·fpga·fpga开发板·xilinx开发板