搜索
您的当前位置:首页正文

基于单片机的步进电机控制系统资料

来源:意榕旅游网
基于单片机的步进电机控制系统的设计

摘 要

随着电气技术的迅猛发展,步进电动机凭借其易于实现开环控制,无需反馈信号、无误差积累等优点,逐渐受到人们青睐,被广泛应用到生产生活的各个领域。步进电机作为一款有着独特优点的电机,通过对其输入脉冲信号频率与个数的控制能够实现对其运行状态的精确控制。以前对步进电机的控制主要通过硬件电路来实现,但硬件电路复杂、成本高、利用率低等缺点阻碍了对步进电机的发展。二十世纪中后期,随着微电子和计算机技术的发展,基于单片机的控制系统逐渐取代以前的硬件控制方式,成为控制步进电机的主要控制系统。基于单片机的控制系统对系统的硬件要求没有以前那么高,这种系统的控制方式是通过软件来控制步进电机。这样的控制方法更好地发挥步进电机的潜力,同时也提高了系统的操作性,极大改善了原有控制方式人机交互性不足的弊端,这样的控制系统的发展推动了步进电机的发展。在现有的以单片机为核心控制器件的控制系统中,很多都是按单一的运行方式控制步进电机运行,无法实现对步进电动机的实时操作,这样的控制系统有一定的拘束性,理想的控制系统应该既能使步进电动机按照设定好的方式运行,也能实现人为的对步进电机的实时控制。所以本次设计要尽可能的使步进电机控制系统实现硬件结构简单,功能齐全,操作方便简单、对各种环境的适应性强、人机交互性高等特点。本文介绍了基于单片机的步进电机控制系统的软硬件设计。本文主题内容首先介绍了步进电机的概念、特点、原理;其次说明了以单片机为核心控制器件的控制系统的各模块硬件电路设计及整体硬件电路设计;然后介绍了系统的软件设计过程,包括控制系统程序的设计思路、系统工作流程图及实现系统控制功能的主要子程序设计;最后介绍了对本系统所设计内容进行仿真验证可行性的过程。

关键字:步进电动机 单片机 控制系统 软硬件设计 功能齐全

第一章 绪论

1.1 概述

1

在现代工业生产中,电动机是主要的执行设备,随着社会生产水平的不断提高,人们对电机的性能的要求也越来越高,普通电机逐渐无法满足实际生产的需求,这种情况一定程度上推动了步进电机的发展。步进电机是一款通过改变输入的控制信号脉冲的频率实现步进电机的速度调节、能够实现开环控制,无需反馈信号的电动机,这样的电机可以替代普通电机被广泛应用到对精确度要求较高的社会生产中,基于这样的原因步进电机受到人们青睐,逐渐被应用到生产生活各个领域。随着步进电机的广泛应用,对步进电机控制器的研究也逐渐深入。最初的步进电机控制器的设计是根据控制要求将所需器件以单独分布的方式构成一个整体控制回路,这种设计方式不仅消耗了大量元器件,而且电路设计一旦完成后,想要改变控制方案就必须重新设计电路,这样的设计既浪费了大量器件也不利于控制系统的改进升级。20世纪70年代开始,计算机技术得到了的飞跃式的发展,这样的发展趋势推动了步进电机及其相应的驱动和控制系统的发展,使步进电机控制系统逐渐向着集成化和程序化方向发展。基于步进电机可以通过输入信号的频率与数量控制电机的转速和转动距离的特点,通过单片机对其进行控制可以将其“数字性”的特点作为优势,应用到对精确度要求较高的生产实践中,所以以单片机为核心控制器件的控制系统逐渐成为步进电机的主要控制系统。近些年来人们对以单片机为核心控制器件的步进电动机控制系统进行了深入的研究,不断改进其控制性能,这样的控制系统在单片机的强大功能作用下,加上特定设计的大量外围电路,实现对步进电机的最佳控制。通过外围的按钮输入电路,实现外界按钮对步进电机的运行状态的调整,然后通过显示电路及时显示步进电动机的正转、反转和速度等状态。也符合数字化的时代发展要求。本文介绍了一种基于单片机的步进电机控制系统的软硬件设计,本设计能实现对步进电动机的转向、转速等运行状态的基本控制,同时能够实时显示电机运行状态。

1.2 国内外发展状况

从1820年一直到19世纪末,电磁现象以及相关的各种法则的发现,确立了交流电动机的模型,并确立了电动机的工业运用。[1]经过长达八十年多年的研究,各国科学家陆续发明了各种电机,包括直流发动机、交流发动机等,人类对电动机的认识越来越深入。从20世纪开始人类对电动机的研究逐渐深入,到20世纪70年代,经过70年左右的发展,各种各样的电动机被广泛应用到社会生产中,人类对电机的研究也达到了一个新的高度,正是在20世纪70年代,步进电动机作为一款可以实现精确控制转速与转动距离的电机应用而生。步进电机的结构与运行原理决定了它需要与驱动\\控制环节组成伺服单元,以应用于相应的场合。[2]步进电动机的最早应用是开环系统,现代工业大量使用的也是开环系统。组成一个简单的步进电动机开环系统并不难,只需要环形分配器加上功率模块就可以了。[3] 环形分配器其实就是由多个标准数字集成电路按照逻辑真值表组合而成,不同类型的电机、不同的工作方式就需要有不同的环形分配器。随着应用的不断深入,步进电动机驱动控制电路也逐步集成化,出

2

现了许多专用于步进电动机开环驱动的芯片,这些设计简单、运行可靠的开环驱动芯片促进了步进电动机的广泛应用。开环控制系统虽然得到广泛应用,但其自身也存在许多不足,其中振荡一直是电动机开环系统的主要问题,振荡严重影响了步进电机的稳定性,使其难以实现精度要求较高的控制,降低了电机的性能指标。20世纪80年代以后,现代电力电子器件的广泛应用和微处理器水平的提高使人们逐渐意识到使用闭环控制系统来控制步进电动机可能会使电机得到更好的性能指标,这样的发展背景为步进电动机闭环控制系统的发展提供了物质基础。现代智能控制理论日新月异的变化大大地推动了步进电动机闭环控制理论的研究。

[4]

随着以MCS-51系列为代表的单片机的迅速普及,以软件为核心的通用环形分配器获得了

广泛的应用。[5]此类环形分配器不再需要根据控制方式的改变变更硬件设计电路,只需要根据不同的控制要求更换不同的软件,实现了对电机的灵活控制。

目前,实际生产中对步进电机的控制系统的设计大多的是根据汇编语言或C语言进行软件开发,通过软件编程在一定范围内按照人为需求灵活地设定电机的转向、转速等状态,然后通过通信串口将步进电机控制器与微型计算机进行数据通信,最终实现通过微型计算机直接控制步进电机。这种以单片机为核心控制器件的控制方法既简化了电路也降低了成本,还可以提高对电机的控制精度。这也是这种控制方式逐渐成为主流控制方式的原因。

我国普通机床的微机改造中大多采用开环系统控制步进电动机,改革开放初期,为了适应某些领域对机床高精度定位及稳定运行的要求,我国加大了对步进电动机细分驱动技术的研究力度。细分步进驱动是将全步进驱动时的步距角各相的电流以阶梯状n步逐渐增加,使吸引转子的力量慢慢改变,每次转子在该力的平衡点静止,全步距角作n个细分,可使转子运行效果光滑。[6]目前国内主要采用的驱动方式有基于单片机斩波恒流驱动、基于单片机的直流电压驱动和根据汇编语言或C语言进行软件开发,通过串行或并行通信的方式实现PC机与步进电动机控制器的数据通信,最终实现由微型计算机直接控制步进电动机的方法。国外对步进电动机的控制系统的研究相对国内起步更早,研究也更深入,大多数步进电机控制系统都是采用专用的控制芯片,通过将一些有固定功能的芯片集成在一起,实现对步进电动机的控制,这样的设计思路大大缩小驱动器的体积,提高了控制系统的性价比。

随着工业生产对控制精确度要求的不断提高,步进电机将会在更加广泛的领域中得以应用;随着自动控制技术、数字化、智能化技术的日益发展,步进电机控制系统也将朝着更加智能的趋势发展。

1.3 课题目标设计

本次设计是研究基于单片机的步进电机控制系统,则单片机必然是本控制系统的核心器件,利用单片机的逻辑分析及存储等能力与外围按钮调节电路实现对步进电机的正、反转,加、减速、停机等基本控制同时通过显示屏对其运行参数进行实时显示。本次设计的主要任务包括:1、外接按键电路、液晶显示屏电路的设计。通过外接按键电路实现对电机运行状态

3

的调整,同时通过液晶显示屏显示电机运行的状态,便于监视电机运行状况。2、驱动电路的设计:通过驱动电路,实现将单片机输出的脉冲转换、放大成能够驱动步进电机的控制信号,使步进电机在不同脉冲信号下做出相应的动作。综上可以看出本设计的主要任务就是以AT89C51单片机为核心,通过相应的硬件设计,设计出能够实现以上功能的硬件电路原理图,然后编写源程序,在硬件电路原理图验证无误的前提下,通过Proteus与Keil进行调试、仿真,验证设计的可行性,直到得到完备的能实现预期功能的系统软硬件设计方案。整个系统采用模块化设计,通过结构简单的控制系统实现对步进电机的可靠控制,本设计对于进行产品革新、提高电机精确定位技术,改良步进电机控制系统有着重要的现实意义。对于扩大步进电机在社会生产中的使用有重要意义。

第二章 步进电动机概述

2.1 步进电动机概念

与普通电动机的连续旋转不同,步进电动机运行时是一步一步精确进行的,驱动电路每对其输入一个控制信号步进电机就会转动一步,且每步转动的角度(步距角)都可以由电机型号确定。步进电动机是将外界数字脉冲信号转变为角位移的一种感应电机,被广泛应用于精度较高的过程控制中。步进电动机实现旋转的最根本原因是转子与定子间的错齿。

2.2 步进电动机的主要特点

1、步进电动机不能直接由单片机驱动,中间必须加相应的驱动电路进行信号转换后才能使电机运转。

2、步进电动机的控制精度较高,一般为其步距角的3-5%,且无误差累积。 3、步进电机的力矩会随转速升高而下降。

4、步进电动机在低速时可以正常运转,但速度高于一定速度后就无法启动了。 5、步进电动机工作时产生热量多导致其温度较高,外表温度一般在摄氏80-90度,甚至可能更高。

2.3 步进电动机的优缺点

2.3.1 步进电动机的主要优点

步进电动机之所以能够得到广泛应用与其自身的优点是分不开的,其主要优点总结如下:

4

1、步进电机具有明显的数字特征,可以实现用数字信号进行开环控制。 2、步进电动机可以直接接收数字信号,无需进行数模转换,简化了使用流程。 3、步进电动机内部没有电刷,所以电机寿命仅取决于其轴承的寿命,一般步进电动机轴承寿命较长,可以保证电机长时间可靠运行。

4、步进电动机停转时具有自锁功能,不会继续转动。该功能主要为了抵御负载的波动,保持位置不变。

5、步进电动机具有优秀的启停和正反转响应,改变运行状态时反应迅速且对电机的损害较小。

2.3.2 步进电动机的主要缺点

凡事都具有双面性,既然有很多优点,必然也会有一些缺点,在实际应用中步进电动机会有以下缺点:

1、步进电动机在大负载和高转速情况下,会产生失步,同时输出的功率也不够大,无法满足负载的需要。所以步进电动机很难运转到较高的转速。

2、步进电机对其控制过程要求较高,输入控制脉冲的频率等于步进电机的固有频率时,容易产生共振,引起电机失步。

2.4 步进电动机原理

步进电机的种类很多,所有步进电动机中,反应式步进电动机凭借其结构简单、成本低等优点被广泛应用到精确度较高的控制系统中。步进电动机的结构与普通电机基本相似,不同的是步进电动机的定子绕组被划分为若干相,并且每相的磁极上均匀分布着若干个极齿,转子上没有线圈,同样,转子外围也均匀分布着若干个小齿,步进电机能够运转的最根本原因就是定子与转子上小齿之间的错齿。如图2.1是反应式步进电动机的结构图(三相)。

图2.1 三相反应式步进电动机结构图 Fig. 2.1 Three-phase stepping motor reaction chart

5

目前,反应式步进电动机有如下三种常用的通电方式: 1、单三拍通电方式 2、双三拍通电方式 3、单、双六拍通电方式

反应式步进电机转动时遵循磁通总是沿磁阻最小的路径闭合原理,当转子与磁通方向有偏差时,对应的磁拉力形成转矩,根据定子磁极的极齿与转子上小齿的错齿的大小,带动转子转动固定角度。下面将介绍其中的一种,也是最为简单的通电方式—单三拍通电方式。

这种通电方式的电机运行过程为:首先给A相通电(其他两相不通电),通电后形成A-A'轴线方向的磁通,此时在磁场作用下转子试图转到磁阻最小的位置,即转到转子外围的齿与此时的磁极A-A'对齐的位置,这时候转子在磁场力作用下根据磁极上极齿与转子上小齿之间错齿的大小转动一定角度;A相通电结束后然后给B相通电(A、C两相不通电),同理在磁力拉动下,转子会继续转到磁阻最小的位置,就这样以一定的频率给电机脉冲信号就实现了转子的连续转动。不难理解,当脉冲以一定频率不断按A→B→C→A顺序通电,则电机转子会以固定角速度逆时针转动。反之,若脉冲以固定频率按A→C→B→A顺序通电,则电机转子又会以固定角速度顺时针转动。这种通电方式就是单三拍方式。如图2.2是步进电机单三拍通电时的过程图。

图2.2 单三拍通电方式时转子的位置 Fig. 2.1 Three-phase stepping motor reaction chart

除了反应式步进电动机,目前常用的还有四相步进电动机,四相步进电动机与普通步进电机在结构上也基本相似 ,四相步进电动机结构示意图如图2.3。

6

图2.3 四相步进电动机结构示意图

Fig. 2.3 Schematic diagram of four-phase stepper motor

四相步进电机采用单极性直流电源供电,如果按A→B→C→D→A顺序供电,电机就会正向转动,反之若以D→C→B→A→D…的顺序供电则电机反转,由此可知想要改变四相步进电机的转向只需改变系统对电机各相绕组通电顺序的先后即可。根据通电顺序不同可以将四相步进电机的工作方式分为如下三种,其具体通电顺序与转动方向如下:

1、单四拍。正转通电顺序:A→B→C→D→A…;反转通电顺序:D→C→B→A→D…;

2、 双四拍。正转通电顺序:AB→BC→CD→DA→AB…;反转通电顺序:AD→ DC→ CB→ BA →AD…;

3、单双混拍(八拍)。正转通电顺序:A→AB→B→BC→C→CD→D→DA→A…;反转通电顺序:D→DC→C→CB→B→BA→A→AD→D…;

如图2.4为四相八拍步进电动机。本控制系统软件部分的设计就是以四相八拍步进电动机为控制对象设计的。

第三章 硬件设计

3.1 总体硬件设计框图

本次设计的控制系统是以单片机为核心控制器件,所以其硬件设计时需要确定单片机的选型并确定其简单的外围电路;同时该控制系统具有按钮控制和电机运行状态显示功能,所以需要设计按键操作电路即电机状态显示电路,一般的按钮控制电路与显示电路都可以直接由单片机驱动。由于步进电机不能通过直接驱动,单片机输出的控制信号只有经过放大电路即步进电机驱动电路实现信号放大后才能输出到步进电机的各相绕组驱动步进电机运转,所以该控制系统的硬件设计部分还需要有电机驱动电路,如今大多数驱动电路已经集成为专用芯片,所以这里的驱动电路设计即为设计驱动芯片与电机和单片机之间的连接电路。除了上

7

面几个部分之外,该控制系统还需要一个电源输出电路为各个部分电路供电,通过以上分析可以得到本系统的硬件结构组成如图3.1所示。

图3.1 系统设计框图 Fig. 3.1 System design diagram

该系统的主要模块包括AT89C51单片机、液晶屏显示模块、按钮输入模块、步进电机驱动模块。该系统以AT89C51为核心控制器件,将输出的控制信号输出到步进电机驱动模块,步进电机驱动模块采用专用芯片控制,信号通过芯片处理后实现对步进电机的控制。同时单片机将步进电机的状态信号输出到液晶屏显示模块,该模块主要显示步进电机的运行状态,包括转速、转向等,操作人员通过观察这些数据可以通过按钮输入模块,实现对步进电机状态的调整。这里的液晶屏显示模块和按钮输入模块组成了交互式人机交流界面。而以上所有模块都需要电源模块为其供电,电源模块通过对应的整流电路和降压电路将220V交流电变成各模块所需的电压,保证该控制系统的正常运行。

3.2 主要器件选型

本次设计选用的单片机为ATMEL公司生产的能与MCS-51系列单片机兼容的高性能CMOS 8位单片机—AT89C51,该单片机带有4K字节Flash闪速存储器、128字节内部RAM,32个并行I/O端口,其制造技术高端,能够兼容符合工业控制标准的MCS-51指令集和输出管脚,硬件设计方便,I/O口操作简单,适用性较强,操作性高。同时这款单片机的性价比较

8

高,学习资料也很充足,这也是该款单片机被广泛应用于一般设计的原因。

本次设计选用的显示屏类型为LCD1602液晶屏。该显示屏是一种专门用来显示字母、数字、符号等的点阵型液晶模块,该液晶屏可以显示两行内容,每行最多可以显示16个字符。工作电压为4.5—5.5V,工作电流约2mA,可由单片机直接驱动。它共有16只引脚:其中D0-D7是八个数据端口引脚 ,控制引脚3个(分别是RS :数据/ 命令选择端,RW为读写选择端,E为使能信号);GND(第1脚)为电源地,VCC(第2脚)接+5V电源正极;V0(第3脚)用于液晶显示亮度调节。该液晶屏具有显示数字、字母比较方便、显示字迹清楚,价格便宜、功耗低、显示内容丰富、超薄轻巧等诸多优点,同时其控制程序也相对简单。对比数码管显示器,LCD1602液晶屏能够实现自动刷新显示的功能,节约了工作时间。因此本设计的输出显示模块采用LCD1602液晶屏。

本次设计选用的驱动器为ULN2803芯片,ULN2803是一款高耐压,大电流达林顿管驱动器,本身有18个引脚:1-8引脚为输入端;11-18引脚为输出端;9引脚为接地端;10引脚为COM端,接+12V电源。ULN2803的内部电路是一个八重达林顿阵列,输出时集电极开路形式,当输入端为低电平时输出端为截至状态,当输入端为高电平时,输出端电压被拉低。该驱动芯片可以直接驱动灯或感性负载继电器,在使用时需要注意其输入与输出的关系。

3.3 各模块硬件设计

3.3.1单片机最小应用系统

单片机最小应用系统是单片机必备的外围电路,该系统是单片机正常运行必须具备的硬件条件。该系统主要包括:电源电路、时钟电路、复位电路。

电源电路:单片机运行必须由外部电源供电,对于MCS-51单片机来说其工作电压是+5V, 40脚 (VCC)接+5V电源,20脚(GND)接地线,对应电路原理图中将40脚(VCC)与20脚(GND)隐藏了。

时钟电路:AT89C51单片机和其他微机一样,从程序存储器中取出指令,在控制器中分析指令、执行指令,完成规定的操作。所有这些操作都在CPU的时序电路控制下,按着节拍有条不紊,按部就班地进行。时序电路的基础就是以一个时钟信号作为基准,所以时钟电路是单片机正常工作必不可少的组成部分。本设计采用内部时钟信号产生电路产生时钟信号,具体电路如图3.2所示,在晶振引脚XTAL1((19脚)和XTAL2(18 脚)引脚之间接入一个晶振,89C51单片机的晶振的频率范围为:0-24MHz,为了方便计算机器周期,本系统选用的晶振为12MHz,晶振的两个引脚对地分别再接入一个电容,这样就构成了内部方式时钟电路。这两个电容对频率有微调的作用,本系统选用的电容为30pF。在实际时钟电路分布设计时应尽可能将晶振与电容安装在靠近单片机芯片的位置,这样可以减少寄生电容,更好地保证振荡器稳定、可靠地工作。

9

复位电路:AT89C51单片机的RST(9脚)是复位信号的输入端,复位信号高电平有效进行复位操作时,外部电路需在RST引脚产生两个机器周期(即24个振荡周期)以上的高电平。

[7]

复位分为上电自动复位与手动复位。

本设计中复位电路的设计与常规设计相似,在电源与地线间串联一个电容C5和一个电

阻R4,复位引脚直接引出接到电容与电阻中间构成上电自动复位电路。在通电瞬间,电容C通过电阻R充电,RST端出现高电平而实现复位。[8]对于一般的控制系统来说,只有自动复位是不完整的,因为系统运行时经常会出现程序运行出错或操作失误使系统处于死锁状态等突发情况,这时候上电自动复位就无法正常进行了,基于此本次设计时复位电路中又加入了按键手动复位电路,利用手动方式进行复位操作,使单片机重新启动。按键手动复位电路只需在上电自动复位电路基础上加入一个按钮与电阻,具体电路如图3.2所示。当按下复位按钮时,复位端RST通过电阻R3接通电源,使引脚RST接高电平,实现复位操作。该复位电路R4选8.2kΩ,R3选470Ω,C5选22μF。

除了以上三个主要电路外,还需要确定控制引脚EA/VPP(31脚)的接法。当EA为低电平(“0”)时,如直接接地,此时单片机使用的是片外程序存储器,执行外部程序存储器中的指令;当EA接高电平时,单片机使用的是内部存储器,执行其中的指令。因为AT89C51单片机内部有4KB可反复擦写1000次以上的程序存储器,足够本系统使用,所以本设计直接将EA接到+5V高电平,相当于使引脚EA接高电平,使单片机运行内部的程序。其电路如图3.2所示。

10

图3.2 单片机最小应用系统电路图

Fig. 3.2 Smallest single-chip application system schematic

3.3.2 电源模块

电源模块是控制系统最基本的部分,本模块需要为单片机、按钮输入模块、液晶屏显示模块和驱动电路模块提供电压供应。由于驱动电路模块的接入电压为+5V时可能出现步进电动机的输出力矩不够大的情况,所以将驱动电路模块的电压加大为直流+12V;单片机及其他两个模块所需的电压为直流+5V,所以电源模块必须能够输出两路分别为直流12V和5V的电压。

电源模块电路如图3.3,主要包括降压、整流、滤波、稳压各环节。第一部分就是降压环节,降压环节使用一个降压变比为15.7左右的变压器将220V正弦波交流电压降压至14V左右;其次是整流环节,整流环节通过4个IN4007整流二极管搭建的整流桥电路把14V左右的正弦波交流电转换为峰值为18V左右的单向脉动电压;然后是滤波环节,滤波环节是用耐压不低于25V电解电容C1把18V左右的单向脉动电压转换为带有交流波纹的约18V的直流电压;最后是稳压环节,稳压环节是用线性稳压器78L12把约18V带有交流波纹的直流电压转换为非常稳定的质量很好的12V直流电压,该电压即可为驱动电路供电。在稳压器的右侧并联一个输出滤波电容C6,该电容是用来抑制78L12在工作时可能产生的自激振荡(三端线稳压器极易产生自激振荡,所以C6通常是不可缺少的)。因为部分模块需要供应+5V直流电压,所以需要将12V直流电压转换为5V直流电压。本设计直接应用线性稳压器78L05实现该功能,将12V直流电压作为稳压器的输入,将其2端接地,此时稳压器输出的即为5V的直流电压,在其右侧的滤波电容C2的作用下,使得最后输出的5V电压为高质量的直流电压,为单片机及其他模块供电。

该电源模块保证了在没有现成的直流+5V与+12V电源情况下,通过转换国内的两相220V交流电得到本控制系统所需的控制电压,提高了系统对各种情况的适应能力。

图3.3 电源模块电路图 Fig. 3.3 Power Module circuit diagram

11

3.3.3 液晶屏显示模块

液晶显示模块主要作用是实时显示电动机的运行状态,主要包括电机转速和运行方向。通过对步进电机运行状态的实时显示,操作者能够更加准确、快捷的对电机进行相应的状态调整,满足其工作需求。

本模块核心器件为LCD1602液晶屏,本次设计中,LCD1602第一行显示步进电机的转向,步进电机正转时,第一行显示:RUNNING>>>,反转时第一行显示:<<>>。 LCD1602的第二行显示步进电机的转速等级,本系统电机的初始转速等级为S4,即电机在调速之前开始运行时,电机转速等级为S4,此时液晶屏的第二行显示WELCOME-S4。操作员对控制系统进行操作时,液晶屏可以实时的显示电机的运行状态。例如,电机以转速等级S4反向运行时进行了一次正向加速操作,则液晶屏的第一行显示就从<<>>;第二行显示由WECOME-S4变为S5,及时反映了电机的运行状态。

液晶屏模块电路如图3.4。一般情况下,LCD1602液晶屏是可以由单片机直接驱动的,但在本系统中,因为LCD1602数据位所接端口为P0口,而P0口内部没有上拉电阻,所以加一个多个电阻连载在一起的排阻来保证P0口正常输出。图中P0.0-0.7引脚通过排阻REAPACK-8分别接LCD1602的8位数据位;控制端口 RS、RW、E分别接P2.0-P2.2引脚;VSS与VDD分别接电源正极与地,因为VEE是控制显示屏的亮度,所以在电源正负之间接一个滑动变阻器,通过改变滑动变阻器的差数改变显示屏的亮度。下面短路图中由于Proteus图库中无LCD1602,使用与其兼容的LM016L替代,结果一样。

12

图3.4 液晶屏显示模块电路图 Fig. 3.4 LCD display module circuit diagram

3.3.4 步进驱动电路模块

步进电机驱动模块电路如图3.5。本模块的核心器件为ULN2803驱动器,因为单片机端口输出的是数字信号,不能直接控制步进电机,所以需要加驱动电路。本系统中,单片机输出的电机控制信号由P1.0〜P1.3端口输出到ULN2803驱动器的1B〜4B口,驱动器将输入信号转换、放大后再分别从1C、2C、3C、4C 口输出至步进电机的A、B、C、D相,实现对步进电机的控制。

13

图3.5 驱动电路模块

Fig. 3.5 Schematic Drive circuit module

3.3.5 按钮输入模块

本模块通过单片机的P2与P3口输入控制信号,通过按钮改变输入到单片机对应端口的信号,单片机根据不同的信号调用相应的程序对控制系统的运行做出相应调整,完成对电机状态的调整。

如图3.6是按键输入模块电路图。本模块的按钮SW1、SW2、SW3、KEY1、KEY2分别与单片机端口P2.7、P3.0、P3.1、P3.2、P3.3相连。因为通过按钮进行控制时,系统会检测输入信号是否为低电平,若输入信号为低电平则系统根据不同按钮调用相应的程序对电机运行状态进行调整,所以想在按钮按下时得到低电平输入信号只需直接将以上5个按钮的另一端直接接地,这样按钮按下输入信号便为低电平,按钮未按下时对应输入信号为高电平,当输入信号为高电平即按钮未按下时系统不会改变运行状态,当输入信号为低电平即按钮按下时系统会根据输入信号的端口作出相应的状态调整。按钮SW1有双重作用:若在电机未运行时按下,该按钮作为正向启动按钮;若在电机运行过程中按下,该按钮作为调节转向为正向的转向调节按钮。按钮SW2也有双重作用:若在电机未运行时按下,该按钮作为反向启动按钮;

14

若在电机运行过程中按下,该按钮作为调节转向为反向的转向调节按钮;按钮SW3是电机停机控制按钮;KEY1与KEY2分别是电机加、减速控制按钮。 具体控制信号如下:

1、第一次按下按钮SW1时,相当于给P3.0口加一个低电平信号,控制电机正向启动;电机运行过程中再按下SW1,电机转向变为正向,相当于起到调节转向为正向的作用。

2、第一次按下按钮SW2时,相当于给P3.1口加一个低电平信号,控制电机反向启动;电机运行过程中再按下SW2,电机转向变为反向,相当于起到调节转向为反向的作用。

3、当按下停机按钮SW3时,相当于给P2.7口加一个低电平信号,控制电机停止运行; 4、按钮KEY1按下时,P3.1口输入一个低电平信号,这样就触发了外部中断INT0,控制电机转速提高一级。

5、按钮KEY2按下时,P3.2输入一个低电平信号,这样就触发了外部中断INT1,控制电机转速降低一级。

电机可以正向启动也可以反向,启动时初始转速等级为S4,本设计将电机转速等量地分为7级,每按下一次调速按钮,电机的转速就会在现有转速基础上相应的增加一级或减少一级,进而实现电机调速。

图3.6 按键输入模块

Fig. 3.6 Key input module circuit diagram

15

3.4 总体硬件设计电路图

本系统的总体硬件设计电路如图3.7(转下一页),电路图中除了上面介绍的各个模块外,还有两个LED指示灯。通过端口P1.4、P1.5分别与红色、绿色指示灯相连。电机运行时仅给P1.5一个低电平,使表征电机正在运行的绿色LED亮,电机停机时仅给P1.4一个低电平,使表征电机停机的红色LED亮。添加的两个指示灯更加醒目的表征了电机是否在运行,提高了系统的人机交互性。

16

第四章 软件设计

4.1 程序设计思路

根据控制系统电路的设计,单片机的输入为P2.7、P3.0、P3.1、P3.2、P3.3,输出为P1口前6个管脚P1.0-P1.5,和P0口的7个管脚P0.0-P0.7。控制系统上电时,系统开始运行,系统运行的第一步是程序初始化,对液晶屏的初始化使LCD1602液晶屏的第一行显示<<>>,第二行显示WELCOME-S4,其中S4表示电机启动时的初始转速等级为S4;对电机的初始化使电机处于停机状态,同时红色停机指示灯灯亮;初始化后就开始持续的对按钮状态进行扫描,扫描过程中若正向和反向启动按钮没有按下或者停止按钮按下,则程序直接跳转到初始化部分,若启动按钮按下,则延时一定时间后电机启动同时绿色启动显示灯亮,红色停机显示灯灭,若按下的是正向启动按钮,则LCD1602液晶屏的第一行显示RUNNING>>>,第二行显示WELCOME-S4;若按下的是反向启动按钮,则LCD1602液晶屏的第一行显示<<4.2 程序流程图

系统软件设计程序流程图如图4.1所示。

17

图4.1程序执行流程图 Fig. 4.1 Program execution flow chart

4.3 各部分子程序

本系统的软件程序开发部分主要通过Visual C++6.0与keil uVision4完成。由上节的流程图可以看出,本系统的程序是由初始化子程序与按钮扫描子程序组成的,这里的按钮扫描子程序又是由多个功能不一的子程序组成的,通过这些子程序的相互调用,实现了本系统的控制功能,这些子程序包括LCD1602显示子程序、正反转子程序、加减速子程序和中断服务子程序几个部分。接下来将对各部分程序的设计思路进行详细说明。

4.3.1 初始化子程序

初始化子程序是主程序开始执行的第一步。初始化子程序的执行过程如下:首先系统上电后先调用延时子程序延时一定时间,待系统准备就绪后,然后对LCD1602液晶屏初始化,完成对LCD的初始化后系统随即调用LCD的初始显示子程序,让LCD1602液晶屏的第一行显<<>>,第二行显示WELCOME-S4。完成对LCD1602液晶屏的初始化后系统继续对电机控制,使电机处于停机状态,同时使红色停机指示灯点亮。

初始化子程序如下:

void chushihua() //初始化子程序 { LcdDelay(10); write_char(3,1,tingzhi); P1=0xef;

//延时启动 //LCD第一行显示 //红色LED亮

18

LCD1602(); //LCD初始化 write_char(3,2,huanying); //LCD第二行显示

}

4.3.2 按钮扫描子程序

按钮扫描子程序流程图如图4.2所示。控制系统上电后,无论电机是否运行,按钮扫描程序一直在执行。当正向启动按钮按下时调用电机正向运行程序使电机正转,同时调用LCD1602液晶屏显示程序使其显示电机正转运行状态,同时给P1.5低电平,使表征电机正在运行的绿色LED亮,给P1.4高电平,使表征电机停止运行的红色LED灭。反转启动按钮按下时情况与正向启动按钮按下基本一样。当加减速按钮按下时,每按下一次,主程序要调用一次中断服务子程序,使电机转速改变一级,同时调用LCD显示子程序使液晶屏第二行显示此时电机的转速级别。当停机按钮按下时,为电机控制端口赋值使电机停机,同时调用LCD显示子程序去,让其显示停机状态。

图4.2 按钮扫描子程序流程图 Fig4.2 Button Scan subroutine flowchart

4.3.3 LCD显示子程序

LCD1602显示电机的运行状态时第一行显示电机是否运行及电机的运行时的转向,电机若未运行则第一行显示<<>>,电机若开始运行则显示RUNNING>>>或<<19

示需要根据电机的运行转速确定。

LCD显示子程序其实也是由一系列子程序组成的,通过各个子程序的相互作用,嵌套应用最终实现了LCD显示屏显示字符串功能,这些子程序包括用于调节写过程中速度不匹配问题的延时子程序、液晶屏每次启动必须调用的初始化子程序、进行数据、指令写入的数据、指令写程序和液晶屏显示字符必调用的写字符串子程序等。

LCD主要显示子程序如下: }

4.3.4 正反转子程序

让步进电动机运转需要按一定顺序逐相给步进电机供电,因为本设计的控制对象是四相

八拍步进电动机,由前面章节可知想要使电机正转其供电顺序为:A→AB→B→BC→C→CD→D→DA→A…;反向运行的供电顺序为:D→ DC→C→CB→ B→ BA→A→AD→D…。因为步进电动机A-D相由P1.0-P1.3输出信号到驱动芯片进行控制,同时P1.4与P1.5端口还需要控制电机状态指示灯,电机运行时需要给P1.5一个低电平信号,给P1.4一个高电平信号使绿灯亮红灯灭。综合以上控制要求可得电机反转的控制代码为:unsigned char code runf[8]={0x11,0x13,0x12,0x16,0x14,0x1c,0x18,0x19},电机正转的控制代码为:unsigned char code runz[8]={0x18,0x1c,0x14,0x16,0x12,0x13,0x11,0x19}。 电机反转子程序如下:

void motor-run-fed() //电机反转子程序 {

unsigned char code runf[8]={0x11,0x13,0x12,0x16,0x14,0x1c,0x18,0x19}; unsigned char i;

for (i=0; i<8; i++) {

P1 = runf[i]&0x1f; //取数据 delay(100); //调节转速 } }

void delay(unsigned int t) //延时函数/ { unsigned int k; while(t--) {

for(k=0; k<60; k++)//用for的空循环延长程序的执行时间 } }

20

4.3.5 中断服务子程序与加减速子程序

由前面章节可知步进电机的转速必须通过改变控制脉冲信号的频率来调节,本次设计中步进电机的控制信号的频率又是通过中断服务程序来改变的,所以步进电机加减速子程序与中断服务子程序也必然是紧密相关的,这也是我将这两个程序放在一起设计的原因。

本次程序设计引入一个变量hh作为调节电机转速的重要参数,系统通过使用外部中断INT0与INT1来实现电机调速,每执行一次外部中断子程序,变量hh的值就会相应的增加或减少,然后再将变量hh调用到延时子程序DELAY()中,该子程序是电机调速的关键,系统每输出一个脉冲控制信号就会调用一次该延时子程序,所以该延时子程序延时时间的长短就决定了步进电机控制信号的频率,该延时子程序延时时间越长则电机控制信号的频率越低,电机转速越低,反之,该延时子程序的延时时间越短则电机控制信号的频率就越高,电机转速也就越高,这样在中断子程序与延时子程序的共同作用下就实现了电机调速。

本次设计的控制系统将步进电动机的转速分为7个等级,分别为S1、S2、S3、S4、S5、S6、S7,每一级转速对应的变量hh的值是不同的,即每进行一次调速,就需要调用一次中断服务子程序。本系统变量hh可能的取值分别为6、8、10、12、14、16、18。hh的取值为6时电机转速最低,转速等级为S1,hh的取值为18是电机转速最高,转速等级为S7。

系统默认的电机转速等级为S4,进行加减速操作时,每按下以下按钮,hh的取值就逐级改变一次,进而改变脉冲产生频率,实现对步进电机的转速调节。

电机加速子程序流程图如图4.3。

图4.3 电机加速子程序流程图

Fig 4.3 Motor acceleration subroutine flow chart

21

电机减速子程序流程图如图4.4。

图4.4 电机减速子程序流程图 Fig4.4 Motor deceleration subroutine flow chart

中断服务子程序与加减速子程序如下: void int_0() interrupt 0 {unsigned int i; hh=hh+2; speed=hh/2-2; sp(speed);

for(i=10000000;i>0;i--) {if(hh>=18) { hh=18;speed=7;} } }

void int_1() interrupt 2

//中断服务子程序0

//中断服务子程序1

22

{unsigned int i; hh=hh-2; speed=hh/2-2; sp(speed);

for(i=10000000;i>0;i--) {if(hh<=6) { hh=6;speed=1;} } }

void DELAY() //延时子程序

{

unsigned char i,j; i=(50-hh)*10; for(;i>0;i--) {

j=(50-hh)*10; for(;j>0;j--);} }

for (i=0;i<8;i++)//8拍 //正转运行程序 {

P1=runz[i];//赋驱动值

DELAY(); //改变转速,不过不要超过步进电机的最快值}

23

延时一下 第五章 程序调试仿真

在对设计的总体硬件电路检测无误后,开始进行软件程序调试仿真,通过观察仿真结果判断程序是否正确,是否能够满足设计目的。本次程序调试仿真主要用到Proteus的仿真功能,该功能在原有电路图的基础上,直接将用keil编写生成的hex文件加载在原理图中对应芯片中即可开始仿真。若电路原理图与所设计的源程序均无误,则仿真界面可以模拟操作电机控制系统,通过相关的按钮操作实现对步进电机转速、转向的调节,同时也可以使LCD1602实时的显示电机的运行状态。

将编写的C语言源程序不断地在keil中编译、调试,直到程序编译不再报错。如图5.1是keil软件编译无误界面。

图5.1 Keil的编译界面 Fig. 5.1 Keil Compiler Interface

将keil编译产生的hex文件导入到原理图中的单片机中开始进行系统仿真,验证系统整体设计是否可行。如图5.2是系统刚上电时的初始仿真界面,如图液晶屏第一行显示<<>>,第二行显示WELCOME-S4,S4表示系统上电后电机的初始转速等级为S4;此时电机停机不运转,同时电机停机指示灯亮。

24

图5.2 初始化仿真界面

Fig. 5.2 Initialization Simulation Interface

根据控制要求使电机正向转动,按下正向启动按钮SW1后,电机开始正向转动,此时电机运行指示灯亮,同时液晶屏第一行显示RUNNING>>>,表示电机开始运转,箭头“>>>”表示电机正向转动;液晶屏第二行显示此时电机转动的转速等级为S4。如图5.3是系统仿真时正向启动的仿真界面

25

图5.3电机正转运行仿真界面 Fig. 5.3 Motor Forward run simulation

根据控制要求电机反向启动,按下反转控制按钮SW2后,电机开始反向转动,此时系统的状态与正向启动时的唯一区别是液晶屏第一行的显示,此时液晶屏第一行显示<<图5.4电机反转运行仿真界面 Fig. 5.4 Motor reverse run simulation interface

26

电机启动后,根据控制要求使电机加速或减速,每按下一次按钮KEY1,电机就会提速一级,同时液晶屏第二行显示电机提速后的转速等级。对电机进行减速操作的过程与加速操作过程类似。如图5.5是系统仿真时电机调速后的仿真界面。此时电机以S6转速正向运行。

图5.5 电机调速后运行的仿真界面

Fig. 5.5 Motor speed after running the simulation interface

27

28

因篇幅问题不能全部显示,请点此查看更多更全内容

Top