资源目录
压缩包内文档预览:(预览前20页/共75页)
编号:19457890
类型:共享资源
大小:980.42KB
格式:ZIP
上传时间:2019-05-24
上传人:远****
认证信息
个人认证
汪**(实名认证)
浙江
IP属地:浙江
30
积分
- 关 键 词:
-
步进电机指数规律升降速的单片机控制系统设计
步进电机指数规律升降速的 单片机控制系统设计
步进电机指数规律升降
步进电机指数规律升降速的单片机控
单片机的步进电机升降速
单片机的步进电动机升降速控制
- 资源描述:
-
步进电机指数规律升降速的单片机控制系统设计,步进电机指数规律升降速的单片机控制系统设计,步进电机指数规律升降速的 单片机控制系统设计,步进电机指数规律升降,步进电机指数规律升降速的单片机控,单片机的步进电机升降速,单片机的步进电动机升降速控制
- 内容简介:
-
附件1:四川理工学院毕业设计(论文)任务书四 川 理 工 学 院毕业设计(论文)任务书设计(论文)题目:步进电机指数规律升降速的单片机控制系统设计 系: 机电工程系 专业: 机电一体化 班级:2003级1班 学号: 030110119 学生: 唐 忠 川 指导教师: 孙 祥 国 接受任务时间 2007.03.05 教研室主任 (签名)系主任 (签名)1毕业设计(论文)的主要内容及基本要求用单片机对步进电机进行三相六拍的控制,通过软硬件设计,实现电机指数规律升降速。(1) 系统总体方案拟定;(2) 数学模型建立,求控制算法;(3) 硬件设计;(4) 软件设计;编写设计说明书,完成系统控制硬件图1张 A 2;2指定查阅的主要参考文献及说明(1) 机电一体化系统设计 (2) 计算机控制系统分析与设计(3) 单片机应用设计 (4) 电子电工技术(5) C语言程序设计 (6) 机床电气控制3进度安排设计(论文)各阶段名称起 止 日 期1查阅资料,进行总体方案拟定,完成开题报告07.03.05-07.03.202建立系统数学模型,求控制算法 07.03.20-07.04.153进行硬件设计,软件设计 07.04.15-07.05.204编写设计说明书 07.05.20-07.06.025准备毕业答辩 07.06.02-07.06.15注:本表在学生接受任务时下达附件2:四川理工学院毕业设计(论文)开题报告四川理工学院毕业设计(论文)开题报告设计(论文)名称步进电机指数规律升降速的单片机控制系统设计设计(论文)类型B指导教师孙祥国学生姓名唐忠川学号030110119系、专业、班级机电031班一、选题依据:(简述研究现状或生产需求情况,说明该设计(论文)目的意义。)步进电机具有启停迅速、步距精确、控制方便等优点,因此广泛应用于需精确定位的控制系统和仪器设备,如各类数控机床、打印机、磁盘驱动器等。随着计算机的广泛应用,步进电机已成为微机控制系统的主要执行元件之一。步进电机的矩-频特性决定了当启动频率较高时,启动转矩如果很小便无法带动负载,造成失步,停止时又会发生过冲,因此,在控制过程中,要求有合理的升降速规律。以前常选用直线规律升降速,这种控制方法简单,但是由于它的脉冲变化有个恒定的加速度,所以它不能保证在升降速的过程中步进电机转子的角加速度的变化和它的输出力矩变化相适应,不能很好的发挥电机的加速性能。因此有必要对脉冲频率进行合理性的研究和论证,寻求一种较理想的指数升降速曲线,使步进电机在运行的过程中能够快速定位,并且运行步数准确。 此设计运用计算机控制设计的知识,推导指数规律升降速控制算法,理论上使步进电机发挥良好的工作性能。并通过具体软硬件的设计过程,充分运用巩固微机原理和单片机设计,软件设计的相关知识,锻炼自己运用知识解决问题的实际工作能力,为以后进一步发展奠定基础。二、设计(论文研究)思路及工作方法由步进电机动力学方程和矩-频特性曲线推导出指数规律升降速控制算法,在此基础上运用单片机进行升降速的并行控制,完成软硬件设计。硬件设计包括单片机的存储器配置、键盘与显示电路设计、定时中断设计等。软件设计首先通过行结构划分和程序流程的设计,再模块化编程。三、设计(论文研究)任务完成的阶段内容及时间安排。1.查阅资料,进行总体方案拟定,完成开题报告 07.03.05-07.03.202.建立系统数学模型,求控制算法 07.03.20-07.04.153.进行硬件设计,软件设计 07.04.15-07.05.204.编写设计说明书 07.05.20-07.06.025.准备毕业答辩 07.06.02-07.06.15指导教师意见 指导教师签字: 年 月 日教研室毕业设计(论文)工作组审核意见难度分量综合训练程度 教研室主任: 年 月 日设计(论文)类型:A理论研究;B应用研究;C软件设计;D-其它等。四 川 理 工 学 院毕 业 设 计(论 文)说 明 书题 目 步进电机指数规律升降速的 单片机控制系统设计 学 生 唐 忠 川 系 别 机 电 工 程 系 专 业 班 级 机械设计制造及自动化机电03.1班学 号 030110119 指 导 老 师 孙 祥 国 四 川 理 工 学 院毕业设计(论文)任务书设计(论文)题目: 步进电机指数规律升降速的单片机控制系统设计 系: 机电工程系 专业: 机电一体化 班级:2003级1班 学号: 030110119 学生: 唐 忠 川 指导教师: 孙 祥 国 接受任务时间 2007.03.05 教研室主任 (签名)系主任 (签名)1毕业设计(论文)的主要内容及基本要求用单片机对步进电机进行三相六拍的控制,通过软硬件设计,实现电机指数规律升降速。(1) 系统总体方案拟定;(2) 数学模型建立,求控制算法;(3) 硬件设计;(4) 软件设计;编写设计说明书,完成系统控制硬件图1张 A 2;2指定查阅的主要参考文献及说明(1) 机电一体化系统设计 (2) 计算机控制系统分析与设计(3) 单片机应用设计 (4) 电子电工技术(5) C语言程序设计 (6) 机床电气控制3进度安排设计(论文)各阶段名称起 止 日 期1查阅资料,进行总体方案拟定,完成开题报告07.03.05-07.03.202建立系统数学模型,求控制算法 07.03.20-07.04.153进行硬件设计,软件设计 07.04.15-07.05.204编写设计说明书 07.05.22-07.06.055准备毕业答辩 07.06.06-07.06.24注:本表在学生接受任务时下达摘 要摘 要摘 要从步进电机的矩-频特性可知,启动频率越高,启动转矩越小,带动负载的能力越差。当启动频率较高时,启动时会造成失步,而停止时由于惯性作用又会发生过冲,所以在步进电机控制中必须要采取升降速控制措施。本文根据步进电机的动力学方程和矩-频特性曲线建立系统的数学模型,采用指数规律的升降速算法,以单片机为核心对步进电机进行并行控制。系统的软件设计由C51 语言编程来实现。并设计了检测系统用于对步进电机转速和步数的检测。最后,本系统可以实现以下功能:在显示器的提示下,由键盘输入运行的步数和稳定运行的速度;由各个功能键控制系统的运行,按启动键后,步进电机按照输入的步数进行走步;如在运行期间按停止键,则步进电机停止运行。研究表明,采用指数规律的升降速曲线将大大地提高微机控制步进电机的最高工作频率,大大缩短所需的升降速时间。关键词:步进电机,单片机,速度控制,C51 语言VABSTRACTAccording to torque vs. speed characteristic of stepping motor, the higher startup speed is, the smaller startup torque is and then the worse the capability of driving load is. When the startup speed is higher, stepping motor will lose steps. While stopping, it will also lose steps because of inertia. So, it needs to take speed control measures on control of stepping motor. Mathematic model of the system is educed by dynamics equation and torque vs. speed characteristic of stepping motor. It adopts speed control arithmetic of exponential rule and deals with process of acceleration and deceleration via discrete method. Single-chip microcomputer that is the core of system controls stepping motor. The system is programmed by C51 language. The test system is designed to test the rotate speed and steps of stepping motor. Finally, according to the direction of LED display, running steps and speed are input by keyboard. The systems run is controlled by functional keys. Stepping motor will run to the given steps if the “start” key is pressed. Meanwhile, stepping motor will stop if the “stop” key is pressed during its running. The research shows: the method of acceleration and deceleration via exponential rule will greatly improve the highest running frequency of stepping motor and shorten the acceleration and deceleration time.Keywords: stepping motor; single-chip microcomputer; speed control; C51 language目 录目 录中文摘要I英文摘要II第一章 绪 论1第二章 系统工作原理和总体方案拟定32.1控制方案论证与比较32.1.1步进电机控制系统的构成32.1.2步进电机的串行和并行控制32.2步进电机工作原理和动态特性分析42.2.1反应式步进电机原理42.2.2 步进电机的动态特性62.3步进电机升降速控制讨论72.3.1步进电机的失步72.3.2步进电机升降速曲线的分析8第三章 控制系统的数学模型93.1 步进电机升速的控制算法93.2 步进电机升速过程的离散处理113.3 步进电机降速过程的离散处理123.4 步进电机升速过程运行参数的计算12第四章 控制系统的硬件设计144.1 系统的硬件结构144.2 系统的硬件设计154.2.1 微处理器及存储器的配置154.2.2 键盘与显示接口电路的设计164.2.3 定时和报警电路的设计204.2.4步进电机的脉冲分配214.2.5 扩展存储器及扩展芯片地址的确定244.3 硬件系统的合成及其原理图25第五章 控制系统的软件设计265.1 软件结构设计265.2 系统的程序流程285.3 程序设计问题分析385.3.1 程序的初始化及变量的定义385.3.2 存储类型与存储模式的定义395.3.3 编译预处理的定义405.3.4 数组查表功能405.3.5 中断服务函数的定义415.3.6 有关定时器精确定时的实现425.3.7 主函数及键盘与显示功能的实现43第六章 转速和步数检测系统设计456.1 光电编码器的工作原理456.2 检测系统的硬件设计456.3 检测系统的软件设计476.3.1 检测系统的流程图486.3.1 检测系统程序48第七章 结 论49参考文献50致 谢51附录A:步进电机升速过程运行参数计算程序52附录B:步进电机控制系统程序55附录C:步进电机检测系统程序63符号说明符号说明 阻尼系数 通电状态系数 脉冲频率 Hz 匀速运行时的频率 Hz 负载转矩下的最高运行频率 Hz 负载转矩下的最高启动频率 Hz 空载下的最高启动频率 Hz 每档的频率 Hz 转动惯量 步进电机的相数 脉冲数 每档脉冲数 步进电机转速 r/min 转盘的窄缝数 转矩 Nm 负载转矩 Nm 电机输出转矩 Nm 最大转矩 Nm 时间 s 转子齿数 转子的位置角 步距角 时间常数 s 角速度 四川理工学院毕业设计(论文)第一章 绪 论步进电机是一种将电脉冲信号变换成相应的机械角位移的机电执行元件。它具有工作状态不易受影响;控制性能好,在起动、停止、反转时不易“丢步”; 没有积累误差等特点,因此被广泛应用于开环控制的机电一体化系统,使系统简化,并可靠地获得较好的位置精度,如各类数控机床、光学测量仪器、打印机、磁盘驱动器等。随着单片机控制技术的不断发展,基于单片机的步进电机控制系统广泛应用于各机械智能仪器和装备中,步进电机也成为主要的电气执行元件之一。在数控点-位控制系统中,从起点至终点的运行速度都有一定要求。如果要求运行频率(速度)小于系统的极限起动频率,则系统可以按要求的频率(速度)直接起动,运行至终点后可立即停发脉冲串而令其停止。系统在这样的运行方式下其速度可认为是恒定的。但在一般情况下,系统的极限起动频率是比较低的,而要求的运行速度往往较高。从步进电机的矩-频特性可知,步进电机的转矩随着脉冲频率的上升而下降,启动频率越高,启动转矩越小,带动负载的能力越差,当启动频率较高并已超过极限起动频率会发生丢步或根本不能起动的情况,停止时又会发生过冲。所以,步进电机的升降速是精确控制步数和速度的关键问题,如果升降过程脉冲频率变化不合理,会造成升降时间延长,电机失步,力矩达不到要求等严重后果。以前一般的升降速规律设计,常选用直线规律升降速,这种控制方法简单,但是由于它的脉冲变化有个恒定的加速度,所以它不能保证在升降速的过程中步进电机转子的角加速度的变化和它的输出力矩变化相适应,不能很好的发挥电机的加速性能。因此有必要对脉冲频率进行合理性的研究和论证,寻求一种较理想的指数升降速曲线,使步进电机在运行的过程中能够快速定位,并且运行步数准确。理想的升降速曲线是指数规律曲线,本文就是由步进电机的动力学方程和矩-频特性曲线推导出的指数规律的升降速控制算法,这样能够使得频率增高时,保证输出最大的力矩,能充分发挥步进电机的工作性能,使系统具有良好的动态特性。在完成升降速曲线的参数计算得出升降速控制算法后,将要完成以下工作以具体实现单片机对步进电机升降速的并行控制。1.本系统用单片机来实现步进电机升降速过程的控制,首先对升速过程进行离散处理,在程序运行前将升速过程的离散值固化在程序存储器中,降速过程则采用运行时实时计算定时器的装载值。程序运行时采用查表的方法将离散值装入定时器来控制步进电机的换相周期,使得步进电机按照指数规律进行走步。2.以单片机为核心并选用必要的外围设备构成单片机对步进电机的控制系统。在硬件设计中进行单片机和存储器的配置、键盘与显示电路的设计、定时和报警电路的设计、步进电机驱动电路的设计和存储器地址映像工作,生成步进电机控制系统的硬件原理图。3.由于C51语言是一种结构化语言,可产生紧凑代码。本系统软件用C51语言编写,将大大的加快软件的开发速度,明显的增加软件的可读性,便于改进和扩充,可以很容易地进行单片机的程序移植工作,有利于产品中的单片机的重新选型。根据系统实现的功能划分程序模块,按照各个模块绘制程序流程图,进行模块化程序设计,并对其中一些关键技术进行具体的论述。 4.为了检测步进电机运行的转速和步数,进行步进电机转速和步数的检测系统的设计。论述检测系统的工作原理,并进行检测系统的硬件和软件设计。67第二章 系统工作原理和总体方案拟定2.1控制方案论证与比较2.1.1步进电机控制系统的构成步进电机的工作过程一般由控制器控制,控制器按照设计者的要求完成一定的控制过程,是功率放大电路按照要求的规律驱动步进电机运行。旧式的步进电机控制系统由脉冲发生器、步进控制器、功率放大器和步进电机组成,如图2.1所示。步进控制器包括缓冲寄存器、环形分配器、控制逻辑,其作用主要是将输入脉冲变为环形脉冲,以便实现对电机的转动和正反转的控制。功率放大器的作用是将步进控制器输出的环形脉冲加以放大,以驱动步进电机转动。这种控制方案由于是用各种逻辑电路来实现控制过程,线路复杂、控制方案改变困难、成本高。图2.1步进电机控制系统的组成随着单片微型计算机迅速发展和普及,为设计功能很强而价格低廉的步进电机控制器提供了条件。采用计算机控制系统,只要控制输入电脉冲的数量、频率以及电机绕组通电相序即可获得所需的转角、转速及转向。这不仅简化了线路,降低了成本,而且操作方便,提高了可靠性。图2.2为单片机控制步进电机的系统结构图。图2.2单片机控制步进电机的系统结构图2.1.2步进电机的串行和并行控制使用单片机对步进电机进行控制有串行和并行两种方式。串行控制:具有串行控制功能的单片机系统与步进电机驱动电源之间,具有较少的连线将信号送入步进电动机驱动电源的环形分配器,所以在这种系统中,驱动电源中必须含有环形分配器。这种控制方式的示意图如图2.3所示。图2.3串行控制示意图并行控制:用微型计算机系统的数个端口直接去控制步进电动机各相驱动电路的方法称为并行控制。在电动机驱动电源内,不包括环形分配器,而其并行控制功能必须由微型计算机系统完成。这种控制方案示意图见图2.4所示。图2.4并行控制示意图本系统考虑到使用8255扩展并行接口,主要用软件实现环分功能,控制电机为三相,故选用并行控制方案。2.2步进电机工作原理和动态特性分析图2.5 步进电机外观2.2.1反应式步进电机原理图2.5为步进电机外形图。电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几何轴线依次分别与转子齿轴线错开0、1/3L、2/3L,(相邻两转子齿轴线间的距离为齿距以L表示),即A与齿1相对齐,B与齿2向右错开1/3L,C与齿3向右错开2/3L,A与齿5相对齐,(A就是A,齿5就是齿1)下面是定转子的展开图: 图2.6 定转子展开图旋转时,如A相通电,B,C相不通电时,由于磁场作用,齿1与A对齐,(转子不受任何力以下均同)。如B相通电,A,C相不通电时,齿2应与B对齐,此时转子向右移过1/3L,此时齿3与C偏移为1/3L,齿4与A偏移(L-1/3L)=2/3L。如C相通电,A,B相不通电,齿3应与C对齐,此时转子又向右移过1/3L,此时齿4与A偏移为1/3L对齐。如A相通电,B,C相不通电,齿4与A对齐,转子又向右移过1/3L。这样经过A、B、C、A分别通电状态,齿4(即齿1前一齿)移到A相,电机转子向右转过一个齿距,如果不断地按A,B,C,A通电,电机就每步(每脉冲)1/3L,向右旋转。如按A,C,B,A通电,电机就反转。由此可见:电机的位置和速度由导电次数(脉冲数)和频率成一一对应关系。而方向由导电顺序决定。不过,出于对力矩、平稳、噪音及减少角度等方面考虑。往往采用A-AB-B-BC-C-CA-A这种导电状态,这样将原来每步1/3L改变为1/6L。甚至于通过二相电流不同的组合,使其1/3L变为1/12L,1/24L,这就是电机细分驱动的基本理论依。不难推出:电机定子上有m相励磁绕阻,其轴线分别与转子齿轴线偏移1/m,2/m(m-1)/m,1。并且导电按一定的相序电机就能正反转被控制这是步进电机旋转的物理条件。只要符合这一条件我们理论上可以制造任何相的步进电机,出于成本等多方面考虑,市场上一般以二、三、四、五相为多,本设计选用三相反应式步进电机。 步进电机步距角的大小是由转子的齿数、控制绕组的相数和通电方式决定,它们之间存在以下关系: (2-1)式中,为步距角:C为通电状态系数,当采用单相或双相通电方式时,C=1;而采用单、双相轮流通电方式时,C=2;m为步进电机定子的相数;Zr为步进电机转子齿数。控制绕组通电状态的改变,是由外加输入脉冲驱动电路来实现的。每当外电路送入一个脉冲,控制绕组的通电状态即改变一次,与此对应步进电机将转动一个步距角。因此步进电机转过的步距角数等于外加脉冲数,则步进电机的转速为: (2-2)式中为步进电机通电的脉冲频率,单位为Hz;n为步进电机转速,单位为r/min。步进电机的转速用步距角表示为: (2-3)由式(2-1)和(2-2)可知,电机的相数和转子的齿数越多,则步距角就越小,电机在脉冲频率一定时的转速也越低。当电机的相数和转子的齿数一定时,转子的转速和输入的脉冲频率成正比。因此,改变输入的脉冲频率就可以改变转速,改变通电状态顺序就可以实现正反转。由于这些特性,步进电机控制系统中,能够按照控制命令实现启动、停止、升速、降速、正反转等操作。2.2.2 步进电机的动态特性图2.7 启动矩频特性及运行矩频特性曲线关系图机械负载位置的变化往往需要步进电机的连续运行,电机转子必须产生足够大的力矩,以克服摩擦和加速总惯量,电机无能力产生足够大的力矩时可能引起电机的失速,造成转子步进与相励磁之间失去同步,从而产生不正确的负载定位。因此步进电机加速、减速、恒速运行时产生的转矩以及电机能够驱动负载的最高速度等特性至关重要。这些特性常以失步转矩/频率特性曲线表示。矩-频特性一般用启动矩-频特性和运行矩-频特性来表示。它们之间关系的典型曲线如图2.7所示。启动矩-频特性是牵入转矩与频率之间的关系曲线,运行矩-频特性曲线是失步转矩与频率之间的关系曲线。当工作在区范围内,步进电机可以停止和再启动,或者反向转动,而不会失步。步进电机在区的工作速度上所产生的最大力矩坐标位于启动矩-频特性曲线上,启动矩-频特性曲线与纵坐标的交点为最大运行力矩,与横坐标的交点为最大启动频率。区为单向工作区,在此区电机不能直接启动,若电机不停止、启动和换向,在此区域内工作,电机不会失步。为了在区内工作,电机必须首先在区内工作,然后利用控制加速度斜坡,转变到区。若达到不失步停止时,也要在限制加速度的条件下,由区转移到区,在减速时惯性反作用力矩为负,对电机有利。区为失步区域,在任何情况下都是不允许的。2.3步进电机升降速控制讨论2.3.1步进电机的失步在步进电机的运行过程中,将可能出现失步,其失步原因有两种 :1.转子的加速度慢于步进电机的旋转磁场,也就是低于换相速度而产生的。这是因为输入电机的电能不足,在步进电机中产生的同步力矩无法使转子速度跟随定子磁场的旋转,从而引起失步。2.转子的平均速度高于定子磁场的平均旋转速度,这时定子通电励磁的时间较长,大于转子步进一步所需要的时间,则转子在步进过程中获得过多的能量,从而产生前冲和后冲的摆动振荡,当振荡足够严重时就会导致失步。 以步进电机三相单三拍通电方式为例分析步进电机的失步。如图2.8,由 B相断电,接通 C 相时,转子齿 2、4 与 B 相磁极对齐而转到转子齿 1、3 与 C 相磁极对齐(图 c),若是由于某一原因造成转子的阻转矩大于电磁转矩的作用,则转子齿 1、3 没有转到与 C 相磁极对齐的位置,而停留在原处未动的位置(图 b)那么当 C 绕组断电再接通 A 相时,受 A 相磁极影响最大的转子齿 1、3 仍返回到与A 相磁极对齐(图 a)。由此可见,当步进电机发生失步时,往往丢掉一个通电循环的步数或其整数倍。也就是说步进电机运行时失步的规律是,所失的步数是通断电循环拍数的整数倍。 图2.8 启动矩频特性及运行矩频特性曲线关系图同理在停止过程中,如果负载超过步进电机的极限制动能力,步进电机将产生滑步或过冲。丢掉的步数也是循环拍数的整数倍。所以要使步进电机快速的达到所要求的速度又不失步或过冲,其关键在于使加速过程中加速度所要求的转矩既能充分利用各个运行频率下步进电机所提供的转矩,又不能超过这个转矩。2.3.2步进电机升降速曲线的分析正由于步进电机失步的原因,需要对步进电机进行升降速的定位控制,运行速度都需要一个加速恒速减速低恒速停止的过程,如图 2.9 所示。各种系统在工作的过程中,都要求升降速过程时间尽量的短,恒速时间尽量长。特别是在要求快速响应的工作中,从起点到终点运行的时间要求最短,这就必须要求加速、减速的过程最短,而恒速时的速度最高。以前一般的升降速规律设计,常常选择按直线规律升降速,它的脉冲频率的变化有一个恒定的加速度。在步进电机不失步的条件下,驱动脉冲频率变化的加速度和步进电机转子的角加速度成正比。步进电机转子的角加速度是由步进电机的输出力矩决定的,步进电机的输出力矩随着驱动脉冲频率的上升而下降,也就要求步进电机转子的角加速度随着脉冲频率的上升而下降,而采用直线规律的升降速却使步进电机转子的角加速度保持不变。所以,只有在步进电机的转矩随脉冲频率的上升保持恒定时,直线规律的升降速才是理想的升降速曲线,而当步进电机的转矩随脉冲频率的上升而下降时 ,它就不是理想的升降速曲线,它不能保证在升降速的过程中步进电机转子的角加速度的变化和它的输出力矩变化相适应,未能很好的的发挥电机的加速性能。如果要求电机尽可能快的加速,则所有频率下都必须产生最大转矩,以这个转矩克服负载并加速系统惯量。图2.9 步进电机直线规律升降速曲线本设计按照步进电机的动力学方程和矩-频特性曲线推导出按指数曲线变化的升降速脉冲序列的分布规律,因为矩-频特性是描述每一频率下的最大输出转矩,即在该频率下作为负载加给步进电机的最大转矩。因此把矩-频特性作为加速范围下可以达到(但不能超过)的最大输出转矩来拟订升降速脉冲序列的分布规律,就接近于最大转矩控制的最佳升降速规律。这样能够使得频率增高时,保证输出最大的力矩,即能够对最大的力矩进行跟随,能充分的发挥步进电机的工作性能,使系统具有良好的动态特性。具体的控制算法见第三章。第三章 控制系统的数学模型由2.3节分析可知,把矩-频特性作为加速范围下可以达到(但不能超过)的最大输出转矩来拟订升降速脉冲序列的规律,就接近于最大转矩控制的最佳升降速规律。所以用步进电机的动力学方程和矩-频特性曲线来导出步进电机的最佳升降速的控制算法,并用单片机对其进行离散控制。3.1 步进电机升速的控制算法在步进电机的控制系统中,如图3-1,给一个电脉冲信号,步进电机就转动一个角度或前进一步。设输入为脉冲数,输出为转角,则(为步矩角),这就是步进电机输入/输出的比例关系。 图3.1 步进电机与驱动电路特性框图步进电机的旋转物体动力学方程式为: (3-1)式中为输出力矩,为转子转动惯量,为阻尼系数,为负载转矩,为转子位置,如为电机的回转角速度,则(3-1)式用表示的方程为: (3-2)如驱动脉冲的频率用表示,由,有,则式(3-2)变为: (3-3)如果电机尽可能快的加速,则所有频率下都必须产生最大转矩,由式(3-3)步进电机的运动一定满足下式: (3-4) 式中为步进电机输出转矩。假设矩-频特性曲线是线性下降的,电机的输出转矩可由下式求出: (3-5)为最大转矩,为假定输出转矩按直线变化时的斜率,()为对应负载转矩()下步进电机的最高运行频率。 可得在速度工作范围内,运动方程为: 即 (3-6)假设电机从零开始升速,即初始值时,(3-6)式方程的解为: (3-7)式中,。 (3-8) 图3.2 步进电机的矩-频特性曲线的近似逼近如果忽略阻尼转矩,即阻尼系数,那么,否则实际的指数规律曲线中的要略小于。是决定升速快慢的时间常数,其数值可由(3-8)式理论计算得出,实际工作中也可由实验来确定。(3-7)式表明驱动脉冲的频率应随时间 t 作指数规律上升,这样就可以在较短的时间内使步进电机的转速上升至要求的运行速度。鉴于大多数的步进电机的矩-频特性都近似线性递减的,所以上述的控制规律为最佳。是负载转矩频率特性曲线和失步转矩频率特性曲线的交点,也就是随着频率的增加失步转矩减小到与负载转矩相等的点下的失步频率。步进电机必须在低于该频率下运行才能保证不失步。所以可由给定的步进电机的矩-频特性曲线及所带动的负载转矩来求得。步进电机的升降速特性与步进电机、驱动电源及负载特性等密切相关,因此对整个步进电机拖动系统而言,其升降速特性的影响因素很多,为方便起见,将步进电机的电拖动系统看作一个惯性阻尼系统,做上述的处理后,得出式(3-7)即为步进电机的升速特性。它可以看作一阶惯性环节的阶跃响应。在工程上认为经过时间可以达到稳定速度。3.2 步进电机升速过程的离散处理 如果忽略阻尼转矩,则由(3-7)式可知升速算法为: (3-9)若单片机使用定时器中断方式来控制步进电机的速度,那么升降速控制实际上就是不断改变定时器的装载值的大小。为了便于编制程序,不必每步都计算装载值,可以用阶梯曲线来逼近升速曲线。如图 3-3,纵坐标是频率,它的单位是步/秒,实质上也反映了转速的高低。横坐标是时间,各段时间内走过的步数用来表示,步数实质上反映了距离。图中曲线 1 表示的是理想的升速曲线,曲线 2 表示的是实际的升速曲线。将升速段均匀地离散为段,设整个上升时间为,则相邻两次速度变化的时间间隔为: (3-10)式中为阶梯升速的分档数,则每一档的频率为: (3-11)各分档速度内运行步数为: (3-12)则升速总步数为: (3-13)程序执行过程中,首先从升速表中取出每档速度,同时取出该档速度应走的步数,然后以递减方式检查。当减至零时,表示该档速度应走的步数已走完,于是速度字,再从升速表中取出下一档速度。一直循环到取出的速度大于或等于给定的速度为止。由图3.3可知,越小,升速越快,但频率跳变加剧,易引起失步。越大曲线2越接近曲线 1,步进电机的运行越平稳,但因升降速占用的时间增加,影响CPU 处理其他事件的能力。另外,因为是采用定时器定时,还要受定时器最大的定时时间间隔的限制。如果采用 12MHz 时钟,定时器的最大中断周期为 65.536ms,相当于步进电机的脉冲频率 15.259Hz,即采用一个定时器来定时分档的最低速度不能低于此值。实际取值时,在最低的频率大于15.259Hz 的条件下,满足即可,为拖动系统的允许突跳频率。可由电机的启动矩-频特性曲线与负载的矩-图3.3 升降速控制离散化的阶梯升降速曲线频特性曲线求得,也可由电机的最高空载启动频率求得,一般取。选用 110BF003 步进电机的空载启动频率Hz,则可取Hz。3.3 步进电机降速过程的离散处理因为降速时从匀速开始,所以降速曲线为: (3.14)式中为匀速过程的速度,一般取与升速相同的值。降速过程的处理方法和升速过程相同。唯一的区别是升速过程的运行参数的计算是在运行前计算好,然后固化在程序存储器里,而降速过程的处理是在运行时实时计算进行的。3.4 步进电机升速过程运行参数的计算图3.4 输入参数界面 由3.2节的离散处理可知,在实际的步进电机运行前,要将升速过程的定时器的装载初值等参数先计算出来放在程序存储器中,以便在程序运行时使用。本设计采用VB语言进行可视化编程来计算运行参数。程序运行时首先显示图3.4所示的界面,这时根据给定的步进电机类型来确定最高运行频率,并输入阶梯的分档数。在输入阶梯分档数时,如果给定的分档数不能满足条件,那么程序会重新的返回到图3.4所示的界面,要重新输入合适的分档数。当这些参数输入完成后,按确定键则进入结果显示界面,如图3.5所示。在图3.5中按下确定键则显示要计算的各个运行参数值,把这些参数值固化在程序存储器中,以便在程序运行时供查询使用。具体的程序见附录 1。 图3.4计算机结果显示界面第四章 控制系统的硬件设计4.1 系统的硬件结构计算机的硬件和软件是相互结合而工作的,有些任务必须由硬件来实现,另外有些任务必须由软件来实现。但是也有一些任务可以由软件来完成,也可由硬件来完成。一般来说,增加硬件会提高成本,但能简化设计程序,且实时性好。反之,加重软件任务,会增加编程调试工作量,但能降低硬件成本。所以要合理的安排软、硬件的结构。本系统步进电机速度的控制是由改变发出脉冲的时间间隔来实现的,用定时器来控制发出脉冲的时间间隔,这样更能发挥硬件实时性的优势,同时能够减轻软件的任务。系统的硬件框图如图4.1所示。系统采用单片机作为核心部件,通过扩展外围设备及接口电路完成对步进电机的并行控制。 图4.1 系统控制结构示意图由于本微机控制系统采用单片机作为核心部件,利用单片机构成系统应从元件级进行系统设计,根据任务需要,选择合理的单片机并配置必须的存储器、接口和外围设备来构成系统。在进行系统的扩展和配置设计时考虑了以下原则:1尽可能的选择典型电路,并符合单片机的常规用法。为硬件系统的标准化、模块化打下良好的基础。2系统的扩展与外围设备配置的水平应充分满足应用系统功能的要求,并留有适当的余地,以便进行二次开发。3硬件结构应结合应用软件方案一并考虑。硬件结构与软件方案会产生相互影响。考虑的原则是,软件能实现的功能尽可能的由软件来实现,以简化硬件电路。但是由软件实现的硬件功能,其响应的时间要比直接用硬件实现的时间长,而且占用 CPU 时间。4整个系统中的相关的器件要尽可能的做到性能匹配。5单片机外接电路较多时,必须考虑其驱动能力,增设线驱动器或者减少芯片功耗,降低总线负载。根据以上设计原则及结构框图,逐一设计出每个单元电路,最后组合起来,成为完整的硬件系统。4.2 系统的硬件设计4.2.1 微处理器及存储器的配置 一、微处理器的选择微处理器的主要性能指标是位数、主频、寻址能力、指令系统、内部寄存器情况等。位数是重要的指标,除了影响运算精度外,还关系到指令系统的功能、寻址能力以及操作速度等。主频影响操作速度。寻址能力决定可能的最大存储容量。指令系统性能影响数据处理、输入输出等操作功能以及编程的方便性。内部寄存器的数量和功能也和操作方便性有关。此外,单片机都带有一定数量的内部RAM,还有内部 ROM 或其它器件。本系统选择 AT89C51 单片机,它具有以下优点:(1)内部含Flash存储器 在系统的开发过程中可以十分容易进行程序的修改,大大缩短了系统的开发周期。(2)和 80C51 插座兼容 该机型通用性好,能够利用现成的 51 系列的开发系统,不需另外重新建立新的开发系统,这样可节约开发成本。(3)静态时钟方式 AT89C51 单片机采用静态时钟方式,所以可以节省电能,这对于降低成品的功耗十分有用。(4)错误编程亦无废品产生 一般的 OTP 产品一旦错误编程就成了废品,而AT89C51 单片机内部采用了 Flash 存储器,所以错误编程之后仍可以重新编程,直到正确为止,故不存在废品。(5)可进行反复系统试验 用 AT89C51 单片机设计的系统可以反复进行系统试验,每次试验可以编入不同的程序,这样可以保证用户的系统设计达到最优,而且随用户的需要和发展还可以进行修改,使系统能不断追随用户的最新要求。由于该机型具有上述优点,并且有现成的开发系统,不需购置新的开发系统,可节约开发成本,所以选择 AT89C51 单片机。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89C51主要特性:与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电二、存储器的配置存储器配置的任务是确定片外存储器的类型和容量,选定存储器型号,设计扩展电路。在硬件设计阶段,可根据对控制系统的分析,凭借经验大致估算所需存储器的容量,估算时应留有余量。对于 ROM 和 RAM,需分别确定容量。选择存储器芯片的型号时,应选择常用型号,尽量减小芯片的数量。由于本系统要进行少量的运算,其中有数组存储计算结果,数组占用较大的空间,所以扩展数据存储器 6264RAM,8K 字节的空间。考虑到给控制软件的调整留有余地及系统的扩展需要等原因,扩展 8K 字节的程序存储空间,选择 2764ROM 芯片。4.2.2 键盘与显示接口电路的设计一、键盘操作的接口和电路设计有关键盘操作的部分,可分为参数设定和启动、停止等功能操作。1键盘操作实现的功能分析和接口选用(1)参数设定 本系统在开始运行之前要求输入步进电机匀速的运行速度和运行的总步数,所以要进行按键输入数值以传入参数。(2)系统启动、停止等操作 为了实现系统的启动、停止和正、反转,要设置相应的按键和开关进行功能键的处理。接口选用:根据上面对键盘要求的分析,考虑到本系统还要求有显示功能,所以选用8255A 并行接口芯片作为键盘与显示接口。28255A 芯片与单片机的接口由于 8255A 提供三个 8 位口,所以很方便的进行输入输出的扩展,可以实现64 个键的键盘和 8 位的 LED 数码显示的扩展。8255A 芯片的读写信号 RD 、WR ,复位信号 RESET,数据总线 D0 D7均与 CPU 相应的管脚直接相连。片选信号CS与高位地址 P2.7连接和数据存储器统一编址。另外由于考虑停机时中断的需要,由PC 端引出键盘的行扫描线通过“与”门接到单片机的外部中断信号输入端。3矩阵式键盘扫描方式工作原理如硬件电路图所示,在行线上有上挂电阻连接电源,因此无键按下时,各行线均为高电平。当采用列线输出低电平时,有键按下相应行线上出现低电平。根据此原理,CPU 对整个键盘进行扫描,即在已确定有按件按下的行内,CPU不断对列线逐列置低电平,然后检查行线输入状态,确定按键情况。若无键按下时,行线与列线断开,行线上全是高电平,当有键按下时,总有键把某行某列短接,使行线端口不全为高电平,即不全为“1”。此时读到的键值就是按下的键。扫描全部键盘时间很短,仅十几微秒,而按键时间一次至少几十毫秒,所以只要有键按下,都能被扫描到。键是机械开关结构,由于机械触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动,所以要进行键的去抖动处理。用软件延时可以躲过抖动,大约延时10ms即可。 4键盘各键功能规划各数值键及功能键具体设计如下:09 为数字键:用来输入运行参数的值。输入速度键 Fg:若要输入运行速度 Fg,先按下此键,然后在进行速度的输入,按“确认”键完成输入;输入步数键 sn:若要输入运行总步数 sn,先按下此键,然后再进行步数的输入,按“确认”键完成输入;正转/反转键:按下此键即进行步进电机正转和反转的状态的转换;确定键:当速度或步数输入完毕后,按下此键以确认输入;启动键:若速度、步数以及正、反转的状态都确定后,按下此键即可以进入工作状态;停止键:在运行过程中,如按下此键则步进电机停止转动,在非运行状态无效,其功能由中断来实现。5键盘各键的键值以上各数字和功能键的键值如表4.1所示。表4.1 键盘键值和相应的数字键和功能键对应表键的编码格式键代码(行号+列号)数字键与功能键分配行 号列 号0 0 0 00 0 0 000H00 0 0 00 0 0 101H10 0 0 00 0 1 002H20 0 0 00 0 1 103H30 1 0 00 0 0 004H40 1 0 00 0 0 105H50 1 0 00 0 1 006H60 1 0 00 0 1 107H71 0 0 00 0 0 008H81 0 0 00 0 0 109H91 0 0 00 0 1 00AH速度Fg1 0 0 00 0 1 10BH步数sn1 1 0 00 0 0 00CH正转/反转1 1 0 00 0 0 10DH启动1 1 0 00 0 1 00EH停止1 1 0 00 0 1 10FH确认 图4.2 键盘按键分布示意图具体键盘的按键分布如图4.2所示。二、显示部分操作的接口和电路设计1LED 显示器的设计发光二级管将电能转变成光能。利用-族半导体材料可制成发光二极管LED(Libht Emitting Diode)。发光二级管工作在正向偏置时,PN结内载流子复合过程中将释放出能量的大部分以光的形式辐射出来。实际光辐射在约2mA电流强度下便已开始。光强的增加与电流强度成正比。七段一位数码显示器是由发光二极管芯片黏结在印制电路板的规定位置上,采用塑料反射框罩灌封环氧树脂而形成的。本设计选用国类常见型号BS225,直流工作电流每段35mA,采用脉冲驱动,响应速度快。LED 显示器的发光二极管有两种连接方法,共阳极接法和共阴极接法。本设计中采用共阴极接法。七段发光二极管,再加上一个小数点位,共计八段,因此提供给 LED 显示器的字形代码正好一个字节。用 LED 显示器显示十六进制的字形代码在表4.3中列出。在程序中把这些代码放在数组中以供查询。程序中 LED 显示器选用动态显示方式。8255A 的 PB0PB7 作段选码口,经驱动器与 LED 的段相连;8255A 的 PA0PA3 作位选码口,经驱动器与 LED 的位相连。在扫描过程中,在某一瞬间,只让某一位的字位线处于选通状态,其它各位的字位线处于断开状态;同时字段线上输出相应位要显示字符的段选码。这样在每一瞬时,4 位 LED 中只有选通的那一位 LED 显示出字符,而其它 3 位则是熄灭的。同样,在下一瞬时,只显示下一位 LED。如此继续,等 4 位 LED 都依次显示完毕后,循环进行。虽然这些字符是在不同的瞬时轮流显示出来的,但如使每位显示的字符停留显示一段时间,一般为 15ms,由于人眼的视觉惯性,看到的是 4位稳定显示的字符。表4.3 十六进制数字形代码表字型共阳极代码共阴极代码字型共阳极代码共阴极代码00xC00x3Fd0xA10x5E10xF90x06E0x860x7920xA40x5BF0x8E0x7130xB00x4Fg0x900x6F40x990x66r0xAF0x5050x920x6DS0xE20x1D60x820x7Dt0x870x5D70xF80x07P0x8C0x7380x800x7Fn0xAB0x5490x900x6Fu0xE30x1CA0x880x77-0xF70x08b0x830x7C灭0xFF0x00C0xC60x392发光灯状态显示的设计 发光灯是把LED芯片黏结在管座或引线上,经键合内引线(一般为的金丝或的硅铝丝),然后用环氧树脂包封而成的一种器件。 为了显示系统的运行状态,分别选择红、绿发光灯来显示系统处于监控状态和运行状态。这两个发光灯可以用一个I/O口来控制。用单片机的端口P3.0驱动 LED发光灯的电路如图4.3所示。 发光二级管正向工作电压一般为1.5V,工作电流为520mA;3.5V/6mA=500,故红绿两个LED的正极都经过500的限流电阻拉到+5V,LED2的负极接到P3.0端口上,而LED1经过反相器接到的P3.0端口上,这样,当P3.0端口输出“0”电位时则LED2亮,LED1熄灭;P3.0 端口输出为“1”电位则LED2熄灭,LED1亮。这样就可以用 LED1、LED2 即红绿灯来指示步进电机的运行状态。图4.3 红绿发光二级管与单片机接口电路图4.2.3 定时和报警电路的设计一、 定时电路图4.4 蜂鸣器接口电路图步进电机升降速的控制是通过改变脉冲的时间间隔来实现的,而其时间间隔由定时器定时来实现。AT89C51 单片机有两个定时器,本系统选用定时器 0 工作在方式 1,其设计和实现见软件设计部分。二、 报警部分操作的接口和电路设计在系统中用蜂鸣器对系统的状态进行提示,如当输入参数错误及停止等操作时,蜂鸣器响叫以配合信号灯提示操作的进行。蜂鸣器的接口和电路设计如图4.4所示。蜂鸣器的耗电量很低,因此可以用晶体管来驱动。此时,只要在 P3.1 输出“1”电位及“0”电位的变化信号,则蜂鸣器就会发出声音。由 P3.1 输出方波经晶体管进行放大,以推动蜂鸣器,在使用时就发出声音,作为提示。由于利用晶体管做放大,停止声音时令晶体管 OFF,所以 P3.1 的输出为“1”电位。具体的程序实现见附录(另册)的源程序部分的 beep.c 模块。4.2.4步进电机的脉冲分配一、 驱动电路总体设计方案拟定输出通道的设计内容是确定通道结构和元件装置,合理选择驱动电路。本系统的输出通道也就是控制步进电机的通道,由于 AT89C51 的P1口可以作为输出使用,所以将其作为输出通道的控制端口,采用三相六拍的步进电机进行并行控制需要 P1 口中的三位。另外,单片机与步进电机的接口由专用的控制装置来实现。步进电机的脉冲分配由单片机通过软件控制构成环行分配器,功率发大器选用大功率场效应晶体管斩波电源。具体设计如下:本系统采用软件分配法来进行脉冲的分配。即利用查表或计算的方法来进行脉冲的环行分配。把相应的状态代码列入程序数据表中,通过软件可顺次在数据表中提取数据并通过输出接口输出即可,通过正向顺序读取和反向顺序读取数据表可控制电机进行正反转,通过控制读取一次的时间间隔可控制电动机的转速。该方法能充分利用计算机软件资源以降低硬件成本,尤其是对多相的脉冲分配具有更大的优点1。二、脉冲分配实现三相六拍工作方式的脉冲分配的时序图如图4.5所示。在此方式下,绕组的通电顺序是,正转时,按 AABBBCCCAA;反转时,按 AACCCBBBAA进行。 图4.5 三相六拍脉冲时序图三相六拍控制方式的通电状态参看表 2-1,可知正转时 I/O 口应循环输出控制字 0x010x030x020x060x040x05,反转时 I/O 口应循环输出控制字0x050x040x060x020x030x01。在输出最后一个控制字 0x05(正转)或 0x01(反转)后,要修改控制字地址指针,即地址指针重新赋值。正转和反转的六个控制字放在数组中,以 0x00 做结尾字节,用 C51 语言定义如下:uchar code plus7=0x01,0x03,0x02,0x06,0x04,0x05,0x00;/*正转*/uchar code minu7=0x05,0x04,0x06,0x02,0x03,0x01,0x00;/*反转*/表4.5 步进电机三相六拍环行脉冲分配状态表节拍序号通电相C相(P1.2)B相(P1.1)A相(P1.0)控制字方向正转反转0A0010x011AB0110x032B0100x023BC1100x064C1000x045CA1010x050A0010x01在输出每一个控制字之前,判断地址指针中的内容是否为 0x00。如果是 0x00,则地址指针重新指向第一个控制字;否则,直接将地址指针中的内容输出到 I/O 口中,然后地址指针加 1。如此循环,便实现步进电机的连续运转。4.2.5 步进电机驱动电源的设计一、步进电机的技术参数本系统选择反应式步进电机。具体的产品的型号为:110BF003,技术数据见表4.4。表4.4 110BF003 步进电机技术数据相数步距数()电压(V)电流(A)保持转矩(Nm)空载启动转矩(步/s)运行频率(步/s)30.75/1.58067.8415007000 二、驱动电源设计步进电机的工作特性在很大程度上取决于驱动电源的特性,对其每一相绕组来说,驱动电源相当于一个电流无触点开关,理想的驱动电源应使通过绕组的电流尽量接近矩形波。由于电机绕组有很大的电感,要做到这一点是困难的9。 传统的双极型功率晶体管驱动电路有两种型式,一种是应用于小功率步进电机的单电源驱动线路,另一种是应用于功率步进电机的高、低压双电源驱动线路。这两种电路的共同问题是损耗大,效率低,而且大功率管易发生击穿故障。大功率场效应晶体管是一种新型的高压、高速大电流器件,它的驱动功率很小,无二次击穿问题,适宜作步进电机的驱动器件。图4.6是应用VMOS管的110BF003步进电机的驱动电路。1.工作原理当分配脉冲到来时,VF1和VF2先导通,步进电机绕组L接入电源,电流迅速上升,当达到6v时,电阻Rs的端电压U1大于电压比较器的同相输入端电压UR,电压比较器输出为低电平,锁住了与非门4023,从而断开VF1。由于绕组中电流不会突变,将通过 VD4继续流动,这个电流将逐渐衰减,并在某一数值(一般取额定电流的 90%左右)使电压比较器输出变高,再次接通VF1,这样在进给脉冲持续期间,始终保持绕组中有一定幅值的电流流过。当分配脉冲消失时,VF1和VF2均断开,绕组向电源送回能量,并形成很陡的电流脉冲后沿。图4.6 驱动电路原理图2.分立元件选择P2口输出脉冲电流幅值为1.2mA左右,足够带动与非门4203和74LS04,VF1的开关驱动由选用的三级管3DA87(耐压100V,放大倍数50)控制,由,,4203输出电流为1mA以上,足够使3DA87工作在开关状态。VF1,VF2可以选择型号为MTP12N20的n沟道VMOS管,漏极电流最大值为12A,漏源击穿电压为200V,阀值电压为2V左右,足以满足要求。 图4.7比较器原理图VD1和VD2选用2AP1,最大整流电流时的正向电压为1.2V。VD3和VD4选用2CZ52D即满足要求,反向峰值电压达到200V。3.比较器选择比较器原理图如图4.7。取Rs=0.1,U1=0.16=0.6V,取流过R2的电流10mA,则R1=1140,RF起到滞回作用:上门限电压:;下门限电压:,选RF=130k。选择低公耗比较器F3078,输入失调电压为0.7V,最大输出电压为5.3V。4.2.5 扩展存储器及扩展芯片地址的确定程序存储器和数据存储器扩展的都是=8K的存储空间,所以需要P0以及P2.0P2.4作为地址线。由于8255A芯片与存储器统一编址,用P2.7作为8255A和数据存储器RAM6264的片选信号,而程序存储器EPROM2764只有一片,可直接将其片选信号接地。于是可得存储器及8255A芯片的存储映像如下:1EPROM2764的地址范围:P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1最低地址:0000H最高地址:1FFFH 2RAM6264的地址范围:P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1最低地址:8000H最高地址:9FFFH 38255芯片的地址:P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1A口地址:7FFCHB口地址:7FFDHC口地址:7FFEH控制口地址:7FFFH映像8255A的地址时,将8255A的A0、A1分别接到锁存后的P0.0、P0.1,P2.7接8255A的片选信号CS,没有连接的地址线设为1,则得到8255A各个端口的地址。4.3 硬件系统的合成及其原理图 系统数据总线为D0D7,地址总线低 8 位由数据线经74LS373锁存器提供,高5位地址由P2口提供。P2.7选通外部数据存储器6264和8255A芯片,2764芯片片选接地。对输出部分的控制信号由 P1.0P1.2 口产生。AT89C51 的四个并行口功能分配如下:P0口:外接程序存储器和数据存储器的地址低位字节,并分时对程序存储器和数据存储器进行读、写操作,对扩展的外设进行读、写。P0.0、P0.1分别接8255A的 A0、A1,以用来选定 8255A 的 PA、PB、PC 及控制口。P1 口:P1.0、P1.1、P1.2 作为控制输出口,外接驱动器。P2 口:P2.0P2.4是程序存储器和数据存储器的部分高位地址线;P2.7 用来选通外部数据存储器 6264 和 8255A 接口芯片。P3 口:由于P3.0、P3.1在本设计中不用来串行输入/输出,所以将 P3.0 作为红、绿 LED 状态显示的接口,P3.1 外接蜂鸣器,实现报警功能。在各个电路的设计完成之后,就可以进行硬件合成,就是将各单元的电路按照总体设计的硬件结构框图组合在一起,形成一个完整的硬件系统原理图。在进硬件合成时,重点的考虑以下几点:(1)根据输入输出的信号需要,全面安排微处理器的 I/O 口,查看是否够用,如果不够用,应扩展 I/O 口。(2)检查信号逻辑电平是否兼容。电路中可能兼有 TTL 和 MOS 器件,也可能有非标准的信号电平,若电平不兼容,就要增加电平转换电路。(3)从提高可靠性出发,全面检查电路设计。(4)考虑电源系统。相互隔离的电路必须采用各自独立的电源和地线,切不可混用。同一部分电路的电源,其电压种类应尽量减少。本系统的电源选择现成的产品来提供。(5)合理安排地线系统。第五章 控制系统的软件设计本系统的软件用 C51 语言编写,采用模块化结构。采用指数规律升降速,用定时器中断方式来控制电动机的速度,升降速的控制实际上就是不断的改变定时器装载值的大小。为了便于编制程序,不必每步都计算装载值,可以用阶梯曲线来逼近升降速曲线,即进行离散化处理。对于每一档频率,软件系统可以通过查表方法查出所需的装载值。5.1 软件结构设计进行软件结构设计的任务是确定程序结构、划分功能模块。本系统采用模块化编程,模块化编程是一种软件设计方法,各模块分别编写、编译和调试,最后模块一起连接/定位。模块化编程有以下优点:1模块化编程使程序开发更有效。小块程序更易理解和调试。知道模块的输入和输出就可以直接测试小模块。2当同类的需求较多时,可把程序放入库中以备以后使用。例如,显示驱动,若要再使用显示驱动,由库中把它取出而不需全部的重新编写。3模块化编程使得要解决的问题与特定的模块分离,很容易找到出错的模块,大大简化了调试。本系统软件的模块规划如图5.1所示,各个模块的具体实现见程序流程图部分。各个模块化文件如下:1global.c:定义全局变量类型的模块。2main.c:主程序模块。在主程序模块中,控制系统的流程、对系统的资源进行全面的管理、处理输入与显示等。3initial.c:初始化模块。在初始化模块中,对CPU的寄存器、I/O、中断、外部芯片(如 8255A)、变量等分别进行初始化。4control.c:控制函数模块。升降速由控制函数来实现,在升降速控制函数中实现步进电机的走步,累计走过的步数。当控制函数中等待时间到,则响应定时器中断服务函数。5keyinput.c:键盘输入处理模块。本系统的键盘显示接口采用 8255A 芯片,由键盘扫描函数来实现对键盘的处理功能。在键盘输入处理模块中,调用显示函数对输入的键盘数据进行显示。6display.c:七段 LED 显示输出模块。显示函数 display 将键盘输入的数实时的显示出来,并可以显示操作提示。7operate.c:计算参数模块。在函数 operate 中,根据输入的步数和运行速度计算降速段各档的定时时间间隔及各档的步数。函数 keyconvert 和函数 hexbcd 分别实现对键值的转换和拆分处理。图5.1 主要程序模块图8interupt.c:中断服务函数模块。在定时器中断服务函数 Timer0ISR 中,向步进电机送下一个延时参数。函数 INT0ISR 是用来处理在运行的过程中,根据其相应的键值来判断是否按下了“停止”键,如是,对其进行处理。9led.c:LED 显示运行状态模块。在此模块中,函数 Redledon 用来表示程序运行在监控状态下,即步进电机处于停止状态。而函数 Greenledon 用来指示步进电机处于运行状态。10beep.c:蜂鸣器报警模块。蜂鸣器响叫函数 beep 是用来起提示作用的,在此函数中,可以设定响叫的次数、声音的长短及声音的高低。11delay.c:延时程序模块。延时函数是用软件来实现延时,用于键盘显示中的延时和蜂鸣器的响叫函数中的延时。5.2 系统的程序流程图5.2 主程序流程图在划分了软件的结构之后就是进行系统的流程图设计,按照各个模块实现的功能分别做出各个模块的流程图。一、main.c 模块流程图在主程序模块中主函数负责管理和控制整个系统模块的流程,实现的主要功能有:(1)进行系统初始化;(2)键盘的扫描和处理;(3)LED 显示的处理;(4)电机的启动;(5)运行状态的显示;(6)中断的管理。主程序的流程图如图5.2所示。在系统上电后,首先对系统进行初始化,然后扫描键盘,使最低位LED显示器显示“0”,以提示输入数据。如果按下输入参数键(Fg或sn),可以输入参数,则显示该输入的数值并对连续的输入的数值进行处理,直到输入“确认”键确认后表明参数值设定完毕,在内存中保存该参数,进行其它的处理。通过键盘可以进行正、反转的设置,如按下一次正/反转键,则变量 direction0 值改变一次,即每按下一次正/反转键,系统的设置在正、反转之间进行转换,相应的在显示器上显示设置的是正转还是反转。用户可以通过键盘查询参数的值,在待机状态下连续按两次参数键(Fg或sn),则在 LED 显示器上显示出输入的参数值,以供用户查询输入的参数正确与否。如果输入错误,可以再按下输入参数键重新输入,直到正确为止。如果输入的参数不符合条件,则显示器会提示用户重新输入。参数设定好后,按下“启动”键,系统开始计算运行参数,然后显示运行状态,启动定时器,开中断,电机启动,经过升速过程、匀速过程和降速过程直至一次的走步结束。回到待机状态下,等待下次输入再进行走步。在电机正常运行期间,如果想停机按“停止”键,则程序转到中断服务函数,在中断服务函数中进行“停止”键的处理,停止电机的运行。二、initial.c 模块流程图在初始化模块中分别进CPU、CPU I/O、变量、定时器、中断和8255A的初始化。各个函数的流程图如图5.35.9所示。 图5.3 上电初始化函数流程图 图5.4 初始化 CPU 函数流程图 图5.5 初始化变量函数流程图 图5.6 初始化 I/O 函数流程图图5.8 初始化中断函数流程图图5.7 8255A命令字设置函数流程图 图5.9 初始化定时器函数流程图三、control.c 模块流程图在控制函数中实现步进电机的走步。首先由给定的速度fg计算出对应的走步周期fgt,以供判断使用。由函数传过来的参数Nd计算到匀速走完时走的总步数sc,从升速表中取出第一档的走步间隔rise1的地址给指针pfi,第一档的走步步数nr1的地址给指针pni。然后根据fgt 进行判断是否为升降速控制。在升降速控制中 flag1 为升降速控制标志,当值为1时是升速,值为 0 时是降速。*pni 为每档速度应走的步数,n 为每档速度送出的脉冲计数变量,在升降速的过程中由 n 和*pni来判断该档的步数是否走完,如果该档的步数走完,将pfi+1指向下一档速度的时间间隔,pni+1指向下一档步数。每走一步都要将总步数计数变量ss+1。当取出的走步间隔*pfi小于fgt时,进行匀速过程的控制,在匀速过程中如 sssc,那么将标志flag1清零,将降速过程第一档速度的时间间隔的地址给指针pfi,第一档速度的步数的地址给指针pni,进行降速过程的处理。在降速过程中如sssn,则总的走步过程结束,步进电机停止运行,从控制函数图5.10 控制函数流程图返回,进行其它的处理。控制函数流程图如图5.10所示。四、keyinput.c 模块流程图在keyinput模块中包括键盘扫描函数kbscan,在扫描函数中首先判断是否有键按下,若有键按下,延时去抖动,然后进行逐行扫描,直到扫描到闭合键为止。闭合键找到后,延时并反复扫描等待键释放。键释放后计算转换后的键值并由函数返回。图5.11 键盘扫描程序流程图数码管上显示“Fg”提示输入参数 Fg;按下输入参数键“sn”,显示“sn”提示输入参数sn;按下正/反转键,如当前正反转变量direction0=1显示正转“F-r”,再按一下转换到反转显示“r-r”;按下确认键来确认参数的输入,重新在最低位显示“0”以提示输入新的数据;当输入“09”数值键时,按照计算器的显示模式显示数值。其流程图如图5.11所示。五、display.c 模块流程图display 模块由显示函数disp(uchar idata *d)构成,在显示函数中首先向命令/状态口送写显示命令,然后循环查询段选码表进行七段LED的各位的显示。其流程图如图5.12所示。 图5.12 显示函数流程图六、operate.c 模块流程图运算模块由计算函数、键值处理函数和数值拆分函数组成。在计算函数中,根据给定的匀速速度,计算降速过程中的运行参数,将计算出来的降速过程中每档的走步周期和走步步数存放在外部数据存储器中,函数返回降速过程的总步数,供主程序查询使用。计算函数的流程图如图5.13所示。图5.13 计算降速运行参数流程图 七、led.c 模块流程图图5.14 红灯亮函数流程图图5.15 绿灯亮函数流程图运行状态显示模块是由红灯亮函数Redledon和绿灯亮函数Greenledon构成,由相应的硬件电路可知,由P3.0的置位和清零便可控制红灯与绿灯的亮灭。在程序中,红灯用来表示程序运行在监控状态,绿灯表示步进电机在工作状态。 八、interupt.c 模块流程图中断模块是由外部中断 0 服务函数和定时器 0 中断服务函数构成。1.外部中断 0 服务函数 INT0ISR 流程外部中断0服务函数是由步进电机运行过程中的键盘按键来触发,在外部中断服务函数中,进行键盘扫描读取按键值,然后判断是否是停止键,如是,进行相应的处理。外部中断 0 服务函数流程图如图5.16所示。图5.16 外部中断 0 服务函数流程图2.定时器中断服务函数 Timer0ISR 流程在定时器中断服务函数中,由正、反转标志判断正、反转,向P1口输入相应的控制字使步进电机走一步。然后,根据该档速度装载定时器初值。定时器中断服务函数流程图如图5.17所示。九、delay.c 模块流程图在键盘扫描函数中,需要延时去抖动等处理。还有在蜂鸣器响叫模块中,需要延时输出0、1的变化信号。延时由delayx1ms(uint count)延迟1ms函数来实现。该函数中count是次数,总共的延时时间为1ms乘以count。延时函数流程图如图5.18所示。图5-17 定时器中断函数流程图 图5-18 延时函数流程图十、beep.c 模块流程图蜂鸣器响叫模块由蜂鸣器响叫函数beep(uchar count,uchar soundlong,uchar tone)构成。其中,count是用来控制响叫的次数,soundlong表示音长,tone表示音调。由 P3.1 输出“1”电位及“0”电位的变化信号,则蜂鸣器就会发出声音。蜂鸣器响叫函数流程图如图5.19所示。图5.20 蜂鸣器响叫函数流程图5.3 程序设计问题分析5.3.1 程序的初始化及变量的定义一、初始化程序中各个寄存器,I/O 口,定时器/计数器,及外接芯片等均需进行初始化。有关定时器、8255A 芯片和中断等的初始化叙述如下:1.定时器的初始化在使用AT89C51的定时器/计数器前,应对它进行编程初始化,主要是对TCON和TMOD编程,计算和装载T/C的计数初值。(1)确定T/C的工作方式编程 TMOD 寄存器定时器0用来控制步进电机发出脉冲的时间间隔。使其工作在方式1,即进行16位定时器定时。所以TMOD初值为TMOD=0x01。(2)计算T/C中的计数初值,并装载到TH和TL在定时器方式下,T/C是对脉冲计数的,若时钟周期振荡频率=12MHz,一个机械周期为1s ,所以,若使T/C工作在定时器方式 1,要求定时s ,则计数初值为:即取存在数组x中,以供装载初值时使用,用C51语言实现如下:TL0=-xk&0xff ; /*取 xk的低8位送定时器的TL0*/TH0=-xk8 ; /*取 xk的高8位送定时器的TH0*/2.8255A芯片的初始化8255A有三种工作方式:方式 0基本输入/输出方式,方式 1选通输入/输出方式和方式 2双向传送方式。8255A 各端口的工作方式,由写入8255A控制口的工作方式控制字来确定。在本系统 8255A 用于键盘显示的接口,由相应的接线方式得知:A 口方式0输出,B 口方式0输出,C口输入,则方式控制字为10001001即0x89。3有关中断的初始化中断的控制主要是实现中断的开关管理和中断优先级的管理。这个管理主要是通过对特殊功能寄存器IE和IP的编程来实现。本系统有两个中断要处理,即定时器0和外部中断0。(1)中断允许寄存器IE在设置中断方式和中断优先级别时,要用IE来使CPU关中断,各中断源的中断也都屏蔽。设置完成后,再用EA使 CPU 开中断,然后允许定时器0定时中断,外部中断0低电平触发方式允许。(2)中断优先级寄存器IP在本系统中,由于从键盘输入的停止操作触发的外部中断比定时器0的定时中断要优先处理,所以设置外部中断0为高优先级,则相应的IP=0x01。二、变量等级与定义C51 语言提供了局部变量、全局变量、静态变量及寄存器变量的存放等级,不同等级的变量会以不同的方式来存放。本系统中的变量尽可能的用局部变量,以节省空间。但在不同的函数之间的参数传递,以及函数的返回值不只一个时要用全局变量来实现。一些标志变量,如定时器中断标志fcycle、停止标志变量fstop等,需要在不同的函数间使用,所以定义成全局变量;而计算各档的步数与定时器的装载值时,其结果分别存放在数组 nd50 、fall50中,由于它要在其它的函数中使用,所以将它们定义成全局变量,放在外部数据存储空间。在编程时为了书写方便及使程序更加清楚、更容易维护,用typedef定义了新的变量类型。例如:typedef unsigned char uchar;typedef unsigned int uint;这样,在编程中就可以用简化的缩写形式如uchar来定义变量的类型5.3.2 存储类型与存储模式的定义C51编译器完全支持51系列单片机的硬件结构,可完全访问51系列硬件系统的所有部分。该编译器通过将变量定义成不同的存储类型的方法,将它们定位在不同的存储区中。存储类型有data,bdata,idata,pdata,xdata,code。表5.1 C51 存储类型与89C51存储空间的对应关系存储类型与存储空间的对应关系data直接寻址片内数据存储区RAM,访问速度快(128字节)bdata可位寻址片内数据存储区,允许位与字节混合访问(16字节)idata间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节)pdata分页寻址片外数据存储区(256字节),由MOVX R0访问xdata片外数据存储区(64K),由MOVX DPTR来访问code代码存储区(64K),由MOVC DPTR访问由表5.1可知,访问片内数据存储器(data,bdata,idata)比访问片外的数据存储器(xdata,pdata)相对快一些,因此可将经常使用的变量置于片内数据存储器,而将规模较大的,或不经常使用的数据置于片外数据存储器中。在本设计中,将一些标志变量如fcycle、fstop,定义为bdata存储类型;将一些常用的局部变量,如循环语句中的循环变量 i、j 等,定义为 data 存储类型;而为了便于指针访问数组,将一些数组变量定义为idata存储类型;由于本设计中,关于定时器装载值的计算用数组存取需要很大的空间,所以此时数组定义为xdata的存储类型,如unsigned int xdata fall50;code存储类型定义数据时,C51会将其定义在代码空间,这里存放指令代码和其它非易变信息,将显示代码定义成此类型。5.3.3 编译预处理的定义C51 语言在程序进行编译之前,会对程序中有“#”号的部分先进行处理,称为编译预处理。编译预处理是由一个叫编译预处理的程序来执行,预处理完成之后,由编译器开始进行编译工作,编译预处理有三大功能:宏定义,文件包含及条件编译。 一、宏定义#define宏定义#define 的格式为,#define宏名 字符串。1.程序中常数的宏定义由于最高连续运行频率及带动负载的最高启动频率在执行程序的过程中保持不变,所以定义成如下形式:#define Fm 5000 /*最高连续运行频率*/#define Fq 750 /*带动负载时的最高启动频率*/2.扩展 I/O 口的宏定义除了 AT89C51 芯片上的 4 个 I/O 口之外,还可以片外扩展硬件 I/O 口,比如本设计中的 8255A 芯片。AT89C51 单片机没有专用的 I/O 指令,其口地址与数据存储器地址是统一编址的,即把一个口当作数据存储器中的一个单元来看待。对于片外扩展的 I/O 口,根据其硬件译码地址,将其视为片外数据存储器的一个单元,可以使用绝对地址宏指令进行定义。 二、C51内部函数的文件包含在程序进行计算降速过程的步数时,用到了数学类函数库中的指数函数,其包含文件为,#include ,函数的定义为,float exp(float x);,函数的作用是计算自变量x的指数。5.3.4 数组查表功能数组的一个非常有用的用途之一就是查表。由于本系统中对升降速过程进行了离散的处理,将各个离散的步数及定时器的装载值以表格的形式存起来,使用表格查找执行起来速度快,所用的代码少。数组的使用非常适合于这种查表方法。另外,在本系统中显示代码表就以数组的形式事先装入 EPROM 中,以供查询使用。用C51语言定义如下:/*要显示的字型代码*/uchar code table25=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77 / 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,0x7c,0x39,0x5e,0x79,0x71,0x6f,0x6D,0x54,0x50,0x08,0x1c,0x78,0x73,0x00;/b, C, D, E, F, g, S, n, r, -, u, t, P, null 降速过程中各档的步数和定时器的装载值在程序中计算完成后保存在数组中,以便使用时查询,由于这些数组比较大,需要的空间也大,所以把它们定义在外部存储空间。在显示时设置dis_buf数组用来存放要显示的各位数字,起到了显示缓存的作用。这些表格性质的数据以数组的形式存放,用指针来访问,充分的利用了C51语言的数组和指针的优点,使程序简洁、高效。5.3.5 中断服务函数的定义在C51语言中,中断子程序可以看成是一般的函数,当有中断发生时,程序会执行完目前的指令后,自动跳到中断服务函数去执行,但在使用中断程序之前,也必须将此中断服务函数加以声明,并且要设置中断号码,其中断服务函数的声明如下:void 函数名称(void) interrupt 中断号码using工作寄存器组其中,interrupt 用以声明“函数名称”是一个中断服务函数,而“中断号码”必须根据AT89C51中断源的向量地址而定,也就是当中断时会自动跳入到那一个中断源所产生的中断服务函数去执行,AT89C51的5个中断源和其中的向量地址及所代表的中断号码如表5.2所示。表5.2 中断源、中断向量和中断号码关系表中断源中断向量中断号码INT00x00030TIMER/COUNTER00x000b1INT10x00132TIMER/COUNTER10x001b3SERIAL PORT0x00234另外,using用以决定当中断发生而执行中断服务函数内的工作寄存器组的选择,AT89C51内部有四个寄存器组,每个寄存器组有8个内存地址,分别是R0R7,总共有32个地址,其关系见表5.3。因此,本系统中断服务函数定义如下:1.定时器 0,使用工作寄存器 1。void Timer0ISR(void) interrupt 1 using 12.外部中断 0,使用工作寄存器 2。void INT0ISR(void) interrupt 0 using 2具体的实现见附录源程序部分。表 5-3 工作寄存器组与内存地址关系表寄存器组寄存器名称内存地址0R0R70x000x071R0R70x080x0f2R0R70x100x173R0R70x180x1f5.3.6 有关定时器精确定时的实现1.定时器时间间隔的讨论步进电机的升降速由定时器的时间间隔来实现,为准确的控制步进电机的升降速必须严格的计算定时器的时间常数。如果采用12MHz时钟,定时器的最大中断周期为65.535ms,相当于步进电机的脉冲频率 15.259Hz,即采用一个定时器来定时分档的最低速度不能低于此值。如果此值不能满足低速的要求,则可用内存单元做中断次数计数,来增加定时间隔。定时器的最小时间常数受步进电机运行频率的限制,同时也必须大于中断服务函数的执行时间。在设计中如最高运行频率是5000Hz,每步的时间间隔为200s (1000000/5000s),即为最小的定时间隔,它应大于从中断服务函数再次回到等待中断处的时间。2.定时器中断的精确定时脉冲周期的大小决定步进电机转速的高低,步进电机高速运行时,脉冲周期的数值一般都在s级,因此必须设计精确的定时方法。在定时器计数时,其它事件可继续进行,当定时器溢出后,它继续定时。由于从定时器装载完重新定时开始至定时器申请中断共经过fit个机器周期,而从申请中断到系统响应中断,再到中断服务中对定时器进行装载,都要花费一定的时间,这个时间形成附加的延时,导致电动机的速度与设定的不符。为实现精确定时,应将上述时间计算在内。由上分析可知,应将定时器TL0、TH0两字节已经计入的机器周期加在装载初值上。用 C51语言编写的中断服务函数如下:void Timer0ISR(void)interrupt 1 using 1/*定时器中断服务函数* / TR0=0; /*停定时器*/TL0+=(-fit)&0xff; /*取高 8 位给 TH0,低 8 位给 TL0*/TH0+=(-fit)8; /*将已经计入的机器周期加在装载初值上*/TR0=1; /*开定时器*/同时,在装载的过程中要停定时器,装载结束后开定时器,实际的装载值也应把这段时间计入。为了精确的确定装载过程中所用的时间,把上面的C51程序编译成汇编语言程序如下。由下面的程序可知,定时器在装载过程中需停13个机器周期,因此把(-fit)加上13后得出的值作为装载值。code 指令代码 指令 C51 指令0798 C28C CLR TCON.4 ;TR0=0079A C3 CLR C ;TL0+=(-fit+13)&0xff079B 740D MOV A,#0DH079D 9509 SUBB A,09H079F 258A ADD A,TL007A1 F58A MOV TL0,A07A3 C3 CLR C ;TH0+=(-fit+13)807A4 740D MOV A,#0DH07A6 9509 SUBB A,09H07A8 E4 CLR A07A9 9508 SUBB A,08H07AB 258C ADD A,TH007AD F58C MOV TH0,A07AF D28C SETB TCON.4 ;TR0=1;在本系统定时器的具体操作由C51语言来实现,程序见中断函数模块。5.3.7 主函数及键盘与显示功能的实现一、主函数控制程序流程的实现主函数控制整个系统的流程,处理键盘扫描及显示功能,整体调用函数控制系统的运行。下面就其中的一些处理进行说明:1.用switch语句实现各个按键的处理由于在键盘扫描完成后,要根据扫描返回的按键值进行相应的处理。在本程序设计中,用C51语言编程很容易实现这个功能,用switch语句进行键值的判断即可,从而实现各个流程的控制。2.判断输入参数值是否符合条件因为对于输入参数Fg和sn的值是有范围的,所以在程序中处理完参数后要判断输入的参数值是否符合条件,如符合继续向下执行程序,否则进行出错处理。对于匀速运行速度Fg,在输入完“确认”键后,判断其值是否在F0和Fm之间,如不是,则蜂鸣器响叫一次并在显示器上显示“FgEr”提示输入参数出错,要求重新输入。只有输入正确参数值的条件下电机才能启动。对于运行总步数sn,由于受到升速和降速过程总步数的限制,所以也要进行处理。在计算降速步数的过程中,根据计算得出的升速和降速过程总步数与输入的要求运行的总步数sn进行比较,如果前者小于后者,那么将降速过程计算的步数返回 0 以供主程序查询。当主程序判断到返回的降速步数为 0 时,蜂鸣器响叫并在显示器上显示“SnEr”提示输入参数sn出错,直到输入的参数值满足条件时才进行电机启动等的处理。二、键盘与显示功能的实现键盘与显示在硬件上由8255A芯片接口来实现。在程序开始时,扫描键盘,等待按键操作,当有键按下时,主函数根据返回的键值进行相应的处理。在电机开始运行后,采用中断的方式响应键盘的输入,中断响应后,再扫描键盘,判断是否是“停止”键,如是,进行“停止”键的处理。键盘扫描函数 kbscan见附录。在程序中,由显示器实现4位数字的显示,要求在每按下一个键时就要显示相应的符号,所以把显示的函数放在键盘扫描的函数中进行循环调用,从而实现显示器的动态扫描,如下面函数中item1。每按下一个键,处理完后都将其键值赋给数组 dis_buf,作为显示函数的实际参数进行显示。具体的实现见函数中item3到item4。在进行数字键的处理时首先用一个标记符 notn 来判断在按下数字键之前是否显示了功能键的提示符,如是,那么进行显示器清空处理,并使标记符 notn=0,以保证下次响应数字键时不作清空处理。标记符 notn 在功能键响应后置为 1,以供响应数字键时判断处理。具体的实现见函数中item2部分。由于本系统中的数字键是采用计算器显示模式来进行显示的,所以在响应数字键后要进行相应的处理。如上面的函数所示,将dis_buf数组中的元素循环移位,并将获得的键值赋给dis_buf0,即可实现以计算器显示模式显示输入的数字。总之,用8255A做键盘与显示的硬件接口,用软件来实现键盘扫描和动态显示的功能,使键盘与显示功能实现起来更加灵活,更容易满足实际的需要。第六章 转速和步数检测系统设计检测系统的示意图如图6.1所示。在系统运行时,为了能够测量运行的速度和步数,采用光电编码器来进行电动机转速和步数的检测。步进电机光电编码器整形放大单片机显示图6.1 检测系统的示意图6.1 光电编码器的工作原理 光电编码器由光源、转盘、遮光板和光敏元件等组成,当光电编码器的转轴与电动机的转轴连接后,转盘与电机转速相同。每当转盘窄缝经过光源与光敏元件之间的空间时,光敏元件就受到照射产生光信号,将光信号转换为电信号,经整形等电路的转换后变成脉冲信号,如图6.2所示。通过计量脉冲的数目,即可测出工作轴的转角,通过测定计数脉冲的频率,即可测出工作轴的转速,并通过数显装置进行显示。图6.2 光电编码器的信号变换图设转盘边缘有360条窄缝,则转盘每转一周发出360个脉冲。用它来控制电动机转子的位置时,每一个脉冲表示转子转过 1 度的角度。检测转速时,设转盘的窄缝数为P,电动机的转速为n(r/min),则脉冲发生器输出脉冲的频率为:(Hz) (6-1)所以通过测量频率即可得到电机的转速。6.2 检测系统的硬件设计检测系统由AT89C52单片机、光电编码器、整形电路、D触发器及显示电路组成。具体硬件图见附件2所示。AT89C52 单片机内部提供3个可编程的16位定时器/计数器,可用于定时和外部事件的计数,利用它可以方便的测量转速和步数。定时器/计数器工作在方式1时是16位的定时器/计数器。从图6.3中可以看出,当C /T = 0时,计数器脉冲输入端的开关接到振荡器 12 分频信号端,这时定时器工作;当C /T =1时,计数器脉冲输入端的开关接到T1脚,这时作为计数器工作,进行从 T1 脚输入的外部事件的计数。 当 GATE=1,定时器/计数器在TR置1后,仅当INT0、INT1为高电平时开始计数,为低电平时停止计数。图6.3 工作于方式1的定时器功能框图采用D型触发器来实现定时器和计数器的同时工作。当 CP=0时,主触发器接收输入信号D,从触发器保持原来状态。CP=1时,输入通道被封锁,主触发器保持CP上升沿到来前一瞬间接收进来的D信号,从触发器使原来加在D端的输入信号出现在输出端,即采用的是CP上升沿触发的D触发器。CP接收经过整形后的脉冲信号,D信号的输入由P1.2来控制,Q输出到单片机的INT0、INT1端口。在程序中,由软件来初始化GATE为“1”,TR0、TR1为“1”,这样仅当INT0、INT1为高电平时开始计数,为低电平时停止计数,即定时器/计数器T/C0、T/C1只受加在INT0、INT1的Q信号控制。外部中断INT0、INT1设置成下降沿触发,这样在转速脉冲信号上升沿开始计数,下降沿停止计数,并产生外部中断,由外部中断服务函数读取数据存入变量中进行处理,计数器 0 和定时器 1 轮流工作,连续测定每个转速的脉冲数和采样周期,计算出相应转速。用 T/C0 来记录给定时间TS内被测信号的脉冲数 N,保证测量时间的起始时刻与被测信号某个脉冲的上升沿同步。用T/C1记录 TS 时间及 TS 时间结束时刻到被测信号下一个脉冲上升沿之间的时间t。设 AT89C52 晶振频率为 12MHz,则T/C1计数脉冲周期为 1s,被测信号 N个完整周期对应的时间 t=(TS+t)s。则脉冲信号的频率为f = N/t (Hz) (6-2)则由(6-1)式步进电机转速为:n = 60f/P = 60N/(Pt) (r/min) (6-3) 测量前使 P1.2=0,即触发器的 D 端输入为 0,开始测量时置P1.2=1,被测信号的下一个脉冲的上升沿到来时,Q由“0”变为“1”,这时INT0、INT1为“1”,则 T/C0、T/C1 同时启动开始工作。T/C1工作在方式116 位的定时器,例如实现 10ms 的定时,定时器1中断定时时间到时,将 P1.2 清“0”,但此时Q的“1”状态将维持到下一个脉冲上升沿。定时器1继续定时直到Q由“1”变成“0”,即INT0、INT1为“0”时,停止定时器/计数器的定时和计数。那么在一个采样周期内整个的测量时间为: t =10000 + (TH1) 256 + (TL1) (s) (6-4)计数器0记录在整个的测量时间t内被测信号的完整周期数N,N可由下式得到: (6-5) 由于外部中断 0 设置成下降沿触发,则在INT0由“1”变为“0”时,停止计数并响应外部中断服务函数。在外部中断服务函数中,由(6-4)式和(6-5)式计算出t和N,然后将结果代入(6-3)式就可以计算出步进电机的转速。这样就完成了一个采样周期的处理,获得了步进电机的转速,在 LED 显示器上实时的显示出来以供查询。另外,当 TS 扫描时间到时,必须及时将P1.2清“0”,才能保证下一个脉冲的上升沿到来时Q由“1”变为“0”。但将P1.2清“0”是在定时器 1 中断服务函数中完成的,而中断响应时间一般在38个机器周期即38s,这就可能出现在响应中断的过程中下一个脉冲上升沿到来,就会多记一个脉冲。但由于计数器0 和定时器1只受Q信号控制,保证同步启动、同步停止,虽然多记了一个脉冲,但这一脉冲的时间也记了下来,因此对测量结果没有影响。AT89C52 单片机除了定时器/计数器0和定时器/计数器1外,还有一个16位的定时器/计数器2,它可用于对外部脉冲的计数。C/T2 =1时,定时器/计数器2为外部事件计数器,计数脉冲来自T2(P1.0)引脚,将光电编码器产生的脉冲信号整形处理后经T2脚输入,对步进电机的步数进行计数,处理后将步数在显示器显示输出以供查询。6.3 检测系统的软件设计由上面的分析可知,系统的主要程序是由主函数、中断服务函数和显示函数组成。其中的显示函数可利用前面的显示模块的显示函数,只要修改一下端口地址即可。图6.4 检测系统主函数流程图6.3.1 检测系统的流程图一主函数流程图主函数主要是进行系统的初始化,即进行定时器/计数器、中断、8255A芯片等的初始化。然后将P1.2置位,定时器、计数器开始工作,开始采样。在主函数中循环等待中断,并在等待的过程中将中断处理返回的转速和步数进行处理,在显示器上进行显示。主函数流程图如图6.4所示。二外部中断 0 服务函数流程图图6.5 外部中断 0 服务函数流程图当外部中断端口有下降沿脉冲时,停止计数,并产生外部中断。在外部中断服务函数中,读取计数和定时数据,计算得出转速。外部中断0服务函数流程图见图6.5所示。三定时器 1 中断服务函数流程图在定时器1的中断服务函数中,要将P1.2清“0”,即停定时器/计数器,然后响应外部中断,在外部中断服务函数中计算转速。定时器1中断服务函数流程图如图6.6所示。6.3.1 检测系统程序图6.6 定时器1 中断服务函数流程图本系统的程序由C51语言来编写,具体的实现见附录5。第七章 结 论本课题按照预定的计划完成了以下工作:1根据步进电机的动力学方程和矩-频特性曲线建立了系统的数学模型,并得出了升降速的控制算法。用VB 语言编写可视化程序,将升速过程离散处理,计算出每档的时间间隔和步数,固化在程序存储器中供程序运行时查询。2根据系统的总体要求进行了系统的硬件设计。以 AT89C51 单片机为核心,扩展外围部件构成了单片机对步进电机的控制系统。分别进行了键盘输入、LED显示、发光二极管状态显示、报警等电路的设计。3对步进电机的脉冲分配和驱动电源进行了设计选型。4用 C51 语言进行模块化程序设计,编写了程序流程和各个流程的函数。对其中的一些关键的技术进行了论述。5用光电编码器、单片机和整形电路设计了转速检测系统,实时的检测步进电机转轴的转速和步数,并在 LED 显示器上显示出来。最后,本课题所开发的单片机对步进电机三相六拍指数规律升降速的并行控制系统,实现了以下功能:键盘进行输入运行参数、启动、停止和查询等操作。显示器能够显示输入数据及运行状态。对输入的参数进行判断,如不符合条件,作出错处理。通过键盘的输入,控制电机带动负载进行预定的工作,实现对角位移或线位移的控制。在实现以上基本功能的前提下,本课题设计在以下方面实现了创新本系统全部采用单片机等能完成专门功能的控制器和控制电路,使得单片机对电机的控制更易实现,性能价格比更高。由C51语言编程来实现单片机对步进电机的控制,加快了软件的开发速度,缩短了开发周期。另外,利用C51 语言可以很容易地进行单片机的移植工作,有利于产品中单片机的重新选型。本系统采用升降速定位控制,避免了以要求的速度直接启动,而因该速度已超过极限启动频率不能正常启动,并且可能发生丢步或根本不运行以及停止时发生偏移的情况。在升降速的控制中,用指数规律使得步进电机转子的角加速度的变化和它的输出力矩的变化相适应,缩短所需的升降速时间,使得系统的工作效率更高。参 考 文 献1 张建民,机电一体化系统设计,北京,高等教育出版社,2006:84-1082 陈远龄,机床电气自动控制,重庆,重庆大学出版社,2006.1:163-1783 张毅刚,新编MCS-51单片机应用设计,哈尔滨,哈尔滨工业大学出版社,2003.7: 53-62,68-76,99-122,153-1664 谭皓强,C程序设计(第二版),北京,清华大学出版社,1999:171-1725 刘恩沧,计算机控制系统分析与设计,武汉,华中科技大学出版社,2006:106 刘威鑫,胡仕兵,王建勤,江娜,用C51语言实现步进电机的运行速度控制,物探化探计算技术,2002.2(1):37 孙建辉,薛安克,步进电机升速过程的微机控制,机电工程,1998,(1):29-318 李仁定,电机的微机控制,北京,机械工业出版社,1999:69-719 陈理壁,步进电动机及其应用,上海,上海科技出版社,2000:5-1010 许永华,李刚,陈科,李逸东,8098 单片机对步进电机的升降速控制,机械与电子,2000,(6):12-1311 阎石,数字电子技术基础,北京,清化大学电子学教研组,1988:197-19912 王永章,杜君文,程国全,数控技术,北京,高等教育出版社,2001.12:261-26413 童诗白,模拟电子技术基础,北京,清华大学电子学教研组,2002:65-6814 李海波,何雪涛,步进电机升降速的离散控制,北京化工大学学报,2003,(1):1-215 陈维山,赵杰,机电系统计算机控制,哈尔滨,哈尔滨工业大学出版社,1999:124-12516 王昊,通用电子元器件的选用与检测,北京,电子工业出版社,2006.1:250-25617 赖麒文,8051单片机C语言开发环境实务与设计,北京,科学出版社,2002:335-33618 余永权,ATMEL89 系列单片机应用技术,北京,北京航天航空大学出版社,2002: 25-2919 马忠梅,籍顺心,张凯,马岩,单片机的C语言应用程序设计,北京,北京航空航天大学出版社,1999:125-12720 房小翠,单片微型计算机与机电接口技术,北京,国防工业出版社,2002,269-26921 王永章,杜文君,程国全,数控技术,北京,高等教育出版社,2005.11:261-26422 李汉军,杨士亮,姬国庆,电机转速的精密测量,电子仪器仪表用户,2000,(1):15-16致 谢致 谢时至毕业设计完成之际,首先我要感谢我的母校四川理工学院对我的辛勤培育,四年来,是学校的老师们传授了我机电专业的相关知识,各项课程设计培养了我独立思考解决问题的能力,没有前面老师们的辛劳,我也不会顺利完成此次设计。设计过程中,指导老师孙祥国给了我自始至终的帮助和指导。孙老师渊博的知识、严谨的治学精神和求实创新的工作作风深深地影响着我,他的教诲一定会使我终生受用。在毕业设计成功完成之际,谨向孙老师致以崇高的敬意和真诚的感谢!同时,我非常感谢物理系马景琦老师在驱动电路方面给我的细心指导,让我受益匪浅。设计中,遇到很多本专业的薄弱环节,软硬件设计方面得到了机电系,物理系,电信系,计算机系的一些同学和朋友的热情帮助,在此一并致谢!感谢学院老师这四年来对我的关心、教导和帮助,在此,祝愿他(她)们身体健康,工作顺利!感谢我的父母,多年来,他们为我的学业付出无数心血。在此,向他们表示深深地感谢!感谢我的朋友,他们在生活上给了我极大帮助,在精神上给予我莫大鼓励!谨以此文献给我的老师、家人和朋友!四川理工学院毕业设计(论文)附录A:步进电机升速过程运行参数计算程序本程序的各个窗体和模块的代码如下:1.窗体 form1 下的程序代码:Private Sub Command1_Click()fc = Val(Text1.Text)H = Val(Text4.Text)Unload Form1Load Form3Form3.ShowEnd SubPrivate Sub Command2_Click()Unload Form1End Sub2.窗体 form3 下的程序代码:Private Sub Command1_Click()Dim t As Single, tr As SingleDim dt As SingleDim fk As SingleDim f0 As SingleDim t1(100) As IntegerDim f(0 To 100) As SingleDim N1(0 To 100) As Integert = 0.25 决定升速快慢的时间常数tr = 0.8dt = tr / H 每个时间段的时间fk = 0f0 =750 步进电机带动负载时的最高启动频率For k = 1 To H 逐段进行计算 f,Nf(k) = fc - fc * Exp(-(k * dt / t)t1(k) = 1000000 / f(k) 计算频率对应的走步时间If f(1) f0 ThenGoto errorEnd Iffk = f(k)N1(k) = f(k) * dtNext k显示输出结果Pic1.Print Tab(45); 实验结果报告单Pic1.Print Tab(40); *Pic1.Print =Pic1.Print 升速各档步数 N1(1 to H)Pic1.Print -For i = 1 To HPic1.Print N( & i & )= & N1(i);If i Mod 8 = 0 Then Pic1.PrintNext iPic1.PrintPic1.Print =Pic1.Print 升速各档速度f(1 to H)Pic1.Print -For i = 1 To HPic1.Print f( & i & )= & f(i);If i Mod 8 = 0 Then Pic1.PrintNext iPic1.PrintPic1.Print=Pic1.Print 升速各档定时装载值Tr(1 to H)Pic1.Print-For i = 1 To HPic1.Print Tr( & i & )= & t1(i);If i Mod 8 = 0 Then Pic1.PrintNext iGoTo end1error:Unload Form3MsgBox (您的输入 H 档数不满足条件,请重新输入!)Load Form1Form1.Showend1:End SubPrivate Sub Command2_Click()Unload Form3End Sub3模块 module1 下的程序代码如下:Public fc As Single在标准模块中对全局变量进行说明Public H As Integer四川理工学院毕业设计(论文)附录B:步进电机控制系统程序#include /*绝对宏指令的包含语句*/#include #define uchar unsigned char#define Fm 5000 /*最高连续运行频率*/#define Fq 750 /*带动负载时的最高启动频率*/#define PA8255 XBYTE0x7ffc /*定义8255A的数据口和命令口*/#define PB8255 XBYTE0x7ffd#define PC8255 XBYTE0x7ffe#define COM8255 XBYTE0x7fffuchar code forward=0x01,0x03,0x02,0x06,0x04,0x05; /*正转控制字*/uchar code backward=0x05,0x04,0x06,0x02,0x03,0x01; /*反转控制字*/uchar code table25=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77 / 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,0x7c,0x39,0x5e,0x79,0x71,0x6f,0x6D,0x54,0x50,0x08,0x1c,0x78,0x73,0x00;/b, C, D, E, F, g, S, n, r, -, u, t, P, null unsigned int xdata rise50;unsigned int xdata fall50;uchar bdata notn,fg=0,sn=0;uchar idata *heading;uchar bdata fcycle=1; /*定时器中断标志位置初值*/*定时器中断服务函数* /void Timer0ISR(void)interrupt 1 using 1 TR0=0; /*停定时器*/ TMOD=0x01; /*定时器0工作在方式1*/TL0+=(-(*timer_initial)&0xff; /*取高 8 位给 TH0,低 8 位给 TL0*/TH0+=(-(*timer_initial)8; /*将已经计入的机器周期加在装载初值上*/TR0=1; /*开定时器*/fcycle =0;/*外部中断 0 服务函数*/void INT0ISR(void) interrupt 0 using 3P1=0x00;/*延时 1ms 函数*/void dl_1ms(void) uchar i;for(i=20;i0;i-)/*显示函数*/void display1(uchar idata *p)uchar sel,i;COM8255A1=0x89;sel=0x01;for(i=0;i5;i+) PA8255B1=table*p; /*PB 口为段码口*/PB8255A1=sel; /*PA 口为位码口*/dl_1ms();p-;sel=sel1;/*键盘扫描函数*
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。