工业控制
一、实验原理
之前已经讲过了基于51单片机——步进电机控制实验,原理和那个类似。
先简单介绍一下42步进电机,42步进电机是一种常见的步进电机类型,是一种将电脉冲信号转换为机械转动的设备,42步进电机通常由两相或四相驱动,每相都有一个线圈,今天咱们介绍的是两相四线步进电机,通过依次激活不同的线圈,可以使电机按照一定的步进角度旋转。42步进电机广泛应用于各种自动化设备和机械系统中,例如打印机、数控机床、纺织机械等。它具有结构简单、控制方便、定位精度高等优点。
下图是关于步进电机的基本参数介绍:
需要注意的是电机两相绕组是怎么绕的,A+、A-、B+、B-四根线代表的是什么意思,还有关键参数步距角:1.8°和额定电流1.0A。
1、步进电机的构造,拆开之后如图所示:
42步进电机的步距角为1.8°,是由定子和转子的齿数共同决定的,定子有48齿,转子有50齿,具体是怎么算的,感兴趣的同学可以自行学习,今天的重点是让步进电机如何让动起来。
2、步进电机转动原理:下图为步进电机定子和转子的简化图:
定子分为8组,每六个齿为一组,一共48个,转子有50个齿,其中1、3、5、7号绕组是一条线,2、4、6、8号绕组是另一条线,所以称为两相,A+和A-为一相,称为A相,B+和B-为一相,称为B相。通过特定的绕线方式实现在同一相中,相对的绕组磁极都是相同的,相邻的绕组磁极是相反的,假如A相中的1和5是S极,那么3和7就是N极,B相同理。(初学者不要在这里钻牛角尖,总是在想为什么是这样,为什么不能是那样,步进电机的发明者就是这样设计的,目前我们能学会它的构造和原理,会使用就行,至于为什么这样,等咱们的水平到位了再研究吧。)步进电机的动力是磁力,同性相排斥,异性相吸引,现在我们从位置“1”顺时针转动,讲解控制方法。
①想要让1位置的定子绕组齿和转子齿对齐,需要让1位置绕组靠近转子的一端磁极为N极,这样才能吸引转子转到这个位置,根据“右手定则”可知,需要给A+高电平,A-低电平,B+和B-均为低电平。
②此时2位置的定子绕组齿和转子齿之间的角度为1.8°,想要让他们对齐,需要给B+高电平,B-低电平,A+和A-均为低电平,这样他们也对齐了,转子便顺时针转了1.8°。
③此时3位置的定子绕组齿和转子齿之间的角度为1.8°,想要让他们对齐,需要给A-高电平,A+低电平,B+和B-均为低电平,这样他们也对齐了,转子便顺时针又转了1.8°。
④此时4位置的定子绕组齿和转子齿之间的角度为1.8°,想要让他们对齐,需要给B-高电平,B+低电平,A+和A-均为低电平,这样他们也对齐了,转子便顺时针又转了1.8°。
⑤此时5位置的定子绕组齿和转子齿之间的角度为1.8°,想要让他们对齐,需要给A+高电平,A-低电平,B+和B-均为低电平,这种情况和在1位置时一样,开始循环1到4。
列一个表把上述位置对应的电平状态表示出来:
上述方式是四拍的驱动方式,也是整步驱动,步进电机每次转动都是一个步距角1.8°,如果想实现更小角度的步进,可以用八拍的方式驱动,也是半步驱动,在1位置和2位置之间,2位置和3位置之间等,都可以停止,这样步进电机每转一小步是0.9°。举个例子,比如想要让转子转到1位置和2位置之间,可以让A+和B+定子绕组都吸引转子,二力平衡后,转子就运动到了1和2之间。这样需要给A+高电平,A-低电平,B+高电平,B-低电平。
其他的中间位置同理,八拍驱动对应的电平状态表示出来:
按照上表中从上到下一次运行暂且叫为正转,那么从下往上就是反转了,这样步进电机转向的问题就解决了。
那么如何控制速度呢,当转子转到1位置时,我们让他延时一段时间再到下一个位置,这样就可以控制速度了,延时的时间越长,速度就越慢,延时的时间越短速度就越快,当然时间也不是随意的,要根据步进电机特性,找一个范围,这样步进电机转速的问题就解决了。
到这里步进电机的驱动原理差不多就结束了,对应原理把程序写出来就可以了。
3、步进电机驱动板(L298N)
本次实验使用的驱动板是L298N,这款驱动板小巧简单,实验演示用足够了,下面是它的基本参数:(注意供电电压在要求范围内)
4、实验过程中可能会出现的问题:
①如何区分A+、A-、B+、B-?
方法1:我们在购买步进电机时可以问一下店家,一般红色的线是A+,蓝色A-,绿色B+,黑色B-;也有可能是反过来,一般都是绿色和黑色是A相,红色和蓝色是B相。
方法2: 因为A相和B相分别是一条导线绕出来的,所以可以使用万用表欧姆档来测量电阻,同一相的阻值很小,只有几欧姆,不是同一相的阻值无限大,测出来同一相后,至于是A+还是A-那是人为规定的。
方法3:拿任意一根线和剩余三根线依次连接,连接后用手转动步进电机,当发现某两根线连接后转动步进电机时比较费劲,就说明这两根线是同一相。
②程序没问题步进电机就是不转?
大概率是接线问题,确保A、B相区分正确,任意调换A相或者B相的两根线,就可以了。
二、关键程序
/* dir:旋转方向 枚举类型 speed:转速 */ //速度控制: void stepper(unsigned int dir, unsigned int speed) { if(dir == Pos)//正转 { //step1: IN1_HIGH;IN2_LOW;IN3_LOW;IN4_LOW;Delay(speed); //step2: IN1_HIGH;IN2_LOW;IN3_HIGH;IN4_LOW;Delay(speed); //step3: IN1_LOW;IN2_LOW;IN3_HIGH;IN4_LOW;Delay(speed); //step4: IN1_LOW;IN2_HIGH;IN3_HIGH;IN4_LOW;Delay(speed); //step5: IN1_LOW;IN2_HIGH;IN3_LOW;IN4_LOW;Delay(speed); //step6: IN1_LOW;IN2_HIGH;IN3_LOW;IN4_HIGH;Delay(speed); //step7: IN1_LOW;IN2_LOW;IN3_LOW;IN4_HIGH;Delay(speed); //step8: IN1_HIGH;IN2_LOW;IN3_LOW;IN4_HIGH;Delay(speed); } else //反转 { //step1: IN1_HIGH;IN2_LOW;IN3_LOW;IN4_HIGH;Delay(speed); //step2: IN1_LOW;IN2_LOW;IN3_LOW;IN4_HIGH;Delay(speed); //step3: IN1_LOW;IN2_HIGH;IN3_LOW;IN4_HIGH;Delay(speed); //step4: IN1_LOW;IN2_HIGH;IN3_LOW;IN4_LOW;Delay(speed); //step5: IN1_LOW;IN2_HIGH;IN3_HIGH;IN4_LOW;Delay(speed); //step6: IN1_LOW;IN2_LOW;IN3_HIGH;IN4_LOW;Delay(speed); //step7: IN1_HIGH;IN2_LOW;IN3_HIGH;IN4_LOW;Delay(speed); //step8: IN1_HIGH;IN2_LOW;IN3_LOW;IN4_LOW;Delay(speed); } } //按键程序: unsigned char Key() { unsigned char KeyNumber=0; if(P3_1==0){Delay(1000);while(P3_1==0);Delay(1000);KeyNumber=1;} if(P3_0==0){Delay(1000);while(P3_0==0);Delay(1000);KeyNumber=2;} if(P3_2==0){Delay(1000);while(P3_2==0);Delay(1000);KeyNumber=3;} if(P3_3==0){Delay(1000);while(P3_3==0);Delay(1000);KeyNumber=4;} return KeyNumber; } //主函数:实现步进电机启停、加减速、正反转。 void main() { while(1) { stepper(dir, speed); KeyNum=Key(); if(KeyNum==1)//正反转 { dir = ~dir; } if(KeyNum==2)//加速 { speed-=30; if(speed <= 50)speed = 50; i=speed; } if(KeyNum==3)//减速 { speed+=30; if(speed >= 170)speed = 170; i=speed; } if(KeyNum==4)//启停 { flag=~flag; if(flag==0)speed=0; else speed=i; } } }
以上是关键代码,大家对应八拍的电平状态表看看是不是一一对应的关系,现在就可以实现对步进电机的启停、加减速、正反转的控制。
审核编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !