绪论 1.1 步进电机国内外研究现状 步进电动机是一种新型增量式电机,是数字控制系统的一种执行元件。它是利用电脉冲信号进行控制,将电脉冲信号转换成相应的角位移或线位移的电动机。它的位移与输入脉冲信号相对应,步矩误差不长期积累,不需用电刷,电机本体部件少,易于启停、正反转及变速。用步进电机作为驱动装置构成的控制系统,具有成本低,控制简单,容易维护等优点。步进电动机问世后,广泛地应用在等各个领域。做为机床控制、电子瞄准、工业自动化、办公自动化和机器人运动控制中应用的重要执行部件,显示出广阔的发展前景。 步进电动机有多种不同的结构。经过近七十多年的发展,逐渐形成以混合式和反应式为主的产品格局。混合式步进电动机是在同步电动机或者说是在永磁感应子式同步电动机的基础上发展起来的。既有反应式步进电动机基于气隙磁导变化的特征,又有轴向恒定磁场的永磁式步进电动机的特征。其综合了该两类步进电动机的特点,因而性能更好。具有分辨率高,控制功率小等优点,是应用最为广泛的步进电动机种类,至今没发现更合适取代它的产品。缺点是带惯性负载能力差,低频振荡现象严重,高频运行时输出转矩下降。 国外步进电动机研究较早,对步进电机驱动技术的研究一直很活跃,如今正在研究开发以步进电动机为执行机构的高性能伺服系统。目前,这类电动机最大的生产国还是日本。日本有很多公司生产,像JAPAN SERVO,SANYO DENKI等。它们的产品无论是外观质量,内部性能指标,还是生产手段,都处于世界先进水平。而在我国,步进电动机的研制最早始于1958年。经过五十年的发展,目前发展趋于平缓,与国外相比,反应式步进电动机还占大量比例,只是随着近年来大批进口设备大量涌入我国,而这些设备大多数采用了混合式步进电动机,混合式步进电动机才为人们所熟悉。在国外,特别是工业比较发达的国家,步进电动机及其驱动技术早已规模化生产,我国与之相比还有相当大的差距。虽然我国在该类电机的研制和生产上已形成一定规模,但生产规模较小,未形成商品化和系列化,仅处于按用户要求研制定制阶段,与国外产品相比尚无竞争能力。从步进电动机驱动技术发展历史来看,步进电动机的相数不同,有2相、3相、4相、5相、9相等。齿数也不同,使得产品规格品种繁多,生产格局复杂化,对用户选择不利。然而由于步进电动机和其它电机有着很大的差别,具有其它电机所没有的特性。因此,它仍然能根据市场的需求,沿着小型化、高效、低价的方向发展. 步进电动机的使用性能与它的驱动电路有密切的关系,随着电力电子技术及微电子技术及其器件的发展,驱动器的面貌不断改变。最初使用的末级功放元件是可控硅。可控硅虽然触发简单,但关断困难,总的来说线路较复杂、易形成误触发、可靠性也差;且不便于调试和维护、抗干扰能力不好。但随着大功率晶体管的发展目前一般不再采用末级功放元件来驱动控制步进电动机。目前,功率开关管多采用功率场控晶体管(MOSFET)和全控型器件(IGBT)。功率集成电路(PIC)将功率器件、前级驱动电路、控制电路及保护电路等都集成在一起,具有较强的功能和较大的输出功率。用这种器件做成步进电动机驱动器,具有结构简单、性能稳定及运行可靠等优点。目前已应用于中、小功率步进电动机的驱动。驱动器控制电路发展的一个重要方面是集成电路专用芯片的采用。如F/V变换器(LM2917),V/W变换器(SG3525,TL494),微步控制与功率器件集成在一起的芯片(A3955SB)等,更使步进电机驱动器的研制上了一个新台阶,使其性能指标有了显著的提高。使步进电动机的控制系统达到了一个新的水平。其它一些控制技术,如矢量控制,模糊控制,神经网络控制等也获得了飞速发展和应用。步进电动机今后的发展,依赖于新材料的应用,设计手段的完善,以及与驱动技术的最佳配合。首先,精确的分析和设计,模型的建立和完善,是一项重要的基础研究,至今还有很多工作要做,它可以为各类问题的深入分析提供基础,为优化设计指出方向。其次,电力电子技术、微电子技术的发展,高性能永磁材料的应用及优化设计技术起到明显的作用自不待说,驱动技术改进的作用也不容忽视,特别是微步驱动技术的应用和成熟,使步进电动机的分辨率和特性与相数的关系不大,对步进电动机的设计,今后的发展会产生很大的影响,也提出了一系列新的研究课题和方向。 1.2 研究主要内容及其意义 随着步进电动机系统在各种数字控制系统中的广泛应用,各种数字控制系统随步进电动机性能和使用条件的要求也越来越高。这就要求不断研制出高性能高可靠性高集成化低价位的驱动器和低成本的单片机控制满足需求。众所周知,国内对这方面的研究一直很活跃,但是可供选用的高性能的步进电动机驱动器却很少,而且国内的驱动器方面基本都存在着体积大、外形尺寸不规则、性能指标不稳定及远没有达到系列化等问题,这就给驱动器的选用和安装带来了极大的不便,另外,随着国内单片机技术的发展,更精度的步进电动机控制技术也得到很大的发展。国外虽然有通用的各种类型的步进电动机驱动器,但大都存在价格昂贵,与我国的系统连接不匹配等问题。步进电动机不能直接接到交直流电源上工作,而必须使用专用的步进电动机驱动器;在驱动电源的设计方面目前采用更多的是由单片机提供脉冲驱动信号。步进电动机系统的性能,除与电动机自身的性能有关外,也在很大程度上取决于驱动器的性能。步进电动机在运行时,一般有以下问题:各相绕组都是开关工作,多数电动机绕组都是连续的交流或直流,而步进动机各相绕组都是脉冲式供电所以绕组电流不是连续的。电动机各相绕组都是绕在铁心上的线圈,所以都有较大的电感。绕组通电时,电流不能迅速上升至额定值,电流上升率受到限制,绕组断电时,应该电流截止的相不能立即截止。绕组导通和截止都会产生较大的反电势,而截止时反电势将对驱动级器件的安全产生有害的影响。电动机运转时在各相绕组中产生旋转电势,这些电势的大小和方向将对绕组电流产生很大的影响。由于旋转电势基本上与电动机转速成正比,转速越高,电势越大,绕组电流越小,从而使电机输出转矩也随着转速升高而下降。步进电动机的固有分辨率不高,不能精密位移。以应用最广的8极50齿两相混合式步进电动机为例,其步距角为0.9°/1.8°,需配合机械减速机构以达到所需要的脉冲当量精度,但是,机械系统的增加也同时带来了一个误差源。步进电动机在低频运行时的振荡及过冲问题,严重限制了步进电动机的应用范围。对这个问题的解决办法,除了改善负载特性及附加机械阻尼外,还可以在驱动电源方面加以改善,如引入电磁阻尼、采用细分驱动等办法来解决。 在机电一体化中,步进电机是最常用的一种执行电机,它实现了机械中的角度、位移的数字化控制,从而使机械控制的精度大大提高。现代控制技术中普遍采用的方式为开环控制和闭环控制,开环控制结构简单成本低但其精度不是太高;闭环控制可以实现高精度的控制,但其结构复杂投入成本高。步进电机的出现解决了这一技术难题,它使得开环控制的精度和速度大大提高,由它组成的步进式伺服控制系统实现了数字化机械生产过程。步进电机可以直接用数字信号驱动,使用非常方便。一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入时步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置处于定位状态。因此非常适合于单片机控制[2] 1.3 步进电机的单片机控制优点 控制系统对步进电机的控制通过步进电机驱动器来完成。因此它已经被广泛地用于自动控制系统中作为执行元件。原来的步进电机控制系统采用分立元件或者集成电路组成的控制回路,不仅调试安装复杂,要消耗大量元器件,实现起来成本高、费时多,而且一旦定型后,电路就很难改动,因此不得不重新设计控制器。 单片机是一种微型计算机,它在一个集成芯片中,集成有微处理器(CPU)、存储器(RAM和ROM)、基本的I/O接口以及定时/计数部件,即在一个芯片上实现了一台微型计算机的基本功能[3]。 步进电机的控制部分以单片机为主的微处理器控制具有如下优点:1.灵活性和适应性。微处理器的控制方式是有软件完成时,如果需要修改控制规律,一般不必改变系统的硬件电路,只需修改程序即可。在系统调试和升级时,可以不断尝试选择最优参数,非常方便。2.可以实现较复杂的控制,控制精度高。微处理器具有很强的逻辑功能、运算速度快、精度高、有大量的存储单元,因此有能力实现复杂的控制。3.可提供人机界面。在电机控制中要用到键盘和显示器作为人机界面来实现对步进电机的控制。单片机体积小,重量轻,抗干扰能力强,对环境要求不高,价格低廉,指令功能强,运行速度快,可靠性高及灵活性好开发也较为容易,国内近些年来已将其广泛应用[4]。 在该设计中我选用了MSC-51作为步进电机的控制器, 用它来实现步进电机的空载时的一些控制功能。 2.1 步进电动机的基本原理 步进电机是一种将电脉冲转化为角位移的执行机构。步进电机可以直接用数字信号驱动,使用非常方便。一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其没有积累误差的特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单,广泛应用于各种开环控制[5]。 2.2 步进电动机分类 步进电机的品种规格很多,现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM)、混合式步进电机(HB)和单相式步进电机等。 永磁式步进电机一般为两相,转矩和体积较小,步进角一般为7.5度或15度;反应式步进电机一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。 混合式步进电机是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为0.72度。这种步进电机的应用最为广泛,也是本方案所选用的步进电机[6]。 2.3 步进电机的一些基本参数 2.3.1 电机的拍数 完成一个磁场周期性变化所需脉冲用n表示或指电机转过一个齿距角所需脉冲数以四相电机为例,四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A。 2.3.2 电机固有步进角 它表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机给出的值为0.9°/1.8°(表示半步工作时为0.9°、整步工作时为1.8°),这个步距角可以称之为‘电机固有步距角’,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关[7]。 2.3.3 步进电机的相数 产生不同对极N、S磁场的激磁线圈对数,是指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同,一般二相电机的步距角为0.9°/1.8°、三相的为0.75°/1.5°、五相的为0.36°/0.72°。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求。如果使用细分驱动器,则‘相数’将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角[8]。 2.4 步进电机结构 电机转子均匀分布着 40个小齿,定子齿有三个励磁绕阻,其几何轴线依次分别与转子齿轴线错开0、1/3て、2/3て,(相邻两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐,B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1) 2.4.1 步进电机的旋转 如A相通电,B,C相不通电时,由于磁场作用,齿1与A对齐,(转子不受任何力以下均同)。 如B相通电,A,C相不通电时,齿2应与B对齐,此时转子向右移过1/3て,此时齿3与C偏移为1/3て,齿4与A偏移(て-1/3て)=2/3て。 如C相通电,A,B相不通电,齿3应与C对齐,此时转子又向右移过1/3て,此时齿4与A偏移为1/3て对齐。 如A相通电,B,C相不通电,齿4与A对齐,转子又向右移过1/3て ,这样经过A、B、C、A分别通电状态,齿4(即齿1前一齿)移到A相,电机转子向右转过一个齿距,如果不断地按A,B,C,A„„通电,电机就每步(每脉冲)1/3て,向右旋转。如按A,C,B,A„„通电,电机就反转[9]。 由此可见:电机的位置和速度由导电次数(脉冲数)和频率成一一对应关系,而方向由导电顺序决定。 不过,出于对力矩、平稳、噪音及减少角度等方面考虑。往往采用A-AB-B-BC-C-CA-A这种导电状态,这样将原来每步1/3て改变为1/6て。甚至于通过二相电流不同的组合,使其1/3て变为1/12て,1/24て,这就是电机细分驱动的基本理论依据。 不难推出:电机定子上有m相励磁绕阻,其轴线分别与转子齿轴线偏移1/m,2/m……(m-1)/m,1。并且导电按一定的相序电机就能正反转被控制——这是步进电机旋转的物理条件[10]。 2.5 步进电动机的控制原理 由于步进电机是一种将电脉冲信号转换成直线或角位移的执行元件,它不能直接接到交直流电源上,而必须使用专用设备—步进电机控制驱动器,控制器可以发出脉冲频率从几赫兹到几千赫兹可以连续变化的脉冲信号,它为环形分配器提供脉冲序列。环形分配器的主要功能是把来自控制环节的脉冲序列按一定的规律分配后,经过功率放大器的放大加到步进电机驱动电源的各项输入端,以驱动步进电动机的转动。环形分配器主要有两大类:一类是用计算机软件设计的方法实现环形分配器要求的功能,通常称软环形分配器、另一类是用硬件构成的环形分配器,通常称为硬环形分配器。功率放大器主要对环形分配器的较小输出信号进行放大,以达到驱动步进电机的目的[11]。 2.6 步进电动机的特点 步进电动机有如下特点: (1)步进电机的角位移与输出脉冲数成正比,因此当它转一转后,没有累计误差,具有良好的跟随性。 (2)由步进电机和驱动电路组成的开环数控系统,既非常方便、廉价,又非常可靠。同事,它也可以有角度反馈环节组成高性能的闭环数控系统。 (3)步进电机的动态响应快,易于起停、正反转及变速。 (4)速度可在相当宽的范围内平滑调节,低速情况下仍能保证获得很大的转矩,因此一般可以不用减速器而直接驱动负载。 (5)步进电机只能通过脉冲电源供电才能运行,它不能直接用交流电源或直接电源。 (6)步进电机自身的噪声和震动比较大,带惯性负载的能力强[16] 3 主要芯片介绍 3.1 89S5l单片机简介 本次设计以CPU选用89S5l作为步进电机的控制芯片.89S51的结构简单并可以在编程器上实现闪烁式的电擦写数达几万次以上.使用方便等优点,而且完全兼容MCS5l系列单片机的所有功能。AT89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable And erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案[17]。 3.1.1 单片机的引脚功能 (1)VCC(40):电源+5V。 (2)VSS(20):接地,也就是GND。 (3)XTL1(19)和XTL2(18):振荡电路。单片机是一种时序电路,必须有脉冲信号才能工作,在它的内部有一个时钟产生电路,有两种振荡方式,一种是内部振荡方式,只要接上两个电容和一个晶振即可;另一种是外部振荡方式,采用外部振荡方式时,需在XTL2上加外部时钟信号。 (4)PSEN(29):片外ROM选通信号,低电平有效。 (5)ALE/PROG(30):地址锁存信号输出端/EPROM编程脉冲输入端。 (6)RST/VPD(9):复位信号输入端/备用电源输入端。 (7)EA/VPP(31):内/外部ROM选择端 (8)P0口(39-32):双向I/O口。 (9)P1口(1-8):准双向通用I/0口。 (10)P2口(21-28):准双向I/0口[18]。 3.1.2 单片机的主要特性 与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:全静态工作:0Hz-24Hz三级程序存储器锁定、128*8位内部RAM、32可编程I/O线、两个16位定时器/计数器、5个中断源、可编程串行通道、低功耗的闲置和掉电模式、片内振荡器和时钟电路[19]。 (1)振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。输入至其内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度[20]。 (2)芯片擦除: 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外,AT89S51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止[21]。 3.2 L298简介 3.2.1 L298的原理 L298N是一种比较常用的芯片,具有电压高、电流大的特性,同时他还具有两个桥的高电压大电流全桥式驱动器,能够实现驱动直流电动机、步进电机和电感线圈等器件,它通过逻辑电平信号控制,而且同时具有两个使能控制端,另外外部可以增加一个电路,检测电阻将发生的变化反馈给控制电路。L298N芯片作为驱动电机的芯片,可以驱动四相电机,能够调节输出电压,根据电源操作很方便,同时还提供信号,通过单片机的I/O口进行,并且电路较为简单,容易操作且不容易出错,比较方便。 3.2.2 L298概述 L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。 L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。 L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7 V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46 V。输出电流可达2.5 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机。图3-5是L298N功能逻辑图,图3-6是L298N的引脚图[25]。 3.3 光电开关 本系统中所用传感器为FC-SPX302光电开关,该传感器为开关型传感器,四个接线脚分别为“+,L,OUT,-”其输入电压范围广为直流5-24V,L为控制指示端,当“L”与“+”相连时,传感器未检测到物体时LED灯发光,当“L”悬空时则相反,其特点为: 1. 动作模式备有遮光时ON/入光时ON(可切换型) 2. 应答频率为1KHZ的高速响应 3. 入光显示灯明显,容易进行动作确认 4. 电源电压为DC-24V的广范围 5. 备有遮光时入光显示灯灯亮型 其连接电路如图3-7所示: file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps228D.tmp.jpg 4 硬件设计 启动系统后,从单片机的I/O口输出控制脉冲,经过L298N驱动电路对脉冲进行处理,输出能直接控制步进电机的脉冲信号。在负载能力范围允许内,就能实现步进电机独立起停、转向、速度、位置变化的控制。 4.1 总体设计方框图 由4-1图中看以看出以单片机为控制核心。键盘做为外设,进行功能的选择,启动,转速增加,转速减少,停止等操作。1602液晶屏显示实际转速和设定转速。通过L298N来驱动步进电机。把步进电机的实际转速通过单片机外部中断反馈到单片机。调用PID程序,通过改变脉冲周期调节转速。总体设计方框图如图4-1所示 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps22AD.tmp.jpg 4.2 系统仿真图 系统仿真图如图4-2。仿真图是根据实际电路所搭建。是以单片机为核心,L298为驱动,1602作为显示,按键作为输入所搭建的仿真模型。4-2图所示模型处于运行状态。启动仿真模型,选择按键START,模型开始正常运转,通过V+V-改变电机转速,最后选择按键STOP停止仿真。
file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps22CD.tmp.jpg 4.3 步进电动机的控制方式选择 步进电机控制是一个比较精确的控制,步进电机开环控制系统具有成本低、简单、控制方便等优点,在采用单片机的步进电机开环系统中,控制系统的CP脉冲的频率或者换向周期实际上就是控制步进电机的运行速度。系统可用两种办法实现步进电机的速度控制。一种是延时,一种是定时。延时方法是在每个周期完成后调用一个延时子程序,待延时结束后再次执行脉冲输出程序,这样周而复始就可发出一定频率的CP脉冲。延时子程序的延时时间与换向程序所用的时间和,就是CP脉冲的周期,该方法简单,占用资源少,全部由软件实现,调用不同的子程序可以实现不同速度的运行,适合较简单的控制过程。定时方法是利用单片机系统中的定时器定时功能产生任意周期的定时信号,从而可方便的控制系统输出CP脉冲的周期,有点是定时时间准确。本次设计采用第二种方式改变频率,进而来控制速度的方法来实现。 步进电机控制采用闭环控制,具有准确性较高、成本低、简单等优点,
4.4 步进电动机的驱动方式选择 有两种方法驱动步进电机,都是利用CPU驱动,分为直接和间接。这里不采用直接驱动,因为他的缺点很明显,步进电机运转需要足够的电流,而CPU直接驱动不能够提供足够大的电流脉冲;CPU间接驱动,需要先将CPU输出的信号放大,这样就能满足驱动步进电动机的条件,再直接驱动或者再利用控制驱动器来实现要求,这种方法比较稳妥,可以达到目的,优更加安全可靠,这里采用CPU间接驱动步进电机。 步进电机具有两种控制驱动器,一种利用多个功率放大器件驱动电机,放大电路的种类和器件的参数不同,达到的目的就不同,实现的功能也不同,但是选择使用四相步进电机,需要每个信号都放大,电路将比较复杂而且麻烦,电路也会特别不稳定,本次使用电机驱动模块芯片驱动电机。 此次设计利用L298芯片驱动电机,L298芯片能够很好的与单片机结合,进行控制,对于单片机的驱动更方便,与单片机结合能够实现性能较好的步进电机的驱动。这次采用固定斩波频率的PWM恒流斩波驱动方式,可以采用四相双极性步进电机,电压可达到46V,电流可与达到2A。此次步进电机驱动系统的设计比较简单,需要的元件较少,成本很低,电路也简单,可靠性很高,占用空间少。并且通过开发软件,使得计算机的负担降低,准确性变高。同时,L298芯片是独立的,能够十分灵活的应用,可以广泛的适用在步进电机系统中,使得整个电路设计方案简洁,成本低廉,准确性高,使用特别方便。
4.5 键盘电路设计 4.5.1 键盘原理图 键盘具有两种接口的方法,一种是矩阵式接口,另一种是独立式接口。矩阵接口方式接线相对较为复杂,但是资源占用得较少,一般在需要键盘较多的时候使用。独立式接口方式接发结构较为简单,但是占用的资源较多,比较适合需要按键较少的时候使用,本次设计就采用的是独立性键盘接口,其原理图如下 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps22EE.tmp.jpg 4.5.2 键盘功能 此次设计,设计了手动控制电路,实现了动控制、加速控制、减速控制、停止控制、反转控制,分别通过s1、s2、s3、s3控制,具体电路图如下,其中S1实现电机的启动,通过内部检测到s1的变化引发的P1.3的状态改变,来操作程序的运行,最终达到启动电机的目的。至于步进电机的转速就是通过改变点击的脉冲不同二实现的,达到控制转速的目的。 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps231D.tmp.jpg 按键功能表
4.6 显示电路 此次设计,需要通过步进电机的控制,实现显示电路来表示加速、减速。有两种方法可以实现功能,但是如果采用4位段数码管组成显示电路,利用数码管来显示单片机得到的数据,这种方案缺点很明显,需要的元件很多,电路较为复杂,且不容易操作,可读性差,如果设定了数值,就不容易更改,操作起来很麻烦,很难增加其他的功能,而且耗电量很大,电路供电很麻烦。所以本次设计采用了单片机和液晶显示器的结合,实现电机设计和电机的工作状态的显示电路,以方便了解电机的运行状态和转速,同时显示数据。 通过液晶显示数据,比数码管的电路更加简单,而且容易操作,同时液晶显示比较稳定、省电、美观,对于修改数据也比较简单,容易修改功能,可操作性较高,同时读数比较容易,同时能够显示实际转速和设定转速。
file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps233E.tmp.jpg 4.7 测速电路 对于测速电路的设计,采用FA-SPX302光电开关实现功能,电路比较简单,电路如下图所示: file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps237D.tmp.jpg 5 软件设计 步进电机的软件设计,就是通过程序的设计,实现完成环形分配器的要求,进而实现对于转动角度和唯一的目标。开始的是时候,通过判断旋转方向,然后相应的运行对应的程序,同时通过运行正反转程序的相应模型以及脉宽时延程序来实现步进电机的正反转功能。
5.1 PID控制算法 在计算机控制过程中,整个过程采用的是数值计算方法,当采样周期足够小时,这种数值近似计算相当谁确,使离散的被控过程与连续过程相当接近。图5-1为单片机闭环控制系统框图。PID算法是将描述连续过程的微分方程转化为差分方程,然后,根据差分方程编制计算程序来进行控制计算的。 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps238E.tmp.jpg 5.1.1 位置式PID的控制算法 如前所述PID调节的微分方程见公式(5-1) file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps243B.tmp.jpg+ 公式(5-1) 将此微分方程写成对应的差分方程形式。 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps246B.tmp.jpg-=-=+++å 公式(5-2) 公式(5-2)式中ne-第n次采样周期内所获得的偏差信号;1ne--第n-1次采样 周期内所获得的偏差信号;T-采样周期;ny-调节器第rt次控制变量的输出;为了编写计算机程序的方便,现将公式(5-2)写成下列形式 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps247B.tmp.jpg 其中file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps249B.tmp.jpg因为采样周期T,积分常数iT和微 分常数dT选定后皆为常数,因此ak及bk必为常。当调整参数改善控制性能时,也只须调整pk、ak和bk的大小即可。 file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps24BC.tmp.jpg file:///C:\Users\王博\AppData\Local\Temp\ksohtml\wps24CC.tmp.jpg 附录C 程序 #include<intrins.h> #include<reg51.h> #define uint unsigned int #define uchar unsigned char
uint i,j,m,n,flag,t; signed int a,b,c,d; double tt; uchar code LEDData[]="0123456789"; uchar TX[6]={0,}; uchar run[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; 控制口定义 sbit EnA =P2^6; sbit SA1 =P2^2; sbit SA2 =P2^3; sbit EnB =P2^7;
sbit SB1 =P2^4; sbit SB2 =P2^5; sbit en =P3^3; sbit rw =P3^1; sbit rs =P3^0; sbit start=P1^4; sbit vh =P1^5; sbit vl =P1^6; sbit stop =P1^7; 延时1ms程序 void delay0(int t) {int w; for(;t>0;t--) for(w=110;w>0;w--); } 键盘扫描程序 void key() {if(start==0) {delay0(10); while(start==0); {j++; n=1; } } if(stop==0) {delay0(10); while(stop==0); {n--; j=0; } } if(vh==0) {delay0(10); while(vh==0); {m++; a++;} } if(vl==0) {delay0(10); while(vl==0); {m--; b--;} } } 写指令程序 void write_com(uchar com) { rs=0; P0=com; delay0(5); en=1; delay0(5); en=0; } 写数据程序 void write_data(uchar date) { rs=1; P0=date; delay0(5); en=1; delay0(5); en=0; } PID程序 void PID() {uint e1,e2,e3; e1=TX[5]-TX[4]; e2=TX[3]-TX[2]; e3=TX[1]-TX[0]; if(e1>e2>10) { t=10*e1-6*e2+4*e3; } if(2<e1<e2) { t=3*e1-5*e2+2*e3; } 中断0服务程序 void interrupt0() interrupt 1 using 2 {c++; } 定时器0服务程序 void timer0() interrupt 1 { uint e; uint f; TH0=(65536-(1250-t))/256; TL0=(65536-(1250-t))%256; if(f<7) {P2=run[f]; f++; } else {P2=run[f]; f=0; } d++; if(d==m) {if(e<6) {e++; TX[e]=c; } else {e=0; PID(); } c=0; d=0; } } 内部资源初始化 void Init(void) { TMOD=0x11; TH0=(65536-(1250-t))/256; TL0=(65536-(1250-t))%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; IT0=1; EX0=1; IP=0x03; EA=1; ET0=1; TR0=1; en=0; rw=0; write_com(0x38); write_com(0x0c); write_com(0x04); write_com(0x01); write_com(0x80); write_data('S'); write_data('S'); write_data('P'); write_data('E'); write_data('E'); write_data('D'); write_data(':'); write_com(0x80+0x0B); write_data('R'); write_data('/'); write_data('S'); write_com(0x80+0x40); write_data('R'); write_data('S'); write_data('P'); write_data('E'); write_data('E'); write_data('D'); write_data(':'); write_com(0x80+0x4B); write_data('R'); write_data('/'); write_data('S'); } 速度显示 void speeddisplay() { write_com(0x80+0x07); write_data('0'); write_data(LEDData[m/100]); write_data(LEDData[m%100/10]); write_data(LEDData[m%10]); if((m<600)&(m>950)) {write_com(0x80+0x48); write_data(LEDData[(m+1)/100]); write_data(LEDData[(m+1)%100/10]); write_data(LEDData[(m+1)%10]);} else {write_com(0x80+0x47); write_data('0'); write_data(LEDData[m/100]); write_data(LEDData[m%100/10]); write_data(LEDData[m%10]);}; } void main(void) { a=b=c=d=i=0; j=0; m=800; n=1; flag=0; while(1) {key(); if(j==1) {init(); } while(j&&n) {key(); PID(); tt=(1.3*(a+b)); t=tt; speeddisplay(); } if(n==0) {write_com(0x38); write_com(0x0c); write_com(0x04); write_com(0x01); } } }
|