基于80c51的单片机控制步进电机系统设计
2014-04-29梅涛
梅涛
【摘 要】本文通过综合运用单片机技术、电力电子技术和遥控系统设计,从硬件和软件两方面研究了基于80c51单片机控制步进电机系统的实现方法,通过PROTEL软件对电路板的的绘制以及PROTEUS的仿真,证明了系统运行的可靠性。
【关键词】80c51;单片机;步进电机
1、前言
步进电机有惯性小、转矩大、反应时间短等特点,可以满足即时启动和停止的需求,因此,具有广泛的应用前景。步进电机和其他元件比较起来,一般不用反馈就可以对距离和速率进行准确的测量,并且出来的转角或距离相对较高,误差也不累计;制控系统结构精简,与配套设备兼容,售价较低。所以,在直流电机伺服系统、交流电机伺服系统大量应用在计算机制控系统中的同时,步进电机却仍然可以统治简易数控机床、送料机构、仪器、仪表等领域。为此,本文综合运用单片机技术、电力电子技术和遥控系统设计,从硬件和软件两方面研究了其实现方法,并通过PROTEUS、PROTEL软件实现了80c51单片机控制步进电机,最后给出仿真结果和分析。
2、实现方案的选择
本文提出的两种方案,按如下描述。
2.1 方案一。采用ULN2003驱动芯片。键盘输入信号,然后输入单片机STC89C52的P3口低四位,经过单片机的编程处理,将信号由单片机的P2口低四位输出。进入驱动芯片ULN2003,从而控制步进电机的运转。与此同时,单片机对由键盘输入的信号编程处理,用单片机的P0口输出信号,进入液晶显示屏1602。
2.2 方案二。采用L297+L298的经典电路设计。采用四个独立按键输入信号,与单片机STC89C52的高四位相连接,输入信号,再由单片机编程处理,由P2.0,P2.1,P2.2输出,进入芯片L297输入端,再有A,B,C,D四个输出端口输入到L298的输入端IN1,IN2,IN3,IN4,最后输出端OUT1,OUT2,OUT3,OUT4输出信号,二相四拍控制步进电机的启动,停止,正转反转,加速减速。
2.3 方案论证及选择。方案一中uln2003相当于继电器的作用,例如7个继电器的一端连某电压[也即uln2003电源电压](<50)在一起,而另一端作为则作为输出,就像一个二极管,只不过因电路集成功能的因素,输出的电压等同于uln2003的电压罢了,常用于步进电机。方案二中的L298/L297可以为负载提供双向的电流。适合驱动2相或4相的步进电机和直流电机,特别是当驱动电机的方向要改变时,只须把原来电机方向的电位置反即可(port1/port2电平一高一低控制电机B;port3/port4电平一高一低控制电机A,电平改变时电机的方向也随即改变,而A pwm/B pwm 则分别控制电机AB的速度),而uln2003则须要重新改变电图上的接线或外加器件接成h桥电路才行。并且方案二只需要给L297一个脉冲信号即可,对单片机的管脚占用少编程简单,易于实现。故综合比较判断,采用第二种设计方案完成此次设计任务。
3、步进电机驱动模块
设计中由单片机的P2.0,P2.1,P2.2三个口输入信号到驱动模块。先经过L297,L297芯片中的EN,CW和CLOCK三个引脚跟别接在单片机的P2.0,P2.1,P2.2。RES和HALF兩个引脚接高电平,OSC引脚接在VCC。输出端A,B,C,D分别接在L298的四个输入端口IN1,IN2,IN3,IN4。然后经过的L298芯片,最后输出信号通过OUT1,OUT2,OUT3,OUT4,最终控制步进电机的转动。
4、步进电机驱动系统的软件设计
4.1 Keil软件及驱动系统总体设计。Keil软件把指令植入菜单栏,同时还供应了一个可以即时确定指令按键的工具栏以及信息提示窗口、对话框等。Keil软件能够同时审查多个源码文件,它有两大模式:1、Keil软件可以译码几乎全部的应用程序并合成可以运行的程序,这个模式的详细特点随后在新建应用时再讨论;2、Keil软件可以为各种应用软件供应一个强大的调试器,这个模式在随后的调试程序介绍时再详述。这两种模式有一个共同的特点,就是都可以用Keil Vision3的编码器来调整源码。
4.2 单片机主程序。单片机主程序主要是整个系统控制的核心框架,不仅控制着整个系统的运转,而且还起着衔接子程序模块的作用。在考虑系统要实现的功能的情况下,设计的主程序的流程如下:
IT0 = 1;//外部中断信号负跳变有效
EA = 1;//开总控制开关
EX0 = 1;//开中断
P2_0=0;//P2.0口赋初值
P3_4=1;//K1为高电平
P3_5=1;//K2为高电平
P3_6=1; //K3为高电平
P3_7=1; //K4为高电平
Lcd_Init();//进入LCD初始化
printXY(0,1,"Speed(r/m):");//LCD显示第二行
printXY(0,0,"Direction: front");//LCD显示第一行
disspeed();//调入disspeed子函数
while(1)
{
delay(speed);//延时
P2_2=~P2_2;//P2.2口不断的取反
}
LCD显示程序
对于LCD程序,其主要包括LCD的初始化,LCD的读写数据,LCD的状态的读取,LCD写指令以及LCD显示一个字符和一串字符。
LCD的初始化主要是对LCD的模式的设置、清屏以及显示光标位置的设置。该部分程序如下:
void Lcd_Init(void)
{
delay1_64ms();
Lcd_Write(0,0x38); //8位数据端口,2行显示,5*7点阵
Lcd_Write(0,0x38);
Lcd_Write(0,0x38);
Lcd_SetDisplay(0x04); //开启显示, 无光标|
Lcd_Cursor|Lcd_Flash
Lcd_SetInput(0x02|0x00); //AC递增, 画面不动_To
}
LCD显示字符程序主要是对光标位置的设置以及LCD字符的显示设置,LCD显示字符的程序如下:
void Lcd_SetDisplay(uchar DisplayMode)
{
Lcd_Write(0,0x08|DisplayMode);
}
void Lcd_SetInput(uchar InputMode)
{
Lcd_Write(0,0x04|InputMode);
}
4.3 仿真验证及结果分析。此次设计系统运用的是Proteus7仿真软件对电路程序进行仿真。在设计过程中,也选用了利用ULN2003驱动步进电机,进行对比,但是由于ULN2003只能驱动4相步进电机。软件编程过于复杂,并且出现许多问题,如每次转动都有回转的现象。
5、结论
基于单片机的步进电机驱动系统的设计,主要用到了STC89C52单片机,L297,L298步进电机驱动芯片,红外遥控,独立键盘,LCD1602液晶显示屏,USB数据线,串行线等元器件。本课题开发的步进电机驱动系统也有许多不完善的地方,需要进行多方面的后续开发,进一步增强其功能。
【参考文献】
[1]陈石龙.基于单片机的步进电机控制系统[J].宁德师专学报,2009(01).
[2]娄俊,朱志甫.基于单片机AT89C51的步进电机控制系统设计[J].湖南农机,2010(09).
[3]高志远,姚建国,曹阳,等.智能电网发展机理研究初探[J].电力系统保護与控制,2014(05).
[4]李亚平,姚建国,黄海峰,等.SVG技术在电网调度自动化系统中的应用[J].电力系统自动化,2005(23).