步进电机课程设计.docx
- 文档编号:6338022
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:22
- 大小:697.94KB
步进电机课程设计.docx
《步进电机课程设计.docx》由会员分享,可在线阅读,更多相关《步进电机课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
步进电机课程设计
成绩
电机控制课程设计报告书
题目步进电机
院部名称龙蟠学院
专业自动化
班级M11自动化
组长姓名朱德纹
学号1121112033
同组学生汤志渊
设计地点工科楼C
设计学时1周
指导教师周洪等
金陵科技学院教务处制
一、设计任务和要求
电机控制课程设计是考察学生利用所学过的电机控制专业知识,进行综合的电机控制系统设计并最终完成实际系统连接,能够使学生对电气与自动化的专业知识进行综合应用,培养学生的创新能力和团队协作能力,提高学生的动手实践能力。
最终形成一篇符合规范的设计说明书,并参加综合实践答辩,为后期的毕业设计做好准备。
本次设计考核的能力主要有:
1)专业知识应用能力,包括电路分析、电子技术、单片机、检测技术、电气控制、电机与拖动、微特电机及其驱动、计算机高级语言、计算机辅助设计、计算机办公软件等课程,还包括本专业的拓展性课程如变频器、组态技术、现场总线技术、伺服电机等课程。
2)项目设计与运作能力,团队协作能力,技术文档撰写能力,PPT汇报与口头表达能力。
3)电气与自动化系统的设计与实际应用能力。
要求完成的工作量包括:
1)制作实际成品,并现场演示效果。
2)学生结合课题进行PPT演讲与答辩。
3)学生上交课题要求的各类设计技术文档。
二、设计思路
2.1系统总体框图:
图2-1系统总体框图
2.2设计原理
本系统主要是由电源(+5V)及时钟信号模块、复位模块、电机驱动模块(ULN2003A)、键盘控制模块、状态显示模块(LED、数码管)、步进电机等6个模块组成。
电源模块的功能是提供直流5V电源给其余几个模块供电,时钟信号模块的功能是对单片机89C51提供工作周期,使89C51能够正常工作,该电路也称最小模式电路,对于没有内部晶振的单片机,接上电源和晶振就是该单片机的最小系统。
89C51芯片内部有一个反相放大器,用于构成振荡器,反相放大器的输入端为XTAL1,输出端XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器(这里电容取值在30PF,石英晶体为12MHZ),复位电路的功能是使单片机初始化操作,只要给RESET引脚(9脚)加上2个机器周期以上的高电平信号,即可使单片机复位。
复位电路的功能是只对89C51单片机复位,除了进入系统的正常初始化之外,当程序运行出错或是操作错误使系统处于死锁状态时,为了摆脱死锁状态,也需要按复位键重新复位。
驱动模块的功能是通过驱动器ULN2003A来驱动步进电机,通过单片机的P2.4-P2.7输出脉冲到ULN2003A的1B-4B口,经信号放大后从1C-4C口分别输出到电机的A、B、C、D相。
键盘控制电路的功能是控制输入部分设置了正转控制、反转控制、加速控制和减速按钮(K1、K2、K3、K4),内部程序检测P1.0和P1.1的状态来调用相应的来调用相应的启动和换向程序,实现步进电机的正反转控制。
显示模块的功能是将键盘输出的状态信息,通过发光二极管LED实现功能。
在该步进电机的控制器中,电机实现正反启停控制,为了方便知道电机的运行状态,这里利用了单片机的P2.0-P2.3口,采用LED数码管显示电机的工作状态。
三、系统硬件设计
3.1时钟信号控制电路原理介绍
3.1.1芯片89C51介绍
图3-189C51芯片引脚图
3.1.2芯片管脚说明:
1.VCC:
供电电压。
2.GND:
接地。
3.P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
4.P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
5.P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
6.P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
7.RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
8.ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
9./PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
10./EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
11.XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
12.XTAL2:
来自反向振荡器的输出。
3.1.3时钟信号控制电路
图3-2时钟信号控制电路
该电路工作原理:
该电路也称最小模式电路,对于没有内部晶振的单片机,接上电源和晶振就是该单片机的最小系统。
89C51芯片内部有一个高增益反相放大器,用于构成振荡器,反相放大器的输入端为XTAL1,输出端XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。
电容C1、C2通常取30pf左右,可以稳定频率并对振荡频率有微调作用。
振荡信号从XTAL2端输入到片内的时钟发生器上。
3.2系统复位电路原理介绍
3.2.1系统复位电路
图3-3系统复位电路
该电路工作原理:
复位电路是单片机的初始化操作,只要给RESET引脚(9脚)加上2个机器周期以上的高电平信号,即可使单片机复位。
除了进入系统的正常初始化之外,当程序运行出错或是操作错误使系统处于死锁状态时,为了摆脱死锁状态,也需要按复位键重新复位。
对于这个设计的单片机来说,还有一个钮复位电路,它保存了LED数码管上一次显示的状态信息。
3.3驱动电路原理介绍
3.3.1步进电机原理介绍
该步进电机为四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
下图是该四相反应式步进电机工作原理示意图:
图3-3四相步进电机步进示意图
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。
当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。
依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
a.单四拍 b.双四拍 c.八拍
3.3.2驱动电路
图3-4驱动电路
该电路工作原理:
通过驱动器ULN2003A来驱动步进电机,如图3-4所示,通过单片机的P1.0-P1.3输出脉冲到ULN2003A的1B-4B口,经信号放大后从1C-4C口分别输出到电机的A、B、C、D相。
3.4正反转控制电路原理介绍
3.4.1正反转控制电路
图3-5正反转控制电路
该电路工作原理:
根据系统的控制要求,控制输入部分设置了正转控制,反转控制和停止控制按钮,分别是K1、K2、K3、K4,通过K1、K2状态变化来实现电机的启动和换向功能。
当K1、K2的状态变化时,内部程序检测P1.0和P1.1的状态来调用相应的来调用相应的启动和换向程序,实现步进电机的正反转控制。
3.5显示电路原理介绍
3.5.1显示电路
图3-6显示电路
数码管是一种半导体发光器件,其基本单元是发光二极管。
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。
由于它的价格便宜使用简单在电器特别是家电领域应用极为广泛。
本设计采用共阳极数码管来显示时间,利用三极管的开关作用驱动数码管。
4、系统软件设计
4.1主程序流程图
系统分为电机正转、电机反转、电机加速与电机减速的几部分组成,其主程序框图如图4-1所示:
图4-1步进电机控制系统主程序流程图
4.2读按键子程序流程图
按键采用扫描的方法,与初始值比较,相等则说明没有键按下,不相等则软件消抖,以便确认是否真的有键按下。
延时10ms后再次扫描,第二次与初始值比较,若相等则表明前一次比较不相等是由抖动产生;如果相等则表明确实有键按下。
执行键盘之程序里的指令,将相应的变量值改变,为键盘处理子程序做准备。
如图4-2所示:
图4-2扫描键盘字程序流程图
4.3按键处理子程序流程图
按键处理子程序流程图如图4-3所示:
图4-3键盘处理子程序流程图
4.4电机控制中断程序流程图
定时器中断0服务程序流程图如图4-4所示:
定时器中断0服务程序的中断时间由当前的转速决定。
进入中断程序后,首先要保护现场,再根据当前值设置TH0和TL0的值。
然后判断转动方向控制位的值,最后恢复现场,返回,等待下次中断。
通过用当前转速控制中断时间,控制了脉冲的输出频率,也就到达了控制步进电机转动速度的目的;通过检测方向控制位的电平,控制了步进电机各引出端的接通顺序,也就到实现了步进电机转动方向的控制。
图3.4定时器中断0服务程序流程图
4.5源程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineledP0//数码管段选
#definehahaP2
sbits1=P1^0;sbits2=P1^1;sbits3=P3^0;sbits4=P3^1;//按键定义,s1正转,s2反转,s3加1,s4减1
sbitwei3=P2^3;sbitwei2=P2^2;sbitwei1=P2^1;sbitwei0=P2^0;//数码管位选定义
sbita=P2^7;sbitb=P2^6;sbitc=P2^5;sbitd=P2^4;//脉冲信号输入端定义
ucharcodedisplay[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳数码管驱动信号0---9,不显示
ucharcodetime_counter[10][2]={{0xda,0x1c},{0xde,0xe4},{0xe1,0xec},{0xe5,0xd4},{0xe9,0xbc},//9.7----1ms
{0xed,0xa4},{0xf1,0x8c},{0xf5,0x74},{0xf9,0x5c},{0xfc,0x18}};
ucharcodequdong[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
ucharnum1=0;//控制取励磁信号变量
ucharnum2=8;
uchark=1;//加减档位控制,1为最小档
bitflag1=0;//初始正转,正反转标志
ucharbuf[4]={0,10,10,1};//数码管显示缓存,正转,不显示,不显示,显示1档位,高----低
//================================定时器0/1初始化函数================================
voidT0_T1_init()
{
TMOD=0x11;//定时器0/1均工作于方式1,16位计时方式
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;//定时器0,定时4ms用于数码管扫描显示
TH1=time_counter[k-1][0];
TL1=time_counter[k-1][1];//定时器1,定时10ms用于步进电机转速控制
TR0=1;
TR1=1;
ET0=1;
ET1=1;//开定时器中断
EA=1;//开总中断
}
//================================ms级延时函数=======================================
voiddelay1m(uintx)
{
uinti,j;
for(i=0;i for(j=0;j<120;j++);//数120次,约1ms } //================================主函数============================================= voidmain() { T0_T1_init(); buf[1]=10;//不显示 while (1) { if(s1==0) { delay1m(3); if(s1==0) { flag1=0;//正转 buf[0]=0;//最高位显示0 haha=0x00;//停止 { k--; if(k==0) { k=10; } buf[2]=k/10; buf[3]=k%10; } flag1=1;//反转 buf[0]=1;//最高位显示1 haha=0x00;//停止 } while(! s2); } if(s3==0)//速度加1档 { delay1m(3); if(s3==0) { k++; if(k>10) { k=1; } buf[2]=k/10; buf[3]=k%10; } while(! s3); } if(s4==0)//速度减1档 { delay1m(3); if(s4==0) { k--; if(k==0) { k=10; } buf[2]=k/10; buf[3]=k%10; } while(! s4); } } } //==================================定时器0中断函数,用于数码管扫描显示==================================== voidtime0_interrupt()interrupt1 { staticnum=0; TH0=(65536-4000)/256; TL0=(65536-4000)%256;//定时器0,定时4ms用于数码管扫描显示 switch(num) { case0: wei3=1;wei2=1;wei1=1;wei0=0;led=display[buf[3]];break; case1: wei3=1;wei2=1;wei1=0;wei0=1;led=display[buf[2]];break; case2: wei3=1;wei2=0;wei1=1;wei0=1;led=display[buf[1]];break; case3: wei3=0;wei2=1;wei1=1;wei0=1;led=display[buf[0]];break; } num++; if(num==4)num=0; } //==================================定时器1中断函数,用于脉冲频率控制===================================== voidtime1_interrupt()interrupt3 { staticnum1=0; staticnum2=0; TH1=time_counter[k-1][0]; TL1=time_counter[k-1][1];//定时器1,定时1用于步进电机转速控制 if(flag1==0)//正转 { switch(num1) { case0: a=1;b=0;c=0;d=0;break; case1: a=1;b=1;c=0;d=0;break; case2: a=0;b=1;c=0;d=0;break; case3: a=0;b=1;c=1;d=0;break; case4: a=0;b=0;c=1;d=0;break; case5: a=0;b=0;c=1;d=1;break; case6: a=0;b=0;c=0;d=1;break; case7: a=1;b=0;c=0;d=1;break; } num1++; if(num1==8)num1=0; } else//反转 { switch(num2) { case0: a=1;b=0;c=0;d=1;break; case1: a=0;b=0;c=0;d=1;break; case2: a=0;b=0;c=1;d=1;break; case3: a=0;b=0;c=1;d=0;break; case4: a=0;b=1;c=1;d=0;break; case5: a=0;b=1;c=0;d=0;break; case6: a=1;b=1;c=0;d=0;break; case7: a=1;b=0;c=0;d=0;break; } num2++; if(num2==8)num2=0; } } 5、调试过程与结果 5.1调试 本系统的设计思路为: 首先从整体上划分出各功能模块,然后硬件和软件同时进行依次完成各个功能模块,最后将各个模块联系起来完成整个系统。 在硬件调试的过程中,遇到了很多问题。 主要有: 1.确定步进电机的使用方法,和控制模式。 此处尤为重要,这是整个系统的基础,也是确定软件是否能控制步进电机思路的开端。 2.单片机应用(电源)注意事项: 在电源两端应该加一个47uF以上的电解电容和一个0.1uF的小电容,进行电源去藕滤波。 3.电机档位切换时,转速不明显,应当对每个档位中断的二维数组值改变大点。 软件测试的时候也有些问题,主要有: 1.软件去抖方式,和时间的控制。 2.控制步进电机转动的程序段完成后,调试发现对步进电机速度的控制范围过小,查阅资料后发现设计思路不太合理,原先的设计思路是用主程序控制步进电机转动,采用延时方式控制步进电机速度,由定时器处理键盘;改进程序,主程序用来处理键盘,由定时器控制步进电机转动,步进电机转动速度由定时器定时时间决定。 问题得到解决,不仅扩大了步进电机速度的控制范围,也使得单片机对步进电机速度的控制更加精确。 由于编译只能检查是否存在语法错误,所以还要看是否存在逻辑错误。 程序修改好以后,当显示编译0错误,0警告的时候,这说明已经没有语法错误了,是否有逻辑错误还要看接上电路板通过仿真以后,步进电机能否正常转动,显示是否正常。 5.2结果 步进电机一开始不能正常转动,以为是电路焊接有问题,为了防止再次出现虚焊,首先将电路板用万用表检查了一遍,没问题。 程序也是正确的。 后来仔细看了步进电机工作原理,原来步进电机要正常实现正反转,四个相序必须弄清。 把电机接上电源,用高电平分别接触电机的引线,每接触一下电机就会向前或向后转动一下,经过几次试验,终于搞清了电机的四个相序,排列顺序分别是1—A,2—C,3—B,4—D。 弄清了相序,把电路板重新布线,焊接好,结果电机能够正常转动了。 三、总结与体会 经过老师耐心细致的指导,本次课程设计课题步进电机控制系统告一段落。 步进电机控制系统主要分为硬件设计和软件设计两个部分: 硬件设计主要是把单片机最小系统、键盘控制模块、步进电机驱动模块、数码显示模块各个硬件功能模块及其它元件合理搭配并连接起来使其能够为软件运行提供一个硬件平台。 软件设计主要是通过编写程序代码,实现对整个系统的控
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 课程设计