资源描述
毕业设计题 目 ARM体系结构中实现 步进电机的完全控制 学 院 控制科学与工程学院 专 业 自动化 姓 名 学 号 指导教师 二OO 年 月 日目 录摘 要3Abstract41. 绪论51.1 课题的研究背景与目的51.2 ARM的发展现状51.3 步进电机控制的现有方案51.4 设计方案的主要内容及方法概述62. 步进电机的相关知识简介72.1 步进电机简介72.1.1 步进电机分类72.1.2 步进电机的结构92.1.3 步进电机的基本概念92.2 步进电机工作原理102.2.1 步进电机的细分驱动原理102.2.2 细分控制的实现过程122.3 步进电机的一些特点133. ARM的基础知识简介133.1 ARM简介133.1.1 ARM硬件体系结构133.1.2 ARM软件体系结构143.2 ARM程序的工作过程144. ARM嵌入式开发板简介154.1 MagicARM2200开发板简介154.2 ADS集成开发环境及EasyJTAG仿真器简介154.2.1 ADS集成开发环境简介154.2.2 EasyJTAG仿真器简介165. 开发板中步进电机的实现165.1 开发板实现步进电机控制的功能165.2 实现步进电机控制所需的相应软硬件配置165.3 开发板中步进电机的实现165.3.1 ARM微处理器简介175.3.2 ULN2003A简介175.3.3 MTD2009J步进电机细分驱动芯片简介185.4 控制系统的组成及原理186. 用ARM汇编语言和C语言实现对步进电机的控制216.1 步进电机控制的总体设计216.2 软件设计思想226.3 软件设计的总体框图226.4 设计的各种运行模式的程序段236.4.1 主程序段函数236.4.2 控制步进数程序246.4.3 自动运行程序266.4.4 步进运行程序287. 设计系统的验收328. 结论32致 谢33参考文献34附 录35附录一 MagicARM2200开发板外观35附录二 MagicARM2200开发板内部硬件原理图36附录三 MagicARM2200试验箱LPC2200封装图37附录四 控制步进电机程序38ARM体系结构中实现步进电机的完全控制摘 要本文介绍了步进电机的工作原理及相关知识,并基于周立功出产的MagicARM2200教学实验平台,设计并实现了步进电机的完全控制。通过ARM7芯片LPC2290和专用驱动芯片,实现了软件与硬件相结合控制步进电机,达到了对步进电机的最佳控制。根据“线性正弦”波形驱动方法和电流矢量恒幅均匀旋转算法,并通过细分驱动芯片MTD2009J实现了步进电机的细分驱动。通过试验箱键盘输入控制信号,利用ADS1.2开发平台进行程序设计。该系统实现了步进电机的多功能控制,达到了良好的控制效果。其中主要实现的步进电机的控制功能是正反转控制、步进控制、细分控制。关键字:ARM;步进电机;嵌入式;完全控制;细分控制AbstractThis paper introduces the theory of stepper motor and the relevant knowledge. And the stepper motor achieves the optimal control, based on the teaching experiment platform MagicARM2200 which is produced by Zhou. Through the ARM7 chip LPC2290 and dedicated driver chips, we realize the control method of the combination of software and hardware. Ultimately it achieves the best control of the stepper motor. And through the sub-driver chips,which are based on the “linear + sine” wave driver method and current vector constant breadth algorithm, we achieve the subdivision control of stepper motor. The control sign is input by the keyboard of the teaching experiment platform MagicARM2200, and the software based on ADS1.2 platform is designed Multi-purpose control of the stepper motor. By the end, the system achieves a good control of the stepper motor. The main function of this system is implementation of the direction control, stepping control, and subdivision control.Key words: ARM, Stepper motor; Embedded; Optimal control; Subdivision control1. 绪论本文所选课题是ARM体系中实现步进电机的完全控制。由于步进电机的完全控制是实现机器人自由运动的技术基础,ARM嵌入式系统的软硬件体系结构也日益广泛地应用于实现机器人的智能计算;两者的完美结合可以为各种工业控制场合提供一种基本的执行机构;也为将来从事更高级别的面向ARM嵌入式系统的工程实践打好基础。以步进电机的工作原理和控制方法为基础,认真学习ARM 软件体系结构、 ARM 硬件体系结构;在控制电路的设计和搭建的基础上,利用C 语言和汇编语言的混合编程的方法,控制步进电机的完全运行。而本文的创新之处在于对步进电机的细分驱动。细分驱动是每次输入脉冲时,改变绕组中的额定电流。电机转子的每步运动也只是步距角的一部分,这里的绕组电流不是方波,而是阶梯波。电流分成多少个台阶,转子就会以同样的个数转过一个步进角,而将1个步距角细分成若干步的驱动方法称为“细分控制”。细分驱动的特点是可以在不改变电机结构参数的情况下,使得步距角减小,同时使得步进电机运行平稳、提高了匀速性,同时还减弱了震荡。 1.1 课题的研究背景与目的嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、成本、体积、功耗等有严格要求的专用计算机系统。随着计算机不断应用实践,嵌入式系统已集电气、机械、通信等技术于一体,具有速度快、工作方式灵活、可靠性高、信息处理能力强等特点,在工业控制领域中已得到广泛的应用。目前国内工业控制场合中用的嵌入式工控设备大多采用的是以8位单片机(如MCS-51)为内核,有价格低廉、设计较容易、能达到一般要求的优点,但也存在着存储容量小,独立工作时功能较弱,人机交互复杂,操作不方便等问题。如采用功能强大的32位嵌入式微处理器ARM来代替8位单片机,再把控制板与电源、步进电机和被控制设备集成于一体,将形成嵌入式一体化的工业控制机。步进电机是工业控制中的一种常用执行部件,具有控制灵活、价格低等优点,因而在很多设备和装置中被采用。ARM控制步进电机就是将微处理器至于步进电机控制器中,使步进电机能按设定的拍数、单个触发脉冲所走的步数,控制相应的控制逻辑。虽然利用ARM只控制步进电机略显奢华,但对于多信息的受控对象而言,ARM的优点将凸显无疑。1.2 ARM的发展现状 由于ARM技术具有性能高、成本低和耗能小的特点,所以适用于多个领域,比如嵌入式控制、消费或教育类多媒体、DSP和移动式应用等。ARM还提供一系列内核、体系扩展、微处理器和系统芯片方案。由于所有产品均采用一个通用的软件体系,所以相同的软件可在所有产品中运行(理论上如此)。而且ARM体系结构目前被公认为是业界领先的32位嵌入式RISC微处理器结构 ,ARM体系结构为满足ARM合作者以及设计领域的一般需求正稳步发展。 每一次ARM体系结构的重大修改,都会添加极为关键的技术。在体系结构作重大修改的期间,会添加新的性能作为体系结构的变体。随着网络、通信、多媒体和信息家电时代的到来,也给32位嵌入式系统高端应用提供了空前巨大的发展空间。在以后的几年里,ARM将凭借高超的技术和相对低廉的授权方式,赢得越来越多的客户的青睐,将会在越来越多的行业和领域内得到发展和应用。它一方面将应用于高端新兴领域的拓展,另一方面将提升低端控制领域在数据处理能力。 1.3 步进电机控制的现有方案由于步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。多相步进电动机有多相方波脉冲驱动,用途很广。所以,控制步进电机的方法很多。诸如传统单片机、PLC和以ARM为核心控制器等多种方案。采用单片机系统实现步进电机控制,成本较低,但开发难度较大,周期长。这种方案一般适用于产品批量较大、控制系统功能简单、有单片机系统开发经验的用户。而许多品牌的PLC都可选配定位控制模块,有些PLC的CPU单元本身就具有运动控制功能,如松下公司的FP0等。这种方案一般适用于运动过程比较简单、运动轨迹固定的设备,因而也不适合于控制步进电机。综上比较,选用以ARM为核心的控制器,控制步进电机有独特的优点,虽然略显奢华,但控制方法简单,易于实现。1.4 设计方案的主要内容及方法概述基于ARM的步进电机的完全控制,主要实现利用键盘控制步进电机的正反转控制、步进控制、细分控制、及显示功能。设计的整体实现方案如下:先进行硬件电路的设计,软件编程,然后经过信号分配、功率放大、驱动器驱动来控制步进电机运行。硬件的设计主要是利用MagicARM2200试验箱。MagicARM2200是专为嵌入式系统教学精心打造的ARM嵌入式教学实验开发平台,支持多种嵌入式操作系统,有丰富的配套教材和众多的实验例程,提供多种的商业化软件包,是进行嵌入式系统学习的最佳选择。而本设计采用的是LPC2294微处理器。LPC2294是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-STM CPU,并带有256 k字节嵌入的高速Flash存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。LPC2294包含了2个工业标准的UART、和高速I2C接口和2个SPI接口。2个32位的定时器、PWM单元、实时时钟和看门狗。向量中断控制器,可配置优先级和向量地址。通过外部存储器接口可将存储器配置成4组,每组的容量高达16Mb。片内晶振频率范围:130MHz。2个低功率模式:空闲和掉电。通过外部中断将处理器从掉电模式中唤醒,也可通过个别使能或禁止外部功能来优化功耗。正是它具备了这些优点,所以他可以实现比较复杂的控制,适用于工业控制和过程控制。所以选用它来控制步进电机。整体的控制设计方案如下:图1.1 步进电机控制整体方案首先是脉冲信号的产生,脉冲信号的产生由ARM芯片2294产生,信号的占空比为0.3到0.4之间。信号的占空比越大,电机的转速越高。信号产生以后,要控制步进电机的运动,就要加一个电子装置进行驱动,这种装置就是步进电机驱动器。本设计选用的是试验箱自带的ULN2003驱动器。它将控制系统发出的脉冲信号加以功率放大后驱动步进电机。步进电机的转速与脉冲信号的频率成正比,因而控制脉冲信号的频率,可以对电机进行精确调速,而控制脉冲的个数,可以对步进电机进行精确定位。驱动电路完成以后,步进电机要进行细分控制,而细分控制的实质是通过改变相邻两相如A,B的电流大小,以改变合成磁场的夹角来控制电机的转速。转速的改变是由动态平均电流决定的。平均电流越大,则电机力矩越大,要达到平均电流大就需要驱动系统尽量克服电机的反电动势。要实现细分控制,可建立“电流矢量恒幅均匀旋转”细分驱动方法。此方法的实质是对运行于交流同步电机状态的步进电机所受的交流模拟信号在一个周期内细分,即每个细分点对应于一个交流值。本设计需要将ARM板输出的数字信号通过D/A转换器转换为阶梯波,经电平转换、功率放大后输出。控制步进电机的相电压,实现细分驱动。由于输出的是恒定电压,从而避免了脉冲宽度问题带来的感应电压对细分的影响。在完成了硬件设计以后了,就要进行步进电机的软件设计。软件设计主要是运用汇编语言并结合C语言,利用ADS1.2开发平台,编写程序并启动AXD进行JTAG仿真调试。完成对步进电机的完全控制,主要包括对步进电机正反转控制,步进控制,利用周立功的键盘电路和数码管显示来实现对步进电机的监控,细分控制。从而达到了对步进电机良好的控制效果。2. 步进电机的相关知识简介2.1 步进电机简介步进电机是一种能够将电脉冲信号转换成角位移或线位移的开环机电控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数。而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变得非常简单。虽然步进电机已被广泛的应用,但步进电机并不能像普通的直流电机、交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用,并且结合机械、电子、计算机等方面的专业知识才能完美的控制。2.1.1 步进电机分类步进电机是由一组缠绕在电机固定部件-定子齿槽上的线圈驱动的。通常情况下,一根绕成圈状的金属丝叫做螺线管。步进电机按照电机结构分为三种:永磁式(PW)、反应式(VR)和混合式(HB)。永磁式步进电机一般为两相,转矩和体积小,步进角一般为7.5度或15度;多用于价格低廉的消费性产品。优点是功率消耗小。反应式步进电机也叫磁阻式步进电机。转子均由软磁材料冲制、叠压而成。定子上安装多相励磁绕组。转子上无任何绕组,转子圆周外表面均匀分布若干齿和槽。一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪音和震动都很大。在欧美等发达国家80年代已被淘汰。优点是步进电机步距小,运行频率高。混合式步进电机也叫感应子式步进电机,内部也有永磁式材料。它混合了永磁式和反应式步进电机的优点。它又可分为两相、三相和五相:两相步距角一般为1.8度,三相步距角为0.9度,而五相步距角一般为0.72度。混合式步进电机是工业运动控制应用最常见的电机。优点是既有反应式的步距小,运行频率高;又具有永磁式的功率消耗小。步进电机如果按照电机驱动架构又可分为单极性和双极性步进电机。单极性驱动电路使用四颗晶体管来驱动步进电机的两组相位,包含两组带有中间抽头的线圈,整个电机共有六条线与外界连接。这类电机有时又称为四相电机,但这种称呼容易令人混淆又不正确,因为它其实只有两个相位,精确的说法应是双相位六线式步进电机。六线式步进电机虽又称为单极性步进电机,实际上却能同时使用单极性或双极性驱动电路(试验箱上使用的就是单极性的步进电机),驱动图如图2.1所示。图2.1 单极性步进电机的工作原理图双极性步进电机的驱动电路使用八颗晶体管来驱动两组相位。双极性驱动电路可以同时驱动四线式或六线式步进电机,虽然四线式电机只能使用双极性驱动电路,它却能大幅降低应用的成本。双极性步进电机驱动电路的晶体管数目是单极性驱动电路的两倍,其中四颗下端晶体管通常是由微控制器直接驱动,上端晶体管则需要成本较高的上端驱动电路。双极性驱动电路的晶体管只需承受电机电压,所以它不像单极性驱动电路一样需要箝位电路。驱动电路如图2.2 。图2.2 双极性步进电机的工作原理图按照力矩产生的原理分,可分为反应式步进电机和激磁式步进电机。按照输出力矩大小可分为伺服式步进电机和功率式步进电机等。2.1.2 步进电机的结构现以三相步进电机为例来介绍步进电机的结构:电机转子均匀分布着很多小齿,定子齿有三个励磁绕组,其几何轴线依次分别与转子齿轴线错开0、1/3、2/3,(相邻两转子齿轴线间的距离为齿距以表示),即A与齿1相对齐,齿B与齿2向右错开1/3,C与齿3向右错开2/3,A与齿5相对齐(A就是A,齿5就是齿1),下面就是定转子的展开图,如图2.3所示。 图2.3 三相步进电机结构原理图2.1.3 步进电机的基本概念步进电机的相关基本概念:相数:是指步进电机内部的线圈组数,常用m来表示。电机相数不同,其步距角也不同,一般二相电机的步距角为0.9/1.8,三相的为0.75/1.5等,五相的为0.36/0.72。拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A。步距角:对应一个脉冲信号,电机转子转过的角位移,用表示。=360度/(转子齿数J*运行拍数)。以常规二、四相,转子齿为50齿电机为例,四拍运行时步距角为=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为=360度/(50*8)=0.9度(俗称半步)。步距角精度:步进电机每转过一个步距角的实际值与理论值的误差。用百分比表示:步距角精度=误差/步距角*100%。不同运行拍数其值不同,四拍运行时应在5%之内,八拍运行时应在15%以内。失步:电机运转时运转的步数,不等于理论上的步数。称之为失步。失调角:转子齿轴线偏移定子齿轴线的角度,电机运转时必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。保持转矩:是指步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一。通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增加而不断衰减,输出功率也就随速度的增加而增加。所以它就成为衡量步进电机最重要的参数之一。细分:步进电机通过细分驱动器的驱动,使其步进角变小了。如工作器工作在10细分状态,其步距角只为电机固有步距角的十分之一,也就是说,当驱动器工作在不细分的整步状态时,控制系统每发出一个步进脉冲,电机转动1.8;而用细分驱动器工作在10细分状态时,电机只转动了0.18。细分功能完全是由驱动器靠精确控制电机的相电流所产生的,与电机本身无关。2.2 步进电机工作原理仍以上面的三相步进电机结构图为例,介绍步进电机的工作原理。如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通电,电机就反转。由此可见:电机的位置和速度由导电次数(脉冲数)和频率成一一对应关系。而方向由导电顺序决定。 不过,出于对力矩、平稳、噪音及减少角度等方面考虑。往往采用A-AB-B-BC-C-CA-A这种导电状态,这样将原来每步1/3改变为1/6。甚至于通过二相电流不同的组合,使其1/3变为1/12,1/24,这就是电机细分驱动的基本理论依据。 不难推出:电机定子上有m相励磁绕阻,其轴线分别与转子齿轴线偏移1/m,2/m,3/m,1。并且导电按一定的相序就能控制电机正反转,这是步进电机旋转的物理条件。只要符合这一条件,理论上可以制造任何相的步进电机。这样,步进电机就在脉冲信号作用下不断转动。2.2.1 步进电机的细分驱动原理细分驱动的实质是改变相电流的大小,从而精确控制步进电机的运动。步进电机的细分技术是一种电子阻尼技术,其目的一方面实现步进电机步距角的高精度细分,另一方面是减弱或消除步进电机的低频振动(低频振动是步进电机的固有特性,而细分则是消除它的唯一途径),提高了电机的输出转矩,并且提高了电机的分辨率。现有的技术有以下几种方法实现细分驱动:一种称之为半拍步进的方法,即在对步进电机的步距角进行细分时,将步进电机的控制位置数(以四相混合式步进电机为例)的四相通电逻辑顺序变为八拍通电逻辑顺序,从而将步进角降为原来的一半。以后在这种方法的基础上继续改进为电流合成矢量ih,使ih不是一下变动45度,而是一次变化一个较小的角度f,这样就将步距角由原来的45度变为较小的微步距角f。当通电时,电流合成矢量在045范围内,仅让一相绕组的电流在变化,即只有ia在变化,ib不变;在4590范围内,仅让ib一组绕组的电流变化,ia不变。这种细分驱动方法的优点是只需要改变某一相的电流值,因此在硬件电路的设计上就比较容易实现。但这种方法却带来了一个不可克服的缺陷,即电流合成矢量ih在旋转过程中的幅值是处在不断变化中,从而引起滞后角的不断变化。当细分数很大、微步距角非常小时,滞后角变化的差值已大于所要求细分的微步距角,使得微步距角的继续细分实际上失去了意义。采用这种细分方法的电流矢量旋转矢量图如下: 图2.4 半拍细分电流矢量图另一种方法是利用脉冲宽度可调波(PWM),使原来的一个矩形脉冲波分解成一个阶梯波形,若设原来阶梯波的角度为,则按阶梯波的步距角应为/n,其中n为阶梯波的个数。其优点是在阶梯波驱动步进电机的时候,虽然能通过单片机产生的PWM波很灵活地改变输出脉冲的高低和长短,从而实现步进电机的柔性控制和实现驱动大功率的步进电动机。但由于驱动电路复杂和在定位的时候可能会产生振动,若其振动的角度超过了细分的最小角度,则不适合精密仪器的定位要求。从以上两种方法分析可得,步进电机的细分驱动是通过电流合成矢量的旋转来实现的,而一般的细分方法只改变某一相的电流,因而电流合成矢量的幅值是不断变化的,使步进电机的转矩亦随之变化,从而引起滞后角的变化,最终就影响可细分数的增加,即限制了分辨率的提高。为解决以上问题,消除现有技术由于滞后角的变化引起的值大于微步距角而导致的不可继续细分的问题,必须满足以下两个条件:一是电流合成矢量旋转时每次变化的角度要均匀,二是电流合成的大小或幅值要保持不变。基于以上分析,我们可建立“电流矢量恒幅均匀旋转”的细分驱动方法。同时改变两相电流的大小,使电流合成矢量恒幅均匀旋转。这种方式可称为步进电机的模拟运行,它是一种基于交流同步电机概念的特殊细分技术,实质是对运行于交流同步电机状态的步进电机所受的交流模拟信号在一个周期内细分,即每个细分点对应于一个交流值。当细分数相当大时,例如本系统中将一个四分之一周期分成4096个点,电机绕组的电流信号就逼近模拟连续信号。这种细分技术可以极大地提高步进电机的分辨率和运行稳定性。使用该方法电流合成矢量的旋转示意图如下:图2.5 细分电流矢量图因而通过细分驱动实现步进电机细分运行,不仅是一个量的变换,而且是一个质的飞跃。2.2.2 细分控制的实现过程基于以上的细分方法,要实现步进电机的细分驱动,首先应建立一种可消除滞后角变化影响的步进电机细分控制函数数学模型:ia=im*cosX (1.1) ib=im*sinX (1.2)式中 iaA相绕组电流;ibB相绕组电流;X控制参数;im电流幅值;cosX控制参数余弦值;sinX控制参数正弦值。其次对运行于交流同步电机状态的步进电机所控的交流模拟信号在一个周期内细分,每个细分点对应一个交流值。按照细分控制数学模型对A,B两相绕组电流通过步距角细分实施控制,控制过程为:由ARM板送来的数字量电压控制信号,经D/A转换器转换为模拟量的电压信号,再送到放大驱动电路上,经电平转换、功率放大后,直接送到步进电动机的四相绕组,并在四相绕组上加上电压负反馈以保证电压放大的稳定性。四相绕组分别取得正、余弦变化电流,和零电平。通过电流合成矢量的是驱动方式,驱动电动机的旋转,这样每输入一个数字量,电机转子就步进一个微步距角f。最后对影响细分控制精度的非线性,通过细分控制修正表和相应的修正程序对细分正、余弦表实施修正。因此,根据上述,实现步进电机的细分驱动的原理流程图如下:图2.6 步进电机实现细分控制流程图2.3 步进电机的一些特点步进电机较一般的其他电机,具备了一些独特之处:1.步进电机步距角与脉冲数严格的成正比线性关系,而不受负载变化的影响。2.步进电机控制精度高。由于步进电机通常带有细分驱动,所以控制精度较一般电机较高(但高细分时可能存在失步现象)。一般步进电机的精度为步进角的3-5%,且无累积误差。3.一般步进电机需要专门的伺服控制器进行控制,不能够直接使用普通的交流或直流电源驱动。步进电机必须由双环型脉冲信号、功率驱动电路等组成驱动控制系统方可使用。4.低频特性好,当步进电机细分数达到32以上时,基本就没有低频振动的问题了。5.响应时间快,步进在其启动频率和加速允许的条件下可以做到多频繁正反向启动停止,速度响应性好。但其有严格的启动频率和加速要求,如果是高频启动,则可能响应时间相对慢一点。6.动力矩会随转速的升高而下降。当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增加而相电流减小,从而导力矩下降。7.步进电机停止时具有自锁能力。3. ARM的基础知识简介3.1 ARM简介ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。其技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。3.1.1 ARM硬件体系结构ARM7TDMI的主要组成部分包括:寄存器组:用来储存处理器状态。它有两个读端口和一个写端口,而R15(程序寄存器)则有三个读端口和一个写端口。桶形移位器:能使一个操作数移动或循环任意位。ALU:完成指令集所需的算术和逻辑功能。地址寄存器与累加器:选择或使用已有的存储器地址,在需要时产生下一个地址。数据寄存器:用来暂存输入或传出存储器地址,在需要时产生下一个地址。指令译码器和控制逻辑。ARM 7TDMI数据流采用三级流水线作业:取值、译码、执行。ARM处理器共有37个寄存器。其中包括:31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器。6个状态寄存器,这些寄存器也是32位寄存器。一般情况下,只有16个通用寄存器(R0至R15)和1或2个状态寄存器对于程序员是可见的。其他的寄存器用于支持IRQ,FIQ,管理,中止和未定义模式而来回切换。ARM处理器共有7种不同的处理器模式:用户模式(usr)、快速中断模式(fiq)、外部中断模式(irq)、管理模式(svc)、 数据访问终止模式(abt)、系统模式(sys)、定义指令中止模式(und)。每一种模式中都有一组相应的寄存器组。在任何时刻,可见的寄存器包括15个通用寄存器(R0-R14),一个或两个状态寄存器及程序计数器(PC)。在所有的寄存器中,有些是各模式公用一个物理寄存器,有一些寄存器各模式拥有自己独立的物理寄存器。ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式;其中除去用户模式和系统模式以外的5种又称为异常模式,常用于处理中断或异常,以及需要访问受保护的系统资源等情况。3.1.2 ARM软件体系结构ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码器较为简单。ARM7TDMI具有32位ARM指令集和16位Thumb指令集:ARM指令集效率高,但代码密度低,它是ARM指令集的子集。所有的ARM指令都是可以有条件相互调用,相互之间的状态切换开销几乎为零。ARM处理器具有9种基本寻址方式:寄存器寻址、立即寻址、寄存器移位寻址、寄存器间接寻址、基址寻址、多寄存器寻址、堆栈寻址、块拷贝寻址和相对寻址。根据指令中给出的地址码字段实现寻找真实操作数地址。3.2 ARM程序的工作过程一般的嵌入式系统在主程序执行之前都需要执行一些初始化的过程以创造嵌入式程序运行的环境,尤其是一些高级的嵌入式系统,由于核心芯片使用内存映射、内存保护等机制以及编程使用高级语言C,C+甚至JAVA语言,都需要先创建一个适合程序运行的硬件环境,然后初始化或者配置,这些工作都必须在主程序运行前完成。所以程序组对于一个嵌入式系统来说是非常重要的。因而需要对编译器、链接器和汇编器的细节有一定的了解,同时对ARM芯片硬件本身的地址分配以及memory mapping机制也需要有一些了解。ARM的工作过程为:首先由各种source file经过编译产生object文件,然后object文件经过链接生成Image文件,然后通过ICE的方法,根据描述文件的指定下载到目标板上的固态存储器指定地址当中,比如flash,EEPROM, ROM等等。在程序执行之前,根据某些描述文件,将需要读写数据的部分读出放入动态存储器比如RAM当中,然后程序从ROM开始执行。或者有时为了提高程序的运行速度,也可以将所有的程序(有一些root的部分除外,)通过一个描述文件放入指定的RAM当中,然后程序从RAM开始执行,但是这样会耗费大量的动态存储器,所以大部分程序会取折中的方法,将需要快速运行的部分和要读写的部分放入RAM中(一般读固态存储器的过程和动态存储器的过程是一样的,但是写就不同了,所以读写的部分一定要放到RAM中),而只读的部分和对速度要求不是那么高的部分放入固态存储器。同时ARM结构的异常向量表规定放在地址为0x00000000开始的地址空间上,而一般的CPU为了提高异常相应速度,会将这个向量段remap到其他的RAM当中,所以在描述文件当中必须精确指定异常向量跳转程序的地址到remap的地方。在application程序执行前,还需要由一些文件描述application程序执行的环境。比如系统工作时钟,总线频率。现在一般嵌入式编程语言为C,C+等。如果在使用它们的时候使用的runtime-library,那么在程序执行前还需要为这些库函数初始化heap。然后ARM可能工作在不同的模式,还需要为不同的工作模式设置stack。4. ARM嵌入式开发板简介4.1 MagicARM2200开发板简介MagicARM2200是专为嵌入式系统教学精心打造的ARM嵌入式教学实验开发平台,支持多种嵌入式操作系统,有丰富的配套教材和众多的实验例程,提供多种的商业化软件包,并配备精心设计的多媒体课件,是进行嵌入式系统学习的最佳选择。MagicARM2200提供了多种硬件开发平台:ARM7微处理器包括一系列处理器,例如LPC2210/2220/2212/2214/2290/2292/2294 ARM微处理器;ARM9微处理器;ALTERA NIOS II SOPC 32位CPU处理器;Actel ARM7 SoC处理器。而且还提供了多种可选嵌入式操作系统:C/OS-II嵌入式实时操作系统(ARM7/ARM9) ;CLinux操作系统(ARM7)。核心板为DeviceARM2200工控板(6层PCB设计,支持ARM7),内设2M字节NOR FLASH存储器,8M字节PSPOM,256字节E2PROM,采用标准SODIMM144接口,全面支持7种型号的144 PIN ARM7微控制器。主板为4层PCB板,抗干扰能力强,可扩展众多部件。如CF卡/IDE硬盘接口,SD/MMC卡模块,CF卡接口,1个打印机接口,2路10位ADC ,ZLG7290键盘管理和显示控制,1个直流电机,1个步进电机。各功能部件可以通过跳线进行灵活选择。多种通信接口:双串口,串口1带Modem接口,10/100M以太网接口,2个USB HOST 2.0(全速) ,1个USB Device 2.0(全速) ,1路RS485 ,2路CAN。多种人机交互界面:1个5.2寸320240彩色液晶屏,4线电阻式触摸屏,8个独立LED,1个蜂鸣器,8个7段数码管,1个独立按键,16个德国CHERRY按键,PS/2键盘和鼠标接口。并且具有丰富的配套模块:例如ISP1161BM PACK模块(标配),符合通用串行总线2.0规范,支持全速(12Mbit/s)及低速(1.5Mbit/s)两种数据模式,两个下行端口可同时操作两个USB设备,兼容大多数通用微处理器和精简指令(RISC)处理器总线时序,提供基于C/OC-II的读写大容量设备(如:U盘、移动硬盘)驱动程序(HOST), 提供基于C/OS-II的ZLG/USBD13软件包(Device)。4.2 ADS集成开发环境及EasyJTAG仿真器简介4.2.1 ADS集成开发环境简介ADS集成开发环境是ARM公司推出的ARM核微控制器集成开发工具,英文全称为ARM Developer Suite,成熟版本为ADS1.2。ADS1.2 支持ARM10之前的所有ARM系列微控制器,支持软件调试及JTAG 硬件仿真调试,支持汇编、C、C+源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、Windows XP、Windows2000以及RedHat Linux上运行。ADS1.2由6部分组成,分别是代码生成工具、集成开发环境、调试器、指令模拟器、ARM 开发包、ARM 应用库。由于我们一般直接操作的是CodeWarrior IDE 集成开发环境和AXD 调试器,所以我们着重学习两部分软件的使用。ADS 1.2 使用了CodeWarrior IDE 集成开发环境,并集成了ARM 汇编器、ARM 的C/C+编译器、Thumb 的C/C+编译器、ARM 连接器,包含工程管理器、代码生成接口、语法敏感(对关键字以不同颜色显示)编辑器、源文件和类浏览器等等。AXD调试器为ARM 扩展调试器(即ARM eXtended Debugger),包括ADW/ADU的所有特性,支持硬件仿真和软件仿真(ARMulator)。AXD能够装载映像文件到目标内存,具有单步、全速和断点等调试功能,可以观察变量、寄存器和内存的数据等等。4.2.2 EasyJTAG仿真器简介EasyJTAG仿真器是广州周立功单片机发展有限公司开发的LPC2000系列ARM7微控制器JTAG仿真器,支持ADS1.2 集成开发环境,支持单步、全速及断点等调试功能,支持下载程序到片内FLASH和特定型号的片外FLASH,采用ARM公司提出的标准20脚JTAG仿真调试接口。其主要特点如下:1. 采用RDI 通讯接口,无缝嵌接ADS1.2 和其它采用RDI 接口的IDE 调试环境;高达1M 速率的JTAG时钟驱动。2. 采用同步Flash刷新技术(synFLASH),同步下载用户代码到Flash中,即下即调。3. 采用同步时序控制技术(synTIME),仿真可靠稳定。4. 支持32 位ARM 指令/16 位THUMB指令的混合调试。5. 增加映射寄存器窗口,方便用户查看/修改寄存器数值。6. 微型体积设计,方便用户灵活使用。5. 开发板中步进电机的实现5.1 开发板实现步进电机控制的功能本设计实现步进电机的完全控制,即实现步进电机的多功能控制。包括实现步进电机的步进运行,正反转运行,自动运行,细分运行等。同时可以利用步进电机实现精确定位。并且实现了利用试验箱周立功数字键盘与数码管来监控步进电机的运行。5.2 实现步进电机控制所需的相应软硬件配置设计需要的硬件开发环境包括MagicARM2200嵌入式开发板;用于ARM7TDMI的EasyJTAG仿真器;Pentium100以上PC。软件环境包括:PC机操作系统工程Windows98以上,ADS1.2集成开发环境、仿真器驱动程序。5.3 开发板中步进电机的实现通过对传统的单片机、DSP和以ARM为核心控制器三种方案比较,选定以ARM为核心控制器的控制方案。系统框图如下所示。LPC2200控制ULN2003A驱动芯片,后串接保护电阻,驱动两相步进电机。控制电路系统框图如下: 图 5.1 ARM为核心的步进电机控制系统框图5.3.1 ARM微处理器简介LPC2200基于一个支持实时仿真和嵌入式跟踪的16/32位ARM7TDMI-S CPU,处理器时钟高达60M/75MHz,片内集成8KB、16KB、32KB、64KB、128KB、256KB和512KB的高速Flash存储器,128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。此外,片内集成大量外设:外部存储器控制器(EMC)、UART接口、CAN-bus接口、SPI接口、SSP接口、I2C接口、ADC、DAC、USB 2.0接口、通用定时器、外部中断、PWM、实时时钟、LCD驱动器等等。 通过外部存储器接口可以扩展64MB的异步静态存储器设备。5.3.2 ULN2003A简介ULN2003是高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片。经常在步进电机驱动,伺服电机驱动,电磁阀驱动等电路中使用。ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。图5.2 ULN2003A原理图其中,反向二极管的作用是接入电路后可以给电流一个泻放回路,保护内部功率驱动极。因为在负载切断时电流并不能立即消失,如果没有那个二极管的话会在驱动脚上出现一个很高的电压尖峰,这很可能会烧掉(击穿)驱动三极管。5.3.3 MTD2009J步进电机细分驱动芯片简介由步进电机细分驱动原理知,在每次输入脉冲时,不是将绕组中电流全部通入或切除,而是只改变相应绕组中额定的部分。电机转子的每步运动也只有步距角的一部分。这里的绕组电流不是方波,而是阶梯波,电流分成多少台阶,转子就会以同样的个数转过一个步距角,而将一个步距角细分成若干步的驱动方法就是为“细分驱动”。而MTD2009J步进电机驱动芯片就有此功能。MTD2009J是日本新电元工业公司生产的一种双极性、定电流两相步进电机驱动芯片。它把功率放大和控制电路都集成到一个芯片,因此需要很小的外围元件。更重要的是此芯片具有微步驱动功能,可通过切换电流实现低振动、低噪声的电机驱动。MTD2009J具有如下特点:芯片内部有双H桥;芯片内部有续流、回馈二极管;与TTL、CMOS电平兼容,可直接接至CPU和门阵列;PWM定电流斩波功能;内部电路具有噪声消除功能,无须外加滤波器;具有电流衰减速度切换功能;具有换向时防止上下桥臂直通功能;可同时驱动两个两相步进电机。使用MTD2009J驱动两相步进电机可以明显的减少步进电机的振动和噪声。MTD2009J对每个相位都有一个独立的参考电压端。步进电机细分控制是通过参考电压端电压的变化来实现的。下图为MTD2009J的相位变化、相位使能控制以及步进电机电流与参考电压之间的变化波形图。图5.3 细分驱动器内部波形图MTD2009J芯片可对两相步进电机进行非常理想的控制,特别是在对速度、位置控制以及监控产品方面得到了广泛的应用。5.4 控制系统的组成及原理当利用开发板原有硬件进行步进电机控制时,可实现步进控制、正反转控制、自动运行控制。开发板使用的步进电机是四相步进电机,转子齿数为50,系统中采用四路I/O进行并行控制,ARM控制器直接发出多相脉冲信号,在通过功率放大驱动芯片后,进入步进电机的各相绕组。这样就不再需要脉冲分配器了,其功能可以由纯软件的方法实现,连接线路图如下:图5.4 步进电机接口电路 四相步进电机的控制方法有四相单四拍、四相单、双八拍和四相双四拍3种控制方式。步进角的计算公式为b=3600 /mCZK。其中:m为相数。控制方法是四相単四拍和四相双四拍时C为1;控制方法是四相单、双八拍时C为2。ZK转子小齿数 。MagicARM2200开发平台中使用的是P2-24,P2-25 ,P2-26,P2-27控制四相步进电机的四个相。如按照四相单、双八拍控制方法,电机正转时的控制顺序为AABBBCCCDDDA。GPIO的四位的值如表1所示。表5.1 电机正转时I/O高四位的值十六进制二进制通电状态十六进制二进制通电状态1H0001A4H0100C3H0011ABCH1100CD2H0010B8H1000D6H0110BC9H1001DALPC2290控制步进电机的外围电路的设计主要有键盘电路。键盘电路的设计可以使系统有良好的人机交互界面。选用的键盘电路是LED驱动芯片ZLG7290。下图为键盘电路。图5.5 键盘与LED显示电路ZLG7290采用的3.3V电源,复位引脚与系统复位信号你nRET相连,当系统上电位复位或手动复位时,系统会同时复位ZLG7290。ZLG7290中的中断输出信号与LPC2290的中断引脚P0.30相连,当按下键时,ZLG7290将会输出中断通知LPC2290。其次外围电路还有八段数码显示管,可以显示步进数和正反转情况。二极管LED以流水显示的方式显示步进电机的转动速度。其方法是,用ARM的通用输入输出接口控制LED的显示,进而控制LED的显示速度,当步进电机每转动一步时,二极管LED有一个亮起。同时间可间接的显示步进电机的频率和拍数,方法是ARM处理器控制步进电机拍数的同时,控制LED的亮灭,当步进电机转动一个周期之后,全部的二极管LED熄灭,从熄灭的LED的个数,就可以知道在一个周期中,步进电机一共转动了几步,同时也就知道了步进电机的拍数。用一个数码管LED直接显示步进电机的转动拍数和转动步数,方法是用数码管LED根据步进电机的转动步数自动的实现加一操作,即步进电机每转动一步,数码管LED的示数自动的加一,当步进电机转动了一周以后,即实现了预定的转动拍数之后,数码管LED 的示数自动的实现清零操作,这样以来,可以通过数码管示数的显示情况,直接的没有任何障碍的了解到步进电机的预定转动拍数和它转动到了一个周期中的第几步。当进行细分控制时,需对硬件电路进行改进。仍以Phihps公司的32位ARM2294作为步进电机的驱动芯片,步进电机仍为是试验箱上的两相混合步进电机,步距角为1.8。这时采用TI公司的TLC5620数模转换芯片作为MTD2009J每相参考电压的输入,它可将参考电压分为0255份,为了提高电机运动的平稳性和准确性,对每一步进行了4096的细分,参考电路图如下。图5.6 细分控制原理图 根据细分驱动原理,正确连接硬件电路图,驱动步进电机细分驱动器MTD2290J,可实现步进电机细分驱动。6. 用ARM汇编语言和C语言实现对步进电机的控制6.1 步进电机控制的总体设计在认真学习了解MagicARM2200试验箱有关步进电机控制的硬件结构后,掌握了步进电机工作原理之后,在ADS1.2开发平台上编写程序,对步进电机控制。本设计主要采用周立功公司GPIO、键盘驱动程序,用C语言对ARM进行编程,通过按键对步进电机进行控制。控制程序的软件结构框图如下所示,主要由主控程序、按键驱动程序、显示程序,细分驱动程序等部分组成。图6.1 控制程序主流程图6.2 软件设计思想控制系统的软件构成应由初始化主程序和中断服务程序组成。主程序主要负责系统的初始化和各个变量的初始化,中断子程序主要实现各个工作模式,如步进模式、正反转模式、自动运行模式、细分运行模式等。6.3 软件设计的总体框图电机控制的软件流程如下。编写的程序主要是在操作系统层的基础上,编写用户应用软件层程序。其中细分控制信号的输出采用的是ROM查表法,即根据“线性+正弦”波形方法和电流矢量法恒福均匀旋转法,产生波形数据,存储于ROM中,通过查表输出符合细分倍数的数据。该过程是由前面的MTD2009J驱动芯片来完成的。图6.2 各块程序设计流程图6.4 设计的各种运行模式的程序段根据以上设计思路,设计的电机控制程序主要实现控制电机步数、速度;实现电机正反转200步后停止;实现电机的步进运行。设计的主导思路是在周立功键盘控制电路zlg7290的软件设计基础上修改程序,加入控制电机函数,实现所须控制功能。6.4.1 主程序段函数主程序主要负责系统的初始化和各个变量的初始化,并设置循环,当有外部信号输入时,主程序则跳入所需子程序,执行子程序。主程序如下:*int main (void)
展开阅读全文