直流电机预习实验报告
一.实验目的
通过利用PWM控制直流电机的转动速度,了解直流电机的工作原理,明白其顺转、逆转的机理。
二.实验原理
1. 脉宽调制(PWM)基本原理
脉冲宽度调制,简称脉宽调制,是将模拟信号转换为脉冲波形的一种技术,一般转换后波形的周期固定,但脉冲的占空比会依模拟信号的大小而改变。PWM波根据其占空比的不同来控制电路的通断,进而控制模拟设备。 2. 直流电机
图1 直流电机原理图
图2 H型双极可逆PWM电流波形
直流电机的电原理图如图1所示,可以通过H型双极可逆PWM驱动系统来控制直流电机的转动。H型双极可逆PWM电流波形如图2
所示,当同相电压的时间超过一半周期时,
积累的电流为同相,此时直流电机正转。当同相电压的时间小于一半周期时,积累的电流为反相,此时直流电机反转。当占空比为50%时,直流电机处于轻载状态。通过控制脉冲的占空比,即可控制直流电机的正转反转以及转动快慢。 3. 定时器
定时器的相关原理已在前面实验中进行陈述,具体可参看教材。
三.实验设备及器件
PC机,DP-51PROC单片机综合仿真试验仪。
四.实验内容
1. 实验要求
1.1 短接B10区的JP18跳线,B10区ZDJ_B连C1区GND。 B10区的ZDJ_A连A2区的P10,利用定时器在P10口产生PWM波形来驱动电机。
1.2 A2区P11连D1区的KEY1, P12连D1区的KEY2。利用两个按键来动态调整PWM的占空比,控制电机转速。 2. 实验设计
由于已经将ZDJ_B接了GND,所以ZDJ_A的电压就不可能低于ZDJ_B,因此直流电机只能正转或者停转不能反转。实验要求1只要能输出PWM波就可以驱动直流电机的转动,由于电流也是有惯性的,所以只要输出一定占空比的波形就可以驱动直流电机转动,至于转动的快慢则由整个周期内总电流的大小来控制。由于PWM波的周期是确定的,所以不同的占空比会在整个周期内积累不同大小的电流。占空比大,三极管导通时间长,流入的电流就多,整个周期的平均电流就大,那么直流电机就转得快,反之,直流电机就转得慢。因为要产生PWM波,其对周期的精确性要求比较高,所以要通过定时器来进行定时且需要用中断方式。为了动态改变PWM波的占空比,利用两个外部中断可以很好的实现,但是这样又会引入中断嵌套的问题,且题目要求将两个按键连接到P11和P12口,所以这就需要专门的程序代码来不断检测这两个I/O口的状态,一旦发现状态改变即进入处理程序,在处理程序中通过改变计数器的值来达到控制占空比的目的。所以可以设置一个高电平脉冲数计数器来确定占空比,设置另一个计数器来计数产生的中断次数,当中断次数达到了脉冲数计数器的值时,就可以反转I/O口的电平,当中断的次数与周期数相等,那么就可以重置中断次数计数器。 此时,就产生了一个周期的PWM波。通过按钮的处理程序改变脉冲数计数器的值,就可以
达到改变占空比的目的,进而可以控制直流电机转动的快慢。
3. 电路连接图
图3 PWM控制直流电机电原理图
4. 程序流程图
中断处理函数
图4 PWM控制直流电机程序流程图
4. 程序清单
PWMH DATA 30H ;高电平脉冲的个数 PWM DATA 31H ;PWM周期
COUNTER DATA 32H ;定时中断次数计数器 TEMP DATA 33H ;数据暂存寄存器
ORG LJMP ORG LJMP ORG MAIN:
MOV MOV MOV MOV MOV MOV SETB SETB SETB KSCAN:
JNB JNB SJMP K1CHECK:
JB SJMP K1HANDLE:
8000H MAIN
800BH INTT0
8100H PWMH, #02H COUNTER,#01H PWM, #15H TMOD, #02H TL0, #38H TH0, #38H ET0 EA TR0 P1.1, K1CHECK P1.2, K2CHECK KSCAN P1.1, K1HANDLE K1CHECK ;伪指令,定义代码存放开始地址,硬件仿真 ;存放T0中断处理函数的入口地址 ;伪指令,以下代码从8100H开始存放
;初始化高电平脉冲个数 ;初始化中断次数计数器 ;初始化PWM波周期数 ;T0,计数方式2 ;T0定时200us ;重装计数器的初值 ;使能T0中断 ;开放CPU中断 ;启动T0
;扫描KEY1,按下则跳转 ;扫描KEY2,按下则跳转 ;持续扫描
;等待按键松开,跳转KEY1处理程序 ;
MOV A, PWMH ;
CJNE A, PWM, K1H0 ;判断是否到达上边界 SJMP KSCAN ;是,继续扫描按键
K1H0:
MOV A, PWMH ;
INC A ;高定平脉冲数加1 CJNE CLR SETB SJMP K1H1:
CJNE SETB K1H2:
INC SJMP
K2CHECK:
JB SJMP K2HANDLE:
MOV CJNE SJMP K2H0:
MOV MOV DEC CJNE CLR A, PWM, K1H1 TR0 P1.0 K1H2
A, #02H, K1H2 TR0 PWMH KSCAN P1.2, K2HANDLE K2CHECK A, PWMH A, #01H, K2H0 KSCAN A, PWMH TEMP, A A A, #01H, K2H1 TR0 ;如果加1后到达最大值 ;T0停止 ;输出高电平 ;如果加1后到达下边界 ;启动T0
;增加占空比 ;继续扫描 ;等待按键松开,跳转KEY2处理程序 ;
;判断是否到达下边界 ;是,继续扫描
;占空比送暂存寄存器 ;
;如果减1后到达下边界 ;T0停止计数
CLR P1.0 ;输出低电平 SJMP K2H2
K2H1:
DEC TEMP
CJNE A, TEMP, K2H2 ;如果到达上边界 SETB TR0 ;重启T0
K2H2:
DEC SJMP
INTT0: PUSH PUSH INC MOV CJNE CLR INTT01:
CJNE MOV SETB INTT02: POP POP RETI END
PWMH KSCAN PSW ACC
COUNTER A, COUNTER
A, PWMH, INTT01 P1.0 A, PWM, INTT02 COUNTER, #01H P1.0
ACC PSW ;降低占空比 ;继续扫描
;T0中断处理函数
;保护现场 ;中断次数计数器加1 ;如果等于高电平脉冲个数 ;输出低电平
;如果等于周期数
;重置中断次数计数器计数器 ;输出高电平
;出栈 ;
;中断返回
直流电机预习实验报告
一.实验目的
通过利用PWM控制直流电机的转动速度,了解直流电机的工作原理,明白其顺转、逆转的机理。
二.实验原理
1. 脉宽调制(PWM)基本原理
脉冲宽度调制,简称脉宽调制,是将模拟信号转换为脉冲波形的一种技术,一般转换后波形的周期固定,但脉冲的占空比会依模拟信号的大小而改变。PWM波根据其占空比的不同来控制电路的通断,进而控制模拟设备。 2. 直流电机
图1 直流电机原理图
图2 H型双极可逆PWM电流波形
直流电机的电原理图如图1所示,可以通过H型双极可逆PWM驱动系统来控制直流电机的转动。H型双极可逆PWM电流波形如图2
所示,当同相电压的时间超过一半周期时,
积累的电流为同相,此时直流电机正转。当同相电压的时间小于一半周期时,积累的电流为反相,此时直流电机反转。当占空比为50%时,直流电机处于轻载状态。通过控制脉冲的占空比,即可控制直流电机的正转反转以及转动快慢。 3. 定时器
定时器的相关原理已在前面实验中进行陈述,具体可参看教材。
三.实验设备及器件
PC机,DP-51PROC单片机综合仿真试验仪。
四.实验内容
1. 实验要求
1.1 短接B10区的JP18跳线,B10区ZDJ_B连C1区GND。 B10区的ZDJ_A连A2区的P10,利用定时器在P10口产生PWM波形来驱动电机。
1.2 A2区P11连D1区的KEY1, P12连D1区的KEY2。利用两个按键来动态调整PWM的占空比,控制电机转速。 2. 实验设计
由于已经将ZDJ_B接了GND,所以ZDJ_A的电压就不可能低于ZDJ_B,因此直流电机只能正转或者停转不能反转。实验要求1只要能输出PWM波就可以驱动直流电机的转动,由于电流也是有惯性的,所以只要输出一定占空比的波形就可以驱动直流电机转动,至于转动的快慢则由整个周期内总电流的大小来控制。由于PWM波的周期是确定的,所以不同的占空比会在整个周期内积累不同大小的电流。占空比大,三极管导通时间长,流入的电流就多,整个周期的平均电流就大,那么直流电机就转得快,反之,直流电机就转得慢。因为要产生PWM波,其对周期的精确性要求比较高,所以要通过定时器来进行定时且需要用中断方式。为了动态改变PWM波的占空比,利用两个外部中断可以很好的实现,但是这样又会引入中断嵌套的问题,且题目要求将两个按键连接到P11和P12口,所以这就需要专门的程序代码来不断检测这两个I/O口的状态,一旦发现状态改变即进入处理程序,在处理程序中通过改变计数器的值来达到控制占空比的目的。所以可以设置一个高电平脉冲数计数器来确定占空比,设置另一个计数器来计数产生的中断次数,当中断次数达到了脉冲数计数器的值时,就可以反转I/O口的电平,当中断的次数与周期数相等,那么就可以重置中断次数计数器。 此时,就产生了一个周期的PWM波。通过按钮的处理程序改变脉冲数计数器的值,就可以
达到改变占空比的目的,进而可以控制直流电机转动的快慢。
3. 电路连接图
图3 PWM控制直流电机电原理图
4. 程序流程图
中断处理函数
图4 PWM控制直流电机程序流程图
4. 程序清单
PWMH DATA 30H ;高电平脉冲的个数 PWM DATA 31H ;PWM周期
COUNTER DATA 32H ;定时中断次数计数器 TEMP DATA 33H ;数据暂存寄存器
ORG LJMP ORG LJMP ORG MAIN:
MOV MOV MOV MOV MOV MOV SETB SETB SETB KSCAN:
JNB JNB SJMP K1CHECK:
JB SJMP K1HANDLE:
8000H MAIN
800BH INTT0
8100H PWMH, #02H COUNTER,#01H PWM, #15H TMOD, #02H TL0, #38H TH0, #38H ET0 EA TR0 P1.1, K1CHECK P1.2, K2CHECK KSCAN P1.1, K1HANDLE K1CHECK ;伪指令,定义代码存放开始地址,硬件仿真 ;存放T0中断处理函数的入口地址 ;伪指令,以下代码从8100H开始存放
;初始化高电平脉冲个数 ;初始化中断次数计数器 ;初始化PWM波周期数 ;T0,计数方式2 ;T0定时200us ;重装计数器的初值 ;使能T0中断 ;开放CPU中断 ;启动T0
;扫描KEY1,按下则跳转 ;扫描KEY2,按下则跳转 ;持续扫描
;等待按键松开,跳转KEY1处理程序 ;
MOV A, PWMH ;
CJNE A, PWM, K1H0 ;判断是否到达上边界 SJMP KSCAN ;是,继续扫描按键
K1H0:
MOV A, PWMH ;
INC A ;高定平脉冲数加1 CJNE CLR SETB SJMP K1H1:
CJNE SETB K1H2:
INC SJMP
K2CHECK:
JB SJMP K2HANDLE:
MOV CJNE SJMP K2H0:
MOV MOV DEC CJNE CLR A, PWM, K1H1 TR0 P1.0 K1H2
A, #02H, K1H2 TR0 PWMH KSCAN P1.2, K2HANDLE K2CHECK A, PWMH A, #01H, K2H0 KSCAN A, PWMH TEMP, A A A, #01H, K2H1 TR0 ;如果加1后到达最大值 ;T0停止 ;输出高电平 ;如果加1后到达下边界 ;启动T0
;增加占空比 ;继续扫描 ;等待按键松开,跳转KEY2处理程序 ;
;判断是否到达下边界 ;是,继续扫描
;占空比送暂存寄存器 ;
;如果减1后到达下边界 ;T0停止计数
CLR P1.0 ;输出低电平 SJMP K2H2
K2H1:
DEC TEMP
CJNE A, TEMP, K2H2 ;如果到达上边界 SETB TR0 ;重启T0
K2H2:
DEC SJMP
INTT0: PUSH PUSH INC MOV CJNE CLR INTT01:
CJNE MOV SETB INTT02: POP POP RETI END
PWMH KSCAN PSW ACC
COUNTER A, COUNTER
A, PWMH, INTT01 P1.0 A, PWM, INTT02 COUNTER, #01H P1.0
ACC PSW ;降低占空比 ;继续扫描
;T0中断处理函数
;保护现场 ;中断次数计数器加1 ;如果等于高电平脉冲个数 ;输出低电平
;如果等于周期数
;重置中断次数计数器计数器 ;输出高电平
;出栈 ;
;中断返回