24BYJ48电机的使用,带驱动程序

本文详细介绍了5线4相步进电机的尺寸、接线方式、内部结构及参数,包括电机的线色识别、减速比、步进角等。提供了使用51单片机与ULN2003驱动电路进行1相励磁、2相励磁及1-2相励磁的控制程序实例。

一、尺寸与接线

一种是红、橙、黄、粉、蓝的,电机实物如下:

注意电机的接头可能是XH2.54-5P的(上左图),也可能是ZH1.5-5P的(上右图)。

还有一种是红、黑、黄、棕、蓝的

这两种线色都是红色为公共线,然后挨着的4根线分别为A、B、C、D。

二、电机结构与参数

这种5线4相电机的内部结构图如下:

给公共极通正电,然后依次把A、B、C、D拉低,就可以形成一个旋转的磁场,拖动转子转动了。

电机自带减速器,减速比为1:64,步进角为5.625/64度,如果需要转动1圈,那么需要360/5.625*64=4096个脉冲信号。

电机还包含以下主要参数(仅供参考,不同厂家生产的有区别)

三、驱动电路

一般使用达林顿管驱动,如ULN2003A。

四、驱动程序

一般对力矩要求高使用2相励磁,对精度要求高使用1-2相励磁。

1、1相励磁的51单片机例程(使用ULN2003)

sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口

#define Coil_A  {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B  {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C  {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D  {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

main()
{

 Speed=50; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
 while(1)            
  {         
     Coil_A                  //遇到Coil_A  用{A1=1;B1=0;C1=0;D1=0;}代替
     DelayMs(Speed);         //改变这个参数可以调整电机转速 ,
	                         //数字越小,转速越大,力矩越小
     Coil_B                  //遇到Coil_B  用{A1=0;B1=1;C1=0;D1=0;}代替
     DelayMs(Speed);
     Coil_C                  //遇到Coil_C  用{A1=0;B1=0;C1=1;D1=0;}代替
     DelayMs(Speed); 
     Coil_D                  //遇到Coil_D  用{A1=0;B1=0;C1=0;D1=1;}代替
     DelayMs(Speed);
  }
}

2、2相励磁的51单片机例程(使用ULN2003)

sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口

#define Coil_AB {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA {A1=1;B1=0;C1=0;D1=1;}//DA相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

main()
{

 Speed=50; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
 while(1)  
  {         
     Coil_AB                //遇到Coil_AB 用{A1=1;B1=1;C1=0;D1=0;}代替
     DelayMs(Speed);        //改变这个参数可以调整电机转速 ,
	                        //数字越小,转速越大,力矩越小
     Coil_BC                //遇到Coil_BC 用{A1=0;B1=1;C1=1;D1=0;}代替
     DelayMs(Speed);
     Coil_CD                //遇到Coil_CD 用{A1=0;B1=0;C1=1;D1=1;}代替
     DelayMs(Speed);
     Coil_DA                //遇到Coil_DA 用{A1=1;B1=0;C1=0;D1=1;}代替
     DelayMs(Speed);
  }
}

3、1-2相励磁的51单片机例程(使用ULN2003)

sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口

#define Coil_AB {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_A {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

main()
{

 Speed=100; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
 while(1)  
  {         
     Coil_A       
     DelayMs(Speed);
     Coil_AB                 //遇到Coil_AB  用{A1=1;B1=1;C1=0;D1=0;}代替
     DelayMs(Speed);         //改变这个参数可以调整电机转速 ,
                             //数字越小,转速越大,力矩越小
     Coil_B       
     DelayMs(Speed);
     Coil_BC
     DelayMs(Speed);
     Coil_C       
     DelayMs(Speed);
     Coil_CD
     DelayMs(Speed);
     Coil_D       
     DelayMs(Speed);
     Coil_DA
     DelayMs(Speed);
  }
}

 

24BYJ48步进电机驱动程序的相关信息可参考引用[2]和引用[5]。引用[2]中提到文档详细介绍了24BYJ48步进电机驱动程序,包括基本参数、操作方法以及如何通过编程控制电机的运行,还给出了程序示例。其中电机支持三档速度设置,最高速度依次为500pps、1000pps、2000pps;P1.4设置为电机停止按钮;RXD,TXD已由MAX232电平转换接出串口;启动、停止的频率较低,一般在100 - 250Hz之间,最高运行频率通常为1 - 3kHz。为使电机在整个启动、运行和停止过程中不失步,并能尽快精确地达到目标位置,运行速度需有一个加速 - 恒速 - 减速的过程,文档中采用了常用的离散办法来逼近理想的近似梯形的升降速曲线 [^2]。 引用[5]给出了2相励磁的51单片机例程(使用ULN2003): ```c sbit D1=P1^4; //定义步进电机连接端口 sbit C1=P1^5; //定义步进电机连接端口 sbit B1=P1^6; //定义步进电机连接端口 sbit A1=P1^7; //定义步进电机连接端口 #define Coil_AB {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电 #define Coil_BC {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电 #define Coil_CD {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电 #define Coil_DA {A1=1;B1=0;C1=0;D1=1;}//DA相通电,其他相断电 #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电 main() { Speed=50; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了 while(1) { Coil_AB //遇到Coil_AB 用{A1=1;B1=1;C1=0;D1=0;}代替 DelayMs(Speed); //改变这个参数可以调整电机转速 , 数字越小,转速越大,力矩越小 Coil_BC //遇到Coil_BC 用{A1=0;B1=1;C1=1;D1=0;}代替 DelayMs(Speed); Coil_CD //遇到Coil_CD 用{A1=0;B1=0;C1=1;D1=1;}代替 DelayMs(Speed); Coil_DA //遇到Coil_DA 用{A1=1;B1=0;C1=0;D1=1;}代替 DelayMs(Speed); } } ``` 此程序通过控制不同相的通电顺序和延迟时间来控制电机的转动和转速 [^5]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值