整理基于单片机ULN的步进电机控制系统汇编及C语言程序各一个.docx
- 文档编号:3231206
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:14
- 大小:99.22KB
整理基于单片机ULN的步进电机控制系统汇编及C语言程序各一个.docx
《整理基于单片机ULN的步进电机控制系统汇编及C语言程序各一个.docx》由会员分享,可在线阅读,更多相关《整理基于单片机ULN的步进电机控制系统汇编及C语言程序各一个.docx(14页珍藏版)》请在冰点文库上搜索。
整理基于单片机ULN的步进电机控制系统汇编及C语言程序各一个
图8总体电路图
1.3.4软件设计
通过分析可以看出,实现系统功能可以采用多种方法,由于随时有可能输入加速、加速信号和方向信号,因而采用中断方式效率最高,这样总共要完成4个部分的工作才能满足课题要求,即主程序部分、定时器中断部分、外部中断0和外部中断1部分,其中主程序的主要功能是系统初始参数的设置及启动开关的检测,若启动开关合上则系统开始工作,反之系统停止工作;定时器部分控制脉冲频率,它决定了步进电机转速的快慢;两个外部中断程序要做的工作都是为了完成改变速度这一功能。
下面分析主程序与定时器中断程序及外部中断程序。
(1)主程序设计
主程序中要完成的工作主要有系统初始值的设置、系统状态的显示以及各种开关状态的检测判断等。
其中系统初始状态的设置内容较多,该系统中,需要初始化定时器、外部中断;对P1口送初值以决定脉冲分配方式,速度值存储区送初值决定步进电机的启动速度,对方向值存储区送初值决定步进电机旋转方向等内容。
若初始化P1=11H、速度和方向初始值均设为0,就意味着步进电机按四相单四拍运行,系统上电后在没有操作的情况下,步进电机不旋转,方向值显示“0”,速度值显示“0”,主程序流程图如图9所示。
(2)定时中断设计
步进电机的转动主要是给电机各绕组按一定的时间间隔连续不断地按规律通入电流,步进电机才会旋转,时间间隔越短,速度就越快。
在这个系统中,这个时间间隔是用定时器重复中断一定次数产生的,即调节时间间隔就是调节定时器的中断次数,因而在定时器中断程序中,要做的工作主要是判断电机的运行方向、发下一个脉冲,以及保存当前的各种状态。
程序流程图如图10所示。
(3)外部中断设计
外部中断所要完成的工作是根据按键次数,改变速度值存储区中的数据(该数据为定时器的中断次数),这样就改变了步进电机的输出脉冲频率,也就是改变了电机的转速。
速度增加按钮S2为INT0中断,其程序流程为原数据,当值等于7时,不改变原数值返回,小于7时,数据加1后返回;速度减少按钮S3,当原数据不为0,减1保存数据,原数据为0则保持不变。
程序流程图如图11所示。
1.3.5源程序(汇编、C语言程序各一个)
汇编程序如下:
SPEEDEQU10H;SPEED为转速等级标志,共7级,即1~7
FXEQU11H;FX为方向标志
COUNTEQU12H;COUNT中断次数标志
ORG0000H
AJMPMAIN
ORG0003H;外部中断0入口地址,加速子程序
AJMPUP
ORG0013H;外部中断1入口地址,减速子程序
AJMPDOWN
ORG000BH;定时器0中断入口地址,控制中断次数来达到控制转速
AJMPZDT0
ORG0030H
MAIN:
MOVSP,#60H
MOVTMOD,#01H;工作于定时、软件置位启动!
模式1(16位计时器)
MOVTH0,#0CFH
MOVTL0,#2CH
MOVCOUNT,#01H
SETBET0;定时/计数器允许中断
CLRIT0;外部中断为电平触发方式,低电平有效
CLRIT1
SETBEX0;外部允许中断
SETBEX1
SETBEA;开总中断
MOVR1,#11H;四相单四拍运行,共阳数码管方向显示8,速度值显示0
MOVSPEED,#00H
MOVFX,#00H
XIANS:
MOVA,SPEED
MOVDPTR,#LED
MOVCA,@A+DPTR;查表获取等级对应数码管代码
MOVP2,A;第二个数码管显示转速等级
MOVA,FX;准备判断转向
CJNEA,#11H,ELS
MOVP0,#0F9H;第一个数码管显示1,表示正转
AJMPQD
ELS:
CJNEA,#00H,ZHENG
MOVP0,#0C0H;第一个数码管显示0,表示不转
AJMPQD
ZHENG:
MOVP0,#0BFH;第一个数码管显示-,表示反转
QD:
JBP3.4,DD;P3.4接启动开关K1,P3.4=1时启动
CLRTR0;停止定时/计数器
MOVP0,#0C0H;第一个数码管显示0,表示不转
MOVP2,#0C0H;第二个数码管显示0,表示转速为0
MOVSPEED,#00H;重新赋初值
MOVFX,#00H
AJMPQD
DD:
MOVA,SPEED
JNZGO;A不等于0,即初始速度不为零,则转移到GO
CLRTR0;停止定时/计数器
AJMPQD
GO:
SETBTR0;开启定时/计数器
ACALLDELAY
AJMPXIANS
DELAY:
MOVR6,#10;延时子程序
DEL1:
MOVR7,#250
HERE1:
DJNZR7,HERE1
DJNZR6,DEL1
RET
;以下ZDT0为定时器中断程序
ZDT0:
PUSHACC
PUSHDPH
PUSHDPL
MOVTH0,#0D8H
MOVTL0,#0F0H
DJNZCOUNT,EXIT
JBP3.5,NIZHUAN;查询方向标志,P3.5接换向开关K2
MOVFX,#11H
NIZHUAN:
MOVA,FX
CJNEA,#11H,FZ;若A不等于11,即正转,则转移到FZ
MOVA,R1;R1记录上一次电机脉冲状态
MOVP1,A
RRA;循环右一位
MOVR1,A
MOVP1,A
AJMPRE
FZ:
MOVA,R1
MOVP1,A
RLA;循环左移一位
MOVP1,A
MOVR1,A
RE:
MOVA,SPEED
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVCOUNT,A;把转速级别赋给COUNT
JBP3.5,FFX;P3.5接换向开关K2,即换向位,若P3.5=1,则跳到FFX
MOVFX,#11H
AJMPEXIT
FFX:
MOVFX,#0FEH;只要FX不等于11H,就可以通过循环左移或右移进行换向
EXIT:
POPDPL
POPDPH
POPACC
RETI
;以下UP为加速中断程序
UP:
PUSHACC
ACALLDELAY;延时防抖动
JBP3.2,UPEX;P3.2为外部中断0位,接增速开关S2,低电平有效,若P3.2=1,则退出
MOVA,SPEED
CJNEA,#7,SZ;最大等级为7,若A不等于7,则转移到SZ
AJMPUPEX;若A=7,则退出
SZ:
INCSPEED;SPEED=SPEED+1
UPEX:
POPACC
HERE2:
JNBP3.2,HERE2;本条指令为防止开关S2按下去后弹不起,导致一直产生中断
RETI
;以下DOWN为减速中断程序
DOWN:
PUSHACC
ACALLDELAY
JBP3.3,DEX;P3.3为外部中断1位,接减速开关S3,低电平有效,若P3.3=1,则退出
MOVA,SPEED
CJNEA,#0,SJ
AJMPDEX
SJ:
DECSPEED;SPEED=SPEED-1
DEX:
POPACC
HERE3:
JNBP3.3,HERE3
RETI
TAB:
DB0,60,40,35,30,28,25,21;经仿真,小于21时,由于脉冲太快,会出现失步
;0123456789
LED:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
END
C语言程序如下:
#include
#defineuintunsignedint
sbitk1=P3^4;//启动开关
sbitk2=P3^5;//换向开关
sbits2=P3^2;//加速按钮
sbits3=P3^3;//减速按钮
voidisr_int0(void);//外部中断0中断服务函数声明
voidisr_int1(void);
voidzd_t0ist(void);
uintspeed,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;
elseP0=0xf9;
if(speed==0)
{P2=0xc0;
TR0=0;
}
elseTR0=1;
}
}
}
voidisr_int0(void)interrupt0
{
if(speed<7)
speed=speed+1;
while(s2==0)
{for(i=0;i<10;i++);}
}
voidisr_int1(void)interrupt2
{
if(speed>0)
speed=speed-1;
while(s3==0)
{for(i=0;i<10;i++);}
}
voidzd_t0ist(void)interrupt1
{
TH0=0xd8;
TL0=0xf0;
switch(speed)
{
case0:
P2=0xc0;count=0;break;
case1:
P2=0xf9;count=60;break;
case2:
P2=0xa4;count=40;break;
case3:
P2=0xb0;count=35;break;
case4:
P2=0x99;count=30;break;
case5:
P2=0x92;count=28;break;
case6:
P2=0x82;count=25;break;
case7:
P2=0xf8;count=21;break;
default:
break;
}
if(t==0)
t=count;
if(t>0)
t=t-1;
if(k2==0)
{
if(t==0)
{
switch(k)
{
case0:
P1=0x01;break;
case1:
P1=0x02;break;
case2:
P1=0x04;break;
case3:
P1=0x08;break;
default:
break;
}
k=k+1;
if(k==4)
k=0;
}
}
else
{
if(t==0)
{
switch(k)
环境影响评价,是指对规划和建设项目实施后可能造成的环境影响进行分析、预测和评估,提出预防或者减轻不良环境影响的对策和措施,进行跟踪监测的方法和制度。
{
case0:
P1=0x08;break;
case1:
P1=0x04;break;
case2:
P1=0x02;break;
(2)综合规划环境影响篇章或者说明的内容。
case3:
P1=0x01;break;
(6)列出选定的评价方法,并作简单介绍。
default:
break;
}
[答疑编号502334050101]k=k+1;
(3)环境影响评价中应用环境标准的原则。
if(k==4)
k=0;
(5)公众意见采纳与不采纳的合理性;}
}
C.可能造成较大环境影响的建设项目,应当编制环境影响报告书}
2.总结
本设计通过分析步进电机结构、工作原理,查阅步进电机控制系统的相关科技文献,遵循实用、简单、可靠和低成本的原则,设计了一种既可用于精度要求不高,但控制需完备的场合。
对本次设计,有以下结论:
(1)基础资料、数据的真实性;
(1)采用单片机为控制核心,利用其强大的功能,把键盘和显示电路有机的结合起来,组成一个操作方便、交互性强的控制系统。
而且整个系统所包含的技术几乎包括了现本科学校控制专业所要求的知识,有利于实践教学取得最大效果。
(2)键盘电路和显示电路采用了动态扫描技术,节约了单片机资源。
以森林为例,木材、药品、休闲娱乐、植物基因、教育、人类住区等都是森林的直接使用价值。
(3)系统软件采用结构化设计,具有易维护性,根据用户新的要求,对软件系统进行少量的修改,使系统功能得到一定程度的提高。
3.结束语
本人深知自己做的工作还很不够,由于软件和硬件的各方面原因,系统的应用讨论不够,精度还有待于进一步提高。
由于时间的原因,设备的原因,实验做的不好不够,相关验证性的数据、信息不够丰富。
可以肯定,随着技术的不断发展,步进电机的控制应用前景将越来越宽阔,而其控制系统也将向着智能化和网络化的方向发展。
本论文的研究和探讨还远远不够,我们要在现在的基础上,不断吸取新的技术和方法,并将它们应用于本课题的研究上来,进一步深化我们的研究深度,争取有更多的收获。
4.参考文献
【1】张家生.电机原理与拖动基础【M】.北京:
北京邮电大学出版社,2006.
【2】马淑华,王凤文,张美金.单片机原理与接口技术【M】.北京:
北京邮电大学出版社,2007.
【3】顾德英,张健,马淑华.计算机控制技术【M】.北京:
北京邮电大学出版社,2006.
【4】华成英,童诗白.模拟电子技术基础【M】.北京:
高等教育出版社,2008
【5】张靖武,周灵彬.单片机系统的PROTEUS设计与仿真【M】.北京:
电子工业出版社,2007
(1)内涵资产定价法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 基于 单片机 ULN 步进 电机 控制系统 汇编 语言 程序 一个
![提示](https://static.bingdoc.com/images/bang_tan.gif)