基于单片机的步进电动机的控制硬软.doc
题目基于单片机的步进电动机的控制一、概述步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度及步进角。在数控机床、医疗器械、仪器仪表、机器人以及其他自动设备中得到了广泛应用,我们使用的计算机外围的一些设备,如软驱、打印机、扫描仪等其运动部件的控制都采用了步进电机。二、设计任务与要求1送电时,步进电动机停止,彩灯全部点亮;2拨动按钮开关,步进电动机正转,彩灯产生正向循环运转;3拨动按钮开关,步进电动机逆转,彩灯产生反向循环运转;4拨动按钮开关,步进电动机停止运转,彩灯全部点亮;5 拨动按钮开关,步进电动机做加速匀速及减速运动。三、设计目的步进电机若加入适当的脉冲信号时,转子则会以一定的步数转动。如果加入连续的脉冲信号,步进电机就会连续转动,转动的角度与脉冲频率成正比,正、反转可由脉冲的顺序来控制。本程序通过K1、K2、K3和K4四个按钮开关控制步进电机转动和改变转向,电动机使用1-2相激磁,编程时采用制表的方法。正转和反转的脉冲信号频率是相通的,但由于使用激磁方式不一样,反转使用了1-2相激磁法,故反转速度为正转的一半。四、 硬件电路设计及描述1. AT89C51 单片机AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且廉价的方案。图一 AT89C51单片机主要特性:·与MCS-51 兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24Hz·三级程序存储器锁定·128*8位部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片振荡器和时钟电路管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写"1"时,其管脚被部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址"1"时,它利用部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入"1"后,它们被部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流ILL这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD串行输入口P3.1 TXD串行输出口P3.2 /INT0外部中断0P3.3 /INT1外部中断1口管脚 备选功能P3.4 T0记时器0外部输入P3.5 T1记时器1外部输入P3.6 /WR外部数据存储器写选通P3.7 /RD外部数据存储器读选通P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器0000H-FFFFH,不管是否有部程序存储器。注意加密方式1时,/EA将部锁定为RESET;当/EA端保持高电平时,此间部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源VPP。 XTAL1:反向振荡放大器的输入及部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。2. ULN2003芯片单片机的输出电流太小,不能直接连接步进电机,需要加驱动电路。对于电流小于0.5A的步进电机,可以采用ULN2003类的驱动IC.如图二所示为2001/2002/2003/2004系列驱动器引脚图,图左边1-7引脚为输入端,接单片机输入端,引脚8接地;右侧10-16引脚为输入端,接步进电机,引脚9接电源+5V,该驱动器可提供最高0.5A的电流图二 ULN2003ULN是集成达林顿管IC,部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。 ULN2003是一个非门电路,包含7个单元,但独每个单元驱动电流最大可达350mA.,9脚可以悬空。 比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。 uln2003的作用: ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。 输入5VTTL电平,输出可达500mA/50V。 ULN2003是高耐压、大电流达林顿列,由七个硅NPN达林顿管组成。 该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器。 ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003 是高耐压、大电流、部由七个硅NPN 达林顿管组成的驱动芯片。 经常在以下电路中使用,作为:显示驱动;继电器驱动;照明灯驱动;电磁阀驱动;伺服电机、步进电机驱动等电路中。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。ULN2003 的封装采用DIP16 或SOP16。下表列出了该电机的一些典型参数:型号步距角相数电压电流电阻最大静转矩定位转矩转动惯量35BY48S037.54120.2647180652.5有了这些参数,不难设计出控制电路,因其工作电压为12V,最大电流为0.26A,因此用一块开路输出达林顿驱动器ULN2003来作为驱动,通过 P1.0-P1.3来控制各线圈的接通与切断,电路如图3所示。开机时,P1.0-P1.3均为高电平,依次将P1.0-P1.3切换为低电平即可驱动步进电机运行,注意在切换之前将前一个输出引脚变为高电平。如果要改变电机的转动速度只要改变两次接通之间的时间,而要改变电机的转动方向,只要改变各线圈接通的顺序。3.步进电机3.1永磁式步进电机 图三是该电机的接线图,从图中可以看出,电机共有四组线圈,四组线圈的一个端点连在一起引出,这样一共有5根引出线。要使用步进电机转动,只要轮流给各引出端通电即可。将COM端标识为C,只要AC、C、BC、C,轮流加电就能驱动步进电机运转,加电的方式可以有多种,如果将COM端接正电源,那么只要用开关元件如三极管,将AC、C、BC、C轮流接地。图三35BY48S03型步进电机的接线图3.2 步进电机原理以及原理图电路设计如图四所示。K1、K2、K3和K4按钮开关分别接在单片机的P3.0P3.3引脚上,作为控制信号的输入端,输入端直接采用ULN2003驱动电路控制步进电机的转向。图四 开关控制步进电机的电路原理图3.3 功能说明单片机的P3.0P3.3引脚分别接有按钮开关K1、K2、K3和K4,用来控制步进电机的正反转及加速。开始供电时,步进电机停止。按K1时,电动机正转;按K2时,电动机反转。按K3时,电动机停止转动;按K4时,电动机做加速匀速及减速运动。五、程序设计1.编程编程采用制表的方法,步进电机正转采用二相激磁方式,时序如表所示二相激磁方式正转时序步进P1.3P1.2P1.1P1.00F8110000FC211000F4300100F6401100F2500100F3600110F1700010F981001步进电机反转同样采用二相激磁方式,时序如表所示。二相激磁方式反转时序步进P1.3P1.2P1.1P1.00F9110010F1200010F3300110F2400100F6501100F4600100FC711000F8810002程序框图程序设计流程如图五所示。开始按下K1正转按下K2反转按下K4固定模式运行按下K3停止读取表格输出结束图五 程序框图3.程序清单#include <reg51.h> #define uchar unsigned char#define uint unsigned intsbit K1=P30;/正转sbit K2=P31;/反转sbit K3=P32;/停止sbit K4=P33;/一键加速匀速减速bit up_flag=0;bit down_flag=0;bit stop_flag=0;bit yijian_flag=0;uchar code up_data8= 0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9 ;/1-2相励磁正转表uchar code down_data8= 0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8 ;/1-2相励磁反转表 uchar rate; /速率/*以下是延时函数,延时时间为speed×4ms*/void Delay<uint speed>uint i,j;for<i=speed;i>0;i-> for<j=440;j>0;j->/*以下是延时函数*/void Delay_ms<uint xms>uint i,j;for<i=xms;i>0;i-> /i=xms即延时约xms毫秒for<j=110;j>0;j->/*以下是步进电机正转函数*/void motor_zheng<> uchar i; for <i=0; i<8; i+> /8次共转3.75°×8=30度 P1 = up_datai; /取正转数据 Delay_ms<5> /转一个角度停留的时间,可调节转速 /*步进电机反转函数*/void motor_down<>uchar i; for <i=0; i<8; i+> /8次共转3.75°×8=30度 P1 = down_datai; /取反转数据 Delay_ms<5> /转一个角度停留的时间,可调节转速 /*以下是步进电机1-2相励磁转函数*/void motor_up<> uchar i; for <i=0; i<8; i+> /8次共转3.75°×8=30°,即1一个周期转30度 P1 = up_datai; /取正转数据 Delay<rate> /调节转速 /*以下是步进电机加速、匀速、减速运行函数*/void motor_turn<> uint count;/转动次数计数器 rate=16;/速度分16档 count=600;/转600次,由于每次转30度,因此,共转50圈 do motor_up<> /加速 rate-; while<rate!=0x01>do motor_up<> /匀速 count-; while<count!=0x01>do motor_up<> /减速 rate+; while<rate!=0x0a> /*以下是主函数*/main<> while<1> if<K1=0>Delay_ms<10>if<K1=0>up_flag=1;down_flag=0;stop_flag=0;yijian_flag=0;if<K2=0>Delay_ms<10>if<K2=0>down_flag=1;up_flag=0;stop_flag=0; yijian_flag=0;if<K3=0>Delay_ms<10>if<K3=0>stop_flag=1;up_flag=0;down_flag=0; yijian_flag=0;if<K4=0>Delay_ms<10>if<K4=0> yijian_flag=1;stop_flag=0;up_flag=0;down_flag=0; if<up_flag=1>motor_up<> /电机正转if<down_flag=1>motor_down<> /电机反转if<stop_flag=1>P1=0x00; /电机停止 if<yijian_flag=1&&stop_flag=0>motor_turn<> / Delay<200>六、总原理图总原理图七、总结与心得通过这次微机原理课程设计的学习,让我了解了设计的一般步骤,也让我感受到了理论学习的实际操作之间的区别,在刚拿到实验题目时的满脑子的茫然,到后来查阅相关的书籍与网络知识有一点点思路再到后来的设计完成,感觉自己真的从这个实验学到了很多。平时只注重了课本上的知识的系统学习和所谓的考试的要点而忽略了实际动手能力的训练。在为期一周的课程设计中我深深的感觉到自己专业知识的匮乏,对一些工作感到无从下手,茫然不知所措,这时才真正领悟到认真的重要性。这次学习,让我对各种芯片都有了大概的了解。这次课程设计终于顺利完成了,虽然在设计中遇到了很多问题,但是都被我们一一克服。八、参考文献1 胡汉才.单片机原理及其接口技术M.第三版.:清华大学,2010.2 继灿.新编16/32位微型计算机原理及应用M.第4版.:清华大学,2008.3 建清.轻松玩转51单片机M.:航空航天大学,2010.4 康华光.电子技术基础模拟部分M.第5版.:高等教育,2006.5 康华光.电子技术基础数字部分M.第5版.:高等教育,2006.