51单片机STC89C52RC——16.1 五线四相步进电机

目录

目的/效果

一,STC单片机模块

二,步进电机

[2.2 什么是步进电机?](#2.2 什么是步进电机?)

[2.2.1 步进电机驱动板](#2.2.1 步进电机驱动板)

静态参数

动态参数

[2.2.2 五线四相](#2.2.2 五线四相)

单相激励步进

双相激励步进

混合激励驱动

[2.3 细分驱动](#2.3 细分驱动)

[2.4 通过数字信号控制旋转位置和转速。](#2.4 通过数字信号控制旋转位置和转速。)

[2.5 适用场景](#2.5 适用场景)

三,创建Keil项目

四,代码

五,代码编译、下载到51单片机


目的/效果

让步进电机 正向转90度,逆向转90度

一,STC单片机模块

二,步进电机

2.1 什么是步进电机?

步进电机可以理解为:是一个按照固定步幅运动的"小型机器"。它与普通电机不同点在于,普通电机可以持续旋转,而步进电机按照特定的步数或者角度来移动 。它每次只能移动一定的距离或者旋转一定的角度,运动更像是按照固定的步伐一步一步地走。这种特性让步进电机在需要精确控制位置和速度的场景中非常有用,比如打印机、机器人、数控机床等。

2.1.1 步进电机驱动板

步进电机的控制需要按照特定的顺序激活线圈,以产生旋转。驱动板充当了控制器的角色,它能提供正确的电流和顺序来激活步进电机的各个线圈,使得它按照预期的方式运转。步进电机的操纵需要精确的电流控制和时序激活,而驱动板能提供这种控制,让步进电机按照设定的步数或角度进行精确的运动。用通俗的语言解释一下就是,步进电机是个没有"脑子"的机器,需要芯片(ULN2003)把单片机发送过来的电信息,转化为步进电机能够"处理"的脉冲信号,并作出相应处理。

静态参数

相数:线圈的组数,两相步进电机步距角一般为 1.8°,三相的步进电机步距角为 1.2°,相数越多步距角越小。

步距角:一个脉冲信号所对应的电机转动的角度,这个步距角他不一定是电机实际工作的真正步距角,真正的步距角与驱动器的细分有关。

拍数:完成一个磁场周期性变化所需的脉冲数。

定位转矩:电机在不通电状态下,电机转子自身的锁定力矩(由磁场齿形的谐波以及机械误差造成的)。

动态参数

步距角精度:步进电机转动一个步距角度的实际值与理论值的误差。用百分比表示:误差/步距角 *100%。

失步:电机运转的步数,不等于理论上的步数。也可以叫做丢步,一般都是因负载过大或者是频率过快。

最大空载起动频率:不加负载的情况下,能够直接起动的最大频率。

最大空载运行频率:电机不带负载的最高转速频率。

运行距频特性:输出转矩与输入脉冲频率的关系,是电机选型的根本依据。要在该曲线之下才能保证运行时不丢步。

电机正反转控制:改变通电顺序而改变电机的正反转。

2.1.2 五线四相

五线四相指的是它的线数相数 。在这个28BYJ48步进电机中,有五根线用于连接 ,四相则表示它具有四组线圈,每个线圈都能独立控制。+为公共端,分A、B、C、D四相

分别给ABCD导通,电机就会转。

单相激励步进

每次通电产生磁性的相只有ABCD其中的一个

|--------|-------|-------|-------|-------|-------------|
| 步序 | A | B | C | D | P1(HEX) |
| 1 | 1 | 0 | 0 | 0 | 0x08 |
| 2 | 0 | 1 | 0 | 0 | 0x04 |
| 3 | 0 | 0 | 1 | 0 | 0x02 |
| 4 | 0 | 0 | 0 | 1 | 0x01 |

bash 复制代码
		P1=0x08;//A导通	 
		Delay_ms(10);
		P1=0x04;//B导通
		Delay_ms(10);
		P1=0x02;//C导通
		Delay_ms(10);
		P1=0x01;//D导通
		Delay_ms(10); 
双相激励步进

转子却被固定在两个绕阻的极性中间

|--------|-------|-------|-------|-------|-------------|
| 步序 | A | B | C | D | P1(HEX) |
| 1 | 1 | 1 | 0 | 0 | 0x0C |
| 2 | 0 | 1 | 1 | 0 | 0x06 |
| 3 | 0 | 0 | 1 | 1 | 0x03 |
| 4 | 1 | 0 | 0 | 1 | 0x09 |

bash 复制代码
        P1=0x0C;//AB导通	 
		Delay_ms(10);
		P1=0x06;//BC导通
		Delay_ms(10);
		P1=0x03;//CD导通
		Delay_ms(10);
		P1=0x09;//DA导通
		Delay_ms(10); 
混合激励驱动

双相激励的过程中,也可以在装换相位时加一个关闭相位的状态而产生走半步的现象,这将步进电机的整个步距角一分为二

|--------|-------|-------|-------|-------|-------------|
| 步序 | A | B | C | D | P1(HEX) |
| 1 | 1 | 0 | 0 | 0 | 0x08 |
| 2 | 1 | 1 | 0 | 0 | 0x0C |
| 3 | 0 | 1 | 0 | 0 | 0x04 |
| 4 | 0 | 1 | 1 | 0 | 0x06 |
| 5 | 0 | 0 | 1 | 0 | 0x02 |
| 6 | 0 | 0 | 1 | 1 | 0x03 |
| 7 | 0 | 0 | 0 | 1 | 0x01 |
| 8 | 1 | 0 | 0 | 1 | 0x09 |

bash 复制代码
		P1=0x08;//A导通	 
		Delay_ms(10);
		P1=0x0C;//AB导通	 
		Delay_ms(10);
		P1=0x04;//B导通
		Delay_ms(10);
		P1=0x06;//BC导通
		Delay_ms(10);
		P1=0x02;//C导通
		Delay_ms(10);
		P1=0x03;//CD导通
		Delay_ms(10);
		P1=0x01;//D导通
		Delay_ms(10); 		
		P1=0x09;//DA导通
		Delay_ms(10); 

2.2 细分驱动

将步距角以电流分配方法进行细分化的技术。一般电机产品都会集成这种技术,使用时只需细分数即可实现。

原理磁场强度和电流大小成正比

如果Ia = Ib 那么转子将停在相邻两个线圈的中间,如果电流不相等,转子将停在电流较大的一侧;通过改变输入电流的比例,就可以比原来更小的步距角进行驱动;可进行超微小角度,更加平滑的运转,有效地降低振动和噪音的驱动方法。

2.3 通过数字信号控制旋转位置和转速**。**

控制定子绕组ABCD周期性、交替得电,进而控制步进电机一步一步的向前运动的这个控制器就是步进电机驱动器。

电机的旋转位置只取决于脉冲个数,转速只取决脉冲信号的频率

角位移=脉冲个数X步距角。

步进电机的步距角计算公式为:θ=360°/(Z×m×k)。其中,θ是步距角,Z是转子齿数,m是定子绕组的对数,k是通电方式系数。对于单拍通电方式,k=1;对于单双拍通电方式,k=2。1

另外,步距角也可以通过以下公式计算:θ=360°/(转子齿数×运行拍数)。以常规二、四相,转子齿为50齿电机为例,四拍运行时步距角为θ=360°/(50×4)=1.8°,八拍运行时步距角为θ=360°/(50×8)=0.9°。

请注意,步距角是步进电机运动的基础,它取决于电机上的磁极总数,且步距角越小,运转的平稳性越好。

2.4 适用场景

步进电机有以下的三个特点:

其一是精准定位,步进电机能够准确控制位置,适用于需要精确控制位置和速度的应用。

其二是固定步进,它能按照固定步幅移动,使其在需要确定性移动的应用中很有用。

其三是低速高扭矩:步进电机在低速和高扭矩方面表现出色,这让它们在需要大力矩但不需要高速旋转的场景中很有用。

故而根据以上的三个特性,可以用到那些项目里呢?举几个我曾接触使用到步进电机的项目吧!同学们可以发挥自己的想象力哈哈哈...

智能窗帘

打印机

图书馆取书机器人的机械臂关节处的动力

三,创建Keil项目

详细参考:51单片机STC89C52RC------创建Keil项目-CSDN博客

四,代码

完整代码参考《https://gitee.com/oopxiajun/STC89C52

main.c

bash 复制代码
#include <REGX52.H>
#include "Delay.h"
#include "key.h"
#include "StepMotor.h"
#include "LCD1602.h"
//模式 :1-正转,2-反转
int Model=1;
/**
 * 函    数:主函数
 * 参    数:无
 * 返 回 值:无
 */
void main()
{   
	int step=0;
	LCD_Init();
	//顺时针转90度
	StemMotor_Run(1,90,1);
	Delay_ms(1000);
	//逆时针转90度
	StemMotor_Run(2,90,2);
	while(1)
	{   	
	}
}
  
bash 复制代码
#include <REGX52.H>
#include "delay.h"
int StepTime = 1000;//steptime表示每步的时间
//八拍
unsigned char code Rotation[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};

/**
 * 函    数:控制步进电机运行
 * 参    数:Step 转速(单步暂停时长)
			 Angle 角度(0-360)
			 Direction 转动方向(1-顺时针,2-逆时针)
 * 返 回 值:无
 */
void StemMotor_Run(int Step,int Angle,int Direction)
{
	int i=0;
	Angle=(int)(Angle/0.72);
	while((Angle--)>=0)
	{
		if(Direction==1)//正转
		{
			//每执行一次下面的循环,步进电机转角0.72度 ,
			//步进电机运行1周,需执行500次下面的循环
			for(i=0;i<8;i++)
			{
				P1=Rotation[i];//步距角0.09度,4000次转一圈
				Delay_ms(Step);
			}
		}
		else if(Direction==2)//反转
		{
			for(i=7;i>=0;i--)
			{
				P1=Rotation[i];
				Delay_ms(Step);
			}
		}	
	}
}

五,代码编译、下载到51单片机

代码编译请参考

51单片机STC89C52RC------代码编译-CSDN博客

代码下载请参考

《51单片机STC89C52RC------STCAI-ISP代码下载-CSDN博客

相关推荐
沉在嵌入式的鱼3 小时前
linux串口对0X0D、0X0A等特殊字符的处理
linux·stm32·单片机·特殊字符·串口配置
学习路上_write3 小时前
AD5293驱动学习
c语言·单片机·嵌入式硬件·学习
影阴3 小时前
存储器和寄存器
stm32·单片机·嵌入式硬件
吃西瓜的年年4 小时前
3. C语言核心语法2
c语言·嵌入式硬件·改行学it
李洛克075 小时前
RDMA CM UDP 通信完整指南
单片机·网络协议·udp
思茂信息5 小时前
CST电动车EMC仿真——电机控制器MCU滤波仿真
javascript·单片机·嵌入式硬件·cst·电磁仿真
小曹要微笑5 小时前
I2C总线技术解析(纯文字版)
单片机·嵌入式硬件·esp32·iic
我送炭你添花5 小时前
可编程逻辑器件(PLD)的发展历程、原理、开发与应用详解
嵌入式硬件·fpga开发
袖手蹲5 小时前
Arduino UNO Q 从 Arduino Cloud 远程控制闪烁 LED
人工智能·单片机·嵌入式硬件·电脑
平凡灵感码头6 小时前
第一次做蓝牙产品,从零开发 嵌入式开发日志(2)AC63NSDK 完整合并版目录说明
stm32·单片机·嵌入式硬件