51单片机-驱动步进电机模块教程

本章概述思维导图:

51单片机驱动步进电机模块

步进电机简介

步进电机是一种将电脉冲信号转换为角位移或线位移的电动机,其核心特点在于能够通过控制脉冲数量来精确控制转动角度,无需反馈装置即可实现定位;步进电机内部结构图如下:

步进电机内部结构:绕组、定子与转子

1、定子

由硅钢片叠压而成,表面有齿轮状突起(极齿),每个极齿绕有绕组(线圈)。

定子绕组通电后产生磁场,驱动转子旋转。

相数:独立绕组的数量(如两相、三相),决定控制精度和扭矩。

2、转子

永磁式:由永磁体制成,与定子磁场直接对齐,扭矩大但速度/分辨率较低。

反应式(变阻式):由软磁材料制成,通过磁阻变化驱动,速度高但扭矩小。

混合式:结合永磁体和软磁材料,兼具高分辨率(如1.8°步距角)、高速度和大扭矩,应用最广泛。

3、绕组

定子极齿上的线圈,通电后产生磁场,通过电流方向和大小控制磁场极性和强度。

单极性:每个绕组有中心抽头,通过简单电路控制电流方向(但铜损较高)。

双极性:每个绕组仅两端,需H桥电路控制电流方向(效率更高)。


步进电机主要类型

按励磁方式:

磁阻式(VR):结构简单,步距角大,动态性能差。

永磁式(PM):转子为永磁体,步距角大,但启动频率低。

混合式(HB):结合前两者优点,步距角小、输出力矩大,应用最广泛。

按相数:两相、三相、五相,相数越多步距角越小(如两相1.8°,五相0.72°)。


步进电机核心参数

步距角:每个脉冲的转动角度,如1.8°(两相)、0.9°(半步驱动)。

保持转矩:电机静止时锁定的最大力矩,衡量负载能力。

起动频率:直接启动而不失步的最高脉冲频率。

运行频率:连续运行时的最高脉冲频率,与转速相关。

精度:步距角实际值与理论值的偏差,通常在±5%以内。


步进电机应用场景

精确定位:3D打印机(喷头移动)、数控机床(刀具定位)、机器人(关节控制)。

自动化设备:输送带、机械臂、包装机(定长切割)。

医疗设备:注射泵、CT扫描仪(精密驱动)。

消费电子:打印机(打印头移动)、相机(自动对焦)、ATM机(钞票传送)。


步进电机优势

开环控制:无需传感器反馈,系统简单且成本低。

低速大扭矩:适合需要频繁启停的场景。

响应快:启动、停止迅速,适合高速动态控制。


步进电机工作原理

1、步进电机基本原理

磁场对齐:定子绕组通电后产生磁场,转子因磁力作用与磁场对齐。

顺序切换:通过按顺序切换通电绕组,转子逐步旋转。

步距角:每脉冲转动的角度,由电机结构决定。

计算公式:步距角=360°/(转子齿数×运行拍数)

示例:两相混合式步进电机(转子50齿,运行拍数4),步距角为1.8°

2、运行模式

全步模式:一次仅一个相位通电,扭矩大但步距角较大(如90°)

半步模式:交替单、双相通电,步距角减半(如45°),但扭矩波动。

微步模式:通过调节电流大小实现更小步距(如0.1°),但扭矩降低。

3、控制方法:角度、转速、与正反转

转动角度控制:

脉冲计数:每个脉冲驱动转子转动一个步距角,脉冲数决定总角度。

示例:100个脉冲 × 1.8° = 180°。

转速控制:

频率调节:转速(RPM)= (脉冲频率 × 60) / 每转步数。

示例:脉冲频率1000Hz,每转200步,转速为300RPM。

加速/减速策略:高频启动可能导致失步,需采用S形曲线等匀加速算法。

正反转控制:

通电顺序切换:

正转:按A→B→C→D顺序通电。

反转:按D→C→B→A顺序通电。


步进电机极性区分

步进电机极性区分基础

步进电机的极性由绕组设计和电流方向控制方式决定,主要分为两类:

1、单极性

绕组有中心抽头,电流仅需单向流动(通过公共端)。

典型代表:五线四相步进电机。

2、双极性

绕组无中心抽头,电流需双向流动(需H桥电路控制方向)。

典型代表:四线双极性步进电机。

五线四相步进电机(单极性)介绍

1、结构特点

5根引线:1根公共端(COM,通常红色),4根相线(A、B、C、D)。

绕组设计:每个绕组有中心抽头,电流从公共端流向相线。

2、极性区分方法

万用表测量:电阻档测量公共端(COM)与其他4根线:阻值相同,确认公共端。测量相线间阻值:高阻值或无穷大,说明属于不同相。

接线逻辑:公共端接电源正极,相线按顺序连接驱动器输出端(如A→B→C→D)。

3、控制原理

控制原理示意图:1~8顺时针旋转360°

第一步:A相通电,B、C、D不通电;顺时针旋转0°;

第二步:A、B相通电,C、D不通电;顺时针旋转45°;

第三步:B相通电,A、C、D不通电;顺时针旋转90°;

第四步:B、C相通电,A、D不通电;顺时针旋转135°;

第五步:C相通电,A、B、D不通电;顺时针旋转180°;

第六步:C、D相通电,A、B不通电;顺时针旋转225°;

第七步:D相通电,A、B、C不通电;顺时针旋转270°;

第八步:A、D相通电,B、C不通电;顺时针旋转315°;


四线双极性步进电机(双极性)介绍

1、结构特点:

4根引线:无公共端,每相由两根线组成(A+、A-;B+、B-)。

绕组设计:电流需双向流动,需H桥电路控制方向。

2、极性区分方法

万用表测量:电阻档测量任意两根线:低阻值说明同一相(如A+和A-),高阻值为不同相。标记同一相的两根线为A+、A-和B+、B-。

接线逻辑:同一相线连接驱动器输出端(如A+→OUT1,A-→OUT2;B+→OUT3,B-→OUT4)。

3、控制原理

通过H桥电路切换电流方向,实现正反转:

正转:A相通电(A+→正,A-→负),B相通电(B+→正,B-→负)。

反转:A相通电(A+→负,A-→正),B相通电(B+→负,B-→正)。

需专用驱动器(如L298N、TMC2209)支持双极性控制。

控制原理示意图:1~8顺时针旋转360°

第一步:A相通电(A+为高电平,A-为低电平),B相不通电;

第二步:A相通电(A+为高电平,A-为低电平),B相通电(B+为高电平,B-为低电平);

第三步:A相不通电,B相通电(B+为高电平,B-为低电平);

第四步:A相通电(A+为低电平,A-为高电平),B相通电(B+为高电平,B-为低电平);

第五步:A相通电(A+为低电平,A-为高电平),B相不通电;

第六步:A相通电(A+为低电平,A-为高电平),B相通电(B+为低电平,B-为高电平);

第七步:A相不通电;B相通电(B+为低电平,B-为高电平);

第八步:A相通电(A+为高电平,A-为低电平),B相通电(B+为低电平,B-为高电平);


28BYJ-48步进电机简介

28BYJ-48步进电机为五线四相单极步进电机,内置1:64减速齿轮箱;

五线定义:

公共端(COM):红色线,接电源正极(5V)。

四相线:橙、黄、粉、蓝四色线,分别对应A、B、C、D相。

驱动方式:单极性驱动,采用1-2相励磁模式(单相与双相交替通电)。

通电顺序:

全步四拍:A→B→C→D→A,每步转动5.625°(原始步距角)。

半步八拍:A→AB→B→BC→C→CD→D→DA→A,步距角减半至2.8125°,运行更平稳。

转速计算:

公式:转速(RPM)=(脉冲频率 × 60) / 每转步数。

示例:脉冲频率400Hz,每转200步(半步模式),转速= (400×60)/200=120 RPM。


步进电机硬件电路原理图分析

电路原理图分析:

ULN2003芯片的IN输入脚分别连接MCU的IO引脚,IN1-P10、IN2-P11、IN3-P12、IN3-P13、IN5-P25;

ULN2003芯片的OUT输出脚分别引出座子和连接蜂鸣器引脚,OUT1~OUT4引出座子,OUT5连接蜂鸣器(本章不考虑此引脚);

ULC2003芯片的GND引脚连接公共地,COM引脚连接开发板的VCC电源引脚;

这里我们正好可以实现步进电机五线匹配上ULN2003芯片引出的座子进行连接控制;我们将步进电机的红线连接VCC引脚,橙线连接ULN2003芯片的OUT1、黄线连接ULN2003芯片的OUT2、粉线连接ULN2003芯片的OUT3、蓝线连接ULN2003芯片的OUT4;


驱动步进电机模块软件编程设计

我们一起实现控制步进电机转动,并且通过三个独立按键实现对步进电机的控制啦,按键1按下实现步进电机的转向,按键2按下实现步进电机转动加速度,按键3按下实现步进电机转动减速度;

步进电机转动360°示意图:

第一步:我们实现步进电机旋转360°代码并且封装成函数,函数形参str为步数一共有八步,形参xz为步进电机方向0为顺时针旋转,1为逆时针旋转;

第二步:创建独立按键检测函数,之前文章有教学小伙伴直接复制粘贴就好啦。成熟的工程师往往都是在拷贝的道路上学习的;独立按键检测函数学习章节!!!

第三步:在主函数中实现按键控制步进电机功能

cpp 复制代码
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define BYJ_48_MAX 1	 //步进电机最快速度
#define BYJ_48_min 5	 //步进电机最慢速度
void Delay_10us(u16 us)//延时函数:输入1大概延时时间为10us
{
	while(us--);
}
void Delay_ms(u16 ms) //毫秒延时函数:输入1大概延时时间为1ms
{
	u16 i,j;
	for(i=ms;i>0;i--)
	{
		for(j=110;j>0;j--)
		{
		
		}
	}
}
#define KEY_matrix	P1
sbit KEY1=P3^1;//定义检测独立按键的各个引脚输入状态
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
#define KEY1_return 1//定义检测独立按键函数检测的状态变量返回值,按键按下分别返回1,2,3,4;没有按键按下返回0;
#define KEY2_return 2
#define KEY3_return 3
#define KEY4_return 4
#define KEY_return 0
u8 KEY_detect(u8 mode)//按键检测函数,返回值为判断是否有按键按下:有按键按下返回值为1-4,无按键按下返回值为:0;
{	
	static u8 flag=1;
	if(mode)
	{
		flag=1;
	}
	if((!KEY1 || !KEY2 || !KEY3 || !KEY4) && flag==1)//一次判断是否有按键按下
	{
		flag=0;
		Delay_10us(1000);//延时消抖
		if(!KEY1)	return KEY1_return;//二次判断
		else if(!KEY2)	return KEY2_return;
		else if(!KEY3)	return KEY3_return;
		else if(!KEY4)	return KEY4_return;
	}
	else if(KEY1 && KEY2 && KEY3 && KEY4)//判断所有按键是否松开
	{
		flag=1;
	}
	return KEY_return;
}
sbit IN1_D=P1^0;
sbit IN2_C=P1^1;
sbit IN3_B=P1^2;
sbit IN4_A=P1^3;
void BYJ_48(u8 str,u8 xz)		//步进电机控制:形参str:选择步数,xz:旋转方向0顺时针旋转,1逆时针旋转
{
	u8 temp=str;
	if(xz == 0)
	{
		temp=7-str;	
	}
	switch(temp)
	{
		case 0:	IN1_D=1;IN2_C=0;IN3_B=0;IN4_A=0;break;//第一步
		case 1: IN1_D=1;IN2_C=1;IN3_B=0;IN4_A=0;break;//第二步	
		case 2: IN1_D=0;IN2_C=1;IN3_B=0;IN4_A=0;break;//第三步
		case 3: IN1_D=0;IN2_C=1;IN3_B=1;IN4_A=0;break;//第四步
		case 4: IN1_D=0;IN2_C=0;IN3_B=1;IN4_A=0;break;//第五步
		case 5: IN1_D=0;IN2_C=0;IN3_B=1;IN4_A=1;break;//第六步	
		case 6: IN1_D=0;IN2_C=0;IN3_B=0;IN4_A=1;break;//第七步
		case 7: IN1_D=1;IN2_C=0;IN3_B=0;IN4_A=1;break;//第八步
	}
}
int main()															 
{
  u8 str=0;//步进电机开始步数
  u8 xz=0;//步进电机旋转方向:0为顺时针 
  u8 sd=BYJ_48_MAX;//步进电机速度控制
  u8 KEY=0;//按键获取 
	while(1)
	{
		KEY=KEY_detect(0);//按键获取
		if(KEY == 1)//按键1按下改变步进电机运行方向
		{
		  xz=!xz;
		}
		if(KEY == 2)//按键2按下加速度
		{
			if(sd > BYJ_48_MAX)
			{
				sd-=1;
			}
		}
		if(KEY == 3)//按键3按下减速度
		{
			if(sd < BYJ_48_min)
			{
				sd+=1;
			}
		}
		BYJ_48(str++,xz);
		if(str == 8) str=0;
		Delay_ms(sd);
	}
}		   

驱动步进电机转动效果展示:1、按键2控制步进电机加速度;2、按键1控制步进电机转向;3、按键3控制步进电机减速度;

驱动步进电机模块


制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!

相关推荐
李永奉8 小时前
51单片机-实现定时器模块教程
单片机·嵌入式硬件·51单片机
IT永勇9 小时前
STM32高级定时器-输出比较模式
stm32·单片机·嵌入式开发·pwm输出·高级定时器
正在努力的小河10 小时前
GPIO子系统自主实现(简单版)
linux·单片机·嵌入式硬件
什么半岛铁盒10 小时前
处理端口和 IP 地址
网络·单片机·tcp/ip
国科安芯1 天前
高速CANFD收发器ASM1042在割草机器人轮毂电机通信系统中的适配性研究
网络·单片机·嵌入式硬件·性能优化·机器人·硬件工程
CC呢1 天前
基于单片机智能路灯控制
单片机·嵌入式硬件·智能路灯
DDUU__1 天前
STM32低功耗模式
stm32·单片机·嵌入式硬件
小莞尔1 天前
【51单片机】【protues仿真】基于51单片机宠物投食器系统
c语言·stm32·单片机·嵌入式硬件·51单片机·proteus
逼子格1 天前
【Protues仿真】基于AT89C52单片机的数码管驱动事例
单片机·嵌入式硬件·硬件工程·硬件工程师·protues·数码管·电路仿真