步进电机自动控制系统

合集下载

步进电机运动控制系统设计

步进电机运动控制系统设计

步进电机运动控制系统设计设计时考虑到CPU在执行指令时可能受到干扰的冲击,导致程序”跑飞”或者进入”死循环”,因此,设计了看门狗电路,使用的是MAXIM公司生产的微处理系统监控集成芯片MAXI813。

本文还详细地给出了相关的硬件框图和软件流程图,并编制了该汇编程序。

步进电机最早是在1920年由英国人所开发。

1950年后期晶体管的发明也逐渐应用在步进电机上,这对于数字化的控制变得更为容易。

以后经过不断改良,使得今日步进电机已广泛运用在需要高定位精度、高分解性能、高响应性、信赖性等灵活控制性高的系统中。

在生产过程中要求自动化、省、效率高的机器中,我们很容易发现步进电机的踪迹,尤其以重视速度、位置控制、需要精确操作各项指令动作的灵活控制性场合步进电机用得最多。

步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。

随着微和技术的发展,步进电机的需求量与日俱增,在各个国民领域都有应用。

步进电机是将电脉冲信号变换成角位移或直线位移的执行部件。

步进电机可以直接用数字信号驱动,使用非常方便。

一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。

步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。

在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。

因此非常适合于单片机控制。

步进电机还具有快速启动、精确步进和定位等特点,因而在数控机床,绘图仪,打印机以及光学仪器中得到广泛的应用。

步进电动机已成为除直流电动机和交流电动机以外的第三类电动机。

传统电动机作为机电能量转换装置,在人类的生产和生活进入电气化过程中起着关键的作用。

步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。

基于PID控制的步进电机位置闭环控制系统设计

基于PID控制的步进电机位置闭环控制系统设计

基于PID控制的步进电机位置闭环控制系统设计一、引言在现代自动化控制系统中,步进电机广泛应用于各种精密定位和定量控制需求的场景。

步进电机的控制涉及到位置的精确定位和稳定性的维持,这就需要一个有效的闭环控制系统来实现。

PID控制器被广泛应用于步进电机的闭环控制系统设计中,本文将探讨基于PID控制的步进电机位置闭环控制系统的设计原理和实现方法。

二、步进电机简介步进电机是一种特殊的直流电动机,通过控制脉冲信号的频率和顺序来实现精确控制。

步进电机的圆周分为若干等角度的步进角,每个步进角对应一个旋转角度,这使得步进电机在控制方面更加便捷和精确。

由于步进电机无需传感器反馈,因此常用于定量控制和精确位置控制的场合。

三、PID控制器原理PID控制器是一种经典的闭环控制器,其由比例(P)、积分(I)、微分(D)三个部分组成。

比例控制决定输出与偏差的比例关系,积分控制消除系统稳态误差和提高系统的响应速度,微分控制用于抑制系统对于负荷变化的敏感性。

PID控制器采用反馈控制策略,利用实际输出和期望输出之间的偏差来调整控制量。

四、步进电机位置闭环控制系统设计步进电机的位置闭环控制系统设计基于PID控制器。

首先,需要传感器来获得实际位置信息,然后与期望位置进行比较以获取偏差。

接下来,将偏差作为输入,经过PID控制器计算出控制量,并输出给步进电机驱动器。

步进电机驱动器根据控制量控制步进电机的旋转,从而实现位置的精确控制。

五、传感器选择为了获取步进电机的实际位置信息,需要选择合适的传感器。

常用的传感器包括光电编码器和霍尔传感器。

光电编码器具有高精度和高分辨率的特点,但价格较高;霍尔传感器则具有较低的价格和较高的可靠性,但分辨率较低。

根据具体需求和预算可选择合适的传感器。

六、PID参数调整PID控制器的性能很大程度上取决于参数的选择。

比例参数决定了响应的速度和稳定性,过大的比例参数会导致系统震荡,过小则导致响应速度慢;积分参数消除稳态误差,过大的积分参数会导致系统震荡,过小则无法消除稳态误差;微分参数能够抑制系统对负荷变化的敏感性,过大的微分参数会导致系统噪声,过小则无法起到抑制作用。

步进电机智能控制系统的设计

步进电机智能控制系统的设计
s t e p p e r mo t o r d r i v e a n d c o n t r o l a r e d i s c u s s e d . Th e d e s i g n h a s t h e v e r s a t i l i t y , c a n b e a c h i e v e d b y a p p r o p r i a t e mo di i f c a t i o n o f i t s c i r c ui t a n d pr o g r a m f o r s y n c h r o n o u s mo t o r ,i mp r o v e t h e s y s t e m , s f l e x i b i l i t y, h a s v e r y hi g h p r a c t i c a l v a l u e . Ke y wo r d s : s t e p p i n g mo t o r ;s i n g l e c h i p mi c r o c o mp u t e r ;c o n t r o l s y s t e m
工业 自
DOI : 1 0 . 3 9 6 9/ j . i s s n . 1 0 0 9 - 9 4 9 2 . 2 0 1 3 . 0 6 . 0 0 4
步进 电机智 能控 制系统的设 计
王 娟
( 贵阳学院, 贵州贵阳 5 5 0 0 0 5 )
摘要 :以受 控电机 为四相六 线制的 步进 电机 为例 ,以S P C E 0 6 1 A 单 片机为控 制核心 ,以双机通 讯接 口为程 序下载通道 ,选用 L 2 9 8 N电机驱动器 ,从硬件和软件方 面 , 对 步进电机驱动及其控制进行 了论述 。该设计 具有通用性 ,可以通过适 当修改其电路 及程序而对于不 同步进 电机 ,提高 了系统控制 的灵活性 ,有着很高 的实用价值 。 关键词 :步进电机 ;单片机 ;控制系统

毕业设计(论文)-基于AT89C51单片机的步进电机控制系统

毕业设计(论文)-基于AT89C51单片机的步进电机控制系统

内蒙古科技大学本科生毕业设计说明书(毕业论文)题目:基于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的步进电机控制系统设计与实现

基于stm32的步进电机控制系统设计与实现基于STM32的步进电机控制系统设计与实现1. 概述步进电机是一种非常常见的电动机,在许多自动化系统和工控设备中得到广泛应用。

它们具有精准的定位能力和高效的控制性能。

本文将介绍如何使用STM32微控制器来设计和实现步进电机控制系统。

2. 硬件设计首先需要确定步进电机的规格和要求,包括步距角、相数、电流和电压等。

根据步进电机的规格,选择合适的驱动器芯片,常见的有L298N、DRV8825等。

接下来,将选定的驱动器芯片与STM32微控制器相连。

通常,步进电机的控制信号需要使用到微控制器的GPIO引脚,同时由于步进电机的工作电流比较大,需要使用到微控制器的PWM输出信号来调节驱动器芯片的电流限制。

除此之外,还需要一个电源电路来提供驱动器和步进电机所需的电源。

可以选择使用一个电源模块,也可以自行设计电源电路。

3. 软件设计软件设计是步进电机控制系统的核心部分,主要包括步进电机驱动代码的编写和控制算法的实现。

首先,需要在STM32的开发环境中编写步进电机驱动代码。

根据所选的驱动器芯片和步进电机规格,编写相应的GPIO控制代码和PWM输出代码。

同时,可以添加一些保护性的代码,例如过流保护和过热保护等。

接下来,需要设计和实现步进电机的控制算法。

步进电机的控制算法通常是基于位置控制或速度控制的。

对于位置控制,可以使用开环控制或闭环控制,闭环控制通常需要使用到步进电机的编码器。

对于开环控制,可以通过控制步进电机的脉冲数来控制位置。

通过控制脉冲的频率和方向,可以实现步进电机的转动和停止。

这种方法简单直接,但是定位精度有限。

对于闭环控制,可以使用PID控制算法或者更高级的控制算法来实现位置控制。

通过读取步进电机的编码器反馈信号,可以实时调整控制输出。

这种方法可以提高定位精度和抗干扰能力,但是算法实现相对复杂。

4. 系统实现在完成硬件设计和软件设计后,可以进行系统的调试和实现。

步进电机自动化控制系统

步进电机自动化控制系统
1 步 进 电机 控 制 系统 方 法
与传统的普通 电机相 比 ,步进电机 以脉 冲信号 为驱动控制 其 角位移位置和方 向的变化 。它通过环形分配器 开关装 置 ,在 功 率放 大器的作用下将励 磁绕组依次与直流 电源相 通 ,进而在 空间 中形成阶跃性跳变 的旋 转磁场 ,驱动转子 步进 式转动 ,转 子 转速大小受脉冲频率控制 。
2 0 1 4 年 第3 期
S c i e n c e a n d T e c h n o l o g y & I n n o v a t i o n I 科技与创新
步进 电机 自动化控 制 系统
张 玉 勇
( 上海 莱士血液制品股份有限公司 ,上海 2 0 1 4 0 1 ) 摘 要 :在机 电一体化 产品 中,步进 电机 作为运动执行元件 ,被广泛地应用在生 产加 工领域 中。然而,随着工业生产强 度 的加 大 ,传 统的步进电机在 精度和可靠性方 面已不 能满足使 用需求,因而,需要对 步进 电机 的控 制机理加 以改善 ,以 提 高其精度和运行 的可靠性。以 2 4 B YJ 4 8四相八步式 电机为例 ,从 步进 电机 的工作原理 出发 ,对通过单 片机 与软 、硬件
Ag 、H g ,这些干扰离子 与氢化物元素相互影 响。 通过试验 ,水样 中这些元素的含量在本方法 的测 定条 件下 ,没 有产生干扰 ,其他 常见 的阴离子没有进行 干扰 。 3 结束语 砷和硒化物均属 于剧毒物质 ,必须要做好对水源 中砷 和硒 含量 的测定 。通过研方法 ,证实了原子荧光光谱法具有灵 敏度 高 、干扰 少 、简便快速 等优 点 ,相信这种方法在 日后测定水样砷 和硒的 含量方面会得到更广泛 的应用 。 参考文献 [ 1 ]范琼. 原子 荧光光谱 法同时测定水样 中的砷 和硒 研究 [ J ]. 安徽预 防 医学杂志 ,2 0 0 6( 0 5).
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

步进电机自动控制系统设计内容设计用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。

相关文档
最新文档