大连理工大学本科实验报告
题目:基于
51单片机的直流电机调速系统
课程名称: 电子工程训练
学院(系):电子信息与电气工程学部 专 业: 电子信息工程 班 级: 学 号: 序 号: 学生姓名:
成 绩: 2015年 11 月 1 日
成绩评定
电子安装实验室安全守则
1、 每次实验前,认真预习准备,仔细阅读实验安全守则,严格按照
安全规范进行实验,确保实验安全;
2、 桌面要保持整洁,不允许有杂物,禁止将水杯、瓶装水放在桌面; 3、 电烙铁在使用前,必须检查电源线有无烫损漏线情况,一经发现,
立即找老师进行安全处理;
4、 电烙铁长时间不使用,应将电源线拔掉;电烙铁使用后,应放回
烙铁架中,以免烫伤物品;
5、 实验结束后,必须拔掉电烙铁的电源线;已经加热的电烙铁,必
须冷却后再放入抽屉中;
6、 焊锡中含铅,不要含在口中,实验结束后要洗手;
7、 稳压电源在使用前,应先调好要使用的电压,再进行线路连接,
并确保连接的极性正确;
8、 抢救触电人员时,应首先切断电源或用绝缘物体挑开电源线,使
触电者脱离电源,千万不要用手拖拉触电人员,以免连环触电; 9、 实验结束后,必须关闭桌面电源开关,将桌面收拾干净,工具物
品整理好。
题目:
1 设计要求
以51单片机为核心,设计、焊接并调试一个实际单片机控制系统,实现四位一体数码管显示直流电机转向、转速,并利用遥控控制直流电机的转速。系统设计具体要求:
1) 电源电路(9V AC - 5V DC)。 2) 51单片机最小系统。
3) 红外接收系统,利用遥控控制电机转速。 4) 四位一体数码管显示(三极管8550驱动)。 5) 直流电机驱动电路。
2 设计分析及系统方案设计
1) 直流电机:直流电机只要能提供一定的直流就可以转动,改变电压极性可以改变转动方向,可以通过给直流电机提供脉冲信号来驱动它,脉冲信号的占空比可以影响到直流电机的平均速度,因此可以通过调整占空比从而能实现调速的目的(PWM调速)。电机的驱动电流是比较大的,所以需要用三极管来放大电流。程序的关键就是如何实现占空比的调整,这个可以通过对51单片机定时器重装初值进行改变,从而改变时间。 2) 红外接收:通过红外接收电路进行遥控的接收。
3) 数码管显示:当遥控器输入数据即输入对电机的控制指令时, 数码管上会显示相应的转速、转向。
4) 总体设计:显示数码管用P1.1~P1.4进行位选,P0口控制显示数字;直流电机用P2.4和P2.5输出PWM波形,通过三极管进行驱动;通过红外接收电路和遥控,控制电机加速,减速,启动,停止,其中P3.2口作为遥控接收的输入端。
3 各功能模块硬件电路设计
1) 电源电路:
2) 最小系统:包括电源,接地,晶振,复位,上拉电阻。
3) 数码管显示:四位数码管是一种半导体发光器件,其基本单元是发光二
极管。能显示4个数码管叫四位数码管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。
4) 直流电机驱动:基于三极管的使用机理和特性,在驱动电机中采用H桥
功率驱动电路,H桥功率驱动电路可应用于步进电机、交流电机及直流电机等的驱动.永磁步进电机或混合式步进电机的励磁绕组都必须用双极性电源供电,也就是说绕组有时需正向电流,有时需反向电流,这样绕组电源需用H桥驱动。直流电机控制使用H桥驱动电路,当PWM1为低电平,通过对PWM2输出占空比不同的矩形波使三极管Q1、Q6同时导通Q5截止,从而实现电机正向转动以及转速的控制;同理,当PWM2为高电平,通过对PWM1输出占空比不同的矩形波使三极管Q1、Q6同时导通,Q6截止,从而实现电机反向转动以及转速的控制。
4 系统软件设计 1)源代码:
#define _TEST1_C_
#include "reg51.h" #include "intrins.h"
#define uchar unsigned char #define uint unsigned int #define DataPort P0
uchar code table[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//数码管码值 uchar code dispbit[] = {0xfd,0xfb,0xf7,0xef}; //位选控制,4位数码管,对应 P1^1-P1^4 uchar YKDatas[3]; //遥控码(一帧14位),YKDatas[0]: 0,1为start bits, 2 为control bit,
//YKtype=0
//YKDatas[1]: 3~7为system bits, YKtype=1 //YKDatas[2]: 8~13为command bits, YKtype=2 uchar YK_flag;
sbit YKIn = P3^2; //数据输入位
uchar YKcount, YKtype; //遥控已接收位数, 一帧的各段标志 bit YK_ok=0; //红外值储存完成标志位 bit flag=0; //电机正反转标志
sbit PWM1 = P2^5; //定义直流电机的控制端口1 sbit PWM2 = P2^4; //定义直流电机的控制端口2 uchar CYCLE=12; //定义周期 uchar PWM_L; //定义低电平时间 uchar PWM_Num=1; //定义档位 uchar key=1; //存储键值 bit qt=1; //启动和停止的标志位//定时器1的初始化
void initT1() { TMOD = 0x11; //定时器设置 1ms in 11.0592M crystal TH1 = 0xFC; TL1 = 0x66; //定时1mS ET1 = 1; EA = 1; TR1 = 1; //定时器打开 }
//定时器1处理程序 void time1() interrupt 3 { static uchar count = 0; TH1 = 0xFC; TL1 = 0x66;//定时1mS switch(PWM_Num) { case 1:PWM_L=4;break; case 2:PWM_L=5;break; case 3:PWM_L=6;break; case 4:PWM_L=7;break; case 5:PWM_L=8;break; case 6:PWM_L=9;break; case 7:PWM_L=10;break; case 8:PWM_L=11;break; case 9:PWM_L=12;break; default:break; } if(qt) { if(count
PWM1 = 1; PWM2 = 0; } else { PWM1 = 0; PWM2 = 1; } } else { PWM1 = 0; PWM2 = 0; //直流电机不转 } count++; if(count == CYCLE) { count = 0; } } else { PWM1 = 0; PWM2 = 0; } }
//延时 a * 1ms
void delayMs(uint a) {
uint i, j;
for(i = a; i > 0; i--)
for(j = 100; j > 0; j--); }
//延迟,百微秒级
void delay_us(uchar time) {
uchar i=0; while(time--) {
i=10;
while(i--) ; } }
//重置所有数据 void YKReset() {
delayMs(200); //去重复
YKDatas[0] = YKDatas[1] = YKDatas[2] = 0; YKcount = 0; YKtype = 0;
EX0 = 1; //开外部中断0, 检测是否有数据输入 PX0 = 1; PT0 = 1; }
//遥控接收初始化
void YKInit() {
TMOD = 0x01; //T0选用方式1(16位定时) IE=0x82;
ET0=1; //开总中断, 开定时器0中断 YKIn = 1; YKReset(); }
void ex0() interrupt 0 {
EX0 = 0; //关闭外部中断0
//模式1: TH0 = (2^16 - (413/1.085)) / 2^8 = (65536 - 381) /
//256 = 254;
//TL0 = (65536 - 381) % 256 = 131 TH0 = 254; TL0 = 131;
TR0 = 1; //启动定时器0, 定时1/4位周期 }
void time0() interrupt 1 {
//第一次进入中断前, 定时1/4位的时间:445us, 以后则定时一位时间1.778ms
//即在3/4位时间时, 判断该位是1还是0/实际测试中, 位时间只在1.651ms(+- 1ms), 定
//时1/4位的时间:413us
bit in = ~YKIn; //一体化解码后, 有载频部分变为低电平, 即低电平实际为1, 高电平
//实际为0
//设置定时器初值
//模式1: TH0 = (2^16 - (1651/1.085)) / 2^8 = (65536 - 1651/1.085) / 256 = 249; //TL0 = (65536 - 1651/1.085) % 256 = 141 TH0 = 249; TL0 = 141;
YKDatas[YKtype] = YKDatas[YKtype] | in; //将数据放入最低位 YKcount++;
if(YKcount == 1 || YKcount == 2) {
if(in == 0) //起始两位必须都为1,否则关计时器0,开中
//断0
{
TR0 = 0; YKReset(); return; } }
if(YKcount == 3) //获取完Start bits 和control bit, 共3位 {
YKtype = 1; }
else if(YKcount == 8) //获取完system bits, 共5位 { if(YKDatas[1]!=0) { TR0 = 0; YKReset(); return; } YKtype = 2; }
else if(YKcount == 14) //获取完commond bits, 共6位 { YKtype = 3;
}
else if(YKtype ==3) { TR0 = 0; //接收结束, 停止定时器0 YK_ok=1;
return; }
else //将数据左移一位, 以便将一下位数据并于最
//低位
YKDatas[YKtype] = YKDatas[YKtype]
/*********************IRC RC-5**************************************/ void display(uchar num) //显示接收的数据 (动态扫) { uchar i; P0 =dispbit[0]; //千位位选 if(flag==0) { P1 =0xff; //全灭 delay_us(8); } if(flag==1) { P1 =table[8]; //显示“B(8)” delay_us(8); } i=num/100; //百位 P0 = dispbit[1]; //位选 P1 =table[i]; //段选 delay_us(8); i=num/10%10; //十位 P0 =dispbit[2]; //位选 P1 =table[i]; //段选 delay_us(8); i=num%10; //个位 P0 =dispbit[3]; //位选 P1 =table[i]; //段选 delay_us(8); }
void main(void) {
YKInit(); initT1(); while(1) {
}
}
if(YK_ok) { YK_ok=0; key=YKDatas[2]&0x3f; //flag1[qt]=YKDatas[0]; YKReset(); YKIn = 1; if(key==10) {flag=~flag;delay_us(50);} //正反转键 if(key==12) //停止和启动键 { qt=~qt; } if(key==0x20) //加1档键 { PWM_Num++; if(PWM_Num>=10) PWM_Num=1; } if(key==0x21) //减1档键 { PWM_Num--; if(PWM_Num==0) PWM_Num=9; } switch(key) { case 1:PWM_Num=1;break; case 2:PWM_Num=2;break; case 3:PWM_Num=3;break; case 4:PWM_Num=4;break; case 5:PWM_Num=5;break; case 6:PWM_Num=6;break; case 7:PWM_Num=7;break; case 8:PWM_Num=8;break; case 9:PWM_Num=9;break; default:break; } }
display(PWM_Num);
2)流程图 主程序:
直流电机控制程序:
红外中断程序:
5 系统调试运行结果说明计分析
1) 系统运行的硬件环境:PC机,windows XP系统
2) 系统运行的软件环境:MedWin(集成开发环境),SuperPro/Z(编程器),
软件仿真Keil C51(C51编译器)。 3) 系统运行结果:
a) .四位一体数码管:显示直流电机状态,最高位灭是表示正转,为“8”
时表示反转;其余三位表示直流电机旋转的档位。 如下图1、2所示。
图
1
图2
b) 红外发射接收部分:遥控输入为1~9时,表示电机旋转档位为1~9;
当遥控输入为“单/双”时,控制电机正反转;“开关键”为停止、启动键;
“节目+”为档位加1键,“节目-”为档位减1键。 如图3、4、5所示。图6为按下停止键情形。
图3
图4
图5
图6
c) .综合以上模块功能后,系统成功实现红外控制直流电机的转速转向,
同时数码管显示直流电机的工作状态。
6 结论
在本次实验中,我进行了通过红外接收遥控码来对直流电机调速的控制,并且在数码管上显示出直流电机的状态,即转速、转向。最终实验效果为,当遥控控制电机档位为1~9时,电机转速会从1~9改变;当遥控输入为“节目+”时,电机转速会以1为单位增加;当遥控输入为“节目-”时,电机转速会以1为单位减少;当遥控输入为“开关”键时,电机会停止转动。以此同时,数码管上会相应显示电机的状态,最高位显示电机是正转还是反转,“8”为反转,灭为正转;后3位为电机档位,为“001”到“009”。实验结果符合实验要求。 参考文献
[1]陈育斌等.MCS-51单片机应用实验教程[M]大连理工大学出版社。
大连理工大学本科实验报告
题目:基于
51单片机的直流电机调速系统
课程名称: 电子工程训练
学院(系):电子信息与电气工程学部 专 业: 电子信息工程 班 级: 学 号: 序 号: 学生姓名:
成 绩: 2015年 11 月 1 日
成绩评定
电子安装实验室安全守则
1、 每次实验前,认真预习准备,仔细阅读实验安全守则,严格按照
安全规范进行实验,确保实验安全;
2、 桌面要保持整洁,不允许有杂物,禁止将水杯、瓶装水放在桌面; 3、 电烙铁在使用前,必须检查电源线有无烫损漏线情况,一经发现,
立即找老师进行安全处理;
4、 电烙铁长时间不使用,应将电源线拔掉;电烙铁使用后,应放回
烙铁架中,以免烫伤物品;
5、 实验结束后,必须拔掉电烙铁的电源线;已经加热的电烙铁,必
须冷却后再放入抽屉中;
6、 焊锡中含铅,不要含在口中,实验结束后要洗手;
7、 稳压电源在使用前,应先调好要使用的电压,再进行线路连接,
并确保连接的极性正确;
8、 抢救触电人员时,应首先切断电源或用绝缘物体挑开电源线,使
触电者脱离电源,千万不要用手拖拉触电人员,以免连环触电; 9、 实验结束后,必须关闭桌面电源开关,将桌面收拾干净,工具物
品整理好。
题目:
1 设计要求
以51单片机为核心,设计、焊接并调试一个实际单片机控制系统,实现四位一体数码管显示直流电机转向、转速,并利用遥控控制直流电机的转速。系统设计具体要求:
1) 电源电路(9V AC - 5V DC)。 2) 51单片机最小系统。
3) 红外接收系统,利用遥控控制电机转速。 4) 四位一体数码管显示(三极管8550驱动)。 5) 直流电机驱动电路。
2 设计分析及系统方案设计
1) 直流电机:直流电机只要能提供一定的直流就可以转动,改变电压极性可以改变转动方向,可以通过给直流电机提供脉冲信号来驱动它,脉冲信号的占空比可以影响到直流电机的平均速度,因此可以通过调整占空比从而能实现调速的目的(PWM调速)。电机的驱动电流是比较大的,所以需要用三极管来放大电流。程序的关键就是如何实现占空比的调整,这个可以通过对51单片机定时器重装初值进行改变,从而改变时间。 2) 红外接收:通过红外接收电路进行遥控的接收。
3) 数码管显示:当遥控器输入数据即输入对电机的控制指令时, 数码管上会显示相应的转速、转向。
4) 总体设计:显示数码管用P1.1~P1.4进行位选,P0口控制显示数字;直流电机用P2.4和P2.5输出PWM波形,通过三极管进行驱动;通过红外接收电路和遥控,控制电机加速,减速,启动,停止,其中P3.2口作为遥控接收的输入端。
3 各功能模块硬件电路设计
1) 电源电路:
2) 最小系统:包括电源,接地,晶振,复位,上拉电阻。
3) 数码管显示:四位数码管是一种半导体发光器件,其基本单元是发光二
极管。能显示4个数码管叫四位数码管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。
4) 直流电机驱动:基于三极管的使用机理和特性,在驱动电机中采用H桥
功率驱动电路,H桥功率驱动电路可应用于步进电机、交流电机及直流电机等的驱动.永磁步进电机或混合式步进电机的励磁绕组都必须用双极性电源供电,也就是说绕组有时需正向电流,有时需反向电流,这样绕组电源需用H桥驱动。直流电机控制使用H桥驱动电路,当PWM1为低电平,通过对PWM2输出占空比不同的矩形波使三极管Q1、Q6同时导通Q5截止,从而实现电机正向转动以及转速的控制;同理,当PWM2为高电平,通过对PWM1输出占空比不同的矩形波使三极管Q1、Q6同时导通,Q6截止,从而实现电机反向转动以及转速的控制。
4 系统软件设计 1)源代码:
#define _TEST1_C_
#include "reg51.h" #include "intrins.h"
#define uchar unsigned char #define uint unsigned int #define DataPort P0
uchar code table[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//数码管码值 uchar code dispbit[] = {0xfd,0xfb,0xf7,0xef}; //位选控制,4位数码管,对应 P1^1-P1^4 uchar YKDatas[3]; //遥控码(一帧14位),YKDatas[0]: 0,1为start bits, 2 为control bit,
//YKtype=0
//YKDatas[1]: 3~7为system bits, YKtype=1 //YKDatas[2]: 8~13为command bits, YKtype=2 uchar YK_flag;
sbit YKIn = P3^2; //数据输入位
uchar YKcount, YKtype; //遥控已接收位数, 一帧的各段标志 bit YK_ok=0; //红外值储存完成标志位 bit flag=0; //电机正反转标志
sbit PWM1 = P2^5; //定义直流电机的控制端口1 sbit PWM2 = P2^4; //定义直流电机的控制端口2 uchar CYCLE=12; //定义周期 uchar PWM_L; //定义低电平时间 uchar PWM_Num=1; //定义档位 uchar key=1; //存储键值 bit qt=1; //启动和停止的标志位//定时器1的初始化
void initT1() { TMOD = 0x11; //定时器设置 1ms in 11.0592M crystal TH1 = 0xFC; TL1 = 0x66; //定时1mS ET1 = 1; EA = 1; TR1 = 1; //定时器打开 }
//定时器1处理程序 void time1() interrupt 3 { static uchar count = 0; TH1 = 0xFC; TL1 = 0x66;//定时1mS switch(PWM_Num) { case 1:PWM_L=4;break; case 2:PWM_L=5;break; case 3:PWM_L=6;break; case 4:PWM_L=7;break; case 5:PWM_L=8;break; case 6:PWM_L=9;break; case 7:PWM_L=10;break; case 8:PWM_L=11;break; case 9:PWM_L=12;break; default:break; } if(qt) { if(count
PWM1 = 1; PWM2 = 0; } else { PWM1 = 0; PWM2 = 1; } } else { PWM1 = 0; PWM2 = 0; //直流电机不转 } count++; if(count == CYCLE) { count = 0; } } else { PWM1 = 0; PWM2 = 0; } }
//延时 a * 1ms
void delayMs(uint a) {
uint i, j;
for(i = a; i > 0; i--)
for(j = 100; j > 0; j--); }
//延迟,百微秒级
void delay_us(uchar time) {
uchar i=0; while(time--) {
i=10;
while(i--) ; } }
//重置所有数据 void YKReset() {
delayMs(200); //去重复
YKDatas[0] = YKDatas[1] = YKDatas[2] = 0; YKcount = 0; YKtype = 0;
EX0 = 1; //开外部中断0, 检测是否有数据输入 PX0 = 1; PT0 = 1; }
//遥控接收初始化
void YKInit() {
TMOD = 0x01; //T0选用方式1(16位定时) IE=0x82;
ET0=1; //开总中断, 开定时器0中断 YKIn = 1; YKReset(); }
void ex0() interrupt 0 {
EX0 = 0; //关闭外部中断0
//模式1: TH0 = (2^16 - (413/1.085)) / 2^8 = (65536 - 381) /
//256 = 254;
//TL0 = (65536 - 381) % 256 = 131 TH0 = 254; TL0 = 131;
TR0 = 1; //启动定时器0, 定时1/4位周期 }
void time0() interrupt 1 {
//第一次进入中断前, 定时1/4位的时间:445us, 以后则定时一位时间1.778ms
//即在3/4位时间时, 判断该位是1还是0/实际测试中, 位时间只在1.651ms(+- 1ms), 定
//时1/4位的时间:413us
bit in = ~YKIn; //一体化解码后, 有载频部分变为低电平, 即低电平实际为1, 高电平
//实际为0
//设置定时器初值
//模式1: TH0 = (2^16 - (1651/1.085)) / 2^8 = (65536 - 1651/1.085) / 256 = 249; //TL0 = (65536 - 1651/1.085) % 256 = 141 TH0 = 249; TL0 = 141;
YKDatas[YKtype] = YKDatas[YKtype] | in; //将数据放入最低位 YKcount++;
if(YKcount == 1 || YKcount == 2) {
if(in == 0) //起始两位必须都为1,否则关计时器0,开中
//断0
{
TR0 = 0; YKReset(); return; } }
if(YKcount == 3) //获取完Start bits 和control bit, 共3位 {
YKtype = 1; }
else if(YKcount == 8) //获取完system bits, 共5位 { if(YKDatas[1]!=0) { TR0 = 0; YKReset(); return; } YKtype = 2; }
else if(YKcount == 14) //获取完commond bits, 共6位 { YKtype = 3;
}
else if(YKtype ==3) { TR0 = 0; //接收结束, 停止定时器0 YK_ok=1;
return; }
else //将数据左移一位, 以便将一下位数据并于最
//低位
YKDatas[YKtype] = YKDatas[YKtype]
/*********************IRC RC-5**************************************/ void display(uchar num) //显示接收的数据 (动态扫) { uchar i; P0 =dispbit[0]; //千位位选 if(flag==0) { P1 =0xff; //全灭 delay_us(8); } if(flag==1) { P1 =table[8]; //显示“B(8)” delay_us(8); } i=num/100; //百位 P0 = dispbit[1]; //位选 P1 =table[i]; //段选 delay_us(8); i=num/10%10; //十位 P0 =dispbit[2]; //位选 P1 =table[i]; //段选 delay_us(8); i=num%10; //个位 P0 =dispbit[3]; //位选 P1 =table[i]; //段选 delay_us(8); }
void main(void) {
YKInit(); initT1(); while(1) {
}
}
if(YK_ok) { YK_ok=0; key=YKDatas[2]&0x3f; //flag1[qt]=YKDatas[0]; YKReset(); YKIn = 1; if(key==10) {flag=~flag;delay_us(50);} //正反转键 if(key==12) //停止和启动键 { qt=~qt; } if(key==0x20) //加1档键 { PWM_Num++; if(PWM_Num>=10) PWM_Num=1; } if(key==0x21) //减1档键 { PWM_Num--; if(PWM_Num==0) PWM_Num=9; } switch(key) { case 1:PWM_Num=1;break; case 2:PWM_Num=2;break; case 3:PWM_Num=3;break; case 4:PWM_Num=4;break; case 5:PWM_Num=5;break; case 6:PWM_Num=6;break; case 7:PWM_Num=7;break; case 8:PWM_Num=8;break; case 9:PWM_Num=9;break; default:break; } }
display(PWM_Num);
2)流程图 主程序:
直流电机控制程序:
红外中断程序:
5 系统调试运行结果说明计分析
1) 系统运行的硬件环境:PC机,windows XP系统
2) 系统运行的软件环境:MedWin(集成开发环境),SuperPro/Z(编程器),
软件仿真Keil C51(C51编译器)。 3) 系统运行结果:
a) .四位一体数码管:显示直流电机状态,最高位灭是表示正转,为“8”
时表示反转;其余三位表示直流电机旋转的档位。 如下图1、2所示。
图
1
图2
b) 红外发射接收部分:遥控输入为1~9时,表示电机旋转档位为1~9;
当遥控输入为“单/双”时,控制电机正反转;“开关键”为停止、启动键;
“节目+”为档位加1键,“节目-”为档位减1键。 如图3、4、5所示。图6为按下停止键情形。
图3
图4
图5
图6
c) .综合以上模块功能后,系统成功实现红外控制直流电机的转速转向,
同时数码管显示直流电机的工作状态。
6 结论
在本次实验中,我进行了通过红外接收遥控码来对直流电机调速的控制,并且在数码管上显示出直流电机的状态,即转速、转向。最终实验效果为,当遥控控制电机档位为1~9时,电机转速会从1~9改变;当遥控输入为“节目+”时,电机转速会以1为单位增加;当遥控输入为“节目-”时,电机转速会以1为单位减少;当遥控输入为“开关”键时,电机会停止转动。以此同时,数码管上会相应显示电机的状态,最高位显示电机是正转还是反转,“8”为反转,灭为正转;后3位为电机档位,为“001”到“009”。实验结果符合实验要求。 参考文献
[1]陈育斌等.MCS-51单片机应用实验教程[M]大连理工大学出版社。