当前位置: 首页 > news >正文

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为逆时针旋转;

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

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

#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控制步进电机减速度;

驱动步进电机模块


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

http://www.xdnf.cn/news/1344565.html

相关文章:

  • C#_组合优于继承的实际应用
  • Kafka Broker 核心原理全解析:存储、高可用与数据同步
  • 如何从根源上理解并解决前端的CORS跨域问题
  • 【PSINS工具箱】MATLAB例程,二维平面上的组合导航,EKF融合速度、位置和IMU数据,4维观测量
  • Unreal Engine ClassName Rule
  • Python 中 SQLAlchemy 和 MySQLdb 的关系
  • IKE 与 ISAKMP 核心笔记
  • 微信扫码登陆 —— 接收消息
  • 复合设计模式
  • 加密货币与区块链:六大刑事重灾区
  • 深入理解 Spring Boot Starter:简化依赖管理与自动配置的利器
  • 110、【OS】【Nuttx】【周边】效果呈现方案解析:查找最新构建件
  • 深入理解 hash -r:解决 Linux 命令缓存难题的关键密钥
  • 自定义rabbitmq的ConnectionFactory配置
  • RabbitMQ深度剖析:从基础到高级进阶实战
  • 乐迪信息:AI摄像机+刮板机人员入侵检测:杜绝井下安全事故
  • 爬虫基础学习-配置代理、以及项目实践
  • 关于爬虫的基本步骤说明【爬虫七步骤】
  • jenkins实现分布式构建并自动发布到远程服务器上 jenkins实现自动打包编译发布远程服务器
  • Laravel分布式全链路追踪实战
  • 【机器学习深度学习】LMDeploy的分布式推理实现
  • selenium爬虫
  • 布隆过滤器:用微小的空间代价换取高效的“可能存在”判定
  • TCP/UDP详解(一)
  • 微服务的编程测评系统14-C端题目列表功能-个人中心
  • Redis面试精讲 Day 27:Redis 7.0/8.0新特性深度解析
  • 高通Camx相机dump yuv和raw图的抓取方式和查看
  • 【iOS】YYModel第三方库源码
  • 笔试——Day46
  • 恢复性测试:定义、重要性及实施方法