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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

步进电机及其控制.docx

1、步进电机及其控制步进电机及其控制【实验目的】熟悉步进电机的结构和驱动方式掌握用AT89S52来控制步进电机的方法进一步熟悉EDA实验平台【实验器材】EDA实验箱、PC机、DB25-ISP下载线、USB转换线、USB-BLASTER编程器等软件:Quatus II 、Keil uVision2、ISPlay等 【实验原理】步进电机(stepping motor)是一种以脉冲控制的转动设备,由于是以脉冲驱动,很适合以数字或微型计算机来控制,做一又把它当成是一种数字设备。1、步进电机的结构:步进电机与一般电机结构类似,除了托架、外壳之外,就是转子和定子,比较特殊的是其转子与定子上有许多细小的齿,如图

2、1所示。转子为永久磁铁,线圈绕在定子上。根据线圈的配置,步进电机可以分为2相、4相、5相等,比较常用的是2相的步进电机。其中包括两组具有中间抽头的线圈,A、com1、为一组,B、com2、为另一组。两相5线式步进电机就是将其中的com1和com2连接。2、步进电机步进角度的计算顾名思义,步进电机就是一步步走的电机,其转子与定子的齿,决定了其每步的间距。若转子上有N个齿,则其齿间距为:而步进角度为:以常用的2相式50齿步进电机为例,=360/50=7.2=7.2/(22)=1.83、步进电机的驱动:步进电机的驱动是靠定子线圈激磁后,将邻近转子上相异磁极吸引过来实现的。因此,线圈排列的顺序,以及激

3、磁信号的顺序就很重要。以2相式步进电机为例,其驱动信号有1相驱动、2相驱动和1-2相驱动三种。图4:步进电机的驱动方式:1相驱动、2相驱动和1-2相驱动。(1)、1相驱动:任何一个时间,只有一组线圈被激磁,其他线圈在休息,因此产生的力矩较小,但这种激磁方式最简单,信号依次为:1000-0100-0010-0001-1000(正转)0001-0010-0100-1000-0001(反转)有四种不同的信号呈现周期性的变化。在AT89S52中产生这种信号,以正转为例,可以先输出“0001”,经过一小段时间延迟后,让步进电机有足够的时间建立磁场及转动,再输出“0100”,延时 依次循环输出这四种信号即

4、可。(2)、2相驱动:任何一个时间,有两组线圈同时被激磁,因此,产生的力矩比1相驱动要大。其信号依次为:1100-0110-0011-1001-1100(正转)1100-1001-0011-0110-1100(反转)信号输出方式与1相驱动类似。(3)、1-2相驱动:1-2相驱动的方式又称为“半步驱动”,每个驱动信号只驱动半步。其驱动信号依次为:1001-1000-1100-0100-0110-0010-0011-0001(正转)1001-0001-0011-0010-0110-0100-1100-1000(反转)共有8种信号成周期性的变化,仔细观察可以发现其中的信号是将1相驱动和2相驱动的信号

5、混合而成的。具体应用时根据不同型号的步进电机采用不同的驱动方式,本EDA实验箱中的步进电机采用1相驱动的方式进行驱动。4、转速控制控制步进电机的运行速度,实际上是控制系统发出时钟脉冲的频率或换相的周期,即在加速的过程中,使脉冲的输出频率增加;在减速过程中,使脉冲的输出频率减小。脉冲信号的频率可以用软件延时来确定。5、步进电机的驱动电路AT89S52的输出电流很难驱动步进电机,必须另外设计驱动电路才行,在此我们将采用ULN2003(如图5)驱动步进电机。一颗ULN2003系列IC包含7个开集极式输出的反相器,而在每个输出端都有一个连接到公共端(VCC)的二极管,作为放电保护电路,每组反相器的内部

6、电路如图6.图5:ULN2003图6:内部电路【实验内容】原理图:1、根据EDA步进电机步进角度,计算出该步进电机的齿间距和齿数,填入表1;齿数齿间距步进角度 12 30152、步进电机的步进和特定角度旋转(1)将“桌面EDA实验-51部分-步进电机实验步进电机实验底层驱动”路径下 “LCD1602.sof”文件烧入FPGA中。具体步骤如下:a) 用USB转换线将 USB BLASTER 与PC机相连,USB BLASTER的另一端连接到FPGA核心板右下角J12口。如果连接正常,USB BLASTER绿灯点亮。b) 双击“桌面EDA实验-51部分-步进电机实验步进电机实验底层驱动”路径下 “

7、LCD1602.qpf”文件,启动Quartus II;c) 单击菜单栏中 ToolsProgrammer ,打开FPGA程序下载窗口;d) 单击界面右上角“Hardware Setup”,在“Currently selected Hardware”下拉列表中选择“USB-BlasterUSB-0”,激活USB-Blaster,单击“close”关闭;e) 单击“Add File”,路径选择“桌面EDA实验-51部分-步进电机实验步进电机实验底层驱动”,选中文件“LCD1602.sof”,勾选Program/Configure;f) 给EDA主板供电,单击“start”,将底板驱动程序烧录到F

8、PGA中。g) 烧录后不要断电,断电后程序会丢失,需要重新烧录。(2)利用“程序一.c”代码,创建keil工程,生成“程序一.hex”文件具体步骤如下:a) 单击“开始程序”,启动Keil uVision2;b) 单击“ProjectNew Project”,创建新工程;c) 新工程保存路径为“桌面EDA实验-51部分-步进电机实验程序一”,工程名设为“工程一”,单击“保存”;d) 在弹出的“器件选择窗口”中,选择“AtmelAT89S52”,单击“确定”;e) 右键单击窗口右边列表栏中“Source Group 1”,选择“Add File to Group Source Group 1”;

9、f) 选中“桌面EDA实验-51部分-步进电机实验程序一”路径下“程序一.c”,单击“Add”,然后单击“close”;g) 双击“程序一.c”,打开该文件。h) 单击窗口左上角“Build Target”按键,编译程序一;i) 单击窗口左上角图标,选中“output”面板,选中“Creative HEX”,单击“确定”j) 再次单击窗口左上角“Build Target”按键,将生成“程序二.Hex”文件;k) 在路径“桌面EDA实验-51部分-步进电机实验程序一”下,已经生成“程序二.Hex”文件。(3)将 程序一.hex 烧入单片机具体步骤如下:a) 用DB25-ISP下载线连接单片机IS

10、P程序下载口(EDA主板右下角J15口)和PC机并口,EDA主板右下角S8拨码开关全部拨向ON;b) 在桌面双击图标,启动ISPlay;c) 单击“检测器件”,听到“嘀嘀嘀”,表示器件检测成功;d) 单击“文件”,选择“桌面EDA实验-51部分-步进电机实验程序一”路径下“程序一.hex”,单击“打开”;e) 单击“AUTORUN!”,完成程序的下载;下载完成会听到“嘀嘀嘀”的响声。完成表2:操作步进电机状态开机静止单击按键K1顺时针每次旋转60单击按键K5逆时针每次旋转60单击按键K9顺时针每次120单击按键K13逆时针旋转两圈3、步进电机正、反、加速、减速转动控制通过按键控制步进电机的正转

11、、反转、加速、减速、停止和转动等动作。(1) 将“桌面EDA实验-51部分-步进电机实验步进电机实验底层驱动”路径下 “LCD1602.sof”文件烧入FPGA中,若上步实验后系统未重启,此步可省略。具体步骤见前。(2) 利用“程序一.c”代码,创建keil工程,生成程序一.hex文件。具体步骤见前。(3) 将“桌面EDA实验-51部分-步进电机实验程序二”路径下“程序二.hex”烧入单片机。具体步骤见前。完成表3:按键操作步进电机状态单击按键K1反向旋转单击按键K5暂停继续单击按键K9加速旋转单击按键K13减速旋转4、程序分析设计:(1) 阅读 程序一.c ,要使单击按键K9时,步进电机逆时

12、针旋转240, 应该如何修改程序?写出程序代码;#includeAT89X52.hsfr p0=0x80;sfr p1=0x90;sfr p2=0xA0;sfr p3=0xB0;sbit s1=p32;/正向步进sbit s2=p33;/反向步进sbit s3=p34;/正向旋转120sbit s4=p35;/反向旋转2圈int con=800;char data id1=0,id2=0,id3=0,id4=0;/按键标志unsigned char motorni8=0xF2,0xF8,0xF4,0xF1,0xF2,0xF8,0xF4,0xF1;/逆时针unsigned char motors

13、hun8=0xF2,0xF1,0xF4,0xF8,0xF2,0xF1,0xF4,0xF8;/顺时针unsigned char motorout8=0,0,0,0,0,0,0,0;/电机输出delay(int t)int i,j;for(i=0;it;i+)for(j=0;j10;j+);keyscan() int i,j;/按键s1:正向步进 if(s1=0) delay(1000); while(s1=0); for(i=0;i4;i+) p0=motorshuni; delay(400); /按键s2:反向步进 if(s2=0) delay(1000); while(s2=0); for(

14、i=0;i4;i+) p0=motornii; delay(400); /按键s3:正向旋转120度 if(s3=0) delay(1000); while(s3=0); for(j=0;j4;j+)/将这句改成重复4次,由于每次转动/60度,所以可以实现正向转动240度 for(i=0;i4;i+) p0=motorshuni; delay(400); /按键s4:反向旋转2圈 if(s4=0) delay(1000); while(s4=0); for(j=0;j12;j+) for(i=0;i4;i+) p0=motornii; delay(400); void main() p0=0x

15、ff; while(1) keyscan(); (2) 阅读 程序二.c ,要实现系统初始化时,步进电机顺时针旋转,怎样修改程序?写出程序代码;#includeAT89X52.hsfr p0=0x80;sfr p1=0x90;sfr p2=0xA0;sfr p3=0xB0;sbit s1=p32;/对应于按键K1 反向sbit s2=p33;/对应于按键K5 停止sbit s3=p34;/对应于按键K9 加速sbit s4=p35;/对应于按键K13 减速int con=800;char data id1=0,id2=0,id3=0,id4=0;/按键标志unsigned char motor

16、ni8=0xF2,0xF8,0xF4,0xF1,0xF2,0xF8,0xF4,0xF1;/逆时针unsigned char motorshun8=0xF2,0xF1,0xF4,0xF8,0xF2,0xF1,0xF4,0xF8;/顺时针unsigned char motorout8;/电机输出delay(int t)int i,j;for(i=0;it;i+)for(j=0;j10;j+);motor() int i; if(id2=0) for(i=0;i8;i+) p0=motorouti; delay(con); else if(id2=1) p0=0xff;keyscan() int i

17、;/按键s1:反向 if(s1=0) delay(1000); while(s1=0); id1+; if(id1=1) for(i=0;i8;i+) motorouti=motornii; else if(id1=2) id1=0; for(i=0;i8;i+) motorouti=motorshuni; /按键s2:停止继续 if(s2=0) delay(900); while(s2=0); id2=id2; /按键s3:加速 if(s3=0) delay(900); while(s3=0); if(40con4100) con=con/2; if(con40) con=4000; /按键

18、s4:减速 if(s4=0) delay(900); while(s4=0); if(30con4000) con=40; else /当扫描按键时,没检测到按键时, delay(1000); /执行else语句,即正向旋转 for(i=0;i8;i+) motorouti=motorshuni; void main() p0=0xff; while(1) keyscan(); motor(); (3) 怎样实现步进电机转速的渐变,完成先递增,后递减?写出程序代码或画出流程图。#includeAT89X52.hsfr p0=0x80;sfr p1=0x90;sfr p2=0xA0;sfr p3

19、=0xB0;sbit s1=p32;/对应于按键K1 反向sbit s2=p33;/对应于按键K5 停止sbit s3=p34;/对应于按键K9 加速sbit s4=p35;/对应于按键K13 减速int con=800;char data id1=0,id2=0,id3=0,id4=0;/按键标志unsigned char motorni8=0xF2,0xF8,0xF4,0xF1,0xF2,0xF8,0xF4,0xF1;/逆时针unsigned char motorshun8=0xF2,0xF1,0xF4,0xF8,0xF2,0xF1,0xF4,0xF8;/顺时针unsigned char

20、motorout8=0xF2,0xF1,0xF4,0xF8,0xF2,0xF1,0xF4,0xF8;/电机输出delay(int t)int i,j;for(i=0;it;i+)for(j=0;j10;j+);motor() int i; if(id2=0) for(i=0;i20) con=con/2; motor(); speeddown() /定义一个减速函数,当转动单位时/间con小于4100时,做减速转动 while(con4100) con=con*2; motor(); void main() /最后在main函数中调用/speedup和speeddown p0=0xff; while(1) speedup();speeddown(); 【实验体会】(1) 首先是对keil的使用不是太了解,没有设置环境变量,耽误了很长时间,由于上次人太多,没有亲自上手的机会,虽然耽误了很长时间,但是对软件使用印象更加深刻。(2) 前两个试验修改比较简单,没有遇到多大的困难,在最后一个实验时,没有定义motorout8,导致在写好加速减速函数时,在main函数中调用没有观察到现象。(3) 实验对步进电机有了直观了解,了解如何通过编程实现对步进电机的控制。

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

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