版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录摘要 11设计任务与要求 21.1设计目的 21.2设计要求和设计指标 22方案分析 33系统硬件部分 43.1主控模块 43.2键盘输入模块 73.3电机模块 83.4显示模块 114系统软件部分 134.1整体流程图及主程序 134.2按键流程图及程序 144.3显示模块程序 194.4电动机模块流程图及程序 204.5中断程序 225仿真运行 246心得体会 25参考文献 26附录一:Protues硬件仿真图 27附录二:系统程序 28摘要步进电机在控制系统中具有很广泛的应用。它可以把脉冲信号转换成角位移,并且可用作电磁制动轮、电磁差分器或角位移发生器等。步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。此次设计使用C语言作为编程语言。C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件、三维、二维图形和动画,具体应用例如单片机以及嵌入式系统开发。硬件部分使用89C51作为主控芯片,并使用ULN2003A将单片机的信号放大以控制步进电机,同时使用4位数码管显示转动角度及次数。关键词:步进电机C语言AT89C51ULN2003A转动角度1设计任务与要求1.1设计目的设计制作和调试一个由8086组成步进电机角度测控系统。通过这个过程学习熟悉键盘控制和七段数码管的使用,掌握步进电机的角度控制和角度显示方法。1.2设计要求和设计指标1.在显示器上显示任意四位十进制数2.将8个键定义键值为0~7,按任意键在显示器上显示对应键值3.实现:(1)定义键盘按键:5个为数字键1~5;3个功能键:设置SET、清零CLR、开始START;(2)显示器上第一位显示次数,后三位显示每次行走的角度;(3)通过键盘的按键,设置步进电机各次的角度值;第一位设置次数,后三位设置角度值。(4)按START键启动步进电机开始转动,按SET键停止;按CLR键清零。2方案分析课程设计要求设计一个直流电机微型计算机角度控制系统,定义8个键盘按键:5个为数字键1~5;3个功能键:设置SET、清零CLR、开始START;显示器上的四位可显示转动次数和每次转动角度;通过键盘的按键,设置步进电机转动次数和每次转动角度;按START键启动电机开始转动,按SET键停止;按CLR键清零。综合分析之后,我们应该将电路实现利用键盘按键通过89C51的P3口实现输入功能,并通过89C51的P0口和P1口实现对数码管显示的控制。同时我们可以通过P2口控制ULN2003A驱动电动机运行。我们可以将整体电路设计成几个相对独立而又有机结合的模块,来逐一进行分析。通过分析我们可以画出系统图,如图2-1所示。图2-1系统图3系统硬件部分3.1主控模块3.1.1AT89C51芯片本次设计是使用AT89C51作为主控芯片,AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51的40个引脚主要有一下几种(1)VCC:供电电压。(2)GND:接地。(3)P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。(4)P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。(5)P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。(6)P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口还有其他一些特殊功能,本事设计没有使用,故在此不做叙述。(7)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。(8)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。(9)/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。(10)/EA/VPP:当/EA保持低电平时,则在此期间为外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器读取外部ROM数据。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,单片机读取内部程序存储器。(扩展有外部ROM时读取完内部ROM后自动读取外部ROM)。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。(11)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。(12)XTAL2:来自反向振荡器的输出图3-1AT89C51芯片3.1.2时钟电路及复位电路在本次课程设计中,我们用到AT89C51单片机。而他需要一些特定的控制电路的控制才能更好地工作。具体到本次课设中,我们需要时钟电路、防抖电路、复位电路等。如图3-2所示是我们的时钟电路,由电容C1、C2以及晶振组成。图3-2时钟电路如图3-3所示是我们的复位电路。图3-3复位电路3.2键盘输入模块在微机化仪器仪表中,键盘是最常用的一种输入设备,用于输入数据和命令。键盘的每一个按键都被赋予一个代码,称为键码。键盘系统的主要工作包括及时发现有键闭合,求闭合键的键码。根据这一过程的不同,键盘可以分为两种,即全编码键盘和非编码键盘。全编码键盘多是商品化的计算机输入设备,自动提供对应于被安检的ASCII码,且能同时产生一个控制信号通知微处理器。此外,这种键盘具有处理抖动和多键串键的保护电路,具有使用方便、价格较贵、体积较大、按键较多等特点。非编码键盘恰如一组开关,一般组成行和列矩阵。其全部工作过程,如按键的识别、键的代码获取、防止串键及消抖等问题,都靠程序完成。因此,它所需要的硬件少,价格便宜,一般作为单板机、智能仪表等简单的输入设备。键盘电路常用的有两种,一种是独立式键盘电路,另一种是矩阵式键盘。独立式键盘每个按键独占一根I/O线。因此键识别软件非常简单。对于只有几个按键的系统,常采用这种电路。对于多按键系统来讲,这种电路忧郁将占用更多的I/O线而变得无法实用。矩阵式键盘电路将I/O口线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,这就构成了行列式键盘。行列式键盘中按键的数量可达行线数n乘以列线数m。由此可以看到行列式键盘在按键较多时,可以节省I/O线。按键开关的两端分别接在行线和列线上。行线通过一个电阻接到+5V电源上,在没有键按下时,行线处于高电平状态。判断是否有键按下的方法是:向所有的列线I/O口输出低电平,然后将行线的电平状态读入累加器中,若无键按下,行线仍保持高电平状态,若有键按下,行线至少应有一条为低电平。当确定有键按下后,即可进行求键码的过程。其方法是:依次从一条列线上输出低电平,然后检查各行线的状态,若全为高电平,说明闭合键不在该列;若不全为1,则说明闭合键在该列,且在变为低电平的行的交点上。在键盘处理程序中,每个键都被赋予了一个键号,由从列线I/O口输出的数据和从行线I/O口读入的数据可以求出闭合键的键号。图3-4键盘模块原理图3.3电机模块3.3.1步进电机结构及工作原理步进电机又叫脉冲电机,它是一种将电脉冲信号转换为角位移的机电式数模转换器。在开环数字程序控制系统中,输出控制部分常采用步进电机作为驱动元件。步进电机控制线路接受计算机发来的指令脉冲,控制步进电机作为驱动元件。步进电机控制线路接收计算机发来的指令脉冲,控制步进电机做相应的转动。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。步进电机的驱动电路根据控制信号工作,控制信号由8086通过8255A产生。此次设计采用四相式步进电机。图3-5步进电机励磁线圈步进电机工作原理说明步进电机由转子和定子组成。转子由一个永久磁铁构成,定子分别由四组绕组组成。步进电机组成和电气连接分别如图3-6和3-7所示。图3-6转子和定子示意图图3-7电气连接示意图当S1连通电源后,定子磁场将产生一个靠近转子为N极,远离转子为S极才磁场,这样的定子磁场和转子的固有磁场发生作用,转子就会转动,正确地S1、S4的送电次序,就能控制转子旋转的方向。例如:若送电的顺序为S1闭合断开S2闭合断开S3闭合断开S4闭合断开,周而复始的循环,在定子和转子共同作用下,电机就瞬时针旋转:若送电的顺序为S4闭合断开S3闭合断开S2闭合断开S1闭合断开,周而复始的循环,则电机就逆时针旋转,原理同理。3.3.2电机驱动ULN2003A简介ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003A管脚如图3-8所示。图3-8ULN2003A管脚图ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。ULN2003内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTLCOMS,由达林顿管组成驱动电路。ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE约1V左右,耐压BVCEO约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。由于ULN2003有这些特点,所以经常作为显示驱动、继电器驱动、照明灯驱动、电磁阀驱动、伺服电机、步进电机驱动等电路中。ULN2003A内部结构如图3-9所示。图3-9ULN2003A内部结构图图3-10电机模块原理图3.4显示模块数码管是数码显示器的俗称。常用的数码显示器有半导体数码管,荧光数码管,辉光数码管和液晶显示器等。译码和数码显示电路是将数字钟和计时状态直观清晰的反映出来,被人们的视觉器官所接受。显示器件采用七段数码管。在译码显示电路输出的驱动下,显示出直观、清晰的数字符号。本设计所采用的是半导体数码管,是用发光二极管(简称LED)组成的字形来显示数字,七个条形发光二极管排列成七段组合字形,便构成了半导体数码管。半导体数码管有共阳极和共阴极两种类型,共阳极数码管的七个发光二极管的阳极连在一起,而七个阴极则是独立的。共阴极数码管与共阳极数码管相反,七个发光二极管的阴极连在一起,而阳极是独立的。当共阳极数码管的某一阴极接低电平时,相应的二极管发光,可根据字形使某几段二极管发光,所以共阳极数码管需要输出低电平有效的译码器去驱动。共阴极数码管则需要输出高电平有效的译码器去驱动。七段显示数码管的外部引线排列如图3-11,共阳极数码管结构示意图如图3-12所示。图3-11数码管外引线排列图3-12共阳极数码管结构示意图在多位LED显示时,为了节省I/O口线,简化电路,降低成本,一般采用动态显示方式。动态显示方式是一位一位地分时轮流各位显示器,对每一位显示器来说,每隔一段时间轮流点亮一次,形成动态显示。图3.13显示模块原理图4系统软件部分4.1整体流程图及主程序系统的整体软件流程图如图4-1所示图4-1系统流程图主程序如下:voidmain() //主函数{ TMOD=0x01; //T0工作方式1 TH0=0xd8; //设初值,0.01秒触发一次 TL0=0xf0; TR0=0; //关闭T0定时器 ET0=1; //允许T0定时器中断 EA=1; //开启总中断允许 P2=0x03; while(1) { scan(); show(); if(num1==0) //若电机运行次数已达到设定值,则关时器 { //并将状态位置0 TR0=0; status=0; } }}4.2按键流程图及程序按键流程图如图4-2所示图4-2按键模块流程图按键模块程序如下:voidscan() //按键扫描{ if(START==0&&status==0) //开始键:只有当电机不运行时才有效,且将状态位置1; { //并开启定时器(电机重新开始转动)。 delay(10); if(START==0&&status==0) { status=1; TR0=1; //开定时器0 num1=num; } } if(SET==0&&status==1) //停止键:只有当电机运行是有效,将状态位置0; { //并关闭定时器(电机停止转动)。 delay(10); if(SET==0&&status==1) { status=0; TR0=0;//关定时器0 } } if(CLR==0&&status==0) //清零键:只有当电机不运行时,清零键才有效 { delay(10); if(CLR==0&&status==0) { P1=0; P0=0xff; sh=0; } } if(k1==0&&status==0) //数字键1:设置为3045。只有当电机不运行时,数字键才有效 { delay(10); if(k1==0&&status==0) { num=3; num1=3; bai=0; shi=4; ge=5; sh=1; key=1; } } if(k2==0&&status==0) //数字键2:设置为4090 { delay(10); if(k2==0&&status==0) { num=4; num1=4; bai=0; shi=9; ge=0; sh=1; key=2; } } if(k3==0&&status==0) //数字键3:设置为5090 { delay(10); if(k3==0&&status==0) { num=5; num1=5; bai=0; shi=9; ge=0; sh=1; key=2; } } if(k4==0&&status==0) //数字键4:设置为6045 { delay(10); if(k4==0&&status==0) { num=6; num1=6; bai=0; shi=4; ge=5; sh=1; key=1; } } if(k5==0&&status==0) //数字键5:设置为7090 { delay(10); if(k5==0&&status==0) { num=7; num1=7; bai=0; shi=9; ge=0; sh=1; key=2; } }}4.3显示模块程序由于使用的是4为数码管,每一位需要显示不同的数字,故让各位数码管按照一定的顺序轮流显示,只要扫描频率足够高,由于人眼的“视觉暂留”现象,就能连续稳定的显示。程序如下:voidshow() //数码管显示{ if(sh==1) { P1=0x01; //显示第一位 P0=smg[num]; P0=0xff; P1=0x02; //显示第二位 P0=smg[bai]; P0=0xff; P1=0x04; //显示第三位 P0=smg[shi]; P0=0xff; P1=0x08; //显示第四位 P0=smg[ge]; P0=0xff; }}4.4电动机模块流程图及程序要是步进电机模块按一定方向转动,需要轮流给P2.0~P2.3口脉冲,故采用移位的方法实现,流程图如图4-3所示。(X初始值为0x01,Y初始值为0x02)图4-3电机模块流程图电机模块程序如下:voidmotor() //电机运行{ if(key==1) //每次转动角度为45度时 { if(c%2==0) { x=_crol_(x,1); x=x|_crol_(x,4); } else { y=_crol_(y,1); y=y|_crol_(y,4); } c=c+1; P2=x|y; } if(key==2) //每次转动角度为90度时 { x=_crol_(x,1); x=x|_crol_(x,4); y=_crol_(y,1); y=y|_crol_(y,4); P2=x|y; }}4.5中断程序每次设计采用定时器来完成步进电机的转动速度,每次中断便是计数存储器加一,当计数存储器达到设定值时便使电机转动一次。中断程序如下:voidtime0(void)interrupt1 //中断处理程序{ TR0=0; TH0=0xd8; TL0=0xf0; clk++; if(clk==100) //每一秒电机运转一次 { clk=0; num1--; motor(); //调用电机运行程序 } TR0=1;}
5仿真运行(1)按下数字键后数码管显示数字图5-1数码管显示(2)按下开始键后,电机开始运行图5-2电机运行图(3)按下停止键后,电机停止运行(4)按下清零键后,数码管被清零。图5-3电机停止运转6心得体会在我们的大三即将结束的时候,我进行了《步进电机微型计算机角度控制系统的设计》。总体来说,本次训练主要是针对《计算机控制技术》所学理论知识的检测以及对protues软件的学习和使用。随着不断深入的学习,我感受到了这个软件的强大。以前我们学习《计算机控制技术》,需要绞尽脑汁的计算分析各电路。而使用这种方法,不但计算量大、分析不太准确、结果准确性差、费时费力,通过学习protues,并通过使用protues,非常方便准确的得到了仿真电路的正确连线方法以及最优化电路。分析起来又快又准确。大大促进了我们的学习效率。这次课程设计不仅锻炼了我们的自学能力以及我自己的耐力。而且我也深切的感受到了计算机控制技术在日常生活中的广泛应用,作为工科生我们更要加强理论联系实际,为以后成为一名技术人才奠定坚实的理论实践基础。
参考文献[1]郭天祥.新概念51单片机C语言教程.北京:电子工业出版社,2009[2]周润景.基于PROTEUS的电路及单片机系统设计与仿真.北京:北京航空航天出版社,2006[3]陈伯石.电力拖动自动控制系统.北京:机械工业出版社,2003.[4]李光飞.单片机课程设计实例指导.北京:北京航空航天出版社,2004[5]陈光东.单片微型计算机原理与接口技术(第二版).武汉:华中科技大学出版社,1999
附录一:Protues硬件仿真图附录二:系统程序#include"reg51.h"#include"intrins.h"sbitk1=P3^0;sbitk2=P3^1;sbitk3=P3^2;sbitk4=P3^3;sbitk5=P3^4;sbitSTART=P3^5;sbitSET=P3^6;sbitCLR=P3^7;intsmg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};intstatus=0,sh=0;intnum,bai,shi,ge,num1,key=0;intclk=0;intc=0,x=0x1,y=0x2;voiddelay(inta);voidscan();voidshow();voidmotor();voiddelay(inta) //延时程序{ inti,j; for(i=a;i>0;i--) for(j=1000;j>0;j--);}voidscan() //按键扫描{ if(START==0&&status==0) //开始键:只有当电机不运行时才有效,且将状态位置1; { //并开启定时器(电机重新开始转动)。 delay(10); if(START==0&&status==0) { status=1; TR0=1; //开定时器0 num1=num; } } if(SET==0&&status==1) //停止键:只有当电机运行是有效,将状态位置0; { //并关闭定时器(电机停止转动)。 delay(10); if(SET==0&&status==1) { status=0; TR0=0;//关定时器0 } } if(CLR==0&&status==0) //清零键:只有当电机不运行时,清零键才有效 { delay(10); if(CLR==0&&status==0) { P1=0; P0=0xff; sh=0; } } if(k1==0&&status==0) //数字键1:设置为3045。只有当电机不运行时,数字键才有效 { delay(10); if(k1==0&&status==0) { num=3; num1=3; bai=0; shi=4; ge=5; sh=1; key=1; } } if(k2==0&&status==0) //数字键2:设置为4090 { delay(10); if(k2==0&&status==0) { num=4; num1=4; bai=0; shi=9; ge=0; sh=1; key=2; } } if(k3==0&&status==0) //数字键3:设置为5090 { delay(10); if(k3==0&&status==0) { num=5;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 股权投资合同(模板)
- 2024劳动合同管理制度劳动合同管理制度规定
- 2024的车辆租赁合同范本模板
- 2024自费出国留学中介服务合同示范文本
- 2024年多媒体制作及外包服务合同
- 酒类专卖店加盟协议
- 2024购房合同变更委托书
- 员工短期聘用合同书2024年
- 2024标准房屋买卖协议
- 技术开发合同书-合同样本
- 【工商企业管理专业实操实训报告2600字(论文)】
- HJ 636-2012 水质 总氮的测定 碱性过硫酸钾消解紫外分光光度法
- 主播薪资核算方案
- 机电仪运维中心巡检工作提升方案
- 10以内口算题每页50道
- 大学生职业生涯规划与就业指导(高校学生学习职业生涯规划与就业指导课程)全套教学课件
- 《道德与法治》三年级学情分析
- 校园禁烟承诺书(12篇)
- 国家开放大学《计算机网络》课程实验报告实验六-计算机网络综合性实-
- 学校教育统计工作计划方案
- 售后服务方案及运维方案
评论
0/150
提交评论