单片机原理与应用课程设计-步进电机控制系统设计.doc_第1页
单片机原理与应用课程设计-步进电机控制系统设计.doc_第2页
单片机原理与应用课程设计-步进电机控制系统设计.doc_第3页
单片机原理与应用课程设计-步进电机控制系统设计.doc_第4页
单片机原理与应用课程设计-步进电机控制系统设计.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

此文档收集于网络,如有侵权,请联系网站删除湖南工程学院课 程 设 计 任 务 书课程名称 单片机原理与应用 课 题 步进电机控制系统设计 专业班级 电气工程0991 学生姓名 学 号 指导老师 审 批 任务书下达日期 2011 年09 月 05 日 任务完成日期2011 年 09 月 16 日设计内容与设计要求设计内容:以单片机为核心设计一个步进电机控制系统,要求能够通过键盘设置步进电机的转向和转速,并在4位LED显示器上显示步进电机转速或工作状态。设计要求:1)确定系统设计方案; 2)进行系统的硬件设计;3)完成应用程序设计;4)硬件电路及应用程序的调试。主 要 设 计 条 件本课题以单片机为核心,设计并制作出步进电机控制系统,设计要求:1. 按下不同的键,分别使步进电机实现顺时针和逆时针旋转;2. 步进电机可实现正、反转,加速、减速、停止等工作状态;3. 通过LED数码管显示步进电机运行速度或工作状态;说 明 书 格 式1. 课程设计任务书2. 目录3. 总体方案确定4. 各单元硬件电路设计说明及计算方法5. 软件设计与说明(包括流程图)6. 调试结果与必要的调试说明7. 使用说明8、总结9、参考文献附录附录A 系统原理图附录B 程序清单进 度 安 排设计时间为两周第一周星期一、上午:布置课题任务,讲课及课题介绍 下午:借阅有关资料,总体方案讨论星期二、系统总体方案星期四、设计及调试星期五、设计及调试第二周星期一、设计及调试星期二、设计及调试星期三、设计及调试星期四、写说明书星期五、上午:写说明书,整理资料下午:交设计资料,答辩参 考 文 献1王迎旭.单片机原理及及应用.北京:机械工业出版社2张迎新.单片微型计算机原理、应用及接口技术.北京:国防工业出版社3郭天祥.新概念51单片机C语言教程.北京:电子工业出版社4王晓明.电动机的单片机控制.北京航空航天大学出版社 5蔡明文 冯先成编著.单片机课程设计.北京:华中科技大学出版社目录第1章 目的与要求6第2章 步进电机的原理介绍72.1 步进电机的工作原理72.2 步进电机24BYJ48的相关电气参数82.3 步进电机的基本术语92.3.1 相数92.3.2 拍数92.3.3 步距角92.3.4 信号分配9第3章 总体设计思路103.1 方案与设计思路103.2 总框图11第4章 程序设计114.1 主程序114.2 LCD及档位显示程序124.3正反转流程图134.4启动与停止流程图15第5章 硬件设计165.1 硬件的设计与选取165.1.1 步进电机的驱动165.1.2 单片机的选取185.1.3 液晶LCD1602显示模块195.1.4 按键电路设计195.1.5 时针产生电路205.2 硬件的总体电路连接21第6章 调试与故障分析226.1 软件编写及调试226.2 调试过程及相关显示结果236.3 故障分析及解决方法25第7章 心得体会26第8章 参考文献27附件28系统原理图28开发板实物图:29元器件清单29源程序清单30第1章 目的与要求 综合运用所学的单片机原理与应用理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力,以单片机为核心设计一个步进电机控制系统,要求能够通过键盘设置步进电机的转向和转速,并在LED显示器或者液晶LCD1602上显示步进电机转速或工作状态。本课题以单片机为核心,设计并制作出步进电机控制系统,设计要求:1、按下不同的键,分别使步进电机实现顺时针和逆时针旋转。2、电机运转状态可以是正反转,加速减速,五种不同速度的各种组合。3、通过LED数码管或液晶1602显示电机运行状态。第2章 步进电机的原理介绍2.1 步进电机的工作原理步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。本次设计是采用步进电机28BYJ48型四相八拍电机,电压为DC5VDC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。),八拍(A-AB-B-BC-C-CD-D-DA-A。)其相序分配表如下:2.2 步进电机24BYJ48的相关电气参数1.额定电压:12VDC(另有电压:5V、6V、24V)2.相数:43.减速比:1/64(另有减速比:1/16、1/32)4.步距角:5.625/645.驱动方式:4相8拍6.直流电阻:2007%(25)(按客户要求而定:80、130欧姆)7.空载牵入频率:600Hz8.空载牵出频率:1000Hz9.牵入转矩:34.3mN.m(120Hz)10.自定位转矩:34.3mN.m11.绝缘电阻:10M(500V)12.绝缘介电强度:600VAC/1mA/1S13.绝缘等级:A14.温升:50K(120Hz)15.噪音:40dB(120Hz)16.重量:大约40g17.未注公差按:GB1804-m18.转向:CCW2.3 步进电机的基本术语2.3.1 相数产生不同对极N、S磁场的激磁线圈对数,常用m表示。2.3.2 拍数完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,比如说本次设计中使用的24BYJ48有单(单相绕组通电)四拍(A-B-C-D-A。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。),八拍(A-AB-B-BC-C-CD-D-DA-A。)2.3.3 步距角对应一个脉冲信号,电机转子转过的角位移用表示。=360度(转子齿数J*运行拍数),以常规二相,转子齿为50齿电机为例。四拍运行时步距角为=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为=360度/(50*8)=0.9度(俗称半步)。2.3.4 信号分配四相步进电机按照其通电方式的不同,可以分为单四拍,双四拍和双八拍三种工作方式。单四拍与双四拍的步距角相等,均为11.25度,而八拍的步距角则是单四拍与双四拍的一半,5.625度。单(单相绕组通电)四拍(A-B-C-D-A。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。),八拍 (A-AB-B-BC-C-CD-D-DA-A。)。这里选取的是双相八拍的工作方式。 第3章 总体设计思路3.1 方案与设计思路因为步进电机的控制是通过脉冲信号来控制的,将电脉冲信号转变为角位移或线位移的开环控制元件。所以怎样产生这个脉冲信号和产生怎样的信号是电机控制的关键。用单片机来产生这个脉冲信号,通过单片机的P1口输出脉冲信号,因为所选电机是四相的,所以只需要P1口的低四位P1.0P1.3分别接到电机的四根电线上。定时器定时来调整电机的转速,通过键盘的按钮,就可以改变定时初值从而改变了电机的转速,单片机上P3.2P3.5连的是按键,这里键盘上的K1键为启动与停止键,K2键为减速键,K3键为加速键,K4键为方向转换键。P0以及P2.0P2.2口接LCD1602,可以显示当前的电机转速、运行状态、运行方向和档位。具体结构见3-1框图。3.2 总框图图3-1 总体设计方框图第4章 程序设计4.1 主程序进入主程序,首先是对LCD进行初始化,然后依次进行键盘扫描,调用步进电机相关数据显示子函数,若检测到有键按下,则进去相应的处理。流程图如下图4-1:4-1图 主程序流程图4.2 LCD及档位显示程序此次设计使用1602液晶显示步进电机运行状态,其效果比用数码管显示要更加明了,也更容易读取相关状态和数据。液晶上显示有电机运行的状态(RUNNING或STOP)、当前档位(DW)、运行方向()以及其运转速度(r/min)。其显示原理如下图4-2:图4-2 液晶显示流程图4.3正反转流程图步进电机的正反转用K4控制,初始化电机为顺时针转,即“”,每当按下K4键,电机转向改变,具体流程图如下图4-3:4.4启动与停止流程图启动与停止是用K1键来控制的,初始化标志位on_off=0,档按下K1,即将on_off置1,每当按下k1,都将在启动与停止间切换,具体流程图如下图4-4:图4-4 启动与停止流程图第5章 硬件设计5.1 硬件的设计与选取5.1.1 步进电机的驱动步进电机的驱动采用ULN2003,接到单片机的P1.0P1.3,具体如图5-1:图5-1 步进电机驱动及其接口图5.1.2 单片机的选取目前市面上的通用型单片机种类很多,且适合不同应用场合的新产品不断出现,但目前的应用状况,以8位中档MCS-51系列单片机的应用最为普遍。基于这次课程设计的要求不高,我们可以选用51系列或52系列单片机,其有可靠性高,易于扩展以及实用性好等特点,完全可以满足我们的控制要求。其图如下5-2:图5-2 AT89C52单片机5.1.3 液晶LCD1602显示模块P0接液晶的数据传送口,P2.0P2.2接液晶的控制端口。其接线图如下图5-3:图5-3 液晶与单片机接口原理图5.1.4 按键电路设计键盘接口按不同标准有不同分类方法,按键盘排布,可以分为独立方式(一组相互独立的键盘)和矩阵(一行列组成矩阵)方式。此次设计只用到了四个按键,故可采用独立按键,P3.2P3.5分别接到K1K4。其原理图如下图5-4:图5-4 按键与单片机接口原理图5.1.5 时针产生电路时针电路部分晶振为11.0592MHz,其原理图如下:图5-4 时针电路5.2 硬件的总体电路连接图 5-5 总体原理图第6章 调试与故障分析6.1 软件编写及调试此次编程及调试是用keil软件进行的,程序的编写及调试步骤如下:1. 根据步进电机24BYJ48的相序,编好正反转相序表,这个是关键,不能编错。2.定义各个变量及相关液晶显示符:uchar code cdis0 = WELCOME TO ;uchar code cdis1 = STEPPING MOTOR ;uchar code cdis2 = CONTROL SYSTEM ;uchar code cdis3 = STOP ;uchar code cdis4 = DW:;uchar code cdis5 = RUNNING;uchar code cdis6 = r/min;3. 定义各个按键:sbit K1 = P32; /运行与停止sbit K2 = P33; /加速sbit K3 = P34; /减速sbit K4 = P35; /方向转换sbit BEEP = P36; /蜂鸣器4. 编写各个子程序。5. 编写主程序,进入主程序即开始进行键盘扫描及调用液晶显示。6. 定时器T0的中断服务程序,进入中断,若满足条件,即向步进电机送8个脉冲。6.2 调试过程及相关显示结果 将程序下载到单片机中,LCD初始化显示如下:之后进入步进电机初始化的画面显示,电机运行状态显示为STOP,档位为5档,开机转速为2.66r/min,如下: 实物图如下:按下启动键K1后,转向显示出显示,即电机顺时针转,显示如下:按K2键一次,档位加一,高位档为10档,此时对应电机转速为最慢,为1.33r/min,如下图:实物图显示如下:按下K3键一次,档位减一,低位档为1档,也是电机转速最快的档,为13.32r/min,显示效果如下图:实物图显示如下:6.3 故障分析及解决方法故障一:首先在设计总体方案时,思路上出现了一些问题,我首先是想在中断里完成许多应在中断之外完成的事,经过老师的指点,后来想清楚了。只在中断中给电机送相序码,并设定了一个参数对电机的转速进行调控。故障二:由于编写程序的经验不多,在计算电机转速,并将其显示在液晶时,遇到了一些问题,速度转换公式是找出来了,但怎样将其小数点表示出来,困惑了好久,最后还是请教了同学,才搞定。故障三:在仿真时首先液晶没有接上拉电阻,液晶上显示不出来,我以为是程序方面出了问题,后来尝试接了上拉电阻,就能够正常显示了。第7章 心得体会为期两周的单片机课程设计在忙碌中已接近尾声,经过这么多天的努力,终于完成了这次课程设计基本设计要求,在充实中也学到了很多知识,是真正将所学知识运用于实践中的一次很好的体验,使人受益匪浅。由于此次控制要求不是很高,选用51系列或52系列完全能够满足设计需求,最后选用的STC89C52。接下来就是硬件接口分配问题和如何去驱动电机。对于步进电机之前没有什么接触,所以我上网查了许多关于步进电机的资料,知道了其基本工作原理以及怎么去实现其控制运转和驱动。接下来的主要问题就是如何编程去实现控制它了,这次程序的编写和调试对我来说是个不小的挑战,因为之前只编写过一些简短的小程序,对较大的程序总体性方面还不能很好的把握。经过反复的尝试和调试,用发现一个问题,解决一个问题的方法,还参考了一些别人的经验方法,完成了程序的编写。这对我以后编写程序是一次很好的经验积累。仿真时也出了一些小问题,首先LCD完全没有显示,我就尝试接上拉电阻,结果就能正常工作了。然后是电机也不转,最后我把送进去的脉冲频率减小,才使得电机运转起来,这个仿真过程又使我更加熟练了Proteus软件的用法。这次课程设计使我认识到,刚学好书上的知识还是不够的,更重要的是我们要能将所学的知识运用到实践中来,这才是我们学习知识的最基本的要求,所以在以后的学习生活中,我们应该更加注意将学习与实践相结合,在实践中去运用好所学知识,更进一步深化和理解所学知识,达到学以致用。通过这次课程设计,我也了解到了自己的不足,以前自己学习单片机的时候,往往只去看懂别人写的程序,以为看懂了自己就知道写了,但事实并不是这样,虽然这次课程设计程序是完成了,但棘手的地方很多,编程并不像以前认为的简单。所以在以后的学习中,不能手高眼低,一定要脚踏实地,一步步地走,自己动手去做,这样才能将知识真正学到手。这次课程设计能得以顺利完成,还要感谢李晓秀老师的指导,在老师指导下,很多问题问题都很好地解决了。总之,虽然只是短短两周的时间,但也学到了很多,感受很深,是一次很好的经验积累和设计经历。第8章 参考文献1王迎旭.单片机原理及及应用.北京:机械工业出版社2张迎新.单片微型计算机原理、应用及接口技术.北京:国防工业出版社3郭天祥.新概念51单片机C语言教程.北京:电子工业出版社4蔡明文 冯先成编著.单片机课程设计.北京:华中科技大学出版社5王晓明.电动机的单片机控制.北京航空航天大学出版社 附件系统原理图开发板实物图:元器件清单单片机开发板 1块STC89C52 1片LCD1602 1块ULN2003 1个步进电机 1个源程序清单#include /51芯片管脚定义头文件#include /内部包含延时函数 _nop_();#define uchar unsigned char#define uint unsigned int#define delayNOP(); _nop_();_nop_();_nop_();_nop_();uchar code FFW8=0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9; /正转相序编码表uchar code REV8=0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1;/反转相序编码表sbit K1 = P32; /运行与停止sbit K2 = P33; /加速sbit K3 = P34; /减速sbit K4 = P35; /方向转换sbit BEEP = P36; /蜂鸣器sbit LCD_RS = P20; sbit LCD_RW = P21;sbit LCD_EN = P22;bit on_off=0; /运行与停止标志bit direction=1; /方向标志uchar code cdis0 = WELCOME TO ;uchar code cdis1 = STEPPING MOTOR ;uchar code cdis2 = CONTROL SYSTEM ;uchar code cdis3 = STOP ;uchar code cdis4 = DW:;uchar code cdis5 = RUNNING;uchar code cdis6 = r/min;uchar code cdis7 = RATE:;uchar m,v=0,q=0,j;uchar rate=5; /预设定速度档uchar data_temP1,data_temp2,data_temp3,data_temp4; uint zs,data_temp;/*/void delay(uint t) / 延时t毫秒函数 uchar k; while(t-) for(k=0; k125; k+) /*/void delayB(uchar x) /x*0.14MS uchar i; while(x-) for (i=0; i13; i+) /*/void beep() /蜂鸣器 uchar j; for (j=0;j100;j+) delayB(4); BEEP=!BEEP; /BEEP取反 BEEP=1; /关闭蜂鸣器 delay(170); /*/ bit lcd_busy() /检查LCD是否为忙状态,lcd_busy为1时,忙,等待。为0时,闲,可写指令与数据。 bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); /*/void lcd_wcmd(uchar cmd)/写指令数据到LCD ,*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/void lcd_wdat(uchar dat)/写显示数据到LCD,RS=H,RW=L,E=高脉冲,D0-D7=数据。 while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/void lcd_init()/LCD初始化设定 delay(30); lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); /显示开,关光标 delay(5); lcd_wcmd(0x06); /移动光标 delay(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay(5); /*/void lcd_pos(uchar pos)/设定显示位置 lcd_wcmd(pos | 0x80); /数据指针=80+地址变量 /*/void LCD_init_DIS()/ LCD1602初始显示子程序 delay(10); /延时 lcd_init(); /初始化LCD lcd_pos(0); /设置显示位置为第一行的第1个字符 m = 0; while(cdis0m != 0) /显示字符WELCOME lcd_wdat(cdis0m); m+; delay(2000); lcd_wcmd(0x01); /清屏 delay(5); /清屏以后的这个延时不能少,给LCD一定的缓冲,否则下一条指令不一定被执行 lcd_pos(0x10); /设置显示位置为第一行的第17个地址 m = 0; while(cdis1m != 0) /显示字符 lcd_wdat(cdis1m); m+; lcd_pos(0x50); /设置显示位置为第二行第1个字符 m = 0; while(cdis2m != 0) lcd_wdat(cdis2m); /显示字符 m+; for(j=0;j16;j+) lcd_wcmd(0x18); delay(300); delay(3000); /延时 lcd_wcmd(0x01); /清屏 lcd_pos(0x00); /设置显示位置为第一行的第1个字符 m = 0; while(cdis3m != 0) /显示字符STOP lcd_wdat(cdis3m); m+; lcd_pos(0x08); /设置显示位置为第一行第9个字符 m = 0; while(cdis4m != 0) lcd_wdat(cdis4m); /显示字符DW m+; for(m=0;m2;m+) lcd_pos(0x0e+m); /显示方向符号 lcd_wdat(0x2d); lcd_pos(0x47); /显示小数点 lcd_wdat(0x2e); m = 0; lcd_pos(0x4a); /显示字符r/min while(cdis6m != 0) lcd_wdat(cdis6m); m+; m = 0; lcd_pos(0x40); /显示字符RATE: while(cdis7m != 0) lcd_wdat(cdis7m); m+; /*/void data_conv()/档位数据转换子程序 data_temP1=data_temp/10; /高位 if(data_temP1=0) data_temP1=0x20;/高位为0不显示 else data_temP1=data_temP1+0x30; data_temp2=data_temp%10; /低位 data_temp2=data_temp2+0x30; /*/void data_conv1()/转速数据转换子程序 data_temP1=data_temp/1000;/整数位第一位 if(data_temP1=0) data_temP1=0x20;/高位为0不显示 else data_temP1=data_temP1+0x30; data_temp2=data_temp%1000/100; /整数位第2位 data_temp2=data_temp2+0x30; data_temp3=data_temp%100/10; /小数位第一位 data_temp3=data_temp3+0x30; data_temp4=data_temp%10; /小数位第二位 data_temp4=data_temp4+0x30; /*/void data_dis() /数据显示子程序 data_temp = rate; /显示档位 data_conv(); lcd_pos(0x0b); lcd_wdat(data_temP1); lcd_pos(0x0c); lcd_wdat(data_temp2); zs=1332/rate;/转速换算公式:zs=13.32/rate;data_temp=zs; /显示转速data_conv1(); lcd_pos(0x45); lcd_wdat(data_temP1); lcd_pos(0x46); lcd_wdat(data_temp2); lcd_pos(0x48); lcd_wdat(data_temp3); lcd_pos(0x49); lcd_wdat(data_temp4);/*/void motor_DR()/显示运行方向符号 if(direction=1) /正转方向标志 for(m=0;m号 else for(m=0;m2;m+) /反转方向标志 lcd_pos(0x0e+m); /显示方向符号 lcd_wdat(0x3c); /显示号 /*/void motor_RUN() /显示运行状态 if(on_off=1) TR0=1; lcd_pos(0); /设置显示位置为第一行的第1个字符 m = 0; while(cdis5m != 0) lcd_wdat(cdis5m); /RUNNING m+; motor_DR(); else TR0=0; P1 =0x0f; lcd_pos(0); /设置显示位置为第一行的第1个字符 m = 0; while(cdis3m != 0) lcd_wdat(cdi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论