完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、步进电机
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。 正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。 二、步进电机的工作原理 步进电机的工作就是步进转动,其功用是将脉冲电信号变换为相应的角位移或是直线位移,就是给一个脉冲信号,电动机转动一个角度或是前进一步。步进电机的角位移量与脉冲数成正比,它的转速与脉冲频率成正比,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。 如下所示的步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。 开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。 当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D 四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。 当电机绕组通电时序为A-AB-B-BC-C-CD-D-DA时为正转,通电时序为DA-D-CD-C-BC-B-AB-A时为反转。 三、步进电机的指标理解 步进电机有分静态指标和动态指标,其中最让我懵逼的是齿距角和步距角的关系,网上对齿距角和步距角的解释有点混乱。我个人的理解是,齿距角是转子上的小齿之间的间距角,步距角(步进角)是转子走过一步(一拍)的间距角,一个齿距角分几步走完就叫几拍。 关于转子齿数,一般情况下,三相为40齿,四相为50齿,五相为48/50齿。 四、硬件设计 12V电压给步进电机供电,5V电压则给单片机供电。利用P1口作步进电机的控制端口,通过达林顿阵列ULN2003A驱动步进电机。画图有些匆忙,ULN2003A的COM端悬空,没有保护输出,应该接电源正。 P3.0-P3.2分别接按键K1-K3,其中K1为加速按键,K2为减速按键,K3为正反转控制按键,要求速度7档(1-7)可调,加减速各设3档,开机及复位时位于4档,要求每档速度变化明显。 五、软件设计 #include #define uint unsigned int #define uchar unsigned char ***it inc_key=P3^0;//加键 ***it dec_key=P3^1;//减键 ***it chg_key=P3^2;//转向控制键 //A→AB→B→BC→C→CD→D→DA uchar code eightStep[] = {0x0d, 0x09, 0x0b, 0x03, 0x07, 0x06,0x0e,0x0c}; uchar k=0;//第几档 //正反转标志位,1正转,0反转 bit rotaFlag = 1; //*********************************延时函数********************************* void delay_ms(uint x) { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); } //*********************************加函数********************************* void checkInc(void) { if(inc_key==0)//检测加按键 { delay_ms(1);//消抖 if(inc_key==0) { while(!inc_key);//检测松手 k++; if(k>6)k=0; } } } //*********************************减函数********************************* void checkDec(void) { if(dec_key==0)//检测减按键 { delay_ms(1); if(dec_key==0) { while(!dec_key); k--; if(k<0)k=6; } } } //*********************************主函数********************************* void main(void) { char i=0;//第几拍 IT0 = 1; //外部中断0,边沿触发 EX0 = 1; EA = 1; while(1) { //检测档位是否改变 checkInc(); checkDec(); switch(k) { case 0:P1 = eightStep;delay_ms(800);break;//1挡 慢 case 1:P1 = eightStep;delay_ms(500);break;//2挡 case 2:P1 = eightStep;delay_ms(200);break;//3挡 case 3:P1=0x00;break;//4挡 停止 case 4:P1=eightStep;delay_ms(100);break;//5挡 case 5:P1=eightStep;delay_ms(50);break;//6挡 case 6:P1=eightStep;delay_ms(5);break;//7挡 快 } if(k!=3) { if (rotaFlag)//正 { i++; if(i>7)i=0; } else//反 { i--; if(i<0)i=7; } } } } void Int0(void) interrupt 0 { if(chg_key==0)//检测转向控制按键 { rotaFlag = !rotaFlag;//改变转向 } } 六、实验小结 本设计作为实验作业,正反转的控制只设置成了人为触发的状态切换;5V供单片机,12V驱动步进电机;通过简单的延时长短改变转速大小,调速效果不太明显,可以通过设置定时器与转速相关参数进一步完善。其中有个小坑,unsigned char变量影响了反转,会减到为负值,改成char变量就没问题了。 |
|
|
|
只有小组成员才能发言,加入小组>>
2388 浏览 0 评论
8923 浏览 4 评论
36506 浏览 19 评论
4987 浏览 0 评论
24336 浏览 34 评论
1383浏览 2评论
1636浏览 1评论
2030浏览 1评论
1452浏览 0评论
396浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 01:22 , Processed in 1.332176 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号