拓展模块使用教程和心得(三):ULN2003模块与28BYJ48步进电机(测试平台:STC8A8K,STM32F103)

成就更好的自己

关于ULN2003模块和对应的28BYJ48步进电机,网上现有的资料与教程对于初学者有点不太友好,造成的现象是仅仅只能让步进电机转起来,但是没有对于控制转速和转角的实践分析,本文的所有内容博主都经过了实物及程序的验证和计算,并以最言简意赅的方式记录下来。(测试平台:STC8A8K,STM32F103)

目录

ULN2003模块电路

28BYJ48步进电机

细枝末节的知识

 

ULN2003模块电路

先上实物图:

左边7PIN的排针是连到单片机IO口上的,中间偏下插着短接帽的4PIN排针是供电给模块和步进电机(有时候是单独供电,但是要共地),偏右边白色的5PIN插槽是五线四相步进电机专用接口,最右边的的7PIN排针是控制其他多项电机(低于七项)用的。

ULN2003本质很简单

除了8.9俩电源引脚之外,其他引脚(7*2)都是相互对应的(以上图为例,1~16,2~15以此类推),具体是什么原理呢,咱不用知道那么多,咱只用知道ULN2003内部用的是高耐压、大电流复合晶体管阵列,是让单片机IO口驱动大电流用的(因为咱们用的步进电机内部其实还是线圈,所以用到了ULN2003),多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载。由于单片机采用的是灌电流驱动方式(这种驱动方式驱动能力强,但是容易烧),因此控制步进电机的IO口0为有效电平,1为无效电平

步进电机,ULN2003,单片机的前后连接原理图如下:

 

 

28BYJ48步进电机

所有资料都写的是步进电机靠脉冲驱动的,一个脉冲对应转过一个步距角,这句话会有部分理解上的问题的,下面我会一一分析的。

现在给大家区分一个概念,上图中能直接看到的绑个弹簧的那个轴是输出轴,在这个步进电机内部有个真正的步进马达转子每一个脉冲(或者下文所谓的“拍”)能使这个真正的转子转动5.625°,看下图的数据表格中的减速比是1:64,意思是这个真正的步进马达转子转动64周才能让输出轴转动1周(这个术语叫做步进马达的细分),因此下图的表格中步距角度才写的是5.625°/64,表明的意思是一个脉冲可以让输出轴转动5.625°/64的角度

脉冲的意思,必须由低电平变高电平,说白了这玩意看上升沿的,持续一段时间然后拉低即可,这段持续的时间直接决定了电机的转速,据说这废物最快14转每分钟。

下面详细说一下通电方式(或者叫励磁方式)

首先,脉冲(或拍)的数量决定转动的角度,单位时间内脉冲(或拍)的数量决定转动的速度

常见的通电方式有:

  • 一相励磁:单(单相绕组通电)四拍(A-B-C-D-A。。。)
  • 二相励磁:双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。)
  • 一二相励磁:八拍(A-AB-B-BC-C-CD-D-DA-A。。。)

其中,经过博主的对比试验和资料查找,一相励磁和二相励磁一个脉冲转动两个步距角,一二相励磁一次脉冲只转一个步距角(测试平台STC8A8K,STM32F103)

举个简单例子,这里博主为了朋友们便于理解,没有采用网上的相序表(数组法因接口而异):

单(单相绕组通电)四拍(A-B-C-D-A。。。)

void main()		//一相励磁的例程					
{
	uint16 num;
	IN1=IN2=IN3=IN4=1;
	for(num=640;num>0;num--)  //640个循环,5.625/64步距角*2(一相励磁一拍走2个步距角)*4拍*640次循环=450度
	{
		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第一拍
		delay(speed);
		IN1=~IN1;

		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第二拍
		delay(speed);
		IN2=~IN2;

		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第三拍
		delay(speed);
		IN3=~IN3;

		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第四拍
		delay(speed);
		IN4=~IN4;
	}
	IN1=IN2=IN3=IN4=1;
	while(1);
}

双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。)

void main()		//二相励磁的例程
{
	uint16 num;
	IN1=IN2=IN3=IN4=1;
	for(num=640;num>0;num--)  //640个循环,5.625/64步距角*2(二相励磁一拍走2个步距角)*4拍*640次循环=450度
	{
		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第一拍
		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第一拍
		delay(speed);
		IN1=~IN1;	
		IN2=~IN2;	

		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第二拍
		IN3=~IN3;   //控制C相的IO口非运算后的电平变化产生一个脉冲,第二拍
		delay(speed);
		IN2=~IN2;
		IN3=~IN3;	

		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第三拍
		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第三拍
		delay(speed);
		IN3=~IN3;
		IN4=~IN4;	
		
		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第四拍
		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第四拍
		delay(speed);
		IN4=~IN4;
		IN1=~IN1;
	}
	IN1=IN2=IN3=IN4=1;
	while(1);
}

八拍(A-AB-B-BC-C-CD-D-DA-A。。。)

void main()			//一二相励磁的例程
{
	uint16 num;
	IN1=IN2=IN3=IN4=1;
	for(num=640;num>0;num--)  //640个循环,5.625/64步距角*1(一二相励磁一拍走1个步距角)*8拍*640次循环=450度
	{
		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第一拍
		delay(speed);
		IN1=~IN1;

		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第二拍
		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第二拍
		delay(speed);
		IN1=~IN1;
		IN2=~IN2;

		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第三拍
		delay(speed);
		IN2=~IN2;

		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第四拍
		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第四拍
		delay(speed);
		IN2=~IN2;
		IN3=~IN3;

		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第五拍
		delay(speed);
		IN3=~IN3;

		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第六拍
		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第六拍
		delay(speed);
		IN3=~IN3;
		IN4=~IN4;

		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第七拍
		delay(speed);
		IN4=~IN4;

		IN4=~IN4;   //控制D相的IO口非运算后的电平变化产生一个脉冲,第八拍
		IN1=~IN1;   //控制A相的IO口非运算后的电平变化产生一个脉冲,第八拍
		delay(speed);
		IN4=~IN4;
		IN1=~IN1;
	}
	IN4=IN1=IN2=IN3=1;
	while(1);
}

关于控制线的脉冲有严格顺序,通脉冲的顺序影响转向(顺向逆向),负载能力,电机发热程度等。

这里博主给出了使用手册上的标准脉冲流程,如果想反转的话只用颠倒给脉冲的顺序即可,但是不要打乱顺序,否则也可能会转但是会造成各种问题。

 

细枝末节的知识

  • 这个步进电机最快转速据说14转每分钟(博主实测10转,可能延时有点慢),不能贪图速度,延时一定要延够,否则只会震动不会转动,至于慢的话,没有那个耐心测出他最慢有多慢。。。
  • 至于转角的话,只用算出他需要转几个脉冲然后循环就行了。
  • 在停止转动后,记得将所有控制线拉高,不然电机时间长了会很热,一般内部热度超过130度就会对内部的永磁体造成不可逆转的退磁现象,电机的步距角就会不准确。
  • 觉得驱动力矩不够的可以加到12v,记得与ULN2003共地。
  • 博主在初期调试的时候,一相和二相励磁时,实际转角一直是理论计算的两倍,后期查资料才知道,这两种励磁方式一脉冲转的是两个步距角,这个问题网上提到的人很少,也发现有朋友遇到过类似问题,但是我毕竟不是机械专业的,只能根据网友的结论和自己实际的情况下定论,如果发现有误或者知道原理的朋友欢迎评论或私信,共同进步,谢谢。
  • 还有一种励磁方式是以PWM脉冲调制取代单一高低电平作为上文中的3种励磁方式的输入,这种新的励磁方式有很大优点,但是因为实现起来相当复杂,一般是用不到的,有兴趣的朋友们可以自行百度一下。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值