单片机三相单三拍步进电机_第1页
单片机三相单三拍步进电机_第2页
单片机三相单三拍步进电机_第3页
单片机三相单三拍步进电机_第4页
单片机三相单三拍步进电机_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用课程设计报告书课题名称 单片机控制步进电机姓 名学 号 专 业指导教师机电与控制工程学院2014 年 5月 30 日任 务 书单片机控制步进电机步进电机是工业过程控制及仪表中的主要控制元件之一,它可以在机械结构中把丝杠的角度变成直线位移,也可以用它带动螺旋电位器,调节电压和电流,从而实现对执行机构的控制。在数字控制系统中,由于它可以直接接受计算机输出的数字信号,而不需要进行D/A转换,所以使用起来十分方便。步进电机具有快速的启停能力和精度高的显著特点,在定位场合得到了广泛的应用。步进电机实际上是一个数字/角度转换器,也是一个串行的数/模转换器。因此,需把并行的二进制转换成串行的

2、脉冲序列,并实现方向控制。每当步进电机脉冲输入线上得到一个脉冲,它便沿着特定的方向走一步。设计要求:采用单片机来控制一个三相单三拍的步进电机工作。步进电机的旋转方向由正反转控制信号来控制。步进电机的步数由键盘输入,可输入的步数分别为3,6,9,12,15,18,21,24,27步。并且键盘具有键盘锁的功能,当键盘上锁的时候,步进电机是不接受输入步数的,也不会运转。只有当键盘锁打开并输入步数的时候,步进电机才开始工作 。电机运转的时候有正转和反转指示灯指示。当电机在运转的过程当中,如果过热,则电机停止运转,同时红色指示灯亮.,同时警报响。目 录1、绪论42、方案论证(规划、选定)73、方案说明(

3、设计)74、硬件方案设计85、软件方案设计126、调试137、技术小结(结束语)148、参考文献159、附录(源程序代码、电路图等)16 1. 绪 论 1.1 步进电机是用电脉冲信号控制,以实现对生产过程或设备的数字控制,它是过程控制中一种十分重要和常用的功率执行器件,它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器或角位移发生器等,近年来由于计算机应用技术的迅速发展,步进电机常常和计算机一起组成高精度的数字控制系统。由于它是由数字脉冲控制,因此非常适合于用单片机控制,本设计便是在此基础上,AT89C51型单片机为核心,并结合外围电路以步进电机为控制对象的控制系统。1.2单片机控

4、制步进电机原理步进电机的不同驱动方式,都是在工作时,脉冲信号按一定顺序轮流加到三相绕组上,从而实现不同的工作状态。由于通电顺序不同,其运行方式有三相单三相拍、三相双三拍和三相单、双六拍三种(注意:上面“三相单三拍”中的“三相”指定子有三相绕组;“拍”是指定子绕组改变一次通电方式;“三拍”表示通电三次完成一个循环。“三相双三拍”中的“双”是指同时有两相绕组通电)。三相单三拍运行方式:下页图所示为反应式步进电动机工作原理图,若通过脉冲分配器输出的第一个脉冲使A相绕组通电,B,C相绕组不通电,在A相绕组通电后产生的磁场将使转子 上产生反应转矩,转子的1、3齿将与定子磁极对齐,如果图(a)所示。第二个

5、脉冲到来,使B相绕组通电,而A、C相绕组不通电;B相绕组产生的磁场将 使转子的2、4齿与B相磁极对齐,如图(b)所示,与图(a)相比,转子逆时针方向转动了一个角度。第三个脉冲到来后,是C相绕组通电,而 A、B相不通电,这时转子的1、3齿会与C组对齐,转子的位置如图(c)所示,与图(b)比较,又逆时针转过了一个角度。图1.1 反应式步进电机工作原理图当脉冲不断到来时,通过分配器使定子的绕组按着A相-B相-C相-A相的规律不断地接通与断开,这时步进电动机的转子就连续不停地一步步的逆时 针方向转动。如果改变步进电动机的转动方向,只要将定子各绕组通电的顺序改为A相-C相-B相-A相,转子转动方向即改为

6、顺时针方向。 单三拍分配方式时,步进电动机由A相通电转换到B相通电,步进电动机的转子转过一个角度,称为一步。这时转子转过的角度是30度。步进电动机每一步转过的角度称为步距角。三相双三拍运行方式三相双三拍运行方式:每次都有两个绕组通电,通电方式是AB-BC-CA-AB,如果通电顺序改为AB-CA-BC-AB则步进电机反转。双三拍分配方式时,步进电动机的步距角也是30度三相单,双六拍运行方式:三相六拍分配方式就是每个周期内有六个通电状态。这六中通电状态的顺序可以使A-AB-B-BC-C-CA-A或者A- CA-C-BC-B-AB-A六拍通电方式中,有一个时刻两个绕组同时通电,这时转子齿的位置将位于

7、通电的两相的中间位置。在三相六拍分配 方式下,转子每一步转过的角度只是三相三拍方式下的一半,步距角是15度。单三拍运行的突出问题是每次只有一相绕组通电,在转换过程中,一相绕组断电,另一相绕组通电,容易发生失步;另外单靠一相绕组通电吸引转子,稳定性不好,容易在平衡位置附近震荡,故用的较少。 双三拍运行的特点是每次都有两相绕组通电,且在转换过程中始终有一相绕组保持通电状态,因此工作稳定,且步距角与单三拍相同。 六拍运行方式转换时始终有一相绕组通电,且步距角较小,故工作稳定性好,但电源较复杂,实际应用较多。2.方案论证2.1本设计由于需要实现9个不同部数的输入以及其他功能的输入,所以可以采用键盘输入

8、,实现步进电机的步数由键盘输入且具有键盘锁功能。而本实验单片机的端口数量充足,最后决定直接采用键盘输入。2.2在步进电机方面由于此次设计的软件采用proteus,在此软件中只有一个四相步进电机的模型,然后考虑到步进电机控制方法的难易度最后决定采用四相八拍控制法,由于单片机不能直接驱动步进电机,通过芯片放大控制电压。2.3在测量温度方面一开始打算用一个温度传感器开关去实现监测电机的温度,当温度过高的时候就断开开关;但考虑到系统的可操作性,准确性,编程的难以度及仿真软件的限制,最后决定用DS18B20代替电机的测量系统,实现电机在运动过程中,如果过热,则电机停止运转,同时红色指示灯亮,同时报警。而

9、转向方面用不同的指示灯指示正转和反转。当温度超过安全温度时,报警灯会亮和报警铃会鸣响,并让电机停止运转同时锁住键盘。 3.方案说明步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。即步进电机是将电脉冲信号转换为机械角位移的执行元件。步进电机的控制可以用硬件,也可以用软件通过单片机实现。硬件方法是采用脉冲分配器芯片进行通用换相控制;而软件方法是用单片机产生控制脉冲来控制步进电机的运行状态,这种方法可简化电路,降低成本。在用软件控制时,主要设计要点如下:l 判断旋转方向;l 按相序确定控制字;l 按顺序输入控制字;l 确定控制步数和每一步的延时时间。由于单片机的驱动电流一般都比较小,不能直

10、接驱动电机工作,所以单片机的I/O口输出必须接驱动电路,即功率驱动,才得以控制电机正常工作。控制框图如下图所示:开始启动时点击处于停止转动状态,用键盘按键控制键盘锁、步数、正转、反转。用80c51作为总控制芯片。ULN2003用于步进电机的驱动控制。其中在键盘控制时用键盘扫描程序。图3.1 总方案图C51单片机驱动电路三相步进电机电源及时钟电路状态显示电路正反转及指示电路键盘控制电路4.硬件方案设计系统硬件设计4.1最小单片机系统5V电源:给系统供电。复位电路:程序跑飞时复位电路可以使程序从新执行,相当于电脑的重启。晶振:给单片机运行提供时钟。EA接高电平:表示运行内部程序存储器下载的程序。P

11、0接排阻:P0口开漏结构,使用时一般接排阻拉高电平。4.2键盘设计 该电路中采用独立键盘工作方式,共设有十二个按键,分别是3,6,9,12,15,18,21,24,27布局选择功能,键盘锁功能以及步进电机转动方向选择功能。其中有程序决定起作用。4.3步进电机步进电机的驱动采用ULN2003,接到单片机的P1.0P1.3,如图步进电机驱动和单片机连线图。4.4正反转显示灯和报警灯铃45温度传感器模块5.软件设计主程序流程图所示如下:判断电机是否温度过高确定输入步数等待开键盘电机高温?报警,红灯点亮,步进电机停转开始步进电机运转是 锁键盘否是初始化程序否6. 调 试6.1 Proteus仿真软件P

12、roteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。6.2 调试步骤及方法本电路经调试符合题目要求,各项技术指标均达到设计的目的。具体操

13、作控制方法如下:1、当电机按下启动按钮时,步进电机根据制定默认状态开始转动;2、当电机按下停止按钮时,步进电机停止转动;3、当电机按下正转按钮时,步进电机正转;4、当电机按下反转按钮时,步进电机反转; 5当电机按下步数按钮时,步进电机根据步数实现转动7技术小结为期一周的单片机课程设计在忙碌中已接近尾声,经过这么多天的努力,终于完成了这次课程设计基本设计要求,在充实中也学到了很多知识,是真正将所学知识运用于实践中的一次很好的体验,使人受益匪浅。由于此次控制要求不是很高,选用51系列80C51。接下来就是硬件接口分配问题和如何去驱动电机。对于步进电机之前没有什么接触,所以我上网查了许多关于步进电机

14、的资料,知道了其基本工作原理以及怎么去实现其控制运转和驱动。接下来的主要问题就是如何编程去实现控制它了,这次程序的编写和调试对我来说是个不小的挑战,因为之前只编写过一些简短的小程序,对较大的程序总体性方面还不能很好的把握。经过反复的尝试和调试,用发现一个问题,解决一个问题的方法,还参考了一些别人的经验方法,完成了程序的编写。这对我以后编写程序是一次很好的经验积累。通过这次课程设计,我也了解到了自己的不足,以前自己学习单片机的时候,往往只去看懂别人写的程序,以为看懂了自己就知道写了,但事实并不是这样,虽然这次课程设计程序是完成了,但棘手的地方很多,编程并不像以前认为的简单。所以在以后的学习中,不

15、能手高眼低,一定要脚踏实地,一步步地走,自己动手去做,这样才能将知识真正学到手。这次课程设计能得以顺利完成,还要感谢毛老师的指导,感受很深,是一次很好的经验积累和设计经历。 8 参 考 文 献1.张毅刚编著,单片机原理及应用高等教育出版社,2010。2.楼然苗等编著,51系列单片机设计实例北京航空航天大学出版社,2006。3.汪道辉编著,单片机系统设计与实践 电子工业出版社 2005。4谭浩强编著,C程序设计(第三版)清华大学出版社 2005。5王港元编著,电工电子实践指导江西科学技术出版社 2008。6周润景编著,PROTEUS入门实用教程机械工业出版社 2011。7林立编著,单片机原理及应

16、用:基于Proteus和Keil C电子工业出版社 2011。8.阎石编著,数字电子技术基础高等教育出版社,2006。 9 附 录实验器材 名称型号数量备注单片机AT89C511单片机底座1微动开关9自锁开关3发光二级管LED3驱动芯片ULN2003A1步进电机28BYJ421电源1温度传感器18B201蜂鸣器1三极管NPN1晶振12MHZ1电容各种大小若干电阻各种大小若干排阻1仿真图程序#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define led P0/数码管段选#define h

17、aha P2sbit s1 = P01;sbit s2 = P02;/按键定义,s1正转,s2反转sbit s3 = P03;/按键定义,停止sbit speaker = P04;sbit LED1 = P05;sbit LED2 = P06;sbit LED3 = P07;sbit a = P23;sbit b = P22;sbit c = P21;sbit d = P20;/脉冲信号输入端定义sbit _key3 =P10; /3步sbit _key6 =P11; /6步sbit _key9 =P12; /9步sbit _key12 =P13; /12步sbit _key15 =P14;

18、/15步sbit _key18 =P15; /18步sbit _key21 =P16; /21步sbit _key24 =P17; /24步sbit _key27 =P00; /27步unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存

19、储显示值的全局变量/*-DS18B20 端口定义-*/sbit DQ=P27;/ds18b20 端口bit ReadTempFlag;/定义读时间标志/*- 函数声明-*/unsigned int ReadTemperature(void);bit Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void DelayUs2x(unsigned char t);void DelayMs(unsigned char t);void _18b20(void);/DS18B2

20、0定义/*-*/uchar code display11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/共阳数码管驱动信号0-9,不显示uchar code time_counter102=0xda,0x1c,0xde,0xe4,0xe1,0xec,0xe5,0xd4,0xe9,0xbc, /9.7 -1ms 0xed,0xa4,0xf1,0x8c,0xf5,0x74,0xf9,0x5c,0xfc,0x18; uchar num1 = 0;/控制取励磁信号变量 uchar num2 = 8;uchar bushu = 0;uch

21、ar k=1;/加减档位控制,1为最小档bit flag1 = 0;/初始正转,正反转标志uchar buf4=0,10,10,1;/数码管显示缓存,正转,不显示,不显示,显示1档位,高-低(不能去掉) void key(void); void keyscan(void);/=定时器0/1初始化函数=void T0_T1_init()TMOD = 0x11;/定时器0/1均工作于方式1,16位计时方式TH0 = (65536 - 4000)/256;TL0 = (65536 - 4000)%256;/定时器0,定时4ms用于数码管扫描显示 TH1 = time_counterk-10;TL1

22、= time_counterk-11;/定时器1,定时10ms用于步进电机转速控制TR0 = 1;TR1 = 1;ET0 = 1;ET1= 1;/开定时器中断EA = 1;/开总中断/=ms级延时函数=void delay1m(uint x) uint i,j; for(i=0;i<x;i+) /连数x次,约 x ms for(j=0;j<120;j+); /数120 次,约1 ms /=主函数=void main()T0_T1_init();Init_DS18B20();/buf1 = 10;/不显示LED3 = 1; speaker =1;while(1)if(s1 = 0)d

23、elay1m(3);if(s1 = 0)flag1 = 0;/正转haha = 0x00;/停止while(!s1);if(s2 = 0)delay1m(3);if(s2 = 0)flag1 = 1;/反转haha = 0x00;/停止while(!s2);if(s3 = 0) delay1m(3);if(s3 = 0) EA = 0;LED2 = 1;LED1 = 1;LED3 = 1; speaker =1;else EA = 1;key();_18b20(); /=定时器1中断函数,用于脉冲频率控制=void time1_interrupt()interrupt 3static num1

24、 = 0;static num2 = 0;uchar m = 0;TH1 = time_counterk-10;TL1 = time_counterk-11;/定时器1,定时1 用于步进电机转速控制m = bushu;for(;m > 0; m-) if(flag1 = 0)/正转LED3 = 1;speaker =1;LED1 = 0;LED2 = 1;switch(num1)case 0:a = 1;b = 0;c = 0;d = 0;break;case 1:a = 1;b = 1;c = 0;d = 0;break;case 2:a = 0;b = 1;c = 0;d = 0;b

25、reak;case 3:a = 0;b = 1;c = 1;d = 0;break;case 4:a = 0;b = 0;c = 1;d = 0;break;case 5:a = 0;b = 0;c = 1;d = 1;break;case 6:a = 0;b = 0;c = 0;d = 1;break;case 7:a = 1;b = 0;c = 0;d = 1;break;num1+;if(num1 = 8)num1 = 0; else /反转LED3 = 1;speaker =1;LED1 = 1;LED2 = 0;switch(num2)case 0:a = 1;b = 0;c = 0

26、;d = 1;break;case 1:a = 0;b = 0;c = 0;d = 1;break;case 2:a = 0;b = 0;c = 1;d = 1;break;case 3:a = 0;b = 0;c = 1;d = 0;break;case 4:a = 0;b = 1;c = 1;d = 0;break;case 5:a = 0;b = 1;c = 0;d = 0;break;case 6:a = 1;b = 1;c = 0;d = 0;break;case 7:a = 1;b = 0;c = 0;d = 0;break;num2+;if(num2 = 8)num2 = 0;

27、void key()if(s3 = 1) /这里开关闭合,表示键盘锁打开。如果开关不闭合,表示上锁,电机不转delay1m(100);if(s3 = 1) if(_key27=0) bushu=27; /步数高的优先,即多个步数开关同时打上,运行高步数 else if(_key24=0) bushu=24; else if(_key21=0) bushu=21; else if(_key18=0) bushu=18; else if(_key15=0) bushu=15; else if(_key12=0) bushu=12; else if(_key9=0) bushu=9; else if

28、(_key6=0) bushu=6; else if(_key3=0) bushu=3; /以下为18B20程序/*-18b20初始化-*/bit Init_DS18B20(void)bit dat=0;DQ = 1; /DQ复位DelayUs2x(5); /稍做延时DQ = 0; /单片机将DQ拉低DelayUs2x(200); /精确延时 大于 480us 小于960usDelayUs2x(200);DQ = 1; /拉高总线DelayUs2x(50); /1560us 后 接收60-240us的存在脉冲dat=DQ; /如果x=0则初始化成功, x=1则初始化失败DelayUs2x(25

29、); /稍作延时返回return dat;/*- 读取一个字节-*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-)DQ = 0; / 给脉冲信号dat>>=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;DelayUs2x(25);return(dat);/*- 写入一个字节-*/void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i>0; i-)DQ

30、 = 0;DQ = dat&0x01;DelayUs2x(25);DQ = 1;dat>>=1;DelayUs2x(25);/*- 读取温度-*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换DelayMs(10);Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b<<=8;t=a+b;return(t);/*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/void Delay

温馨提示

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

评论

0/150

提交评论