用32定时器让电机缓慢转动_实验三 步进电机原理及应用

本文使用 Zhihu On VSCode 创作并发布

姓名: 张 政

学号: 21180615

实验目的和要求

初步学习和掌握MCS-51的体系结构和汇编语言,了解Keil编程环境和程序下载工具的使用方法。

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

实验内容

编制MCS-51程序使步进电机按照规定的转速和方向进行旋转,并将已转动的步数显示在数码管上。

步进电机的转速分为两档,当按下S1开关时,进行快速旋转,速度为60转/分。当松开开关时,进行慢速旋转,速度为10转/分。当按下S2开关时,按照顺时针旋转;当松开时,按照逆时针旋转。

本程序要求使用定时器中断来实现,不准使用程序延时的方式。

实验原理

1、本实验采用定时器中断实现,使用定时器时,首先应由外部条件得到要定时的时间长度t,如本实验中,就是根据要求的速度计算出的每一步之间的间隔。然后选择适当的定时器工作方式,去计算想要设定的计数器初值 s,使用如下方程。

定时周期 = 12/CPU 晶振频率

得到的 s 需要分成高 8 位和低 8 位,分别放入计数器 THx 和 TLx 中(x 为 0 或 1)。如果 s为负数,说明需要的定时时间太长,即使定时器的最大时间也无法满足要求。这种情况下, 需要加入软件循环才能实现。我们可以将需要的定时时间分成 n 份,利用定时器达到 t/n 的时间长度,然后在定时器处理程序中,累计某一变量,如果到达 n,说明总的时间 t 已经达到。

要想使用定时器中断,除了上面的定时器初值设定外,还需要将其他相关的特殊功能寄存器也都设置好。如果使用方式 0 和方式 1,不要忘记在计数结束后重新恢复计数器初值。

2、我们使用的单片机系统的频率是 12M;步进电机转动一周需要 24 步。

本步进电机实验板,使用 FAN8200 作为驱动芯片。CPU 通过如下 4 个引脚与 FAN8200 相连,即:

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

4、数码管显示:

本开发平台有 3 个数码管,使用串行方式连接在一起,具体电路参见实验原理。要想输

出一个字形码,就需要从高位到低位依次向移位寄存器输出 8 个比特。移位寄存器的数据线和时钟线分别接到单片机的 P4.5 和 P4.4 管脚,可以使用 MCS-51 里面的位操作指令进行输出。连续输出 3 个字形,24 个 bit 之后,欲显示的字形将稳定地显示在数码管上,程序可以转而执行其他工作。

七段字形的编码方式需要通过实验获得。这些编码作为程序中的常数,使用 DB 命令存放。在程序中,需要将数值转换为相应的字形编码,可以使用 MOVC 指令来完成。

5、74HC164 是高速 CMOS 器件。74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(A 或 B)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。

6、时钟 (CLK) 每次由低变高时,数据右移一位,输入到 Q0,Q0 是两个数据输入端(A 和

B)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。

7、主复位(CLR)输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。

8、采用 3 个 74HC164 级联控制三个数码管的显示,具体实验原理如下图所示。其中使用单片机P4.5 作为模拟串口数据,使用P4.4 模拟串口时钟,CLR 端接高电平。使用上一个74HC164的 Q7 作为下一个 74HC164 的输入端。

实验步骤

流程图

2b4bad90a740f57fe642406e8a6351e4.png
完整业务逻辑

汇编代码如下

ORG 0000H                 	;复位起始地址
	LJMP START 
ORG 000BH                 	;中间地址保留给中断向量表
	LJMP EINT0   			;定时器0中断程序入口地址
ORG 0040H                 	;程序实际起始地址

START:						;初始化
	
	P4 EQU 0C0H  			;P4 地址          
	P4SW EQU 0BBH        	;P4 方式控制字地址
	MOV P4SW,#70H        
	CLK EQU P4.4     		;时钟线         
	DAT EQU P4.5  	 		;数据线          
	SW EQU P3.6            	
	MOV DPTR,#TAB          	;TAB为--5D3E
LP:
	MOV R3,#0         		;计数       
	MOV R4,#0 
	MOV R5,#0

							;TMOD 方式寄存器
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 置1
	SETB P1.4 				;CE2 置1


NEXT: 						;判断S2
	JB P3.7,OPP 			;若 P3.7=1,s2没有按下 ,逆时针
	MOV R0,#01111000B 		;按下为顺时针 	--78
	MOV 20H,R0 
	LJMP SS1
OPP:
	MOV R0,#00101101B 		;松开为逆时针 	--2D
	MOV 20H,R0

SS1:						;判断S1
	JB P3.6,SPD 			;若 P3.6=1,s1没有按下,慢速
	MOV R2,#0H				;快速,(5D3E #TAB)
	LJMP L0
SPD:
	MOV R2,#1H				;慢速


L0:
	MOV R1,#4 				;相位四次变换	
	MOV R0,20H 	
L1:
	MOV A,R0 	 
	RLC A 					;循环左移 
	MOV P3.2,C 				;INT1 
	RLC A 		
	MOV P1.0,C 				;INT2 
	MOV R0,A 	
	
	LCALL NUM 	
	LCALL TIME 
	DJNZ R1,L1 				;R1 -1,结果不为0继续循环
	LJMP NEXT
TIME:
	CJNE R2,#1,QUICK 	
	MOV R6,#6 				;慢速六次计时
TIM2:
	MOV TH0,#5DH 
	MOV TL0,#3EH 
	SETB TR0 				;允许计数
	MOV R7,#0H
TIM3:
	CJNE R7,#1H,TIM3 		;空循环,等待

	DJNZ R6,TIM2 			;R6 -1,结果不为0继续循环
	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,#9,S1 	
	MOV R3,#0 
	CJNE R4,#9,S2 
	MOV R4,#0 
	CJNE R5,#9,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 			;查询 TAB 表 
	MOV R0,#8 
CLY: 
	CLR CLK 				;时钟线低电平
	RLC A		 			;累加器A的逻辑操作指令
	MOV DAT,C 				;8位数据按位输出
	SETB CLK 				;P4.4	时钟线高电平
	
	DJNZ R0,CLY 
	MOV R0,21H 
	RET


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

思考题
  1. 如果采用单四拍工作模式,每次步进角度为15度,程序如何修改?

单四拍: A -- B -- ~A -- ~B -- A …

修改相位值即可。

  1. 如果采用单双八拍工作模式,每次步进角度为7.5度,程序如何修改?

八拍: A -- AB -- B -- BC -- C -- CD -- D -- DA -- A

修改定时初始值,相位和循环次数也要改变。

  1. 步进电机的转速取决于哪些因素?上下限如何?

取决于脉冲频率和工作模式

步进电机的转速有上下限;受物理因素(摩擦,机械惯性,响应时间)影响,上限根据电机不同而不同,下限为0

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

改变转动脉冲。

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

    1. 功率,马力,电流,转速,效率,功率因数,额定转矩,额定电流,重量,空起频率等

    2. 根据需要

      a) 选定需要的额定转矩,通常根据需要的转矩大小(所要带动物体的扭力大小),来选择哪种型号的电机。大致来说,扭力越大,所需选择的电机的额定转矩越大,电机尺寸越大。

      b) 选择合适的转速,电机的转速和输出转矩成反比。步进电机在低速时输出转矩较大,高速时输出转矩较小。如果高速的时候希望获得较大转矩,需要选择电感稍小的电机,低速大力度时候,选择电感和电阻大的电机。

      c) 使用环境,特种步进电机需要防水,防油,可用于某些特殊场合。比如水下机器人就需要防水电机。

      d) 空起频率的选择,步进电机空载启动频率通常称为“空起频率”,如果要求频繁在瞬间启动,停止,高转速,就要加速启动。如果需要直接启动并高速运转,最好选用永磁电机。

  2. MCS51中有哪些可存取的单元,存取方式如何?它们之间的区别和联系有哪些?

a. 工作寄存器组(00H——1FH)

内部RAM的0-1FH为四组工作寄存器区,每个区有 8 个工作寄存器(R0 -R7)。在同一时刻,只能使用一组工作寄存器,这是通过程序状态字 PSW 的地 3,4 位来控制的。例如当此两位为 00 时,使用第 0 组工作寄存器,对应于 00H 到 07H 的内部 RAM 空间。也就是说,这时指令中使用 R0 与直接使用 00 单元是 等价的,不过使用工作寄存器的指令简单,且执行快。

b. 可定位寻址RAM区(20H——2FH)

内部 RAM 的 20H-2FH 为位寻址区域,这 16 个单元的每一位都对应一个位地址,占据位地址空间的 0-7FH,每一位都可以独立置位、清除、取反等操作。

c. 通用的RAM区(30H——7FH)

在中断和子程序调用中都需要堆栈。MCS-51 的堆栈理论上可以设置在内部 RAM 的任意区域,但由于 0-1FH 和 20-2FH 区域有上面说的特殊功能,因此一般设置在 30H 以后。

在内部 RAM 中,所有的单元都可以作为通用的数据存储器使用,存放输入 的数据或计算的中间结果等,也可以作为条件转移的条件使用。

  1. 说明MOVC指令的使用方法。

MOVC是c51单片机汇编中断查表指令,在汇编中,MOVC指令是用来表示程序存储器中的内容和别的存储单元进行传送的。主要是用在累加器A和程序存储器的数据传送。

以16位程序计数器PC或者数据指针DPTR作为基寄存器,以8位的累加器A作为变址寄存器,基址寄存器和变址寄存器的内容相加为16位的地址访问程序存储器。

MOVC A,@A+PC ; MOVC A.@A+DPTR ;

  1. MCS51的指令时序是什么样的,哪类指令的执行时间较长?

MCS51的时序是用定时单位来描述的,MCS51的时序单位有四个,分别为节拍,状态,机器周期和指令周期。

乘除法指令执行时间较长

  1. 在本实验环境下,能否控制显示数码的亮度?如何实现?可以,通过修改刷新频率。

可以,改变刷新频率即可。

实验心得

中断中执行的程序太多,但由于使用的是定时器中断,不能保证程序在定时周期内执行完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值