一、实验目的和要求
了解步进电机的工作原理,学习用单片机的步进电机控制系统的硬件设计方法,掌握定时器和中断系统的应用,熟悉单片机应用系统的设计与调试方法。
二、实验设备
1.单片机测控实验系统
2.步进电机控制实验模块
3.Keil开发环境
4.STC-ISP程序下载工具
三、实验内容
1.编制MCS-51程序使步进电机按照规定的转速和方向进行旋转,并将已转动的步数显示在数码管上。
2.步进电机的转速分为两档,当按下S1开关时,进行快速旋转,速度为60转/分。当松开开关时,进行慢速旋转,速度为10转/分。当按下S2开关时,按照顺时针旋转;当松开时,按照逆时针旋转。
3.本程序要求使用定时器中断来实现,不准使用程序延时的方式。
四、实验步骤
1.预习参考辅助材料,学习C51编程语言使用和步进电机原理。
2.简单程序录入和调试
本程序需要使用定时器定时,并使用中断来同步。
中断程序的典型例子如下:
格式:void函数名()interrupt中断号using工作组
{
中断服务程序内容
}
注意:中断不能返回任何值,所以前面是void后面是函数名,名字可以自己起,但不要与c语言的关键字相同;中断函数不带任何参数,所以函数名后面的()内是空的,中断号是指单片机的几个中断源的序号。这个序号是单片机识别不同中断的唯一标志。所以一定要写正确。后面的using工作组是指这个这个中断使用单片机内存中4个工作寄存器的哪一组,c51编译后会自动分配工作组,因此最后这句话我们通常省略不写。
c51中断写法实例
voidT1-TIme()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
上面的意思是定时器1的中断服务程序,定时器1的中断服务序号是3,因此我们要写成interrupt3,服务程序的内容是给两个初值寄存器装入新值。。
写中断前的准备:
2.1.TMOD赋值确定工作方式。T0还是T1的工作方式。
2.2.计算初值装入TH0TL0或者TH1TL1
2.3.中断方式时,对IE赋值,开放中断。
2.4.使TR0和TR1置位,启动定时器/计数器定时/计数。
3.程序调试及现象观测
用单步、断点、连续方式调试程序,观察状态指示灯及电机状态,检查运行结果。如果需要,可以将四个输出信号的状态同时输出到P0口的某些位上,便于观察。
五、实验原理
1.定时器中断
使用定时器时,首先应由外部条件得到要定时的时间长度t,如本实验中,就是根据要求的速度计算出的每一步之间的间隔。然后选择适当的定时器工作方式,去计算想要设定的计数器初值s,使用如下方程。
(2定时器最大位数-s)×定时周期=t(2的多少次方)
定时周期=12/CPU晶振频率
注意#1.得到的s需要分成高8位和低8位,分别放入计数器THx和TLx中(x为0或1)。如果s为负数,说明需要的定时时间太长,即使定时器的最大时间也无法满足要求。这种情况下,需要加入软件循环才能实现。我们可以将需要的定时时间分成n份,利用定时器达到t/n的时间长度,然后在定时器处理程序中,累计某一变量,如果到达n,说明总的时间t已经达到。
#2.要想使用定时器中断,除了上面的定时器初值设定外,还需要将其他相关的特殊功能寄存器也都设置好。如果使用方式0和方式1,不要忘记在计数结束后重新恢复计数器初值。
2.我们使用的单片机系统的频率是12M;步进电机转动一周需要24步。
本步进电机实验板,使用FAN8200作为驱动芯片。CPU通过如下4个引脚与FAN8200相连。
本实验使用简单的双四拍工作模式即可,这也是FAN8200比较方便的工作方式。只要将CE1和CE2分别置为高,然后IN1和IN2按照预定的脉冲输出,即01->11->10->00->01这个循环构成一个方向旋转的输出脉冲,将此序列翻转,就是相反方向的输出脉冲。
六、思考题
1.如采用单四拍工作模式,每次步进角度是多少,程序要如何修改?
2.如采用单双八拍工作模式,每次步进角度是多少,程序要如何修改?
3.步进电机的转速取决于那些因素?有没有上、下限?
4.如何改变步进电机的转向?
5.步进电机有那些规格参数,如何根据需要选择型号?
以下是汇编程序:
ORG0000H;复位起始地址
LJMPSTART
ORG000BH;中间地址保留给中断向量表
LJMPEINT0;定时器0中断程序入口地址
ORG0040H;程序实际起始地址
START:
P4EQU0C0H
P4SWEQU0BBH
CLKEQUP4.4;时钟线
DATEQUP4.5;数据线
SWEQUP3.6
MOVP4SW,#70H
MOVDPTR,#TAB;s=23869--5D3E
LP:
MOVR3,#0;计数
MOVR4,#0
MOVR5,#0
I1:MOVTMOD,#01H;选择工作方式,即对TMOD赋初值。T0都工作在方式1,16位的计数器GATE(GATE-门控位,控制定时器的两种启动方式,)等于0,不受外部控制
MOVIE,#82H;全局中断,T0中断允许中断控制字;直接对中断允许寄存器IE和优先级寄存器IP设置
;ORLIP,#2H;逻辑或,T0中断优先级高
SETBP1.1;CE1置高
SETBP1.4;CE2置高
NEXT:
JBP3.7,OPP;如果P3.7等于1则转移
MOVR0,#00101101B;按下,顺时针
MOV20H,R0
LJMPSS1
OPP:MOVR0,#01111000B;松开,逆时针
MOV20H,R0
SS1:
JBP3.6,SPD
MOVR2,#0H;按下,快速;238705D3E
LJMPL0
SPD:MOVR2,#1H;松开,慢速
L0:MOVR1,#4
MOVR0,20H
L1:MOVA,R0
RLCA;循环左移操作
MOVP3.2,C;IN1
RLCA
MOVP1.0,C;IN2
MOVR0,A
LCALLNUM
LCALLTIME
DJNZR1,L1
LJMPNEXT
TIME:
CJNER2,#1,QUICK
MOVR6,#6;慢速;分6次来记时
TIM2:MOVTH0,#5DH
MOVTL0,#3EH
SETBTR0
MOVR7,#0H
TIM3:CJNER7,#1H,TIM3
DJNZR6,TIM2
LJMPOUT
QUICK:MOVTH0,#5DH;定时器0启动;;快速,60转/分
MOVTL0,#3EH
SETBTR0
MOVR7,#0H
TIM1:CJNER7,#1H,TIM1
OUT:
RET
EINT0:
MOVR7,#1
RETI
NUM:;显示已转动的步数,每转动一次显示一个数
S0:MOVA,R3
CALLEXP
MOVA,R4
CALLEXP
MOVA,R5
CALLEXP
CJNER3,#10,S1
MOVR3,#0
CJNER4,#10,S2
MOVR4,#0
CJNER5,#10,S3
MOVR5,#0
S1:INCR3
LJMPSTOP
S2:INCR4
LJMPSTOP
S3:INCR5
LJMPSTOP
STOP:
RET
EXP:
MOV21H,R0
MOVCA,@A+DPTR
MOVR0,#8
CLY:CLRCLK;P4.4;时钟线低电平
RLCA;累加器A的逻辑操作指令
MOVDAT,C
SETBCLK;P4.4;时钟线高电平
DJNZR0,CLY
MOVR0,21H
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
全部评论