基于FAN8200驱动芯片的步进电机实验

基于FAN8200驱动芯片的步进电机实验,第1张

一、实验目的和要求

了解步进电机的工作原理,学习用单片机步进电机控制系统的硬件设计方法,掌握定时器和中断系统的应用,熟悉单片机应用系统的设计与调试方法。

二、实验设备

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 中断写法实例  

void T1-TIme() interrupt 3   

{   

TH1=(65536-50000)/256;  

TL1=(65536-50000)%256;   

}

上面的意思是定时器 1 的中断服务程序,定时器 1 的中断服务序号是 3 ,因此我们要写成 interrupt 3 ,服务程序的内容是给 两个初值寄存器装入新值。。   

写中断前的准备:

2.1. TMOD 赋值 确定工作方式。T0 还是T1 的工作方式。  

2.2.计算初值 装入 TH0 TL0 或者 TH1 TL1   

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驱动芯片的步进电机实验,基于FAN8200驱动芯片的步进电机实验,第2张

本实验使用简单的双四拍工作模式即可,这也是FAN8200比较方便的工作方式。只要将CE1和CE2分别置为高,然后IN1和IN2按照预定的脉冲输出,即01->11->10->00- >01这个循环构成一个方向旋转的输出脉冲,将此序列翻转,就是相反方向的输出脉冲。

六、思考题

1. 如采用单四拍工作模式,每次步进角度是多少,程序要如何修改?

2. 如采用单双八拍工作模式,每次步进角度是多少,程序要如何修改?

3. 步进电机的转速取决于那些因素?有没有上、下限?

4. 如何改变步进电机的转向?

5. 步进电机有那些规格参数,如何根据需要选择型号?

以下是汇编程序:

ORG 0000H ;复位起始地址
LJMP START
ORG 000BH ;中间地址保留给中断向量表
LJMP EINT0 ;定时器0中断程序入口地址
ORG 0040H ;程序实际起始地址
START:
P4 EQU 0C0H
P4SW EQU 0BBH
CLK EQU P4.4 ;时钟线
DAT EQU P4.5 ;数据线
SW EQU P3.6

MOV P4SW,#70H
MOV DPTR,#TAB ;s = 23869 --5D3E

LP:
MOV R3,#0 ;计数
MOV R4,#0
MOV R5,#0
I1: MOV TMOD,#01H ; 选择工作方式,即对TMOD 赋初值。T0都工作在方式1,16位的计数器 GATE(GATE -门控位,控制定时器的两种启动方式,)等于0,不受外部控制

MOV IE,#82H ;全局中断,T0中断允许 中断控制字;直接对中断允许寄存器IE 和 优先级寄存器 IP 设置
;ORL IP,#2H ;逻辑或,T0中断优先级高

SETB P1.1 ;CE1置高
SETB P1.4 ;CE2置高



NEXT:
JB P3.7,OPP ;如果P3.7等于1则转移
MOV R0,#00101101B ;按下,顺时针
MOV 20H,R0

LJMP SS1
OPP: MOV R0,#01111000B ;松开,逆时针
MOV 20H,R0
SS1:
JB P3.6,SPD
MOV R2,#0H ;按下,快速 ;23870 5D3E
LJMP L0
SPD: MOV R2,#1H ;松开,慢速


L0: MOV R1,#4
MOV R0,20H
L1: MOV A,R0
RLC A ;循环左移 *** 作
MOV P3.2,C ;IN1
RLC A
MOV P1.0,C ;IN2
MOV R0,A
LCALL NUM
LCALL TIME
DJNZ R1,L1


LJMP NEXT

TIME:
CJNE R2,#1,QUICK
MOV R6,#6 ;慢速 ;分6次来记时
TIM2: MOV TH0,#5DH
MOV TL0,#3EH
SETB TR0
MOV R7,#0H
TIM3: CJNE R7,#1H,TIM3
DJNZ R6,TIM2
LJMP OUT

QUICK: MOV TH0,#5DH ;定时器0启动;;快速,60转/分
MOV TL0,#3EH
SETB TR0
MOV R7,#0H
TIM1: CJNE R7,#1H,TIM1
OUT:
RET
EINT0:
MOV R7,#1
RETI
NUM: ;显示已转动的步数,每转动一次显示一个数
S0: MOV A,R3
CALL EXP
MOV A,R4
CALL EXP
MOV A,R5
CALL EXP

CJNE R3,#10,S1
MOV R3,#0
CJNE R4,#10,S2
MOV R4,#0
CJNE R5,#10,S3
MOV R5,#0

S1: INC R3
LJMP STOP
S2: INC R4
LJMP STOP
S3: INC R5
LJMP STOP
STOP:
RET


EXP:
MOV 21H,R0
MOVC A,@A+DPTR
MOV R0,#8
CLY: CLR CLK ;P4.4 ;时钟线低电平
RLC A ;累加器A 的逻辑 *** 作指令
MOV DAT,C
SETB CLK ;P4.4 ;时钟线高电平

DJNZ R0,CLY
MOV R0,21H
RET

TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2525923.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-05
下一篇 2022-08-05

发表评论

登录后才能评论

评论列表(0条)

保存