ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:141.58KB ,
资源ID:19144189      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19144189.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(步进电机速度控制系统设计Word下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

步进电机速度控制系统设计Word下载.docx

1、此外,当所控制的步进电机相数较多,需要的输出管脚也会随之增加,这样就占用了单片机较多的数据口,降低接口的利用率的同时限制了单片机实现更多功能。由于任务要求系统有键盘、显示以及串口控制等多个部分,且要控制两部电机,为留出更多的数据接口实现上述功能,设计选择常规的电机控制电路。由脉冲分配器完成对电机绕组电平的时序控制(即脉冲分配),从而每个电机只需单片机对应输出一个触发信号(控制方向)和一组脉冲波(控制速度)即可。要注意的是,对脉冲波频率的计算和输出控制没有直接输出控制字的方法精确,响应效果也会因脉冲分配器的存在而稍差一些。1.3 控制算法的方案单片机对步进电机的控制算法也有多种,如上述的输出字法

2、就是利用单片机内部的计时功能定时输出控制字,把对电机速度的控制转变为对两次输出时间间隔的控制。控制算法很大程度决定于电机的控制方案。上文选定的电机控制方案是要求单片机实时输出改变电机方向的触发信号和控制电机转速的脉冲信号。对于电机方向的控制,由按键或串口控制指令改写对应的标志量的值并由接口输出即可。对电机速度的控制就是对输出脉冲波频率的控制,而频率的大小是要有时间标尺衡量的。单片机内部对输出频率的控制是通过两个中间变量的比较运算实现的:其中一个变量(以A代替)由单片机内部的计时器改写,表征时间量作为标尺;另一个变量(以B代替)由按键或串口控制指令改写,表征速度值(其大小可通过算数运算与实际速度

3、相统一)。程序在每次执行计时中断程序时改变一次电平:原来是高电平则变为低电平,原来是低电平则变为高电平。显然,B值的大小直接决定了比较结果产生的快慢,即输出端高低电平变化的快慢。改变B的大小就可以改变输出的脉冲频率,从而控制步进电机的速度。变量的使用不仅方便地实现了对输出脉冲频率的控制,还有利于实现多部步进电机的异步运行。针对每个电机定义一个速度变量,分别与时间标量进行比较运算,比较结果控制各自的管脚电平变化。用取反运算或者位异或运算改写管脚电平,可以有效控制输出电平而不互相干扰。1.4 串口通讯的模拟单片机上有通用异步接收/发送器用于串行通信,发送时数据由TXD端送出,接收时数据由RXD端输

4、入。有两个缓冲器SBUF,一个作发送缓冲器,另一个作接收缓冲器。短距离的机间通讯可使用UART的TTL电平,使用驱动芯片可接成RS232C与通用微机进行通讯。波特率时钟必须从内部定时器1或定时器2获得。本设计运用软件模拟上位机控制端,经过串口输出控制信号到单片机串行口,形成区别于键盘的另一种控制方式。2 硬件的设计与实现2.1 微处理器的选择AT89C51是一种带4K字节闪烁可编程可擦除只读存储器和128bytes随机存取数据存储器的低电压、高性能CMOS8位微处理器。片内置通用8位中央处理器,采用ATMEL公司的高密度、非易失性存储技术的生产,兼容标准MCS-51指令系统。AT89C51提供

5、以下标准功能:4K字节Flash闪存存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器;一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式,空闲方式停止CPU的工作,但允许RAM、定时/计数器、串行通信及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一次硬件复位。用AT89C51足以实现对步进电机的简单控制。2.2 控制电路的实现常规步进电机的驱动是用ULN达林顿驱动器实现的,其内部含有多个达林顿管,适于感性负载的驱动。本文所设计的步

6、进电机控制驱动器的框路图如图2:图2 步进电机控制驱动器框图L297芯片是一种硬件环分集成芯片,可产生四相驱动信号,用于计算机控制的两相双极或四相单极步进电机。其内部主要部分是一组译码器,能产生各种所需的相序。这一部分是由两种输入模式控制,方向控制(CW/CCW)和HALF/FULL,以及步进式时钟CLOCK,能将译码器从一阶梯推进至另一阶梯。译码器有四个输出点连接到输出逻辑部分,提供抑制和斩波功能所需的相序。因此L297能产生三种相序信号,对应于三种不同的工作方式:即半步方式(HALF STEP),基本步距(FULL STEP,整步)一相激励方式,基本步距两相激励方式。脉冲分配器内部是一个3

7、bit可逆计数器,加上组合逻辑产生每周期8步格雷码时序信号,就是半步工作方式的时序信号,此时HALF/FULL信号为高电。若HALF/FULL取低电平,得到基本步距工作方式,即双四拍全阶梯工作方式。L297另一个重要组成是由两个PWM斩波器来控制相绕组电流,实现恒流斩波控制以获得良好的矩频特性。每个斩波器由一个比较器、一个RS触发器和外接采样电阻组成,并设有一个公用振荡器,向两个斩波器提供触发脉冲信号。L298是一种高压、大电流双全桥式驱动器,其设计是为接受标准TTL逻辑电平信号和驱动电感负载的,例如继电器、圆筒形线圈、直流电动机和步进电动机等。L298具有两抑制输入,可使器件不受输入信号影响

8、。每桥的三级管的射极是连接在一起的,相应外接线端可用来连接外设传感电阻,还可安置另一输入电源,使逻辑能在低电压下工作。L298芯片是具有15个引出脚的多瓦数直插式封装的集成芯片。由L297和L298所组成的步进电机控制电路如图3所示。这种控制电路的优点是需要的元件较少,装配线路简单,成本低,可靠性高,占空间少。控制电路所需信号也比较简易,可以简化和减轻微型计算机的负担。另外,L297和L298都是独立的芯片,所以组合和控制十分灵活。但缺点是,所控制的电机类型以及运行方式会受芯片限制。 图3 步进电机控制电路2.3 键盘和显示电路本设计键盘采用低电平有效的独立键盘,用位运算进行键盘扫描。显示选用

9、LM016L液晶显示器,可同时显示两部电机的运行方向和速度。加入通信串口,晶振以及相关配件后的系统总电路图如下,(系统调试后的完整电路图见附录):3 软件的设计与实现单片机是系统的核心,主要承担控制信号的接受,逻辑分析和运算,控制量的输出和显示的运算和输出等功能。本程序采用模块化设计,针对上述功能主要包括主函数、键盘扫描、串口中断、计时中断和显示程序几个模块。其中,主函数主要负责对单片机、内部元件及中断等工作方式进行定义和设定,并协调好各模块之间的运行时序,其流程图如下: 图5 主函数流程图3.1 控制信号输入程序控制信号可以通过独立键盘和串口通讯两种方式输入。键盘的输入主要是用扫描程序,即不

10、停取键盘接口的逻辑值,与特定值进行位运算就可以识别键盘的控制信息。串口通讯控制信号的输入也是利用了扫描,不过单片机内软件所要做的,主要是定义计数器工作及串口协议,如波特率等。成功实现串口通讯后,对获得的数据编辑运算就可以形成对应的控制输出。为避免两种方式的控制信号冲突,程序通过外接开关选定控制方式。整个控制信号输入程序流程图如下:图6 输入扫描程序流程图3.2 步进电机控制程序设计确定方案的时候已经提到,对步进电机的控制主要是对单片机输出脉冲频率的控制。频率的快慢必然是要有时间来衡量的,显然要使用单片机内部的计时器进行计时,电平输出指令就在计时器中断程序中。每当计时结束,就执行一次比较运算并改

11、写电平与原来相反。值得注意的是,由于单片机计时器的计时是对预存的起始量进行减运算。这样,要想加快电机速度提高输出频率就要减小速度标量B,以减少两者比较次数,更频繁地执行中断以改写电平,从而达到提高频率的目的。频率控制原理图如图7所示:图7 频率变化原理由图可以明显地看出,速度标志量越小,输出波形的频率越快。由此可以确定键盘控制和串口控制下,步进电机控制算法程序的流程图如下:图8 步进电机控制程序流程图3.3 程序分析及说明本设计的程序采用了多个变量,其中Runspeed变量在控制输入和控制输出之间起枢纽作用,可以说对Runspeed的控制就是对电机速度的控制。计数器环节中,Cnt变量的使用让计

12、时器解放出来成为独立的走时,把对计时中断次数的统计作为计算量,而计数器本身不参与逻辑运算。这样大大提高了单片机内有限个计时器的利用率,当有新的控制需要时间量度时,只需增加变量即可。此外,通过取反改变输出电平的算法简单方便,节省了单片机内存空间的同时也节省了有限的数据口。设计程序从多方面充分提高单片机的利用率,是值得推广的。4 系统的仿真与调试仿真时,先完成由键盘控制的一台步进电机的加速减速控制,确定键盘扫描、电机走步等的基本算法是否可行。之后开辟新的接口,对另一台电机控制,新变量的加入使两台电机的异步运行十分容易。最后仿真串行接口的通讯与控制。4.1 程序的调试对于脉冲波的输出算法,可以选择对

13、管脚位定义,再对变量或管脚代号分别作取反运算。这种方法可靠简单,但如果所要控制的电机数目较多,程序就会十分冗长。用8位异或的位运算就可以解决这个问题,位异或可以只对目标管脚作用而不影响其他管脚的输出,可以同时对多个管脚改写电平。键盘扫描是不断用接口数据与特定16进制数进行位运算,位运算的选择也会影响到信号采集的准确度和管脚的利用率。调试显示器的关键则是准确地将初始化信息分批地送到显示器里。针对本设计所使用的AT89C51单片机,如果选用P0口作为显示输出则必须对P0口每个管脚接上拉电阻。而对电机速度的显示需要以Runspeed为应变量选取适当的换算函数,才能显示正确的速度值。4.2 串口通信的

14、调试调试串口通讯的关键是对串口正确地初始化。一旦通信成功,串口控制就解决了大半的问题,接着就是用缓存里的数据编程控制,其算法与键盘控制相差不远。串口调试最需注意的是,除了在程序里对串口和通讯初始化之外,电路图中器件相关属性的设置都必须与通讯要求保持一致,比如串口的波特率应设置为软件里初始化波特率的大小。同样地,模拟的上位机的传输位和停止位等指标也应认真选定。本设计只完成了单片机与控制口之间以字节为单位的简单通讯,所以能通信的控制功能十分有限。4.3 调试结果经过调试,系统能以键盘和串口两种方式对两部步进电机进行异步控制,并在显示屏上显示各电机的转向和转速。其中串口控制仿真效果如下图所示:图9

15、串口控制仿真效果图图10 串口控制窗口5 设计总结本计选择常规的脉冲分配器完成对电机绕组电平的时序控制,从而使单片机对每部电机对应输出一个触发信号和一组脉冲波即可。这样节省了单片机的数据接口,一定程度提高了利用率。另外,正如程序分析师所述,本设计的软件采用了多个变量使单片机计时器等部分得以共享,当有新的控制需要时间量度时,只需增加变量即可,大大提高了使用价值。此外,程序通过取反改变输出电平的算法简单方便,节省了单片机内存空间的同时也节省了有限的数据口。系统对信号频率控制,使得控制的精确度较输出控制字方式较差。此外,变量的使用也是的多个程序模块同时依赖一个计数器,降低了系统可靠性。参考文献1于海

16、生.微型计算机控制技术.北京:清华大学出版社,1999.32常喜茂,孔英会等.C51基础与应用实例.北京:电子工业出版社,20093马德骏,张建宏等.C语言程序设计.北京:科学出版社,20064刘宝廷,程树康等.步进电机及其驱动控制系统.哈尔滨:哈尔滨工业大学出版社,19975马忠梅,籍顺心等.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,2007附录#include#include intrins.hint delay();void inti_lcd();void show_lcd(int i);void cmd_wr();void ShowSpeed();void ShowDi

17、r();void key_scan();void cod_scan();void delayms(int ms);void send_char(unsigned char out);sbit RS=P24; /定义LCD的端口物理地址sbit RW=P25;sbit E=P26;char SpeedChar1=V1(n/min):; /显示变量char SpeedChar2=V2(n/min):char SPEED13=050char SPEED23=char forward=f,backforward=bunsigned int RunSpeed1=50; /运算变量unsigned int

18、 RunSpeed2=50;unsigned int cnt1=0;unsigned int cnt2=0;unsigned int cod;bit RunDir1=1,RunDir2=1; /运行状态(起始为正方向)bit Contrl=0; /控制状态(起始为按键控制)unsigned char temp; /串口变量void Init_RS232(void) TL1=0Xfd; TH1=0Xfd; /波特率为9600(fd), 4800(fa),2400(f4) SCON = 0x50; /设定串行口工作方式 PCON&= 0xef; /波特率不倍增 TR1=1; main() TMOD

19、=0x21; /定时器工作方式 EA=1; /开中断 TR0=0; /关闭计数器0 TH0=(65535-1000)8; /定时器0初值,即1ms中断一次 TL0=(65535-1000)&0x00ff; PT0=1; /定时器0高优先级中断 ET0=1; /定时器0中断允许 TR0=1; /启动计数器0 Init_RS232();inti_lcd(); ShowSpeed(); ShowDir(); while(1) if(ContrlP1_6) /控制方式键是否按下 Contrl=P1_6; if(Contrl=0) /按下则扫描键盘 key_scan(); if(Contrl=1) /没

20、按下则等待输入 if(RI) /是否有数据到来 RI=0; /暂停接收数据 cod=SBUF; /存储接受的数据 delayms(10); send_char(cod); /回传接收到的数据 cod=cod-0x30; /将ASC码转化 cod_scan(); ShowSpeed(); void send_char(unsigned char out)/传送一个字符 SBUF=out; /预存 while(!TI); /等特数据传送 TI=0; /清除数据传送标志void delayms(int ms) /延时子程序 int i; while(ms-) for(i=0;i=12) /电机1加速

21、 RunSpeed1=RunSpeed1-2; break; case 0x02:if(RunSpeed1=12) /电机2加速 RunSpeed2=RunSpeed2-2; case 0x04:if(RunSpeed2 case 0x0d:if(RunSpeed1if(RunSpeed2=RunSpeed1) /计时中断次数达到或高于速度则改写输出电平 P2=P20x01; cnt1=0; if(cnt2=RunSpeed2) P2=P20x02; cnt2=0; int delay() /判断LCD是否忙 int a;start: RS=0; /读显示器状态 RW=1; E=0; for(a=0;a2;a+); E=1; P0=0xff; /拉高数据口 if(P0_7=0) return 0; else goto start;void inti_lcd() /设置LCD方式 P0=0x38; /8位2行,57点阵 cmd_wr(); delay(); P0=0x01; P0=0x0f; /显示打开,显示光标,光标闪烁

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1