毕业设计(论文)基于ARM的步进电机细分驱动控制设计.doc

上传人:仙人指路1688 文档编号:3978469 上传时间:2023-03-30 格式:DOC 页数:31 大小:242.50KB
返回 下载 相关 举报
毕业设计(论文)基于ARM的步进电机细分驱动控制设计.doc_第1页
第1页 / 共31页
毕业设计(论文)基于ARM的步进电机细分驱动控制设计.doc_第2页
第2页 / 共31页
毕业设计(论文)基于ARM的步进电机细分驱动控制设计.doc_第3页
第3页 / 共31页
毕业设计(论文)基于ARM的步进电机细分驱动控制设计.doc_第4页
第4页 / 共31页
毕业设计(论文)基于ARM的步进电机细分驱动控制设计.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《毕业设计(论文)基于ARM的步进电机细分驱动控制设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于ARM的步进电机细分驱动控制设计.doc(31页珍藏版)》请在三一办公上搜索。

1、基于ARM的步进电机细分驱动控制设计引言随着微电子和计算机技术的发展,步进电 机的需求量与日俱增,它广泛用于打印机、电动玩具等消费类产品以及数控机床、工业机器人、医疗器械等机电产品中,其在各个国民经济领域都有应用。研究步进电机的控制系统,对提高控制精度和响应速度、节约能源等都具有重要意义。本控制系统的设计,由硬件设计和软件设计两部分组成。其中,硬件设计主要包括ARM最小系统、控制模块、步进电机驱动模块、数码显示模块等功能模块的设计,以及硬件电路在电路板上的实现。软件设计包括主程序以及各个模块的控制程序,最终实现对步进电机转动方向及转动速度的控制,并且将步进电机的转动速度动态显示在LED数码管上

2、。本系统具有智能性、实用性及可靠性的特点。一、 ARM的简介1.概念;ARM(Advanced RISC Machines)处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器。更早称作Acorn RISC Machine。 ARM处理器本身是32位设计,但也配备16位指令集。一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。 ARM的Jazelle技术使Java加速得到比基于软件的Java虚拟机(JVM)高得多的性能,和同等的非Java加速核相比功耗降低80%。CPU功能上增加DSP指令集提供增强的16位和32位算术运算能力,提高了性能和灵活性。ARM

3、还提供两个前沿特性来辅助带深嵌入处理器的高集成SoC器件的调试,它们是嵌入式ICE-RT逻辑和嵌入式跟踪宏核(ETMS)系列。 2.特点:ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和合作伙伴众多。 1、体积小、低功耗、低成本、高性能; 2、支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件; 3、大量使用寄存器,指令执行速度更快; 4、大多数数据操作都在寄存器中完成; 5、寻址方式灵活简单,执行效率高; 6、指令长度固定。 (3)体系结构 : CISC(ComplexInstructionSetComputer,复杂指令集计算机) 在CISC指

4、令集的各种指令中,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序设计中只占20%。 RISC(ReducedInstructionSetComputer,精简指令集计算机) RISC结构优先选取使用频最高的简单指令,避免复杂指令;将指令长度固定,指令格式和寻地方式种类减少;以控制逻辑为主,不用或少用微码控制等 RISC体系结构应具有如下特点: 1采用固定长度的指令格式,指令归整、简单、基本寻址方式有23种。 2使用单周期指令,便于流水线操作执行。 3大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执

5、行效率。 (4)寄存器结构ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括: 31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。 6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。 3.指令结构 ARM微处理器的在较新的体系结构中支持两种指令集:ARM指令集和Thumb指令集。其中,ARM指令为32位的长度,Thumb指令为16位长度。Thumb指令集为ARM指令集的功能子集,但与等价的 ARM代码相比较,可节省30%40%以上的存储空间,同时具备32位代码的所有优点。本实验采用ARM中ARM7引系列的LPC

6、2131 二硬件电路设计1、硬件电路设计思路步进电机控制系统共分为四个模块:ARM模块、控制模块、数码显示模块、步进电机驱动模块。ARM最小系统主要由复位电路和时钟电路组成。复位电路为ARM系统提供可靠复位,使ARM能正常启动。时钟电路采用外部时钟方式,保证ARM个功能部件都是以时钟频率为基准,有条不紊地一拍一拍地工作。步进电机驱动模块选用八NPN达林顿连接晶体管2803为步进电机提供脉冲信号,驱动步进电机转动。该模块与ARM的P1.22P1.25相连。2、总体框图设计总体设计框图如图2-1所示: LPC2131控制模块电机驱动模块步进电机图2-1总体设计框图说明如下:(1) ARM接受按键信

7、息,改变系统内部变量值。(2) ARM输出脉冲信号,控制步进电机转动。三 、步进电机1.步进电机概念步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。多相步进电动机有多相方波脉冲驱动,用途很广。使用多相步进电动机时,单路电脉冲信号可先通过脉冲分配器转换为多相脉冲信号,在经功率放大后分别送入步进电动机各相绕组。每输入一个脉冲到脉冲分配器,电动机各相的通电状态就发生变化,转子会转过一定的角度(称为步距角)。正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉

8、冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。2.步进电机特性步进电机转动使用的是脉冲信号,而脉冲是数字信号,这恰是计算机所擅长处理的数据类型。从20世纪80年代开始开发出了专用的IC驱动电路,今天,在打印机、磁盘器等的OA装置的位置控制中,步进电机都是不可缺少的组成部分之一。总体上说,步进电机有如下优点:不需要反馈,控制简单。 与微机的连接、速度控制(启动、停止和反转)及驱动电路的设计比较简单。 没有角累积误差,停止时也可保持转距。没有转向器等机械部分,不需要保养,故造价较低。即使没有传感器,

9、也能精确定位。根椐给定的脉冲周期,能够以任意速度转动。但是,这种电机也有自身的缺点。难以获得较大的转矩不宜用作高速转动在体积重量方面没有优势,能源利用率低。超过负载时会破坏同步,高速工作时会发出振动和噪声。实验所用电机:28BYJ-48步进电机 步进电机28BYJ48型四相八拍电机,电压为DC5VDC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组

10、通电)四拍(A-B-C-D-A。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。),八拍(A-AB-B-BC-C-CD-D-DA-A。)由于步进电机的驱动电流较大,单片机不能直接驱动,一般都是使用ULN2003达林顿阵列驱动,当然,使用下拉电阻或三极管也是可以驱动的,只不过效果不是那么好,产生的扭力比较小。四、外围电路设计分析1、步进电机驱动电路本系统的设计目的为了高效控制步进电机的转动,因此需要将脉冲转化为步进角度,才能控制步进电机转动,我们在这里采用ULN2003为步进电机提供脉冲信号。管脚如图3-1所示:图3-1内部管脚图ULN2003内部集成了一个消线圈反电动势的二极管,可

11、用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。 ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。比如1

12、脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。 ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。输入5VTTL电平,输出可达500mA/50V。 ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。 该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器。 ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求

13、高速大功率驱动的系统。引脚如图3-7所示: 图3-7 ULN2003芯片引脚图ULN2003芯片引脚介绍:引脚1:CPU脉冲输入端,端口对应一个信号输出端。 引脚2:CPU脉冲输入端。 引脚3:CPU脉冲输入端。 引脚4:CPU脉冲输入端。 引脚5:CPU脉冲输入端。 引脚6:CPU脉冲输入端。 引脚7:CPU脉冲输入端。 引脚8:接地。 引脚9:该脚是内部7个续流二极管负极的公共端,各二极管的正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。 引脚10:脉冲信号输出端,对应7脚信号输入端。参考接法如图3-8所示:

14、 图3-8 参考电路接法引脚11:脉冲信号输出端,对应6脚信号输入端。 引脚12:脉冲信号输出端,对应5脚信号输入端。 引脚13:脉冲信号输出端,对应4脚信号输入端。 引脚14:脉冲信号输出端,对应3脚信号输入端。 引脚15:脉冲信号输出端,对应2脚信号输入端。引脚16:脉冲信号输出端,对应1教信号输入端。驱动电路如图3-9所示:图3-9 步进电机驱动原理图2、步进电机控制系统图通过上述对步进电机控制系统设计与分析,步进电机控制系统总体设计电路如图3-2所示:图3-2 步进电机控制系统总体设计电路图五 、软件设计1、软件设计思路步进电机控制系统的软件需要同时完成读取按键、处理键盘、控制步进电机

15、转动等任务,这就必须通过查询技术来实现。在本设计中,主程序采用查询方式扫描键盘端口,检测按键动作是否发生,若有按键动作则处理键盘,根据按键实现键盘的实时处理功能。查询控制步进电机的转动。 2、程序流程图步进电机控制系统的主程序在对整个系统初始化后主要完成读键盘和处理键盘的功能,如图4-1所示:开始初始化参数读键盘键盘处理图4-1 步进电机控制系统主程序流程图系统上电复位后,先调用初始化子程序,对步进电机各端口,相关参数进行初始化。初始化完成后,步进电机处于停止状态,然后循环扫描按键是否被按下。如果检测到有按键被按下,先软件去抖动,确定被按下后则执行相应的子程序,然后返回,继续执行主程序。六、运

16、行结果连接好硬件电路,上电复位,程序开始运行。此时步进电机不转动,按下启停键,步进电机开始转动,初始值设为正传,按反转键开始反转,再按正传键则开始正传。当按下加速键时电机开始加速,当按下减速键时电机开始减速。运行结果正常,符合设计要求。实习结论经过老师耐心细致的指导,经过近二个星期的努力,本次毕业设计课题步进电机控制系统告一段落。步进电机控制系统主要分为硬件设计和软件设计两个部分:硬件设计主要是把ARM最小系统、控制模块、步进电机驱动模块、等各个硬件功能模块及其它元件合理搭配并连接起来使其能够为软件运行提供一个硬件平台。软件设计主要是通过编写程序代码,实现对整个系统的控制。在系统上电复位后程序

17、自动运行,通过接受查询外部的按键参数值,控制步进电机的启停,以及转速的增减和转动方向的改变;本系统具有相当的实用功能,能基本符合实际应用需求,通过这次课程设计,我从一开始对系统的不太熟悉,到能开发一个简单的系统,在这整个过程中我学到了很多东西,掌握了一些常用的开发技能,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。最后,在这次设计中,感谢李老师对我们论文的指导和修改,感谢同学的帮助,感谢我的父母对我的无微培养,在此表示衷心的感谢!实验心得:*: 本次课程设计,我主要负责软件设计部分,通过编写程序代码,实现对整个

18、系统的控制,在系统上电复位后程序自动运行,通过接受查询外部的按键参数值,控制步进电机的启停,以及转速的增减和转动方向的改变;本系统具有相当的实用功能,能基本符合实际应用需求。原本考研在即,我有些分身不暇,感谢本组其他成员的体谅,给我只分了极少的任务,但因我对ARM课程设计一直都有浓厚的兴趣,因而义不容辞的又成了小组中的主力。我们大家齐心协力,也感谢老师的帮助,终于顺利的完成了任务!*:这次课程设计的硬件部分由我来完成,硬件设计主要是把ARM最小系统、控制模块、步进电机驱动模块、等各个硬件功能模块及其它元件合理搭配并连接起来使其能够为软件运行提供一个硬件平台。焊接电路的整个过程中,我获益良多,不

19、仅锻炼了自己的动手能力,也在向同学老师请教的过程中学到了不少东西,衷心感谢同学老师的帮助!通过本次课程设计,我最深的感触便是,团结就是力量,多亏各个成员紧密配合,终于完成了整个课程设计。*:我主要负责这次课程设计的总结,写实验报告,以使整个课设过程系统而全面的展示出来,包括其原理、程序、电路图等等,都作了较为详细的诠释。在总结的过程中,我不仅锻炼了自己的写作能力,同时又得到了更多与老师同学交流的机会,交流各自的心得体会,总能得到新的收获!这次试验的成果,是我们每一个成员劳动的结晶,大家携手合作,最终由我来完成这份圆满的答卷,心里很高兴!*:实验过程中难免遇到很多疑问,我的任务就是查阅资料了,其

20、实网络书籍也是很好的老师,也能给我们答疑解惑!查阅资料后,我先独立思考,再把疑问与小组同学探讨,只要我们都积极开动脑筋,团结合作,原来很多问题都是可以迎刃而解的!最后也要在此感谢老师同学的帮助!任务完成了,我得为考研作最后一搏,但愿能如本次课设一样有个圆满的结果!参考文献1 ARM嵌入式系统基础教程M.北京:北京航空航天大学出版社.20082 刘宝廷.步进电动机及其驱动控制系统M.哈尔滨:哈尔滨工业大学出版社.1997。3 陆春.步进电机细分调速系统的研究M.北京:北京交通大学硕士毕业论文.20034 松井信行.控制用电机入门M.北京:科学出版社.20005 朱志坚.三种典型的步进电动机驱动电

21、路特性分析J.新疆工学院学报.步进电机驱动,1999,(26):12-15.6 王鸿钰.步进电机控制技术入门M.上海:同济大学出版社.1996主程序:/* 文 件 名:main.c* 功 能:LED显示控制。* 通过GPIO控制步进电机* 说 明:将跳线JP14和JP19全部短接。 */#include config.h#define LED1 118 / P2.16 #define MOTOA 122 / P1.22 #define MOTOB123/ P1.23 #define MOTOC 124/ P1.24#define MOTOD125/ P1.25#define LEDCON0x0

22、3c40000 / LED控制字/#define MOTOCON0x0f000000 / MOTO控制字#define GPIOSET(PIN) IO1SET = PIN / 方便修改置位端口#define GPIOCLR(PIN)IO1CLR = PIN / 方便修改清位端口uint8 k;const uint32 KEY1 = 1 115200)return (0);if (set.datab 8)return (0);if (set.stopb = 0) | (set.stopb 2) return (0);if (set.parity 4)return (0);/* 设置串口波特率 *

23、/U0LCR = 0x80;/ DLAB = 1bak = (Fpclk 4) / baud;U0DLM = bak 8;U0DLL = bak & 0xFF;/* 设置串口模式 */bak = set.datab - 5;/ 设置字长if (set.stopb = 2)bak |= 0x04;/ 判断是否为2位停止位if (set.parity != 0)set.parity = set.parity - 1;bak |= 0x08;bak |= set.parity 4;/ 设置奇偶校验U0LCR = bak;return (1);/* 函数名称:IRQ_Eint0()* 函数功能:外部中

24、断EINT0服务函数,取反BEEP控制口。* 入口参数:无* 出口参数:无*/void _irq IRQ_Eint0(void) keynum += 1; if(keynum=4) keynum=0; while( (EXTINT&0x01)!=0 )/ 等待外部中断信号恢复为高电平 EXTINT = 0x01;/ 清除EINT0中断标志 VICVectAddr = 0x00;/ 通知VIC向量中断结束/* 函数名称:IRQ_Eint3()* 函数功能:外部中断EINT3服务函数,取反LED1。* 入口参数:无* 出口参数:无*/void _irq IRQ_Eint3(void) time =

25、time +500; if(time=5000) time = 1000; while( (EXTINT&0x08)!=0 )/ 等待外部中断信号恢复为高电平 EXTINT = 0x08;/ 清除EINT3中断标志 VICVectAddr = 0x00;/ 通知VIC向量中断结束 /* 名 称:main()* 功 能:根据表DISP_TAB来控制LED显示。*/int main(void) uint8 num;/串口参数设置 UARTMODE set;set.datab = 8;set.stopb = 1;set.parity = 0;rcv_new = 0; PINSEL0 = 0x0000

26、0005; PINSEL1 = 0x00000301; / 设置管脚连接,P0.16设置为EINT0 UART0_Init(115200, set); / 串口初始化U0FCR = 0x41; / 使能FIFO,并设置触发点为8字节U0IER = 0x01; / 允许RBR中断,即接收中断 IRQEnable(); IO1DIR = LEDCON; /| MOTOCON; / 配置LED控制I/O方向 VICIntSelect = 0x00000000;/ 设置所有中断分配为IRQ中断 VICVectCntl0 = 0x20 | 0x0e;/ 分配EINT0中断到向量中断0 VICVectCn

27、tl1 = 0x20 | 0x06; VICVectAddr0 = (uint32)IRQ_Eint0; / 设置中断服务程序地址 VICVectAddr1 = (uint32)IRQ_UART0; / 清除EINT0中断标志 VICVectCntl2 = 0x20 | 17;/ 分配EINT3中断到向量中断1 VICVectAddr2 = (uint32)IRQ_Eint3; / 设置中断服务程序地址 EXTINT = 0x09; VICIntEnable = (1 14) | (1 17); VICIntEnable = 1 6; UART0_SendBuf(1); while(1) /*

28、 if (IO0PIN & KEY1) = 0) keynum += 1; if(keynum=4) keynum=0; */ if (rcv_new = 1)rcv_new =0;k = rcv_buf;num=(int)(k-48); switch(num) case 1: UART0_SendBuf(3);break; case 2: UART0_SendBuf(4);break; case 3: UART0_SendBuf(5);break; case 4: UART0_SendBuf(6);break; case 5: UART0_SendBuf(7);break; case 6:

29、UART0_SendBuf(8);break; default:break; UART0_SendBuf(2); if(keynum%2) switch(num) case 1: MOTO_Mode1(10);break; case 2: MOTO_Mode2(10);break; case 3: MOTO_Mode3(10);break; case 4: MOTO_Mode4(10);break; case 5: MOTO_Mode5(10);break; case 6: MOTO_Mode6(10);break; default:break; / MOTO_Mode1(10);/ DelayNS(20); / A-B-C-D / MOTO_Mode2(10); / AB-B

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号