基于单片机的步进电机控制系统的设计().pdf

上传人:tbuqq 文档编号:4666945 上传时间:2019-11-24 格式:PDF 页数:34 大小:1.45MB
返回 下载 相关 举报
基于单片机的步进电机控制系统的设计().pdf_第1页
第1页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《基于单片机的步进电机控制系统的设计().pdf》由会员分享,可在线阅读,更多相关《基于单片机的步进电机控制系统的设计().pdf(34页珍藏版)》请在三一文库上搜索。

1、0 / 34 本科毕业设计 基于单片机的步进电机控制系统的设计 摘要 随着自动控制系统的发展和对高精度控制的要求,步进电机在自动化控制中扮演着 越来越重要的角色,区别于普通的直流电机和交流电机,步进电机可以对旋转角度和转 动速度进行高精度控制。步进电机作为控制执行元件,是机电一体化的关键组成之一, 广泛应用在各种自动化控制系统和精密机械等领域。 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况 下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影 响,即给电机加一个脉冲信号,电机则转过一个步距角。 本系统介绍了一种基于单片机的步进电机控制系统的设

2、计,包括了硬件设计和软件 设计两部分。其中,硬件设计包括单片机最小系统、键盘控制模块、LCD 显示模块、步 进电机驱动模块、位置检测模块共5 个功能模块的设计。系统软件设计采用C 语言编 1 / 34 写,包括主程序、数字键处理程序、功能键处理程序、电机驱动处理程序、显示模块、 位置采集模块。 本设计采用 STC89C52单片机作为主控制器, 4*4 矩阵键盘作为输入, LCD1602 液 晶作为显示, ULN2003A 芯片驱动步进电机。系统具有良好的操作界面,键盘输入步进 电机的运行距离;步进电机能以不同的速度运行,可以在不超过最大转速内准确运行到 任意设定的位置,可调性较强;显示设定的运

3、行距离和实际运行距离;方便操作者使 用。 关键词: 单片机步进电机液晶显示键盘驱动 Design of the Stepping Motor Control System Based on SCM QiuHaizhao (College of Engineering, South China Agricultural University, Guangzhou 510642,China Abstract:With the development of automatic control system and the requirements of high- precision control

4、, stepping motor control in automation is playing an increasingly important role, different from the common DC and AC motor, stepper motor rotation angle and rotational speed can be high-precision controlled. Stepper motor as a control actuator is a key component of mechanical and electrical integra

5、tion, widely used in a variety of automated control systems and precision machinery and other fields. Stepper motor is the open-loop control components changing electric pulse signals into angular displacement or linear displacement .In the case of non-overloaded, the motor speed, stop position depe

6、nds only on the pulse frequency and pulse number, regardless of load changes, that is, to add a pulse motor, the motor is turned a step angle. This system introduces a design of stepper motor control system based on single chip microcomputer, including hardware design and software design in two part

7、s. Among them, the hardware design, including single chip minimal system, keyboard control module, LCD display module, the stepper motor drive module, position detection module five functional modules. System software design using C language, including the main program, process number keys, the key

8、of function processes,motor driver handler, the display module, position acquisition module. 2 / 34 This design uses STC89C52 microcontroller as the main controller, 4 * 4 matrix keyboard as an input, LCD1602 LCD as a display, ULN2003A chip as stepper motor driver. System has a good user interface,

9、keyboard input stepper motor running distance 。 Stepper motor can run at different speed, and run to any given position accurately in any speed without exceeding the maximum speed, with a strong adjustable 。 Display the runningdistance and the actual runningdistance, which is more convenient for the

10、 operator to use. Key words:SCM stepper LCD keyboard driver / 34 目录 1 前言 1 1.1 步进电机的发展1 1.2 设计要求 1 2 系统方案分析与选择论证1 2.1 步进电机的选择1 2.2 步进电机驱动方案的选择2 2.3 显示方案的选择3 2.3 键盘方案的选择3 2.3 步进电机位置检测方案的选择3 2.4 整体方案 4 3 主要芯片介绍与硬件电路设计4 3.1 单片机最小系统模块4 3.1.1 单片机介绍 4 3.1.2 单片机最小系统 5 3.2 键盘电路设计 6 3.3 显示模块 7 3.3.1 LCD1602介

11、绍 7 3.3.2 LCD1602电路图 7 3.4 驱动模块 8 3.4.1 ULN2003A 介绍 8 3.4.2 驱动电路图 9 3.5 位置检测模块 9 3.5.1 A3144E介绍 9 3.5.2 位置检测电路图 11 4 程序设计 11 4.1 主程序 11 4.2 数字键处理程序12 4.3 功能键处理程序13 I / 34 5 结论 14 参考文献 15 附录 16 致谢 27 华南农业大学本科生毕业设计成绩评定表 0 / 34 1前言 1.1步进电机的发展 步进电机最早是在1920 年由英国人所开发。 1950 年后期晶体管的发明也逐渐应用 在步进电机上,这对于数字化的控制变

12、得更为容易:110- 111. 16 / 34 附录 附录 A 电路原理图 17 / 34 附录 B 源程序代码 #include #include #include #define uint unsigned int /宏定义,为了后面定义变量书写简便 #define uchar unsigned char sbit lcdrs=P33。/定义端口 sbit lcdrw=P36。 sbit lcden=P37。 sbit ceju=P35。 bit flag=0。/ 正反标识 uchar code table=0X0E,0X06,0X07,0X03,0X0B,0X09,0X0D,0X0C,0

13、X0E,0X0C,0X0D,0X09,0X0B,0 X03,0X07,0X06 。/驱动输出表 uchar code table1=“set distance“ 。 uchar code table2=“run distance“ 。 uchar num=0。 uchar speed=0 。 uchar table_begin = 0 。 uchar dat=0, , , 。/存放数子串值 uchar s= , , , 。 uchar c=0,0,0, 。 uchar rdat 。/按键次数 uchar dk。 uchar j=0。 18 / 34 uchar maichong=0 。 flo

14、at juli 。 int rl ,sl。 uchar temp=1 。 void duankou(。 void delay(uint z。 void write_com(uchar com。 void write_data(uchar dat。 void lcd1602_init(。 void kbscan(void。 void keycl(uchar keyvol。 void left(uchar rx,uchar date。 void dispose(。 void qudong(。 void delay(uint z uint x,y。 for(x=z。x0。x for(y=110。y0

15、。y。 void write_com(uchar com lcdrs=0。 lcdrw=0。 P0=com。 19 / 34 delay(5。 lcden=1。 delay(5。 lcden=0。 void write_data(uchar dat lcdrs=1。 lcdrw=0。 P0=dat。 delay(5。 lcden=1。 delay(5。 lcden=0。 void lcd1602_init( lcden=0。 write_com(0x38。/显示模式设置 write_com(0x0c。/显示开及光标设置 write_com(0x06。/显示光标移动设置 write_com(0x

16、01。/显示清屏 void kbscan(void/键盘扫描函数 20 / 34 uchar line,row。 P1=0xf0。 if(P1&0xf0!=0xf0 delay(5。 if(P1&0xf0!=0xf0 row=0xfe。 while(row&0x10!=0 P1=row。 if(P1&0xf0!=0xf0 line=(P1&0XF0|0X0F 。 keycl(row&line 。/进入处理 else row=(row|0x01。 /键值处理函数 void keycl(uchar keyvol uchar k。 delay(400。 21 / 34 switch(keyvol c

17、ase 0xeb: rdat+ 。k=1。srdat-1=k。left( rdat,k。 break。/1 case 0xdb: rdat+。k=2。srdat-1=k。left( rdat,k。 break。/2 case 0xbb: rdat+。k=3。srdat-1=k。left( rdat,k。 break。/3 case 0xed: rdat+ 。k=4。srdat-1=k。left( rdat,k。 break。/4 case 0xdd: rdat+。k=5。srdat-1=k。left( rdat,k。 break。/5 case 0xbd: rdat+。k=6。srdat-1=

18、k。left( rdat,k。 break。/6 case 0xee: rdat+ 。k=7。srdat-1=k。left( rdat,k。 break。/7 case 0xde: rdat+ 。k=8。srdat-1=k。left( rdat,k。 break。/8 case 0xbe: rdat+ 。k=9。srdat-1=k。left( rdat,k。 break。/9 case 0xd7: rdat+。k=0。srdat-1=k。left( rdat,k。 break。/0 case 0xe7: k=A 。break。/开始 case 0x77: k=E 。break。/正转 case

19、 0x7b: k=D。break。/反转 case 0x7d: k=C 。break。/加速 case 0x7e: k=B 。break。/减速 case 0xb7: k=F 。break。/停止 if(k=A dk=1。 if(k=B flag=0。 if(k=C 22 / 34 flag=1。 if(k=D delay(5。 num+。 if(num=5 num=4。 if(k=E if(num!=0 num-。 else num=0。 if(k=F dk=0。 /移位函数 void left(uchar rx,uchar date switch(rx 23 / 34 case 1:dat

20、0=date 。break。 case 2:dat1=dat0,dat0=date 。break。 case 3:dat2=dat1,dat1=dat0,dat0=date。break。 void dispose(/处理电机速度 switch(num case 0: speed=5 。 break。 case 1: speed=4 。 break。 case 2: speed=3 。 break。 case 3: speed=2 。 break。 case 4: speed=1 。 break。 default: break 。 24 / 34 if(flag=0 table_begin=0。

21、 else table_begin=8。 void qudong(/电机驱动 int i。 for(j=0+table_begin。j duankou(。/查电机输出表输出,从而驱动电机 for(i=0。i/根据档位来增加或者减少延迟次数 delay(5。 void duankou( switch(dk case 0: P2=0。temp=1。break。 case 1: P2=tablej。break。 25 / 34 default: break。 void main( uchar i。 lcd1602_init(。 write_com(0x80+0x00。/第一行首地址,注意每写一次,地

22、址自动加1 for(i=0。i write_data(table1i。 write_com(0xc0+0x00。/第二行首地址 for(i=0。i write_data(table2i。 while(1 kbscan( 。 write_com(0x80+0x0d。/第一行首地址,注意每写一次,地址自动加1 for(i=0。i write_data(si。 sl=(s0-0x30*100+(s1-0x30*10+(s2-0x30 。 if(temp=0 maichong+。 temp=1。 26 / 34 while(ceju=0 juli=maichong*2.7*0.5*3.14159 。

23、c0=(intjuli/100%10 。 c1=(intjuli/10%10 。 c2=(intjuli%10 。 write_com(0xc0+0x0d。/第一行首地址,注意每写一次,地址自动加1 write_data(c0+0。 write_data(c1+0。 write_data(c2+0。 kbscan(。 dispose(。 qudong(。 temp=0。 dispose( 。 if( (intjuli=sl P2=0。 else qudong(。 27 / 34 致谢 感谢! 28 / 34 华南农业大学 本科生毕业设计成绩评定表 学号姓名专业 毕业设计题 目 指导教师评语 成绩百分制):指导教师签名:年月日 评阅人评语 成绩百分制):评阅人签名:年月日 答辩委员会评语 成绩百分制):答辩委员会签名:年月日 成绩 总评 毕业设计总评分数: 毕业设计成绩总评等级:答辩委员会主席 签名): 年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1