基于单片机uln2003的步进电机控制系统(汇编及c语言程序各一个)_第1页
基于单片机uln2003的步进电机控制系统(汇编及c语言程序各一个)_第2页
基于单片机uln2003的步进电机控制系统(汇编及c语言程序各一个)_第3页
基于单片机uln2003的步进电机控制系统(汇编及c语言程序各一个)_第4页
基于单片机uln2003的步进电机控制系统(汇编及c语言程序各一个)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图 8 总体电路图1.3.4 软件设计通过分析可以看出,实现系统功能可以采用多种方法,由于随时有可能输入加速、加速信号和方向信号,因而采用中断方式效率最高,这样总共要完成 4 个部分的工作才能满足课题要求,即主程序部分、定时器中断部分、外部中断 0 和外部中断 1 部分,其中主程序的主要功能是系统初始参数的设置及启动开关的检测,若启动开关合上则系统开始工作,反之系统停止工作;定时器部分控制脉冲频率,它决定了步进电机转速的快慢;两个外部中断程序要做的工作都是为了完成改变速度这一功能。下面分析主程序与定时器中断程序及外部中断程序。(1)主程序设计主程序中要完成的工作主要有系统初始值的设置、系统状态的显示以及各种开关状态的检测判断等。其中系统初始状态的设置内容较多,该系统中,需要初始化定时器、外部中断;对 P1 口送初值以决定脉冲分配方式,速度值存储区送初值决定步进电机的启动速度,对方向值存储区送初值决定步进电机旋转方向等内容。若初始化 P1=11H、速度和方向初始值均设为 0,就意味着步进电机按四相单四拍运行,系统上电后在没有操作的情况下,步进电机不旋转,方向值显示“0”,速度值显示“0” ,主程序流程图如图 9 所示。开 始初 始 化速度值为0?启动开关为 0?停止计时器显 示启动计时器延 时停止计时器图 9 主程序流程图YNYN(2)定时中断设计步进电机的转动主要是给电机各绕组按一定的时间间隔连续不断地按规律通入电流,步进电机才会旋转,时间间隔越短,速度就越快。在这个系统中,这个时间间隔是用定时器重复中断一定次数产生的,即调节时间间隔就是调节定时器的中断次数,因而在定时器中断程序中,要做的工作主要是判断电机的运行方向、发下一个脉冲,以及保存当前的各种状态。程序流程图如图 10 所示。中断返回T0 中断入口发速度脉冲读方向指示重送相关状态恢复现场保护现场中断次数-1=0?NY图 10 定时中断程序流程图(3)外部中断设计外部中断所要完成的工作是根据按键次数,改变速度值存储区中的数据(该数据为定时器的中断次数) ,这样就改变了步进电机的输出脉冲频率,也就是改变了电机的转速。速度增加按钮 S2 为 INT0 中断,其程序流程为原数据,当值等于 7 时,不改变原数值返回,小于 7 时,数据加 1 后返回;速度减少按钮 S3,当原数据不为 0,减 1 保存数据,原数据为 0 则保持不变。程序流程图如图 11 所示。外部中断入口保护现场延时去抖中断返回速度值1恢复现场速度=上或限值?按钮是否弹起?NNNYY图 11 外部中断程序流程图1.3.5 源程序(汇编、C 语言程序各一个)汇编程序如下:SPEED EQU 10H ;SPEED 为转速等级标志,共 7 级,即 17FX EQU 11H ;FX 为方向标志COUNT EQU 12H ;COUNT 中断次数标志ORG 0000HAJMP MAINORG 0003H ;外部中断 0 入口地址,加速子程序AJMP UPORG 0013H ;外部中断 1 入口地址,减速子程序AJMP DOWNORG 000BH ;定时器 0 中断入口地址,控制中断次数来达到控制转速AJMP ZDT0ORG 0030HMAIN: MOV SP,#60HMOV TMOD,#01H ;工作于定时、软件置位启动!模式 1(16 位计时器)MOV TH0,#0CFH MOV TL0,#2CHMOV COUNT,#01HSETB ET0 ;定时/计数器允许中断CLR IT0 ;外部中断为电平触发方式,低电平有效CLR IT1SETB EX0 ;外部允许中断SETB EX1SETB EA ;开总中断MOV R1,#11H ; 四相单四拍运行,共阳数码管方向显示 8,速度值显示 0MOV SPEED,#00HMOV FX,#00HXIANS: MOV A,SPEEDMOV DPTR,#LEDMOVC A,A+DPTR ;查表获取等级对应数码管代码MOV P2,A ;第二个数码管显示转速等级MOV A,FX ;准备判断转向CJNE A,#11H,ELS MOV P0, #0F9H ;第一个数码管显示 1,表示正转AJMP QDELS: CJNE A,#00H,ZHENGMOV P0,#0C0H ;第一个数码管显示 0,表示不转AJMP QDZHENG: MOV P0,#0BFH ;第一个数码管显示-,表示反转QD: JB P3.4,DD ;P3.4 接启动开关 K1,P3.4=1 时启动CLR TR0 ;停止定时/ 计数器MOV P0,#0C0H ;第一个数码管显示 0,表示不转MOV P2,#0C0H ;第二个数码管显示 0,表示转速为 0MOV SPEED,#00H ;重新赋初值MOV FX,#00HAJMP QDDD: MOV A,SPEEDJNZ GO ;A 不等于 0,即初始速度不为零,则转移到 GOCLR TR0 ;停止定时/计数器AJMP QDGO: SETB TR0 ;开启定时/ 计数器ACALL DELAYAJMP XIANSDELAY: MOV R6,#10 ;延时子程序DEL1: MOV R7,#250HERE1: DJNZ R7, HERE1 DJNZ R6,DEL1RET;以下 ZDT0 为定时器中断程序ZDT0: PUSH ACCPUSH DPHPUSH DPLMOV TH0,#0D8HMOV TL0,#0F0HDJNZ COUNT,EXITJB P3.5,NIZHUAN ;查询方向标志 ,P3.5 接换向开关 K2MOV FX,#11HNIZHUAN:MOV A,FXCJNE A,#11H,FZ ;若 A 不等于 11,即正转,则转移到 FZMOV A,R1 ;R1 记录上一次电机脉冲状态MOV P1,ARR A ;循环右一位MOV R1,AMOV P1,AAJMP RE FZ: MOV A,R1MOV P1,ARL A ;循环左移一位MOV P1,AMOV R1,ARE: MOV A,SPEEDMOV DPTR,#TABMOVC A,A+DPTRMOV COUNT,A ;把转速级别赋给 COUNTJB P3.5 ,FFX ; P3.5 接换向开关 K2, 即换向位,若 P3.5=1,则跳到 FFXMOV FX,#11HAJMP EXITFFX: MOV FX,#0FEH ;只要 FX 不等于 11H,就可以通过循环左移或右移进行换向EXIT: POP DPLPOP DPHPOP ACCRETI;以下 UP 为加速中断程序UP: PUSH ACCACALL DELAY ;延时防抖动JB P3.2,UPEX ;P3.2 为外部中断 0 位,接增速开关 S2,低电平有效,若 P3.2=1,则退出MOV A,SPEEDCJNE A,#7,SZ ;最大等级为 7,若 A 不等于 7,则转移到 SZAJMP UPEX ;若 A=7,则退出SZ: INC SPEED ;SPEED= SPEED+1UPEX: POP ACCHERE2: JNB P3.2,HERE2 ;本条指令为防止开关 S2 按下去后弹不起,导致一直产生中断 RETI;以下 DOWN 为减速中断程序DOWN: PUSH ACCACALL DELAYJB P3.3,DEX ; P3.3 为外部中断 1 位,接减速开关 S3,低电平有效,若 P3.3=1,则退出MOV A,SPEEDCJNE A,#0,SJAJMP DEXSJ: DEC SPEED ;SPEED= SPEED-1DEX: POP ACCHERE3: JNB P3.3,HERE3 RETITAB: DB 0,60,40,35,30,28,25,21 ;经仿真,小于 21 时,由于脉冲太快,会出现失步; 0 1 2 3 4 5 6 7 8 9LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98HENDC 语言程序如下:#include #define uint unsigned int sbit k1=P34; /启动开关sbit k2=P35; /换向开关sbit s2=P32; /加速按钮sbit s3=P33; /减速按钮void isr_int0(void);/外部中断 0 中断服务函数声明void isr_int1(void);void zd_t0ist(void);uint speed,count,r1,i,t,k;main()k=0;t=0;r1=0x11 ;speed=0;count=1;TMOD=0x01;ET0=1;EA=1;EX0=1;EX1=1;TH0=0xcf;TL0=0x2c;for(;)if(k1=0)P0=0xff;P2=0xff;speed=0;TR0=0;else if(k2=0)P0=0xbf;else P0=0xf9;if(speed=0)P2=0xc0;TR0=0;else TR0=1;void isr_int0(void) interrupt 0if(speed0)speed=speed-1;while(s3=0)for(i=0;i0)t=t-1;if(k2=0)if(t=0)switch(k)case 0:P1=0x01;break;case 1:P1=0x02;break;case 2:P1=0x04;break;case 3:P1=0x08;break;default :break;k=k+1;if(k=4)k=0;else if(t=0)switch(k)case 0:P1=0x08;break;case 1:P1=0x04;break;case 2:P1=0x02;break;case 3:P1=0x01;break;default :break;k=k+1;if(k=4)k=0;2.总结本设计通过分析步进电机结构、工作原理,查阅步进电机控制系统的相关科技文献,遵循实用、简单、可靠和低成本的原则,设计了一种既可用于精度要求不高,但控制需完备的场合。对本次设计,有以下结论:(1)采用单片机为控制核心,利用其强大的功能,把键盘和显示电路有机的结合起来,组成一个操作方便、交互性强的控制系统。而且整个系统所包含的技术几乎包括了现本科学校控制专业所要求的知识,有利于实践教学取得最大效果。(2)键盘电路和显示电路采用了动态扫描技术,节约了单片机资源。(3)系统软件采用结构化设计,具有易维护性,根据用户新的要求,对软件系统进行少量的修改,使系统功能得到一定程度的提高。3.结束语本人深知自己做的工作还很不够,由于软件和硬件的各方面原因,系统的应用讨论不够,精度还有待于进一步提高。由于时间的原因,设备的原因,实验做的不好不够,相关验证性的数据、信息不够丰富。可以肯定,随着技术的不断发展,步进电机的控制应用前景将越来越宽阔,而其控制系统也将向着智能化和网络化的方向发展。本论文的研究和探讨还远远不够,我们要在现在的基础上,不断吸取新的技术和方法,并将它们应用于本课题的研究上来,进一步深化我们的研究

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论