您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基于89C51的步进电机设计
基于89C51的步进电机设计一、设计背景步进电机又称为脉冲电动机或阶跃电动机,它是基于最基本的电磁感应作用,将电脉冲信号转变为角位移或线位移的开环控制元件。单片机广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备、照相机,大型望远镜、卫星天线定位系统等等。随着经济的发展,技术的进步和电子技术的发展,步进电机的应用领域更加广阔,同时也对步进电机的运行性能提出了更高的要求。步进电机的原始模型起源于1830年至1860年,1870年前后开始以控制为目的的尝试,应用于氩弧灯的电极输送机构中,这被认为最早的步进电机。1950年后期晶体管的发明也逐渐应用在步进电机上,对于数字化的控制变得更为容易。到20世纪60年代后期,在步进电机本体方面随着永磁材料的发展,各种实用性步进电机应运而生。步进电机往后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解能、高响应性、信赖性等灵活控制性高的机械系统中。在生产过程中要求自动化、省人力、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。二、设计方案设计一个51单片机四相步进电机控制系统要求系统具有如下功能:(1)由I/O口产生的时序方波作为电机控制信号;(2)信号经过驱动芯片驱动电机的运转;(3)电机的状态通过键盘控制,包括正转,反转,加速,减速,停止和单步运行。三、设计原理步进电机实际上是一个数字\角度转换器,也是一个串行的数\模转换器。步进电机的基本控制包括启停控制、转向控制、速度控制、换向控制4个方面。从结构上看,步进电机分为双相、三相、四相、五相等类型,本次设计的是四相电机。四相步进电机的工作方式有单四拍、双四拍和单双八拍三种。在本次设计中,我们使用的是双相四拍的工作方式。通过P1口给A,B,C,D四相依次输出高电平即可实现步进电机的旋转,通过控制两次输出的间隔,即可实现对步进电机的速度控制。四、硬件设计根据设计要求和设计原理,我们可以绘制出基本的功能方框图,以便之后我们连接实际电路时的方便和可靠。用键盘控制具体的功能模块,这样更能直观方便的控制整体的系统,使其达到我们预期的操作效果。图3.1中简单描述了整个单片机系统的控制模式和控制流程,包括通过时钟电路和键盘电路,来控制UNL2803驱动电机动作。80C51单片机UNL2803步进电机时钟电路键盘电路控制端口驱动电机图3.1硬件电路功能方框图五、软件设计软件设计中,我们查询键盘按钮控制方式来选择步进电机运行的工作状态。在程序里面对按钮分配的I/O地址分别为正转启动位是P3.0,反转启动为是P3.1,停止位是P3.4,加速位是P3.2,减速位是P3.3,单步执行位是P3.5。通过外部中断INT0和INT1来实现加速减速的外部输入。开始延时准备下一拍脉冲延时值减少是否提速是否达到最高速结束是否设置初始延迟值输出一拍脉冲是是图4.1主程序流程图程序里面加上了防止正常运行过程中电机的突然转向的阻断。防止电机的意外损坏。在转向之前,必须按下停止按钮,然后再发出电机的下一条控制命令。当然,我们的加速减速通过外中断可以在电机正常运行过程中进行操作。增加了我们系统的可操作性和高可控性。总结在本次课程设计中,首次接触到单片机的应用,接到题目时,对步进电机一无所知,并对如何使用单片机也不甚了解,仅仅知道一些生硬的指令和符号,并不知道它们到底如何使用以及其意义,通过老师指导,然后自己在课后翻阅书籍和上网,搜集到了不少有关步进电动机的知识。通过钻研这些知识,总算对步进电机有了认识,但是这离课程设计需要掌握的知识相差甚远,为了缩短这种差距,只能不断地查阅资料,仔细揣摩。在这次课程设计中,通过用单片机控制步进电机的起动、停止,正、反转,加、减速,也对单片机的知识也进行了复习和巩固。设计仿真电路的过程中,必须要有耐心,在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,仔细比较分析其原理以及可行的原因。这就要求对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。同时在本次设计过程中,还学会了高效率的查阅资料、运用工具书、利用网络查找资料。发现,在所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整,这就要求应更加注重实践环节。那时候觉得学习单片机是那么的枯燥乏味,整天只是学习这个指令做什么,那个指令做什么,觉得学了一点用都没有。现在知道,原来一些生硬的指令组合起来竟然可以实现如此多的实用功能。俗话说的好,实践是检验真理的唯一标准,学习再多的理论也只能纸上谈兵,只有把理论应用到实践中,才能检验出理论的真伪。所以,虽然一周的时间不长,时间过得也很快,但是在这一周过去后,明白了学习与实践相结合的重要性,指引我在以后的学习中应该把理论和实践联系起来。附录一:步进电机程序仿真图附录二:步进电机程序#includereg51.hunsignedcharcodeZZ[4]={0xFC,0xF6,0xF3,0xF9};//正转unsignedcharcodeFZ[4]={0xFC,0xF9,0xF3,0xF6};//反转sbitK1=P3^0;//电机正转设置键sbitK2=P3^1;//电机反转设置键sbitK3=P3^2;//电机减速设置键sbitK4=P3^3;//电机加速设置键sbitK5=P3^4;//电机停止设置键sbitK6=P3^5;//正向单步运转设置键charg,c;intnum=400;voiddelay(intt)//定义延时函数{unsignedintk=0;for(;t0;t--)for(k=0;k25;k++);}voidmotor_zz()//定义电机正转函数{unsignedchari;g=0x10;for(i=0;i4;i++){P1=g|ZZ[i];if(K5==0){break;}delay(num);}}voidmotor_fz()//定义电机反转函数{unsignedchari;g=0x10;//设置指示灯端口电平for(i=0;i4;i++){P1=g|FZ[i];if(K5==0){break;}delay(num);}}voidmotor_single()//定义单步运转函数{unsignedchari;g=0x10;//设置指示灯端口电平for(i=0;i4;i++){P1=g|ZZ[i];//电机运转,指示灯亮delay(num);}}voidmain(void)//主函数{EA=1;EX0=1;IT0=1;EX1=1;IT1=1;while(1){if(K1==0)//正转键按下{P2=0xfe;motor_zz();//电机正转if(K5==0||K2==0||K6==0)//停止正转{num=400;//速度复位break;}P2=0xff;}elseif(K2==0)//反转键按下{P2=0xfd;motor_fz();//电机反转if(K5==0||K1==0||K6==0){num=400;//速度复位break;}P2=0xff;}elseif(K6==0)//单步键按下{{P2=0xfb;motor_single();//单步运转}P2=0xff;}else{c=0x40;P1=c|0x00;}}P2=0xff;}voidint0()interrupt0//减速中断函数{if(K3==0){num=num+200;}}voidint1()interrupt2//加速中断函数{if(K4==0){num=num-200;}}//加速设置
本文标题:基于89C51的步进电机设计
链接地址:https://www.777doc.com/doc-2567982 .html