51单片机控制28BYJ48步进电机原理及代码
命名方式(以28BYJ48步进电机为例)
28BYJ48步进电机的编号
28-----步进电机的有效最大外径是28毫米
B-----表示步进电机
Y-----表示永磁式
J-----表示减速型
48-----表示四相八拍
工作原理
1、五线四相步进电机,不同相位得电会让步进电机的转子转动一个角度,按一定规律给不同的相位通电,就可以让步进电机连续转动,下表就是通电的顺序。
表里面的顺,逆时针的方向只是代表相位给电时序,
注:总共五条线,一个是VCC,剩下四条分别接上ABCD相
分别对应与ULN2003/ULN2003A驱动芯片的5V以及4个输入口对应连接
2、每走一个位置,都要给一定的延时,不然还没等转子到位,下一个脉冲就进来了,肯定会引起错误,导致电机堵转或者异常震动。
3、通过改变延时的时间,就可以控制电机的转速,不能太慢,也不要太快,不断调试到合理范围就行。
4、单片机IO口和电机四条相线连接时,一定不能错误,要按照顺序相连接。
5、调换得电的顺序,就可以控制电机的转向。
注意在51单片机中,为IO口置0相当于是高电平,而置1的时候相当于是低电平,和上面的图片一致(GND)
二、关键实验程序
#include <REGX52.H>
#include "delaytime10us.h"
#define uint unsigned int
sbit MA=P1^0;
sbit MB=P1^1;
sbit MC=P1^2;
sbit MD=P1^3;
/*
angle:转动角度(nangle为4096时为转动一圈)
drct:逆时针:1、顺时针:0
speed:速度
*/
void MotorRun(unsigned int nangle, drct, speed)
{
uint step;
step=0;
if(drct==0)
{
while(nangle--)
{
switch(step)//
{
case 0:MA=1;MB=0;MC=0;MD=0;break;
case 1:MA=1;MB=1;MC=0;MD=0;break;
case 2:MA=0;MB=1;MC=0;MD=0;break;
case 3:MA=0;MB=1;MC=1;MD=0;break;
case 4:MA=0;MB=0;MC=1;MD=0;break;
case 5:MA=0;MB=0;MC=1;MD=1;break;
case 6:MA=0;MB=0;MC=0;MD=1;break;
case 7:MA=1;MB=0;MC=0;MD=1;break;
}
if(step==7)step=0;
else step++;
delay(speed);
}
}
else
{
while(nangle--)
{
switch(step)
{
case 0:MA=1;MB=0;MC=0;MD=1;break;
case 1:MA=0;MB=0;MC=0;MD=1;break;
case 2:MA=0;MB=0;MC=1;MD=1;break;
case 3:MA=0;MB=0;MC=1;MD=0;break;
case 4:MA=0;MB=1;MC=1;MD=0;break;
case 5:MA=0;MB=1;MC=0;MD=0;break;
case 6:MA=1;MB=1;MC=0;MD=0;break;
case 7:MA=1;MB=0;MC=0;MD=0;break;
}
if(step==7)step=0;
else step++;
delay(speed);
}
}
MA=0;MB=0;MC=0;MD=0;
}
1、步进电机的减速比为1/64,即转子转动64圈,外面的转轴才会转动1圈
2、步进电机的步距角为5.624/64 (步进电机的定子绕组每次改变一次通电状态,步进电机外面的转轴转过的角度称步距角;即步进电机的最小旋转角度)
3、所以360/(5.624/64)≈ 4096 (步进电机外面的转轴转过一圈所需要改变定子绕组的通电状态次数)
这里补充介绍一个概念:步进角
步进电机的定子绕组每次改变一次通电状态,转子转过的角度称步进角。
(可以认为是电机内部的转子的最小旋转角度)
步进角 = (360)/m * Z * C
m-----定子相数
Z-----转子磁极对数
C-----通电方式
{ C = 1 ,单相轮流通电,双相轮流通电方式
C = 2 , 双相轮流通电方式
1,相数:是指产生不同对极N,S磁场的激磁线圈对数
2,拍数:完成一个周期性变化所需脉冲数,以四相电机为例,有单相四拍的运行方式:(A-B-C-D),有双相四拍的运行方式:(AB-BC-CD-DA),有四相八拍的运行方式:(A-AB-B-BC-C-CD-D-DA)
这里的源码用的是双相轮流通电方式,在源码中可以看到四个相位MA,MB,MC,MD使能为高电平状态的相位数为相邻2个或1个(A-AB-B-BC-C-CD-D-DA)
步进电机的相关参数:
注意事项:由于电机的制造误差,安装误差,单片机的误差还有软件延时函数误差,这些误差累加起来之后,就会导致电机的转速、转动角度出现一定的误差。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)