步进电机自动控制系统
- 格式:doc
- 大小:278.50 KB
- 文档页数:24
步进电机运动控制系统设计设计时考虑到CPU在执行指令时可能受到干扰的冲击,导致程序”跑飞”或者进入”死循环”,因此,设计了看门狗电路,使用的是MAXIM公司生产的微处理系统监控集成芯片MAXI813。
本文还详细地给出了相关的硬件框图和软件流程图,并编制了该汇编程序。
步进电机最早是在1920年由英国人所开发。
1950年后期晶体管的发明也逐渐应用在步进电机上,这对于数字化的控制变得更为容易。
以后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解性能、高响应性、信赖性等灵活控制性高的系统中。
在生产过程中要求自动化、省、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微和技术的发展,步进电机的需求量与日俱增,在各个国民领域都有应用。
步进电机是将电脉冲信号变换成角位移或直线位移的执行部件。
步进电机可以直接用数字信号驱动,使用非常方便。
一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。
步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。
在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。
因此非常适合于单片机控制。
步进电机还具有快速启动、精确步进和定位等特点,因而在数控机床,绘图仪,打印机以及光学仪器中得到广泛的应用。
步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。
传统电动机作为机电能量转换装置,在人类的生产和生活进入电气化过程中起着关键的作用。
步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。
基于PID控制的步进电机位置闭环控制系统设计一、引言在现代自动化控制系统中,步进电机广泛应用于各种精密定位和定量控制需求的场景。
步进电机的控制涉及到位置的精确定位和稳定性的维持,这就需要一个有效的闭环控制系统来实现。
PID控制器被广泛应用于步进电机的闭环控制系统设计中,本文将探讨基于PID控制的步进电机位置闭环控制系统的设计原理和实现方法。
二、步进电机简介步进电机是一种特殊的直流电动机,通过控制脉冲信号的频率和顺序来实现精确控制。
步进电机的圆周分为若干等角度的步进角,每个步进角对应一个旋转角度,这使得步进电机在控制方面更加便捷和精确。
由于步进电机无需传感器反馈,因此常用于定量控制和精确位置控制的场合。
三、PID控制器原理PID控制器是一种经典的闭环控制器,其由比例(P)、积分(I)、微分(D)三个部分组成。
比例控制决定输出与偏差的比例关系,积分控制消除系统稳态误差和提高系统的响应速度,微分控制用于抑制系统对于负荷变化的敏感性。
PID控制器采用反馈控制策略,利用实际输出和期望输出之间的偏差来调整控制量。
四、步进电机位置闭环控制系统设计步进电机的位置闭环控制系统设计基于PID控制器。
首先,需要传感器来获得实际位置信息,然后与期望位置进行比较以获取偏差。
接下来,将偏差作为输入,经过PID控制器计算出控制量,并输出给步进电机驱动器。
步进电机驱动器根据控制量控制步进电机的旋转,从而实现位置的精确控制。
五、传感器选择为了获取步进电机的实际位置信息,需要选择合适的传感器。
常用的传感器包括光电编码器和霍尔传感器。
光电编码器具有高精度和高分辨率的特点,但价格较高;霍尔传感器则具有较低的价格和较高的可靠性,但分辨率较低。
根据具体需求和预算可选择合适的传感器。
六、PID参数调整PID控制器的性能很大程度上取决于参数的选择。
比例参数决定了响应的速度和稳定性,过大的比例参数会导致系统震荡,过小则导致响应速度慢;积分参数消除稳态误差,过大的积分参数会导致系统震荡,过小则无法消除稳态误差;微分参数能够抑制系统对负荷变化的敏感性,过大的微分参数会导致系统噪声,过小则无法起到抑制作用。
内蒙古科技大学本科生毕业设计说明书(毕业论文)题目:基于AT89C51单片机的步进电机控制系统设计学生姓名:学号:专业:自动化班级:自动化06-3班指导教师:基于AT89C51单片机的步进电机控制系统摘要步进电机是数字控制系统中的一种执行元件,它能按照控制脉冲的要求,迅速起动,制动,正反转和调速。
具有步距角精度高,停止时能自锁等特点,因此步进电机在自动控制系统中,特别是在开环的控制系统中得到了日益广泛的应用。
本文以单片机和环形脉冲分配器为核心设计的步进电机控制系统,通过软硬件的设计调试,实现步进电机能根据设定的参数进行自动加减速控制,使控制系统以最短的时间到达控制终点,而又不发生失步的现象;同时它能准确地控制步进电机的正反转,启动和停止。
硬件是以AT89C51单片机为核心的控制电路,主要包括:环形脉冲分配器、键盘显示电路、步进电机的驱动电路等。
软件部分采用C语言编程,主要包括键盘显示程序、步进电机的调速程序、停止判断程序等。
关键词:步进电机控制系统;调速;单片机Based on AT89C51 Single-chip ComputerStepping Motor Control SystemAbstractStepping motor is a kind of digital control system components. It can achieve quick start-up, positive inversion, stopping and speed control, according to the control pulse. It has high precision step angle, and can be self-locking when it keeps still. As these characteristics, stepping motor in automatic control system, especially in the open loop control system has been widely applied.This article mainly focuses on taking Single-chip Computer and cycle pulse distributor as the core, and designing the stepping motor control system. Through the design of the software and hardware debugging, it realizes controlling the step motor’s acceleration and deceleration automatically, according to parameter setting. Making the system arrive the end point with the shortest time, but not occur outing of step. Besides it can accurately achieve start-up, positive inversion and shutdown. Hardware takes AT89C51 as the core of control circuit, mainly including: cycle pulse distributor, keyboard and display circuit, stepping motor driving circuit, etc. Software part adopts the C language programming, mainly including keyboard and display program, stepping motor speed control program, stop judging program, etc.Key words: Stepping motor control system; speed control; Single-chip Computer目录摘要 (I)Abstract (II)第一章引言 (1)1.1 课题提出的背景和研究意义 (1)1.2 课题的主要研究内容 (2)1.3 本章小结 (2)第二章步进电机控制系统设计 (3)2.1 步进电机的原理 (3)2.1.1 三相单三拍通电方式 (3)2.1.2 三相双三拍通电方式 (5)2.1.3 三相六拍通电方式 (6)2.2 环形脉冲分配器 (8)2.3 续流电路 (12)2.3.1 二极管续流 (13)2.3.2 二极管—电阻续流 (14)2.4 步进电机驱动电路 (15)2.5 步进电机的变速控制 (17)2.5.1 变速控制的方法 (19)2.6 步进电机在自动生产线中的应用 (20)2.7 本章小结 (22)第三章控制系统硬件设计 (23)3.1 硬件系统设计原则 (23)3.2 控制系统组成 (23)3.3 主要元件的选择 (24)3.3.1 单片机的选择 (24)3.3.2 EPROM的选择 (25)3.3.3 可逆计数器的选择 (27)3.4 控制系统接口电路的设计 (27)3.4.1 环形脉冲分配器设计 (27)3.4.2 显示电路设计 (29)3.4.3 外部复位电路设计 (30)3.5 控制系统整体电路设计 (31)3.6 本章小结 (31)第四章控制系统软件设计 (32)4.1 软件系统设计原则 (32)4.2 步进电机控制系统功能设计 (32)4.3 主程序设计 (33)4.3.1 主程序工作过程 (33)4.3.2 主程序工作流程图 (34)4.3.3 定时器T0中断程序流程图 (34)4.4 Proteus仿真 (37)4.5 显示程序设计 (39)4.6 键盘程序设计 (39)4.7 调速程序设计 (41)4.7.1 20BY步进电机参数 (41)4.7.2 步进电机转速与频率的关系 (41)4.8 本章小结 (42)第五章结束语 (43)参考文献 (44)附录 (46)附录A 系统程序(C) (46)附录B 20BY步进电机转速与定时器定时常数关系表 (59)附录C 控制系统电路图 (62)致谢 (63)第一章引言1.1 课题提出的背景和研究意义由于步进电机不需要位置传感器或速度传感器就可以实现定位,即使在开环状态下它的控制效果也是令人非常满意的,这有利于装置或设备的小型化和低成本,因此步进电机在计算机外围设备、数控机床和自动化生产线等领域中都得到了广泛的应用。
步进电机控制方法步进电机是一种常见的电动执行器,广泛应用于各个领域的控制系统中。
它具有结构简单、控制方便、定位精度高等优点,是现代自动化控制系统中必不可少的重要组成部分。
本文将从基本原理、控制方法、应用案例等方面对步进电机进行详细介绍。
1. 基本原理步进电机是一种通过输入控制信号使电机转动一个固定角度的电机。
其基本原理是借助于电磁原理,通过交替激励电机的不同线圈,使电机以一个固定的步距旋转。
步进电机通常由定子和转子两部分组成,定子上布置有若干个线圈,而转子则包含若干个极对磁体。
2. 控制方法步进电机的控制方法主要包括开环控制和闭环控制两种。
开环控制是指根据既定的输入信号频率和相位来驱动电机,控制电机旋转到所需位置。
这种方法简单直接,但存在定位误差和系统响应不稳定的问题。
闭环控制则是在开环控制的基础上,增加了位置反馈系统,通过不断校正电机的实际位置来实现更精确的控制。
闭环控制方法相对复杂,但可以提高系统的定位精度和响应速度。
3. 控制算法控制步进电机的常用算法有两种,一种是全步进算法,另一种是半步进算法。
全步进算法是指将电流逐个向电机的不同线圈通入,使其按照固定的步长旋转。
而半步进算法则是将电流逐渐增加或减小,使电机能够以更小的步长进行旋转。
半步进算法相对全步进算法而言,可以实现更高的旋转精度和更平滑的运动。
4. 应用案例步进电机广泛应用于各个领域的控制系统中。
例如,在机械领域中,步进电机被用于驱动数控机床、3D打印机等设备,实现精确的定位和运动控制。
在医疗设备领域,步进电机被应用于手术机器人、影像设备等,为医疗操作提供准确定位和精确运动。
此外,步进电机还广泛应用于家用电器、汽车控制、航空航天等领域。
总结:步进电机作为一种常见的电动执行器,具有结构简单、控制方便、定位精度高等优点,在自动化控制系统中扮演着重要的角色。
通过本文的介绍,我们了解到步进电机的基本原理、控制方法、算法以及应用案例等方面的知识。
步进电机的单脉冲控制、双脉冲控制、开环控制和闭环控制
步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的,多相时序控制器。
虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机,交流电机在常规下使用。
它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。
因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
步进电机的单脉冲控制与双脉冲控制步进电机的控制有单电压和高低电压控制之分;
单电压控制用一串脉冲信号控制一个电子开关的通、断来控制电机驱动绕组得电、失电;高低电压控制在单电压控制的基础上,用另一串脉冲控制一个电子开关的通、半导通,两个开关串联,两个控制脉冲同频率但不同相位和宽度。
达到给绕组的供电电压全、一半、迅速关断的目的。
步进电机的开环控制和闭环控制步进电机的开环控制
1、步进电机开环伺服系统的一般构成
步进电动机的电枢通断电次数和各相通电顺序决定了输出角位移和运动方向,控制脉冲分配频率可实现步进电动机的速度控制。
因此,步进电机控制系统一般采用开环控制方式。
图为开环步进电动机控制系统框图,系统主要由控制器、功率放大器、步进电动机等组成。
2、步进电机的控制器
1、步进电机的硬件控制
步进电动机在个脉冲的作用下,转过一个相应的步距角,因而只要控制一定的脉冲数,即。
基于stm32的步进电机控制系统设计与实现基于STM32的步进电机控制系统设计与实现1. 概述步进电机是一种非常常见的电动机,在许多自动化系统和工控设备中得到广泛应用。
它们具有精准的定位能力和高效的控制性能。
本文将介绍如何使用STM32微控制器来设计和实现步进电机控制系统。
2. 硬件设计首先需要确定步进电机的规格和要求,包括步距角、相数、电流和电压等。
根据步进电机的规格,选择合适的驱动器芯片,常见的有L298N、DRV8825等。
接下来,将选定的驱动器芯片与STM32微控制器相连。
通常,步进电机的控制信号需要使用到微控制器的GPIO引脚,同时由于步进电机的工作电流比较大,需要使用到微控制器的PWM输出信号来调节驱动器芯片的电流限制。
除此之外,还需要一个电源电路来提供驱动器和步进电机所需的电源。
可以选择使用一个电源模块,也可以自行设计电源电路。
3. 软件设计软件设计是步进电机控制系统的核心部分,主要包括步进电机驱动代码的编写和控制算法的实现。
首先,需要在STM32的开发环境中编写步进电机驱动代码。
根据所选的驱动器芯片和步进电机规格,编写相应的GPIO控制代码和PWM输出代码。
同时,可以添加一些保护性的代码,例如过流保护和过热保护等。
接下来,需要设计和实现步进电机的控制算法。
步进电机的控制算法通常是基于位置控制或速度控制的。
对于位置控制,可以使用开环控制或闭环控制,闭环控制通常需要使用到步进电机的编码器。
对于开环控制,可以通过控制步进电机的脉冲数来控制位置。
通过控制脉冲的频率和方向,可以实现步进电机的转动和停止。
这种方法简单直接,但是定位精度有限。
对于闭环控制,可以使用PID控制算法或者更高级的控制算法来实现位置控制。
通过读取步进电机的编码器反馈信号,可以实时调整控制输出。
这种方法可以提高定位精度和抗干扰能力,但是算法实现相对复杂。
4. 系统实现在完成硬件设计和软件设计后,可以进行系统的调试和实现。
基于FPGA的步进电机控制系统系统架构该控制系统的架构如下图所示:主要包含以下几个模块:1. 步进电机:负责驱动机械运动,实现精确定位和定速运动等功能。
2. FPGA芯片:作为控制系统的核心,负责接收指令并生成相应的控制信号,以驱动步进电机。
3. 电源模块:为步进电机和FPGA芯片提供所需的电源能量。
4. 控制器:与FPGA芯片进行通信,向其发送指令,并获取步进电机的状态信息。
工作原理该控制系统的工作原理如下:1. 控制器通过与FPGA芯片的通信接口,向其发送指令。
指令包括步进电机的转动方式、速度、转动角度等参数。
2. FPGA芯片接收到指令后,根据指令生成相应的控制信号。
控制信号经过驱动电路放大、滤波等处理后,通过驱动器将信号传递给步进电机。
3. 步进电机根据接收到的控制信号,进行精确定位和定速运动。
步进电机的位置信息通过编码器等反馈装置反馈给FPGA芯片。
4. FPGA芯片根据步进电机的状态信息,不断调整控制信号,以实现步进电机的精确控制。
系统特点该基于FPGA的步进电机控制系统具有以下特点:1. 高可靠性:采用FPGA芯片作为控制核心,具有较高的抗干扰能力和可靠性,保证了步进电机的精确控制。
2. 高性能:FPGA芯片的高速运算能力和并行处理能力,使得控制系统能够实时响应指令,实现高速运动和精确定位。
3. 灵活性:FPGA芯片可重新编程,允许灵活定制控制算法和功能,满足不同应用需求。
4. 简化电路:通过集成控制器和驱动电路,减少了电路复杂性,降低了系统成本和维护成本。
应用领域基于FPGA的步进电机控制系统广泛应用于以下领域:1. 机械自动化:如自动装配线、自动化包装设备等,实现对机械运动的精确控制和定位。
2. 机器人技术:如工业机器人、服务机器人等,实现对机器人关节和末端执行器的精确控制。
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件,具有快速启动能力,定位精度高,能够直接接受数字量,因此被广泛地应用于数字控制系统中,如数模转换装置、精确定位、计算机外围设备等,在现代控制领域起着非常重要的作用。
本设计运用了8086 CPU芯片以及74273芯片、8255A芯片和步进电机以及7位小功率驱动芯片ULN2003A、指示灯等辅助硬件电路,设计了步进电机正反转及调速系统。
绘制软件流程图,进行了软件设计并编写了源程序,最后对软硬件系统进行联合调试。
该步进电机的正反转及调速系统具有控制步进电机正反转的功能,还可以对步进电机进行调速。
关键词:步进电机;正反转;调速控制;ULN2003A芯片;8086微机系统1、课程设计任务书1.1任务和目的 (4)1.2设计题目 (4)1.3内容和要求 (4)1.4列出使用元器件和设备清单 (4)2、绪论 (4)3、步进电机的总体方案 (6)4、步进电机的硬件设计 (7)4.1总体设计思路 (7)4.2电路原理图 (10)4.3线路连接图 (11)5、步进电机软件设计 (12)5. 1流程图 (12)5.2控制程序 (14)&调试说明 (19)6.1调试过程 (19)6.2调试缺陷 (19)7、总结收获 (19)8、参考文献 (20)附录:元器件及设计清单1. 课程设计任务书1.1任务和目的掌握微机硬件和软件综合设计的方法。
1.2设计题目步进电机控制系统设计1.3内容和要求1. 基本要求:控制步进电机转动,要求转速1步/1秒;设计实现接口驱动电路。
2. 提高要求:改善步进电机的控制性能,控制步进电机转/停;正转/反转;改变转速(至少3挡);1.4列出使用元器件和设备清单8086cpu可编程并行接口8255指示灯键盘74LS138译码器驱动模块步进电机2. 绪论步进电机又称脉冲电动机或阶跃电动机,国外一般称为Step motor或Steeping motor、Stepper servo Steppe,等等。
步进电机控制方法详解
步进电机是一种电动机,能够将电脉冲转换为机械位移,具有精准定位、无需传感器反馈等优点,在许多行业中得到广泛应用。
步进电机的控制方法多种多样,包括开环控制和闭环控制两种基本方式。
1. 开环控制
开环控制是最简单直接的步进电机控制方法之一。
通过控制每次输入的脉冲数量和频率来控制电机旋转的角度和速度。
开环控制不需要反馈系统,因此结构简单、成本低廉,适用于一些简单的应用场景。
但是开环控制无法实时纠正误差,容易受到外部因素干扰,精度相对较低。
2. 步进电机控制方法详解
在现代步进电机应用中,闭环控制方式更为常见。
闭环控制通过在电机上添加编码器或传感器,实时监测电机的位置、速度和加速度等参数,将这些信息反馈给控制系统,从而动态调整控制电流和脉冲信号,确保电机的运动精准稳定。
闭环控制能够有效消除误差和震动,提高系统的响应速度和稳定性,适用于对精度要求较高的场合。
3. 如何选择合适的控制方法
在选择步进电机控制方法时,需要根据具体应用场景和要求来进行判断:
•如果是一些简单的定位任务,对精度要求不高,可以选择开环控制方法,简单易行。
•如果是需要高精度、高速度的精密定位任务,或是需要长时间稳定运行的场合,建议选择闭环控制方式,确保系统的稳定性和可靠性。
综上所述,步进电机的控制方法多种多样,开环控制和闭环控制各有优劣。
在实际应用中,应根据具体需求来选择合适的控制方式,以达到最佳的控制效果。
步进电机作
为一种重要的执行元件,在自动化控制系统中具有重要的地位和作用,不断推动着工业自动化技术的发展。
基于STM32的步进电机控制系统设计与实现1. 引言步进电机是一种常见的电动机类型,具有定位准确、结构简单、控制方便等优点,在自动化控制领域得到广泛应用。
本文将介绍基于STM32单片机的步进电机控制系统设计与实现,包括硬件设计、软件开发和系统测试等内容。
2. 硬件设计2.1 步进电机原理步进电机是一种将输入脉冲信号转换为角位移的设备。
其工作原理是通过改变相邻两相之间的电流顺序来实现转子旋转。
常见的步进电机有两相、三相和五相等不同类型。
2.2 STM32单片机选择在本设计中,我们选择了STM32系列单片机作为控制器。
STM32具有丰富的外设资源和强大的计算能力,非常适合用于步进电机控制系统。
2.3 步进电机驱动模块设计为了实现对步进电机的精确控制,我们需要设计一个步进电机驱动模块。
该模块主要包括功率放大器、驱动芯片和保护电路等部分。
2.4 电源供应设计步进电机控制系统需要稳定可靠的电源供应。
我们设计了一个电源模块,用于为整个系统提供稳定的直流电源。
3. 软件开发3.1 开发环境搭建在软件开发过程中,我们需要搭建相应的开发环境。
首先安装Keil MDK集成开发环境,并选择适合的STM32单片机系列进行配置。
3.2 步进电机控制算法步进电机控制算法是实现步进电机精确控制的关键。
我们可以采用脉冲计数法、速度闭环控制等方法来实现对步进电机的位置和速度控制。
3.3 驱动程序编写根据硬件设计和步进电机控制算法,我们编写相应的驱动程序。
该程序主要负责将控制信号转换为驱动模块所需的脉冲信号,并通过GPIO口输出。
3.4 系统调试与优化在完成软件编写后,我们需要对系统进行调试和优化。
通过调试工具和示波器等设备,对系统进行性能测试和功能验证,以确保系统工作正常。
4. 系统测试与评估在完成硬件设计和软件开发后,我们需要对系统进行全面的测试和评估。
主要包括功能测试、性能测试和稳定性测试等内容。
4.1 功能测试功能测试主要验证系统是否按照预期工作。
电机控制系统简介电机控制系统是一种用于控制电机运行的系统,它通过控制电流、电压或频率等参数来实现电机的运动控制。
电机控制系统在许多领域中被广泛使用,如工业自动化、交通运输和家用电器等。
本文将介绍电机控制系统的基本原理、分类和主要应用。
基本原理电机控制系统的基本原理是通过改变电机的输入参数来控制电机的运动。
电机的输入参数通常包括电流、电压和频率等。
通过改变这些参数,可以改变电机的速度、转矩和位置等。
电机控制系统通常由电机驱动器和控制器两部分组成。
电机驱动器是将电源输入转换为适合电机工作的电流、电压或频率的设备。
它可以根据不同类型的电机和应用需求,选择不同的驱动方式,如直流驱动、交流驱动和伺服驱动等。
控制器是用于控制电机运行的设备,它通常包括信号传感器、信号处理器和执行器等。
信号传感器用于检测电机的状态和运动信息,如速度、转矩和位置等。
信号处理器将传感器的信号转换为控制信号,并对其进行处理和调整。
执行器根据控制信号来调整电机的输入参数,以实现电机的运动控制。
分类根据电机的类型和控制方式的不同,电机控制系统可以分为多种类型。
常见的电机类型包括直流电机、交流电机和步进电机等。
而控制方式则包括开环控制和闭环控制两种。
直流电机控制系统直流电机控制系统是通过改变直流电压、电流和极性等参数来控制直流电机的运动。
直流电机通常由直流电源和直流电机驱动器组成。
直流电机驱动器可以实现电压调速、电流调速和PWM控制等。
交流电机控制系统交流电机控制系统是通过改变交流电压、频率和相位等参数来控制交流电机的运动。
交流电机通常由交流电源、变频器和控制器组成。
变频器可以实现电压调速、频率调速和矢量控制等。
步进电机控制系统步进电机控制系统是通过改变电流和脉冲信号等参数来控制步进电机的运动。
步进电机通常由驱动器和控制器组成。
驱动器可以实现全步进、半步进和微步进等控制方式。
主要应用电机控制系统在许多领域中都有重要的应用。
下面是一些常见的应用示例:工业自动化电机控制系统在工业自动化中被广泛应用。
基于AT89C52单片机的步进电机控制系统设计摘要:步进电机专用开发系统,适用于数控机床及某些特定条件及系统。
本文通过单片机为开发平台,对步进电机进行控制.采用单片机A T89C52,根据输入的数据转化成的控制信号来控制步进电动机的角位移的一种方法,包括硬件设计和软件设计.整个系统主要由电机驱动电路,声光报警电路,4位LED显示电路,电源电路及核心单片机部分构成。
利用单片机产生步进电机驱动脉冲,通过4×4矩阵键盘能实现对步进电机启动、停止功能的选择以及加速、减速、反转功能的选择,使用方便、操作简单。
其中在步进电机控制器的设计中,重点阐述脉冲产生电路以及对速度的控制,实现对步进电机速度精确控制的开发系统.提高步进电机的步进精度,能够控制三相或四相步进电机。
且电路简单,成本较低,控制方便,移植性强.实用价值高。
关键词:A T89C52;步进电机;脉冲产生Design of Control System for Stepping Motor Based onAT89C52Abstract:A stepper motor dedicated development system,applicable to CNC machine tools and some special conditions and system. In this paper,through the SCM as the development platform,for the stepper motor control。
The paper introduce one way that controls the stepping motor by microcomputer AT89C52 depending on the control signal to which input data convert control the line displacement of the stepping motor,namely simply graph plotter,including its hardware and software。
基于51单片机的步进电机控制系统设计与实现步进电机控制系统是基于51单片机的一种控制系统,它主要用来控制步进电机的转动方向和转速等参数。
下面详细解释一下这个系统的设计和实现。
1. 系统硬件设计步进电机控制系统的硬件主要包括51单片机、驱动电路、步进电机和电源等部分。
其中,驱动电路是控制步进电机的关键,它通常采用L298N芯片或ULN2003芯片等常用的驱动模块。
在硬件设计方面,主要需要考虑以下几个方面:(1)步进电机的种类和规格,以便选择合适的驱动电路和电源。
(2)驱动电路的接线和参数设置,例如步进电机的相序、脉冲频率和电流大小等。
(3)电源的选取和参数设置,以满足系统的供电要求和安全性要求。
2. 系统软件设计步进电机控制系统的软件设计主要包括编写控制程序和调试程序。
其中,控制程序是用来实现步进电机的正转、反转、加速和减速等控制功能,而调试程序则用来检测系统的电路和程序的正确性和稳定性。
在软件设计方面,主要需要考虑以下几个方面:(1)确定控制程序的算法和流程,例如使用“循环控制法”或“PID控制法”等控制方法。
(2)选择编程语言和编译器,例如使用汇编语言或C语言等。
(3)编写具体的控制程序和调试程序,并进行测试和调试,以确保程序的正确性和稳定性。
3.系统实现步进电机控制系统的实现主要包括硬件组装和软件烧录两个部分。
在硬件组装方面,需要按照硬件设计图纸进行零部件的选取和电路的组装,同时进行电源和信号线的接入。
在软件烧录方面,需要使用专用的编程器将程序烧录到51单片机的芯片中,并进行相应的设置和校验。
总之,基于51单片机的步进电机控制系统是一个功能强大、应用广泛的控制系统,可以实现精密控制和自动化控制等多种应用,具有很高的实用价值和研究价值。
文献综述电子信息工程步进电机控制系统的设计摘要:步进电机是一种易于精确控制的执行元件,近几年来随着微电子技术的不断发展步进电机的控制方法也随之变得多种多样。
为了提高步进电机控制系统的动态性以及控制精度,本文献因此提出了一系列关于基于现场可编程门阵列(FPGA)和由数字信号处理器(DSP)构成的步进电机控制系统的设计方法。
关键字:现场可编程门阵列(FPGA);步进电机;数字信号处理器(DSP);引言20世纪后期随着晶体管的发明逐渐应用于步进电机上,使得对于数字化的控制变得更为容易。
如今的步进电机已广泛运用在高定位精度、高分解能、高响应性、信赖性等灵活控制性高的机械系统中[1]。
例如数控机床、计算机设备、自动记录仪等,另外在工业自动化生产线、印刷设备中均有应用。
随着步进电机的应用越来越广泛,步进电机在实时性和灵活性等性能上的要求也越来越高,虽然步进电机的发展迅速,但是在大功率步进电机驱动电源的设计和使用仍然存在问题,很大程度上地限制了大功率步进电机在数控机床、自动控制等技术方面的应用。
一、基本概况步进电机(Stepping Motor)是将电脉冲信号转化为角(线)位移的电元件,当步进驱动器接受脉冲信号后,就会驱动步进电机转动一个固定的角度,即步距角。
因此,通常以通过控制脉冲个数和控制脉冲频率来调节和控制角位移量及电机转动的速度和加速度,从而达到准确的定位和调速的目的。
在非超载的情况下,脉冲信号的频率和脉冲数来决定了电机的转速停止的位置,且不受负载变化的影响。
因此步进电机在速度、位置等控制领域的控制变的非常简单且容易操作。
最早步进电机的原理与今天的反应式步进电机的组成原理基本相同。
随着时代的发展,微型计算机具有多功能的特点,因而步进电动机的控制方式变得灵活和多样。
早期的步进电机的控制系统是分立元件来控制回路,它的缺点是调试安装复杂,要消耗大量元器件,而且定型之后,不容易改变其控制方案。
基于微型计算机的控制系统则是通过软件来控制步进电机,这样能够更好地发挥步进电机的潜力;因此,用微型计算机控制步进电机已经成为一种必然的趋势,并且也符合数字化的时代发展要求。
步进电机控制系统设计目录1绪论 (3)1.1 步进电机概述 (3)1.2 步进电机的特征 (3)1.3 步进电机驱动系统概述 (4)1.4 课题研究的主要内容 (4)2步进电机驱动系统的方案论证 (5)2.1 步进电机驱动系统简介 (5)2.2 步进电机驱动器的特点 (5)2.3 混合式步进电机的驱动电路分类和性能比较 (6)2.3.1 双极性驱动器与单极性驱动器 (6)2.3.2 单电压驱动方式 (8)2.3.3 高低压驱动方式 (9)2.3.4 斩波恒流驱动 (10)2.4 方案的确定 (10)3混合式步进电动机驱动控制系统硬件设计 (11)3.1单片机最小系统 (11)3.2 红外遥控电路 (12)3.2.1 红外发射电路 (12)3.2.2 红外接收电路 (13)3.3 LCD显示电路 (14)3.4 双机通讯 (15)3.5 步进电机驱动部分 (16)3.5.1 单极性步进电机驱动 (16)3.5.2 双极性步进电机驱动 (18)3.6 电源电路 (18)4 软件设计 (19)4.1 主机LCD显示菜单程序 (19)4.2 双机通讯程序 (20)4.3 下位机步进电机驱动程序 (22)5 驱动器试验结果 (24)5.1 概述 (24)5.2 试验内容和结论 (24)总结 (26)参考文献 (27)1绪论1.1 步进电机概述步进电机是将电脉冲信号转换为角位移或线性运动的执行器。
它由步进电机及其动力驱动装置组成,形成开环定位运动系统。
当步进驱动器接收到脉冲信号时,它驱动步进电机以设定方向以固定角度(步进角度)旋转。
脉冲输入越多,电机旋转的角度越大;输入脉冲的频率越高,电机的速度越快。
因此,可以通过控制脉冲数来控制角位移,从而达到精确定位的目的;同时,通过控制脉冲频率可以控制电机转速,从而达到调速的目的。
根据自身结构,步进电机可分为三类:反应型(VR),永磁型(PM)和混合型(HB)。
混合式步进电机具有无功和永磁两种优点,应用越来越广泛。
步进电机自动控制系统设计内容设计用P C机对四相步进电机,方向,步数及自动化控制系统,并编写汇编程序实现相应轻能。
设计要求(1)设计控制系统硬件电机。
(2)由8255键盘控制电机的方向,走的步数,并由数码管显示相应的参数。
(3)在命令执行结束后,由PC内部扬声器发出信号提示。
设备与器材PC机一台,TPC-1实验台一个,并行接口8255一片,步进电机一个,LED数码管4个,74ls164按键11个,GAL芯片一个,74LS245一片。
硬件方案硬件共分成5个模块:①译码驱动电路,②8255控制键盘模块③8255LED显示模块,④步电机驱动模块,⑤步进电机模块a) 译码驱动电路方案一使用适当的门电路来实现不同地址的,用74LS245做数据驱动,缺点:由于只使用门电路,电路连线非常复杂方案二使用76LS138和适当门电路实现译码,相对于方案一电路复杂度有一定的改观,在TPC实验箱上使用这种译码方案方案三使用可编程逻辑器件GAL16V8实现译码功能,用GAL优点:成本低,电路连线少。
本设计选择这个方案来实现译码功能。
a)键盘模块方案一用8255 12个口直接接按键,此方法成本高,不使用行列法,浪费端口,如用行列法只用7个端口。
方案二使用2个74LS273或74LS373控制键盘,其中一个控制行,273反向从键盘中读数据,另一个控制列选,273正向向键盘发数据。
方案三使用7281芯片同时控制键盘和数码,7281通过串行口和总线通信,端口使用少,且操作方便。
方案四PC0~4,PB0~4分别控制16个按键。
由于本模块技术已经成熟,在应用中广泛使用,所以本设计选择此方案来实现。
c) LED数码管显示模块方案一74LS138一片,ULN2803A一片和74HC573一片,来实现显示,74LS138译码送UNL2083A通过UNL2083A控制位,通过74HC573控制数据,本方案,成本较高,要单片机中有使用比较多。
方案二使用一片8255A控制两个74HC573和一个正相驱动器74LS07和一个反相驱动器74LS06分别控制4个LED位选和编码数据传输。
此方案用到了8255A由于模块②中用到的8255A3个口都以使用,再用一个8255A成本比较高。
方案三通过一个片信号,两个74HC373和一个正相驱动器74LS06和一个反相驱动器74LS07分别控制3个LED位选和编码数据传输。
此方案成本低,但是软件实现的点复杂。
方案四使用4个74HC373和控制4个LED编码数据,用8255A PC高位和总线片选信号控制数据输入位选,由于是静态显示,一般用于1个或2个数码管的显示。
方案五使用4个74LS164,通过串行移位来实现LED显示。
成本不高,使用端口少,可以直接通过8255PC7和PB7口,一个做为移位控制,一个送数据。
本设计使用此方案d) 步进电机驱动模块方案一使用4N25光电耦合,隔离步进电机和控制电路的电源,保护电源。
使用达林顿管做为驱动。
方案二使用TIP521光电耦合,隔离步进电机和控制电路的电源,并使用三极管9013进行驱动。
这里用此方案。
e) 步进电机模块方案一方案二实现判断键按下的先后。
本设计使用此方案㈠硬件方案论证1 译码驱动电路译码驱动电路如图001所示,有一片GAL16V8芯片和一片74F245芯片组成。
其中GAL16V8用于译码,在其内部烧入软件,如图把A2~A9接入并译码成/y0、,/y0做74F245芯片用于驱动,由于总线数据信号和各芯片数信号弱,驱动能力差,所以必须在8根总线数据线和各芯片数据线之间加一个双向驱动器74F245。
74F245芯片用于总线和外扩芯片间数据交换时74F245芯片有效,/G为低电平有效,/G连接GAL,/gg端口通过A5A6 A7A8A9,IOW,IOR,AEN来控制,当符合/GG=A9*/A8*/A7*/A6*/A5*/IOR*/AEN+A9*/A8*/ A7*/A6*/A5*/IOW*/AEN这一公式,那么19端口输出为低,74F245允许数据并加强信号。
IOR、IOW也通过GAL16V8进行信号驱动加强。
译码驱动电路如下:2、8255控制键盘模块8255控制键盘,在技术上的已经非常成熟,在这里设计为行列描法对键盘进行控制。
其中PC0、PC1、PC2、PC3控制行选,PC4、PC5、PC6控制列选。
当列选中一列发出0信号时,三行读数据,如有键按下,相应行的电压为0V,即读数为“0”。
反之,无按下那么三位读都为“1”。
键盘编码从第一行到第三行为0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F3、8255LED显示模块如图所示,下图为发光二极管控制电路,用于标志,任务号74LS164为移位寄存器,当CLK来一个正脉冲74LS164移位一次,即我们要给8*4个脉冲信号,并在一次脉冲前给在PC7给出相应的“0”或“1”,在164和数码管之间加一个500欧的限流电阻。
这里设计为阳极数据管。
PC7控制CLK,PC6控制移位补充位。
4、步电机驱动模块8255PA控制四相电机的数据,并通过74LS373锁存,PB0控制74LS373数据是否可以通过。
当PB0为高电平时,74LS373数据可以通过,并送出相应的数据。
使用TIP521光电耦合,隔离步进电机和控制电路的电源,并使用三极管9013进行驱动,达到四相电机的驱动电流。
5、步进电机模块步进电动机的工作原理及运用步进电动机的励磁方式可分为全部励磁及半步励磁。
其中全部励磁又有1相励磁及2相励磁之分,而半步励磁又称为1-2相磁。
图为步进电动机的控制等效电路,适应控制A、B、/A、/B的励磁信号,即可控制步进电动机的转动。
每输出一个脉冲信号,步进电动机只走一步。
因此,依序不断送出脉冲信号,即可步进电动机连续转动。
分述如下:(1)1相励磁法:在每一瞬间只有一个线圈导通。
消耗电力小,精确度良好,但转矩小,振动较大,每送一励磁信号可走1.8度。
若以1相励磁法控制步进电动机正转,其励磁顺序如图所示。
若励磁信号反向传送,则步进电动机反转。
励磁顺序:A->B->C->D->A目前使用最多的励磁方式,每送一励磁信号可走1.8度。
若以2相励磁法控制步进电动机正转,其励磁顺序如图所示。
若励磁信号反向传送,则步进电动机反转。
(3)四相双八拍顺序:AB->-ABC->BC->BCD->CD->CDA->DA->DAB3、步进电动机的负载转矩与速度成反比,速度愈快负载转矩愈小,当速度快至其极限时,步进电动机不再运转。
所以在每走一步后,程序必须DELAY一段时间。
在这里使用四相八拍步进电机。
(2)、软件方案论证根据硬件所选的方案,软件共分成6个模块:①GAL16V8芯片译码电路的编程②主程序模块,③、初始化模块,④、电机数据设置模块⑤、8255四相电机控制模块⑥164和LED显示模块⑦键盘模块GAL16V8芯片译码电路的编程源代码:GAL16V8ADDRESS DECODERHZY 2005-07-12DECODERNC A9 A8 A7 A6 A5 A4 A3 A2 GNDNC GG IOWout IORout Y1 Y0 AEN IOW IOR VCC/Y0=A9*/A8*/A7*/A6*/A5*/A4*/A3*/A2*/IOR*/AEN+A9*/A8*/A7*/A6*/A5*/A4*/A3*/A2*/I OW*/AEN/Y1=A9*/A8*/A7*/A6*/A5*/A4*/A3*A2*/IOR*/AEN+A9*/A8*/A7*/A6*/A5*/A4*/A3*A2*/I OW*/AEN/IOWout=/IOW/IORout=/IOR/GG=A9*/A8*/A7*/A6*/A5*/IOR*/AEN+A9*/A8*/A7*/A6*/A5*/IOW*/AEN DESCRIPTION地址编码表主程序模块主程序模块主要实现三大子功能:⑴对各芯片进行初始化操作⑵根据硬件的连接和抢答的流程把各个功能模块有序的组织起来⑶读任务并根据任务向步进电机送电。
电机数据设置模块以上为设置电机任务流程图,主要是设置转向,步数。
由于人输入的是十进制的,而机器使用16进制计数,所以我们要把十进制转化为十六进制。
在执行任务时,也一样,要把十六进制转化为十进制通过数码管显示。
四相电机八拍正反转动子模块 电机在本系统中,主要是控制方向和控制步数。
主要是通过两子程序来完成,正向八拍子程序和反向八拍子程序,两个子程序没在的区别,主要是送数过程相反,在这里主要以正向程序进行分析。
以下为正转八拍流程图:LS164和LED显示模块设计选用LS164做为数码管的控制源,74LS164做为移位锁存驱动芯片,是8位串行输入并行输出,并行口直接与数码管相连,这里有4 个数码管,用4个164,所以显示需改变,要重新移位送数4*8个。
键盘模块本方案使用4*4键盘,并过8255控制,其中PC0-4控制行,PB0-4控制列。
在需要按键时不断的扫描行(该行送0),并读PB口,如有位为“0”那么可通过送0位和读0位判断是哪个键按下,并将键值送入键盘缓冲区。
调试分析:在设计过程中,不管在硬件设计和软件设计过程中,需要一步一步,全面的设计不能想到点做一点,要全面的考虑。
如在硬件布局中,不能拿到芯片就向往上焊,需要先设计整体布整图在焊接。
GAL调试出现的问题:在*.lst文件中的GAL管脚图中,发现10管脚不为GND,为A2 原因:在写程序时,多写了一个A6,使GAL出错经验总结:以前地认为类似这种错误,在编译时会自动找到,会有出错提示,有思维定式,所以以后写程序时,要注意尽量少出现类似的低级错误。
显示模块调试出现的问题:在上电调试时,发现显示出错,从0到F显示乱码,只控制全灭和全亮。
原因查找思路:①可能是LEDTB出错,少写,移位或者把阳极编码写成阴极编码。
②硬件电路出错,移位输入口AB接错。
③显示子程序出错,在控制4*8次移位时出错多移或少移。
④8255控制出错原因:为①LED编码表出错,由于设计硬件使用右移方式,即从DP,G移到A,但是LEDTB中从高到低为G到A,右移时先移A,所以软硬件不统一,导致,显示出错。
经验总结:设行时思路要清楚,软硬件要统一。
再仔细察一次。
出现问题:光电耦合送1,送0,输出都为高。
原因查找思路:①输入输出接地线出错②输出上拉是阻过小原因:用万用表查得,TIP521已烧掉,此时发现输入输出的限流电阻太小只有200欧,电流太大。
解决方案:限流电阻使用1K电阻经验总结:设行时,要全面的考虑,要很好考虑上拉限流,防止出错。
附页作品实物图:源代码:;---步进电机自动控制系统-------------------------------------------;----向端口送数宏---------------------------------------------------------wp macro port,datmov dx, portmov al, datout dx, alendm;---读端口宏-------------------------------------------------------------rp macro portmov dx, portin al, dxendm;---屏幕显示字符串宏-----------------------------------------------------info macro portmov ah,09hlea dx,portint 21hendm;----延时宏--------------------------------------------------------------- delay macro port,datpush cxpush axmov dx,portmov cx,datmov ah,86hint 15hpop axpop cxendm;------------------------------------------------------------------------------ data segmentc8255_ctl equ 203h; 8255控制口c8255_a equ 200h; 8255A口c8255_b equ 201h; 8255B口c8255_c equ 202h; 8255c口pstb1 db 05h,15h,14h,54h,50h,51h,41h,45h; 四相双八拍正向加电代码pstb2 db 45h,41h,51h,50h,54h,14h,15h,05h; 四相双八拍反向加电代码pslong db 08h; 表示加电方式八相steplong dw 0000h,0000h,0000h,0000h,0000h; 走的步数step1 db 00h; 键盘输入时百位step2 db 00h; 键盘输入时十位step3 db 00h; 键盘输入时个位step dw 0000hdirect db 5 dup (0ah); 旋转方向,0a为正向,0b为反向dir db 0ah;fin db 00h; 一次任务是否完成标志位,00是未完成,01为完成keytb db 0ffh; 键盘输入存储区playtb db 4 dup (00h); 显示缓存存放0到11h,10为全灭,11为全亮,4个数码管dptb db 4 dup (00h); 存放playtb转换过来的LED编码Ctb db 0feh,00h,0fdh,00h,0fbh,00h,0f7h,00h,0efhCtb1 db 0feh,0fdh,0fbh,0f7h,0efh;LED发光二极373输出代码LEDtb db 003h,09fh,025h,00dh,099h,049h,041h,01fh;db 001h,009h,011h,0c1h,063h,085h,061h,071h,0ffh,00h;---------0ff为全灭,11为全亮data endscode segmentassume cs:code,ds:datastart: mov ax, datamov ds, axcall init; 初始化main:call setdata; 设置电机数据mov di, 00hmov si, 00hrunbegin:wp 204h, ctb1[si]wp c8255_ctl, 00001011b; PC5=0 关373mov ax, steplong[di]; 读第di个任务步数;wp 204h,ctb[di]mov step, axcmp step, 0000h; 如果步数为0,执行下一个任务je runnextmov al, direct[si]; 读第di个任务的转向,并存入显示区mov dir, almov playtb+3,alcmp dir, 0ahje run1; 是否正转cmp dir, 0bhje run2; 是否反转run1: call move1; 正转操作cmp fin,00hje run1jmp runnextrun2: call move2; 反转操作cmp fin, 00hje run2jmp runnextrunnext:inc diinc diinc sicmp di,09hja goonjmp runbegingoon: mov playtb+2,0eh;mov playtb+1,0eh;mov playtb, 0eh;mov playtb+3,0eh; 显示Ecall displaydelay 0a000h, 0h; 延时0.005smov playtb+2,0fh;mov playtb+1,0fh;mov playtb, 0fh;mov playtb+3,0fh; 显示Fcall displaydelay 0a000h, 0h; 延时0.005scall soundcall keysetcmp keytb,0ehjne exit1jmp main; 如果按下E继续exit1: cmp keytb,0fhjne goon; 如果按下F退出系统exit: mov playtb+3,10hmov playtb, 10hmov playtb+2,10hmov playtb+1,10hcall displaymov ah, 4ch; 返回DOSint 21h; 返DOS;----初始化子程序--------------------------------------------- init procwp c8255_ctl, 10000010b; 8255PA,PC输出,PB输入wp c8255_c, 0ffhwp c8255_ctl, 00001010b; PC5=0 关373wp c8255_ctl, 00001110b; pc7=0 关ls164retinit endp;--初始化子程序-------------------------------------------;--电机数据设置子程序------------------------------------- setdata procpush sipush axpush dxpush cxmov direct,0ahmov direct+1,0ahmov direct+2,0ahmov direct+3,0ahmov direct+4,0ahsetst: mov si, 00h; 第几个任务mov di, 00hset: wp 204h, ctb[si]mov playtb+2,00h; 设置步数百位00mov playtb+1,00h; 设置步数十位0mov playtb, 00h; 设置步数个位set1: mov al, step1mov playtb+2,al; 设置步数百位mov al, step2mov playtb+1,al; 设置步数十位mov al, step3mov playtb, al; 设置步数个位0mov al,direct[di]; 设置正转反转mov playtb+3,al; 设置正转反转0a call displaydelay 0a000h, 0h; 延时0.005smov playtb+3,010h; 设置正转反转全亮全灭call displaydelay 0a000h, 0h; 延时0.005scall keysetcmp keytb, 0eh; 是否确定jne set10jmp setokset10: cmp keytb, 0ah; 是否为正转je set2cmp keytb, 0bh; 是否为反转je set3;cmp keytb, 0dh; 是否设置下一个量je setstep1; 跳往设置步数百位jmp set1set3: mov direct[di], 0bh; 反转mov playtb+3,0bhjmp setstep1set2: mov direct[di], 0ah; 正转mov playtb+3,0ahsetstep1:mov al, step1mov playtb+2,al; 设置步数百位mov al, step2mov playtb+1,al; 设置步数十位mov al, step3mov playtb, al; 设置步数个位0mov al,direct[di]; 设置正转反转mov playtb+3,al; 设置正转反转0a call displaydelay 0a000h, 0h; 延时0.005smov playtb+2,010h; 设置步数百位全灭call displaydelay 0a000h, 0h; 延时0.005scall keysetcmp keytb, 0eh; 是否确定jne setstep11jmp setoksetstep11:cmp keytb, 0ch; 设置上一个量jne setstep10jmp set1setstep10:cmp keytb, 0dh; 设置下一个量je setstep2cmp keytb,09hja setstep1mov al,keytbmov playtb+2,almov step1,al; 设置步数百位setstep2:mov al, step1mov playtb+2,al; 设置步数百位mov al, step2mov playtb+1,al; 设置步数十位mov al, step3mov playtb, al; 设置步数个位0mov al,direct[di]; 设置正转反转mov playtb+3,al; 设置正转反转0a call displaydelay 0a000h, 0h; 延时0.005smov playtb+1,010h; 设置步数百位全灭call displaydelay 0a000h, 0h; 延时0.005scall keysetcmp keytb, 0eh; 是否确定jne setstep21jmp setoksetstep21:cmp keytb, 0ch; 设置上一个量jne setstep20jmp setstep1setstep20:cmp keytb, 0dh; 设置下一个量je setstep3cmp keytb,09hja setstep2mov al,keytbmov playtb+1,almov step2,al; 设置步数十位setstep3:; 设置步数个位info info_3 mov al, step1mov playtb+2,al; 设置步数百位mov al, step2mov playtb+1,al; 设置步数十位mov al, step3mov playtb, al; 设置步数个位0mov al,direct[di]; 设置正转反转mov playtb+3,al; 设置正转反转0a call displaydelay 0a000h, 0h; 延时0.005smov playtb,010h; 设置步数个位全灭call displaydelay 0a000h, 0h; 延时0.005scall keysetcmp keytb, 0eh; 是否确定je setokcmp keytb, 0ch; 设置上一个量jne setstep4jmp setstep2setstep4:cmp keytb,09hja setstep3mov al,keytbmov playtb,almov step3,al; 设置步数个位jmp setstep3setok: mov al, step1mov playtb+2,al; 设置步数百位mov al, step2mov playtb+1,al; 设置步数十位mov al, step3mov playtb, al; 设置步数个位0mov al,direct[di]; 设置正转反转mov playtb+3,al; 设置正转反转0a call display;mov dl,100mov al,step1mul dlmov steplong[si],axmov dl,10mov al,step2mul dladd steplong[si],axmov al,step3mov ah,00hadd steplong[si],ax; 将步数转化为16进制并保存mov step1, 00hmov step2, 00hmov step3, 00hcmp di,04hjae setoutinc diinc siinc sijmp setsetout: mov playtb+2,0eh;mov playtb+1,0eh;mov playtb, 0eh;mov playtb+3,0eh; 显示Ecall displaydelay 0a000h, 0h; 延时0.005smov playtb+2,0fh;mov playtb+1,0fh;mov playtb, 0fh;mov playtb+3,0fh; 显示Fcall displaydelay 0a000h, 0h; 延时0.005scall keysetcmp keytb,0ehje runst; 按下E表示确定返回cmp keytb,0fhjne setoutjmp setst; 按下F表示取消runst: mov step1, 00hmov step2, 00hmov step3, 00hpop cxpop dxpop axpop siretsetdata endp;--电机数据设置子程序------------------------------------- ;--键盘扫描子程序------------------------------------------ keyset procpush sipush axpush cxpush bxmov keytb, 0ffhwp c8255_ctl,00000001bwp c8255_ctl,00000011bwp c8255_ctl,00000101bwp c8255_ctl,00000111b; 将PC0123,置高mov bx, 00hks0: wp c8255_ctl,bl; PC行输出0rp c8255_b; 读PB口mov ah, alinc blwp c8255_ctl,bl; PC相应行输出1and ah,0fh; 屏蔽前4位cmp ah,0fhjnz ks1cmp bl, 07hje ksoutinc bladd bh, 04h; 标志行,一行有四位所以加4jmp ks0ks1: cmp ah, 0ehjne ks2mov keytb, bhjmp ksoutks2: cmp ah, 0dhjne ks3inc bhmov keytb, bhjmp ksoutks3: cmp ah, 0bhjne ks4add bh, 02hmov keytb, bhjmp ksoutks4: cmp ah, 07hjne ksoutadd bh,3mov keytb, bhksout:pop bxpop cxpop axpop siretkeyset endp;---键盘扫描子程序------------------------------------------ ;--- LED显示子程序------------------------------------------ display procpush sipush axpush cxpush bxpush dimov di, 00hdis: mov cx, 08h; 一个LED右移8位mov al,playtb[di]mov ah,00hmov si,axmov al,ledtb[si]; 转换为相应的LED编码mov dptb[di],aldis0: mov al, dptb[di]ror al, 1; 右移一位jc dis1mov dptb[di],alwp c8255_ctl,00001100b; 移入位是0,pc6置低数据位0 wp c8255_ctl,00001111b; pc7置高wp c8255_ctl,00001110b; PC7置低,一个高脉冲jmp dis2dis1: mov dptb[di],alwp c8255_ctl,00001101b; pc6置高数据位1wp c8255_ctl,00001111b; pc7置高wp c8255_ctl,00001110b; 移入位是1,PC7置低,一个高脉冲dis2: loop dis0inc di; 前一个LED显示数据cmp di,04hjne dispop dipop bxpop cxpop axpop siretdisplay endp;--- LED显示子程序------------------------------------------ ;--- -正转子程序--------------------------------------------- move1 procpush sipush axpush cxpush bxmov cx, 08hmov si, 00hmov fin, 00h;mv1: wp c8255_a, pstb1[si]dec step; 步数减1call con; 十六进制换十进制并存入显示存储区call displaycmp step, 00hje mv10inc sidelay 0140h,00h;??????????延时loop mv1jmp mv1outmv10: mov fin, 01hmv1out:pop bxpop cxpop axpop siretmove1 endp;----正转子程序-------------------------------------------- ;----反转子程序-------------------------------------------- move2 procpush sipush cxpush bxmov cx, 08hmov si, 00hmov fin, 00hmv2: wp c8255_a, pstb2[si]dec step; 步数减1call con; 十六进制换十进制并存入显示存储区call displaycmp step, 00hje mv20inc sidelay 0140h,0000h;??????????延时loop mv1jmp mv2outmv20: mov fin, 01hmv2out:pop bxpop cxpop axpop siretmove2 endp;---十六进制转十进制并存入显示存储区------------------------------------------ con procpush cxpush axmov ax, stepmov cl, 100div clmov playtb+2,almov al,ahmov ah, 00hmov cl, 0ahdiv clmov playtb+1,almov playtb, ahpop axpop cxretcon endp;----警告声子程序--------------------------------------------sound procpush bxpush cxpush dxpush dipush sirp 61hmov ah, alor al, 3wp 61h, al; 开内部扬声器wp 43h, 10110110b; 内部8253初始化wp 42h, 33hwp 42h, 05h; 赋计数初值delay 1a98h, 1h; 延时mov al, ahout 61h, al; 关闭内部扬声器pop sipop dipop dxpop cxpop bxpop axretsound endpcode endsend start。