1、基于微型计算机的步进电机系统设计摘 要如今单片机由于其体积小,性能完善,所以广泛应用于各个行业中。本文设计了基于STC89C52单片机的步进电机驱动系统。本系统中,主要完成了按键控制步进电机起停、正反转、加减速再输出显示等功能。我们试着用所学的知识,通过实践来掌握应用设备的工作原理。关键词:单片机,步进电机,串口通信,供电,LCD1602STEPPER MOTOR MICRO-COMPUTER BASEDSYSTEM DESIGNABSTRACTNow because of its small size, microcontroller is perfect in performance, s
2、o widely used in various industries. In this paper, based on the single chip STC89C52 stepping motor driven system. The system, and the main completed the button control step motor, and the stop and turn, and slow down and the output shown etc. Function. We try to use of knowledge, through the pract
3、ice to master the application equipment principle of work. KEYWORDS:single chip,step motor,serial communication,power supply,LCD1602目 录引言11.设计任务及思路21.1供电模块21.2串行通信模块31.3 按键模块41.4 指示灯模块51.5 显示模块61.6 电机模块62 软件编程思路及流程82.1 主程序82.2 键盘扫描程序92.3 LCD显示程序102.4 步进电机驱动程序113. 系统评价及改进123.1 系统优点123.2 系统缺点123.3 系统改
4、进124 结论135 学习心得14参考文献15致谢16附录17II内蒙古大学鄂尔多斯学院2008级自动化专业学年论文引言在经济与科技共同发展的今天,为了满足人们的需要,汽车、电梯等工具已经是人们居家旅游必不可少的元素。而在汽车雨刷器、电梯的控制等方面,由单片机控制的步进电机便起到了至关重要的作用。步进电机是一种把电脉冲信号变成直线位移的控制电机,其位移速度与脉冲频率成正比,位移量与脉冲数成正比。步进电机在结构上也是由定子与转子组成,可以对旋转角度和转动速度进行高精度控制。当定子上绕组通电时,可产生激励磁场,并与转子形成回路。如果转子和定子之间的磁场没有对齐,由于磁力线力会走磁阻最小的路线,从而
5、带动转子旋转一个角度,使转子的一堆磁极旋转方向与定子的磁场方向一致。让定子绕组旋转实际上就是以一定的规律控制定子绕组的电流来产生旋转的磁场。每来一个脉冲电压,转子就会旋转一个步进角。称为一步。步进电机必须使用专用的步进电机驱动设备才能够正常工作。步进电机系统的运行性能,除与电机自身性能有关外,在很大程度上还取决于驱动设备性能的优劣1。本设计中只是单纯完成了使用单片机控制步进电机完成加速、减速、正传、反转等功能,并使用液晶显示屏显示,并没有针对某种特定的应用设计相应的功能。当然,这也会使得本系统的应用变得更加广泛。1.设计任务及思路本系统需要完成键盘控制步进电机加减速正反转等功能并同步显示,所以
6、,要完成系统功能需要几部分模块共同构成。根据需要,本系统设计的这几部分模块分别有:为整个系统供电的供电模块、从计算机到单片机写入程序的串行通信模块、控制电机工作的按键模块、指示电机工作状态指示灯模块、显示电机工作的显示模块、系统的核心也就是完成拖动的电机模块。系统原理图如下:图1.1 系统原理图Fig. 1.1 system diagram1.1 供电模块本系统使用的供电模块为DC供电与USB供电5V双供电系统。其中DC供电为正常工作供电,USB供电作为备用供电电源使用。两电源之间使用单刀双掷开关切换。需要注意的是,两电源在使用开关切换供电时系统会断电重新启动,所以电机工作中轻易不要切换供电。
7、实在需要切换电源的话需要先插好供电电源线再按开关切换供电一面电压不稳烧毁原器件。供电模块原理图如下:图1.2 供电模块原理图Fig. 1.2 power supply module principle diagram1.2 串行通信模块本系统使用串行通信模块来向单片机输入程序使单片机工作。模块使用的原件为DB-9串口。目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通讯2。完成串行口与计算机的链接的是USB-串口数据线,需要在计算机中安装驱动才能正常使用。然而从串口中传来的
8、数据不能直接应用在单片机中,所以还需要在系统中添加用于串口和单片机通讯的驱动芯片。我们使用在串口与单片机之间完成通讯的是MAX232驱动芯片。该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口RS232电平是-10V+10V,而一般的单片机应用系统的信号电压是TTL电平0+5V,MAX232就是用来进行电平转换的。该器件包含两个驱动器、两个接收器和一个电压发生器电路提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/
9、EIA-232-F电平3。串行通信模块原理图如下:图1.3 串行通信模块原理图Fig 1.3 serial communication module principle diagram1.3 按键模块本系统中使用的控制按键为触点开关,分表控制转向、停止、加速、减速功能。按键连接在单片机P2口上。当单片机的I/O口识别到低电平时,说明对应的按键被按下了,程序里编写相应的语句来控制电机与显示屏完成相应的动作与显示。按键模块原理图如下:图1.4 按键模块原理图Fig 1.4 buttons module principle diagram1.4 指示灯模块 指示灯模块使用的是三只发光二极管,单片机识
10、别电机是否停止和正传反转后,在相应的引脚输出低电平使发光二极管导通发光。发光二极管需要串联一只电阻限流以免电流过大损坏发光二极管。经过计算限流电阻应控制在220-470。指示灯模块原理图如下:图1.5 指示灯模块原理图Fig 1.5 indicator light module principle diagram1.5 显示模块本系统中使用的显示模块为LCD1602液晶显示屏。1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是
11、告诉模块在哪里显示字符4。需要注意的是,我们本次设计使用的是单片机的P0口为LCD1602提供数据。AT公司生产的51系列单片机的P0口没有内置上拉电阻,输出电流仅有0.1mA5,虽然我们使用的是STC公司的产片,但是为保证单片机I/O口的驱动能力,需要添加10K的上拉电阻拉高总线中的电流。显示模块原理图:图1.6 显示模块原理图Fig 1.6 shows module principle diagram1.6 电机模块本系统中驱动的电机为四相五线步进电机。该四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动6。四相步进电机按照通电顺序的不同
12、,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。本系统使用的工作方式便为八拍工作方式。工作方式如图所示:图1.7 四相步进电机八拍工作脉冲波形Fig 1.7 four phase step motor take eight work pulse电机模块原理图:图1.8 电机模块原理图Fig 1. 8 motor module principle diagram2 软件编程思路及流程本系使用C语言编程。使用主函数调用各个子函数实现系统的正常运行7。
13、本系统中软件需要完成的功能为:当系统供电,显示屏显示欢迎界面和停止,电机停止,指示灯熄灭。当加速或者减速键按下后电机起步运转,并选择一档速度,读取当前正反转状态使对应的指示灯选择发光,同时液晶显示屏显示电机运转方向和运转速度。当加速减速键再次按下时速度和显示对应变化,极速时加速或者最小速度时减速系统不作任何处理。当停止键按下后,显示屏回到欢迎和停止界面,指示灯全部熄灭。2.1 主程序本系统中,主程序很短,只是调用了几个子函数。子函数分别是键盘扫描程序、LCD显示程序和步进电机驱动程序。在主函数运行之前需要初始化,定义几个标志位来控制步进电机的速度和正反转。标志位分别为:a=0,电机停止;a=1
14、电机工作;b=0,电机反转;b=1电机正传;c=10,速度为一档;c=15速度为二档;c=20速度为三档。主程序流程图如下:开始初始化调用键盘扫描程序调用显示程序调用电机驱动程序图2.1 主程序流程图Fig 2.1 main program flow chart2.2 键盘扫描程序键盘扫描程序中通过扫描单片机P2.4P2.6引脚是否识别到低电平来确认是否有按键按下,进而修改标志位使电机改变运转方式以及更改显示。开始键盘扫描程序流程图如下:停止键是否按下 N Y Y标志位a置0标志位a置1方向键是否按下N Yb取反减速是否按下 N是否为最小速度 Y Y减速 N加速是否按下 N Y是否为最大速度
15、Y加速 N结束图2.2 键盘扫描程序流程图Fig 2.2 keypad scanning program flow chart2.3 LCD显示程序本系统使用的显示芯片为16引脚的LCD1602芯片。在使用LCD1602时要对芯片进行初始化。 需要知道RS为寄存器选择端,识别到高电平时选通数据寄存器,低电平选通指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW同时为低电平时可以写入指令或者显示地址。当RS为低电平、RW为高电平时为忙信号,当RS为高电平、RW为低电平时写入数据。E为使能端,当E端识别到下降沿信号时,液晶模块执行命令。D0D7为双向数据线。8LCD
16、显示程序流程图如下: 开始初始化a=0显示欢迎和停止 Y Nb=0结束 0 1 显示正传显示反转c=10c=10 Y Y显示一档c=15c=15 N N Y Y显示二档c=20c=20 N N Y Y 显示三档结束图2.3 显示子程序流程图Fig 2.3 shows the son program flow chart2.4 步进电机驱动程序步进电机驱动程序与显示子程序十分相像,因为步进电机的运转方式与液晶显示内容是完全同步的。本次系统设计使用的是八拍工作方式。在这种工作方式下,步进电机使用的正反转代码分别为:“ 0xef,0xcf,0xdf,0x9f,0xbf,0x3f,0x7f,0x6f”
17、和“0x6f,0x7f,0x3f,0xbf,0x9f,0xdf,0xcf,0xef”。将这两组代码从单片机P2口输出,就能驱动步进电机完成正反转。步进电机驱动程序流程图如下:开始初始化a=0停止 Y N结束b=0 0 1 正 传反 转c=10c=10 Y Y一档c=15c=15 N N Y Y二档c=20c=20 N N Y Y 三档结束图2.4 电机驱动程序流程图Fig 2.4 motor driver program flow chart3. 系统评价及改进3.1 系统优点本系统简单可行,所用原件均为市场主流原件,造价低廉并能准确完成我们需要的正反转、加减速等功能。并且通过LCD液晶显示明
18、确直观地将电机运转信息显示出来,便于我们观察和记录。指示灯系统采用红色高亮发光二极管,引人注意,当电机停止转动或者突然断电时可以第一时间将效果反馈出来。本系统采用DC供电和USB供电双供电系统。这样可以使我们的单片机最小系统脱离计算机单独使用,这使得本系统的机动性和实用性大大提高。3.2 系统缺点本系统按键控制反应并非实时反应。每次扫描键盘需要完成电机八步运转之后,如果我们需要电机的速度特别慢的话,按键将会给人“不灵敏”的错觉。3.3 系统改进如果我们将硬件设计中添加中断源或者在软件编程中增加键盘扫描频率,按键“不灵敏”的问题将会得到进一步的解决。4 结论经过硬件设计和软件编程,该系统完全能够
19、实现预期的功能。通过按键控制步进电机转动并将转动情况通过显示屏和指示灯显示出来。对于步进电机,每来一个脉冲电压,转子就会旋转一个步进角。称为一步。根据电压脉冲的分配方式,步进电机各相绕组的电流轮流切换,在供给联系脉冲时,就能一步一步地连续转动,从而使电机旋转。每转一周的步数相同,在不丢步的情况下运行,其步距误差不会长期积累。随着电力电子技术的发展,可以实现细分驱动,即将一个步进角细分成若干小步来完成。我们就是根据步进电机的这些特点使用单片机来驱动它工作完成拖动,同时添加一些其他的外设使我们的呃系统更加完善。我们的系统的功能如下:当系统供电,显示屏亮起显示欢迎界面,同时显示停止,电机停止,指示灯
20、全部熄灭。当加速或者减速键按下后电机起步运转完成拖动,并选择一档速度,再读取当前正反转状态使工作灯发光和对应的正反转指示灯选择发光,同时液晶显示屏显示电机运转方向和运转速度。当加速减速键再次按下时速度和显示对应变化,极速时加速或者最小速度时减速系统不作任何处理。当停止键按下后,显示屏回到欢迎和停止界面,指示灯全部熄灭。5 学习心得本次系统设计介绍了使用STC89C52单片机最小系统驱动步进电机完成正反转、加减速并显示的办法。通过这次设计,我更加深刻的了解了STC89C52单片机的内部结构、LCD1602等原件的使用方法和工作原理,熟悉了一些常用的指令使用,增强了处理混乱逻辑关系的能力。通过这次
21、课程设计,我对单片机的工作原理有了更深一步的了解,对于I/O工作方式更加明确,并且在应用上掌握了不少方法。在通过与同学们交流中,也发现不少问题,并且及时的做出相应的更改,还有一些应用巧妙的方法,这些使我对单片机技术能更灵活的应用。参考文献1电机及拖动基础詹跃东 重庆大学出版社2DB9和DB25的常用信号脚说明;RS232接口针脚定义百度文库3MAX232中文资料百度文库4LCD1602中文资料百度文库5单片机原理及接口技术余锡存 曹国华 西安电子科技大学出版社6四相步进电机原理抱米花网7C+面向对象程序设计 谭浩强 清华大学出版社8机电技术于志赣 刘国平 张旭斌 2009 第3期致谢本研究及论
22、文是在我的导师王鑫老师的亲切关怀和悉心指导下完成的。她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,王老师都始终给予我细心的指导和不懈的支持。王老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向王老师致以诚挚的谢意和崇高的敬意。 在此,我还要感谢在一起对本系统进行设计的各位同学们,正是由于他们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。 在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我
23、还要感谢培养我长大含辛茹苦的父母,谢谢你们!附录源程序:/* 初始化*/ #include reg52.h #include typedef unsigned char BYTE;typedef unsigned int WORD;typedef bit BOOL ; sbit stop_key = P21;sbit fangxiang_key = P20;sbit jia_key = P22;sbit jian_key = P23;bit a=0;bit b=0;int c=25;sbit rs= P10;sbit rw = P11;sbit ep = P12;unsigned char c
24、ode FFW8=0xef,0xcf,0xdf,0x9f,0xbf,0x3f,0x7f,0x6f; /反转unsigned char code FFZ8=0x6f,0x7f,0x3f,0xbf,0x9f,0xdf,0xcf,0xef; /正转unsigned int K, rate;void delay();/* 步进电机驱动*/void delay_dianji(unsigned int t) unsigned int k; while(t-) for(k=0; k150; k+) void dianji() unsigned char i; if(a=0) P2=0xff; goto pp
25、; for (i=0; i8; i+) /一个周期转30度 if(K=0) P1 = FFWi&0xff; if(K=0)P2=0x4f; /取数据 if(K=1) P1 = FFZi&0xff; if(K=1) P2=0x2f; delay_dianji(c); /调节转速 pp:; /* 延时程序*/ void delay() unsigned int k,t; t=rate; while(t-) for(k=0; k150; k+) /* LCD显示*/BYTE code dis1 = welcome;BYTE code dis2 = now is stop;BYTE code dis3
26、 = turning Forward;BYTE code dis4 = turning Reverse;BYTE code dis5 = with speed one;BYTE code dis6 = with speed two;BYTE code dis7 = with speed three;delay1(BYTE ms)/ 延时子程序BYTE i;while(ms-)for(i = 0; i20) c=20; while(jian_key=0); if(jia_key=0) delay_dianji(5); if(jia_key=0) c-=5;if(c=5) c=10; a=1; while(jia_key=0); K=b; /* 主程序*/main() while(1) jianpan(); lcd(); dianji(); 第24页 共24页