|
这是我最近做的一个步进电机设计 使用的单片机是AT89C51 需要用到软件Keil5,Proteus8.9 是根据我们的设计要求做的 附件里包含步进电机的单片机源代码,以及Proteus模拟电路图,设计文件 对该作品的介绍可能不是很严谨,还请大家多包涵 如果该设计存在学术性错误,还请为我指正! 以下是设计内容,希望它可以帮到你:
所涉及到的知识:
一、步进电机是什么?
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电 机来控制变的非常的简单。
二、步进电机的主要特性有哪些?
1. 步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。
2. 本次使用的步进电机是 28BYJ48 5V 驱动的 4 相 5 线的步进电机,而且是减速步进电机,减速比为 1:64,步进角为 5.625/64 度。如果需要转动 1 圈,那么需要 360/5.625*64=4096 个脉冲信号。
3. 步进电机具有瞬间启动和急速停止的优越特性。
4. 改变脉冲的顺序,可以方便的改变转动的方向。
本设计将通过实现一个基于单片机的,可以通过按键精确控制电机正反转,加减速,开始和停止的控制电路,来说明单片机如何工作
具体操作步骤如下:
第一步:Keil编程(此处省略了文件创建步骤)
第一部分 这一串代码可以控制电机的转向
#include<reg51.h> #define uchar unsigned char bit flag; uchar a= 1,t = 100; uchar code tab1[] = {0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code tab2[] = {0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; sfr P1M1 = 0X91; sfr P1M0 = 0X92; sfr P2M1 = 0X95; sfr P2M0 = 0X96;
第二部分 这一串代码可以实现对电机的接近毫秒级延时的控制,原理是通过嵌套循环消耗 CPU 时间实现延时
void delay(uchar ms) { uchar j; while(ms--) for(j=0;j<100;j++);}
第三部分 这一串代码可以实现电机的转向切换、调速、启停控制
void keyscan() { P1M1 = 0; P2M1 = 0; P1M0 = 0XFF; P2M0 = 0XFF; if(P2!=0xff) { delay(5); if(P2!=0xff) { switch(P2) { case 0xfe:a=1;break;//正转 case 0xfd:a=2;break;//反转 case 0xfb:if(t>50)t=t-10;else t=50;break;//加速 case 0xf7:if(t<150)t=t+10;else t=150;break;//减速 case 0xef:flag=1;break;//开始 case 0xdf:flag=0;break;//停止 } while(P2!=0xff); } } }
第四部分 这一段代码可以通过定时器 0 实现定时中断
void time0_init() //定时器T0初始化 { TMOD=0x01; //设置定时器0工作方式1 TH0=(65536-50000)/256;//定时50ms取高八位 TL0=(65536-50000)%256; //取低八位 ET0=1; //开定时器0中断使能 EA=1; //开总中断使能 TR0=1; //开启中断 } void time0() interrupt 1 //定时器T0入口函数 { TH0=(65536-50000)/256; //定时50ms重新赋初值 TL0=(65536-50000)%256; keyscan(); }
第五部分 这一段是主函数,根据flag(启停标志)和a(转向标志)控制电机运行
void main() { uchar i; time0_init(); while(1) { if(flag) { if(a==1) { for(i=0;i<8;i++) { P1=tab1; delay(t);} } if(a==2) { for(i=0;i<8;i++) { P1=tab2; delay(t); } } } else P1=0x00; } }
Keil5内的代码如下图
第二步:使用Proteus仿真电路(此处省略了文件创建步骤)
放置元件AT89C51(单片机)与L298(电机驱动芯片) 将单片机的P1 口(P1.0~P1.5)连接 L298 的IN1~IN4和ENA/ENB(使能端),用于输出步进电机的相序控制信号和使能信号 将单片机的P2 口(P2.0~P2.5)连接 6 个按键(正转、反转、加速、减速、启动、停止),用于接收用户操作指令 XTAL1/XTAL2 预留晶振接口(外接晶振和电容构成时钟电路) RST 为复位引脚(外接复位电路)
L298 电机驱动芯片的IN1~IN4接口连接单片机 P1 口,接收相序控制信号;ENA/ENB连接单片机 P1 口,控制驱动模块的使能(可用于调速) VCC接 5V 逻辑电源,VS接电机驱动电源(需根据电机功率选择,通常≥12V);OUT1~OUT4连接步进电机的 4 个绕组,输出驱动电流。 SENSA/SENSB为电流检测引脚(本电路中未使用,直接接地),可用于过流保护。
电机的 4 个绕组对应连接 L298 的OUT1~OUT4,由驱动芯片输出的相序电流驱动转动。
Proteus内的电路连接情况如下图
实验模型搭建完成,接下来进行第三步
第三步:在Proteus内进行模拟实验
点击左下角的按键启动模拟,点击各个按钮,观察电机的旋转情况
点击“启动”,电机开始旋转
点击“加速”,电机转速变快
点击“反转”,电机朝反方向转动
点击“停止”,电机停转
实验成功
由上述结果证明:
步进电机必须加驱动才可以运转,驱动信号必须为脉冲信号,没有脉冲的时候,步进电机静止,如果加入适当的脉冲信号,就会以一定的角度转动。转动的速度和脉冲的频率成正比,而且改变脉冲的顺序,可以改变电机转动的方向。
本设计到此结束,谢谢您的观看!
仿真程序下载:
步进电机.zip
(939.21 KB, 下载次数: 0)
|