基于C51单片机步进电机综合控制实验_第1页
基于C51单片机步进电机综合控制实验_第2页
基于C51单片机步进电机综合控制实验_第3页
基于C51单片机步进电机综合控制实验_第4页
基于C51单片机步进电机综合控制实验_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、重庆工商大学计算机与信息工程学院学院单片机原理及应用课程实验报告实验名称:步进电机综合控制实验 实验班级:2010级 自动化专业班级:2010级自动化三班指导老师:文远熔 组员:陶园2010133330 王路2010133344 江洋2010133335 陈娅2010133326 张琴芳2010133317 张丹2010133320(组长) 一、摘要:本实验利用8051单片机达到控制步进电机的启动、停止、正转、反转、点动、转过指定角度、状态显示和数据指示的目的,使步进电机控制更加灵活。步进电机驱动芯片采用ULN2003,ULN2003具有大电流、高电压,外电路简单等优点。利用ZLG7290模块

2、驱动LED数码管显示速度设定值。通过这个单片机控制系统的设计来掌握步进电机的工作原理和驱动过程以及LED显示原理和ZLG7290模块的使用方法,用LED数码管显示实验要求的状态结果,设计电路的硬件接线图和实现上述要求的程序。关键词:51单片机 步进电机 ZLG7290 ULN2003二、设计内容与要求:1、任务介绍:实现步进电机按规定的速度正转、反转,转过指定的角度,要有点动功能。所有命令通过键盘输入,步进电机在运行过程中要有状态和数据指示。2、每套设计文档应包括: 系统原理说明、程序框图、电路原理图和程序清单。三、实验器件介绍及原理:本实验采用单片机来控制步进电机,实现了软件与硬件相结合的控

3、制方法。在单片机环境下,用ULN2003驱动芯片驱动步进电机,用ZLG7290芯片作用下的按键控制步进电机的运行,从而达到实验要求。其控制框图(图一)为:按键控制单片机80C51ZLG7290驱动芯片ULN2003A驱动芯片共阴极数码管步进电机图一:控制框图1、系统硬件介绍1.1步进电机1.1.1相关的技术指标:a、相数:指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机,本实验用的是四相步进电机。电机相数不同,其步距角也不同。b、步距角:表示控制系统每发一个步进脉冲信号,电机所转动的角度。本实验程序运行前要先测量步进电机的步距角。c、拍数:完成一个磁场周期性变化所需脉冲数或导电

4、状态,或指电机转过一个步距角所需脉冲数。本实验用四相八拍运行方式,为A-AB-B-BC-C-CD-D-DA-A1.1.2工作原理:步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的

5、存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。1.1.3步进电机的驱动:步进电机的驱动可以选用专用的电机驱动模块,比如L298、FT5754等,这类驱动模块接口简单,操作方便,它们既可以驱动步进电机,同时也可以驱动直流电机。但本实验使用ULN2003a驱动器,下面介绍该芯片。图二:步进电机及其驱动电路1.2 ULN2003A芯片ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由

6、达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。ULN2003是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.资料的最后有引用电路,9脚可以悬空。 比如1脚输入,16脚输出,负载接在VCC与16脚之间,不用9脚。图三:ULN20

7、03A原理图1.2.1 ULN2003的作用:ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。 输入5VTTL电平,输出可达500mA/50V。ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。 ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器。ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。 

8、60;    1.2.3 ULN2003A功能及引脚图:功能:ULN2003 是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片。 经常在以下电路中使用,作为显示驱动、继电器驱动、照明灯驱动、电磁阀驱动、伺服电机、步进电机驱动等电路中。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受 50V 的电压,输出还可以在高负载电流并行运行。ULN200

9、3 的封装采用DIP16 或SOP16 。ULN2003可以驱动7个继电器,具有高电压输出特性,并带有共阴极的续流二极管使器件可用于开关型感性负载。每对达林顿管的额定集电极电流是500mA,达林顿对管还可并联使用以达到更高的输出电流能力。    显示电路主要包括大型LED数码管BSI20-1(共阳极,数字净高12 cm)和高电压大电流驱动器ULN2003,大型LED数码管的每段是由多个LED发光二极管串并联而成的,因此导通电流大、导通压降高。ULN2003是高压大电流达林顿晶体管阵列电路,他具有7个独立的反相驱动器,每个驱动器的输出灌电流可达500 mA,导通时输

10、出电压约1 V,截止时输出电压可达50 V。ULN2003的17脚为信号输入脚,依次对应的输出端为1610脚,8脚为接地端。当驱动电源电压为+12 V时,若要求数码管每段导通电流为40 mA,则每段的限流电阻为50。则一块ULN2003恰好驱动一个LED数码管的7段。大数码管采用共阳极接法,低电平有效。锁存器输出的电平经NPN三极管9014反相后,再由ULN2003放大后推动大数码管显示 图四:ULN2003A引脚图1.3 ZLG7290芯片1.3.1 ZLG7290作用及其功能介绍 ZLG7290能够直接驱动8 位共阴式数码管(或64 只独立的LED),同时还可以扫描管理多达64 只按键。其

11、中有8 只按键还可以作为功能键使用,就像电脑键盘上的Ctrl、Shift、Alt 键一样。另外ZLG7290B 内部还设置有连击计数器,能够使某键按下后不松手而连续有效。采用I2C 总线方式,与微控制器的接口仅需两根信号线。可控扫描位数,可控任一数码管闪烁。 引脚说明如下图:图五:ZLG7290引脚图1.3.2 ZLG7290使用说明 ZLG7290B是基于I2C总线接口的芯片。主控单片机ADUC831作为主器件时,内部没有I2C总线功能,因此需用SPI总线的引脚来模拟I2C总线。具体连接如下: ZLG7290BADUC831 GNDDGND SDAMOSI SCLSCLOCK /INTINT

12、0 VCCDVDD 但是,这种连接不是唯一的,只是在所写的软件里需要这样连接。其实中断可以根据自己所选的中断而定。地(GND)和电源(VCC)也可以另外从电源上接过来。所用电源为5V。 编译软件使用的是WSD,这个软件主要是用于AD系列芯片的。只要下载扩展名为HEX的文件即可。1.3.3 ZLG7290工作原理 ZLG7290的核心是一块ZLG7290B芯片,它采用I2C接口,能直接驱动8位共阴式数码管,同时可扫描管理多达64只按键,实现人机对话的功能资源十分丰富。除具有自动消除抖动功能外,它还具有段闪烁、段点亮、段熄灭、功能键、连击键计数等强大功能,并可提供10种数字和21种字母的译码显示功

13、能,用户可以直接向显示缓存写入显示数据,而且无需外接元件即可直接驱动数码管,还可扩展驱动电压和电流。此外,ZLG7290B的电路简单,使用也很方便。 用户按下某个键时,ZLG7290的INT引脚会产生一个低电平的中断请求信号,读取键值后,中断信号就会自动撤销。正常情况下,微控制器只需要判断INT引脚就可以得到键盘输入的信息。微控制器可通过两种方式得到用户的键盘输入信息。其一是中断方式,该方式的优点是抗干扰能力强,缺点是要占用微控制器的一个外部中断源。其二是查询方式,即通过不断查询INT引脚来判断是否有键按下,该方式可以节省微控制器的一根IO口线,但是代价是I2C总线处于频繁的活动状态,消耗电流

14、多并且不利于抗干扰。1.3.4 ZLG7290驱动数码管及按键开关连接线路图图六:ZLG7290电源部分接线图图七:ZLG7290驱动数码管电路图图八:ZLG7290驱动按键开关电路图在本实验运用了十个按键其中:S1按键控制步进电机的运转方向,S2控制步进电机的启动,S3控制步进电机的关断,S4控制步进电机的单步运行键,S5为步数加键,S6为步数减键,S7为速度加键,S8为速度减键,S9为连续运行与指定步数运行切换键。1.4总电路图:电路图中包含最小系统、驱动电路和显示电路图九:总电路图1.4.1 最小系统:单片机最小系统或者称为最小应用系统,素质用最少的元件组成的单片机可以工作的系统,对51

15、系列单片机来说,最小系统一般应该包括:单片机、复位电路、晶振电路。a、复位电路:使用了独立式键盘,单片机的P1口键盘的接口。b、晶振电路:8051单片机的时钟信号通常用两种电路形式电路得到:内部震荡方式和外部中断方式。内部振荡方式的外部电路如下图所示。 图十:时钟振荡电路1.4.2 驱动电路:通过ULN2003构成比较多的驱动电路,电路图如图十所示。通过单片机的P1.0P1.3输出脉冲到ULN2003的1B4B口,经信号放大后从1C4C口分别输出到电机的A、B、C、D相。1.4.3 显示电路:在该步进电机的控制器中,电机可以正反转,可以连续与单步运行,可以加速、减速,其中电机转速的等级分为4级

16、,为了方便知道电机的运行状态和电机的转速的等级,设计了电机转速,运行状态,和电机的工作状态的显示电路。电机的连续运行用c表示,但步运行用d表示。转速一共4级,分别用14来表示,速度从14递增。电机的正向运行用f表示,反向运行用b表示。指定步数运行时其步数从199均可。2、系统软件设计 2.1 程序流程图主要作用是根据系统的控制要求,控制输入部分设置了启动控制,换向控制,加速控制,减速控制按钮,单步运行控制和指定步数运行控制。2.1.1 主流程图如下:N系统初始化开始循环检测按键有键按下外部中断子程序Y2.1.2 外部中断程序流程图如下:外部中断入口关外部中断ZLG7290库函数读取键值键值处理

17、程序输出结果返回开外部中断2.2程序清单2.2.1步进电机测步距角的程序 BAEQUP1.0BBEQUP1.1BCEQUP1.2BDEQUP1.3ORG0000HLJMPMAINORG0100HMAIN:MOVSP,#60HACALLDELAYMOV R2,#2SMRUN:;电机控制方式为单双八拍MOVP1,#08H;AACALLDELAYMOVP1,#0CH;ABACALLDELAYMOVP1,#04H;BACALLDELAYMOVP1,#06H;BCACALLDELAYMOVP1,#02H;CACALLDELAYMOVP1,#03H;CDACALLDELAYMOVP1,#01H;DACAL

18、LDELAYMOVP1,#09H;DAACALLDELAYDJNZR2,SMRUNSJMP $;循环转动DELAY:;单步延时程序MOVR4,#255DELAY1:MOVR5,#255DJNZR5,$DJNZR4,DELAY1RETEND2.2.2 步进电机按要求运行的程序/* 基于51单片机的异步电机控制程序*/#include<reg51.h>#include "VIIC_C51.H"#include "ZLG7290.h"sbit BA=P10;sbit BB=P11;sbit BC=P12;sbit BD=P13;sbit SDA=P

19、16; sbit SCL=P17;sbit KEY_INT=P32;#define uchar unsigned char#define uint unsigned int/*四相步进电动机单、双八拍运行状态表11111110F8HA11111100FCH AB11111101F4HB11111001F6HBC11111011F2HC11110011F3HCD11110111F1HD11110110F9HDA*/uchar code step_tab =0xf0,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9;uint code delaytime4 = 60,

20、40,20,10;/延时时间列表/变量的定义uchar direction;/状态变量0正向,1反向uchar continuous; /状态变量0指定步数运行,1连续速度运行uchar run; /状态变量0电机未运行,1电机运行中uchar speed_num; /连续速度运行标号1-4uchar cur_step; /八拍运行状态uchar step_num; /指定运行的步数,范围0-99/键值定义#define Key_dir1 /方向键#define Key_Run2 /启动键#define Key_stop 3 /停止键#define Ket_Step 4 /单步运行键#defi

21、ne Key_step_add 5/步数加键#define Key_step_sub 6/步数减键#define Key_speed_add 7/速度加键#define Key_speed_sub 8/速度减键#define Key_Con_Set9/连续运行与指定步数运行切换键。/定义键盘中断标志,FlagINT0=1 表示有键按下volatile bit FlagINT0 = 0;void KeyProsess( uchar key );/*函数:INT0_SVC()功能:ZLG7290 键盘中断服务程序说明:中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平*/void I

22、NT0_SVC() interrupt 0unsigned char KeyValue;/读取键值KeyValue=ZLG7290_GetKey();/处理键值KeyProsess(KeyValue);/*函数:Delay()功能:定时器实现延时tms*/void Delay(unsigned int t)do/TH64536TH1 = 0xFC;TL1 = 0x18;TR1 = 1; /启动定时器T1并等待中断while ( !TF1 );TF1 = 0; /中断请求标致清零TR1 = 0; /停止T1定时器 while (-t);/*函数:DispDir()功能:显示方向子程序说明:dat

23、 0 正向,1反向*/void DispDir(uchar dat)if(dat = 0)ZLG7290_SendCmd(0x60+7,0x0f); /"F" 表示正转elseZLG7290_SendCmd(0x60+7,0x0b); /"B"表示反转/*函数:DispSpeed()功能:显示速度号子程序说明:dat 14 代表四种不同的速度*/void DispSpeed(uchar dat)ZLG7290_SendCmd(0x60+5,dat);/*函数:DispStepNum()功能:显示运行步数号程序说明:间接实现转过指定角度=步距角*步数 */

24、void DispStepNum(uchar dat)unsigned char d;d = dat / 10;ZLG7290_SendCmd(0x60+1,d);d = dat - d * 10;ZLG7290_SendCmd(0x60+0,d);/*函数:DispContinuous()功能:显示运行状态,连续还是指定步数说明:0指定步数运行,1连续速度运行*/void DispContinuous(uchar dat)if(dat = 0)ZLG7290_SendCmd(0x60+3,0x0d); /'d'表示指定步数运行状态elseZLG7290_SendCmd(0x6

25、0+3,0x0c); /'C'表示连续速度运行/*函数:OnStep()功能:实现单步运行*/void OneStep()if(direction = 0)/正向if(cur_step = 8)cur_step = 1;elsecur_step +;P1 = step_tabcur_step; /输出elseif(cur_step <= 1)cur_step = 8;elsecur_step -;P1 = step_tabcur_step; /输出/*函数:OnContinue()功能:连续运行*/void OnContinue()if(continuous != 0)/

26、连续运行while(run!=0)OneStep();Delay(delaytimespeed_num-1);/延迟 目的改变转速else/指定步数运行if(step_num != 0)OneStep();Delay(50); /50ms 延迟step_num-;DispStepNum(step_num); /更新显示步数 即显示剩下没有执行的步数if(run = 0) return; /若停止键按下,则停止elserun = 0;/停止return;/*函数:KeyProsess()功能:键值处理程序*/void KeyProsess( uchar key )switch(key)case

27、Key_dir:/方向键if(run=0)if(direction = 0)direction =1;elsedirection = 0;DispDir(direction);break;case Key_Run:/启动键if(run =0)run =1;break;case Key_stop:/停止键if(run !=0)run =0;break;case Ket_Step:/单步运行键 实现点动功能if(run =0)run =1;OneStep();run =0;break;case Key_step_add:/步数加键 n=(步距角*60)/(360*t*0.001) 单位r/mini

28、f(run =0)if(step_num = 99)step_num = 0;elsestep_num +;DispStepNum(step_num);break;case Key_step_sub:/步数减键if(run =0)if(step_num = 0)step_num = 99;elsestep_num -;DispStepNum(step_num);break;case Key_speed_add:/速度加键if(run =0)if(speed_num = 4)speed_num = 1;elsespeed_num +;DispSpeed(speed_num);break;case Key_speed_sub:/速度减键if(ru

温馨提示

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

评论

0/150

提交评论