多路红外遥控实验报告.docx
《多路红外遥控实验报告.docx》由会员分享,可在线阅读,更多相关《多路红外遥控实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
![多路红外遥控实验报告.docx](https://file1.bdocx.com/fileroot1/2022-10/10/f3f7b438-ef78-420f-a843-469bf43149c2/f3f7b438-ef78-420f-a843-469bf43149c21.gif)
多路红外遥控实验报告
课程设计报告
课程名称:
专业:
班级:
学号:
姓名:
指导教师:
设计时间:
评定成绩:
设计课题题目:
多路红外遥控器
一、设计任务与要求
1.实时控制多路(至少2路)电器的开关,其中一路为电灯开关控制,其亮度可以无线调节。
2.控制距离10m;
3.基于单片机实现,可以采用现成的红外发射与接收模组;
二、课题分析与方案选择
红外接收、译码电路由红外接收器、前置放大器、解调器、指令译码器、记忆和驱动级组成。
红外光电二极管将接收到的红外光信号转变成相应的电脉冲信号,再经高倍数电压放大后加至解调器进行解调,然后由指令译码器解码出指令信号。
指令译码器是与指令编码器相对应的译码器,用于脉冲指令信号译出。
译出的指令信号加至相应的记忆和驱动级,驱动执行机件动作,实现红外光遥控。
方案一、使用高端的ARM芯片和FPGA芯片作为主控芯片,可以轻松实现高速实时同步的功能,但是由于目前智能家居的实场竞争力相当大,若为了设计的简单而失掉了产品最重要的价格优势,那么我们的产品将永远对在实验室里。
方案二、采用性价比很高的单片机控制,既可实现稳定的系统设计,又可以使生产成本控制在很低的范围,所以,采用方案二
三、单元电路分析与设计
1.原理分析
红外发射模块:
开始
初始化
调用按键扫描程序
图1发送主程序
N
Y
图2按键扫描流程图
按键扫描过程:
先判断是否有按键按下,如果有,扫描P2口的值确定是哪个按键,并执行相应的程序。
Y
N
图3红外信号发射程序
红外接收模块:
、
N
Y
图4接收部分主程序
中断开始
P3.4=0
开始对低电平脉冲计数存入keyvol,对高电平脉冲计数存入k
k>2
按脉冲个数执行对应命令
中断返回
N
Y
N
Y
图5中断过程程序
2.仿真分析
红外发射部分:
使用Proteus设计红外发射端(遥控器)的硬件电路图如图3.1所示,并通过该软件对发射电路进行仿真。
软件中没有红外发射管的元件,图中以特性较接近的红色LED(D3)来代替。
仿真时通过按下某一个按钮,观察LED的电压波形是否为单片机发射的编码信号。
抽取第三列的按键进行仿真,第四列的按键对应的键值从上往下为3、7、11、15。
发射出来的波形应分别为四个键值的二进制波形表示,下面是仿真结果。
从波形对应的编码观察,发射电路发射的编码波形完全与按键的键值一一对应,编码仿真的结果正确。
把波形放大后的波形如图3.6所示,此波形应为承载编码的38KHz载波。
图中载波每周期大概为26us,t1对应为低电平,约为17us;t2对应为高电平,约为9us。
此脉冲电压与红外一体化接收头所需要的占空比为 1/3的38KHz红外信号几一致。
红外接收部分:
发射的红外信号被红外一体化接收头接收、转化为起始码和用户码(键值二进制码)所对应的包络波形,然后传递到单片机的外部中断0引脚,触发单片机外部中断。
通过使用外部中断0的下降沿触发的时间间隔对包含用户码的包络波形进行解码,然后通过解码得到的编码判断键值并控制相应的功能。
从前面的仿真结果可以看出,发射的波形与接收到的波形一致,并能实现方案预设的功能。
四、总原理图及元器件清单
1.总原理图
1)红外发射模块:
2)红外接收模块:
2.元件清单
名称
型号
主要参数
数量
备注
电阻
200
5
电阻
680
2
电阻
100
1
电阻
4K
4
电阻
10K
2
电阻
12K
1
电容
10uF
1
电容
33pF
2
电容
4.7uF
1
电容
10uF
2
电容
22pF
2
按键开关
5
2脚排针
4
单片机
STC89C52
2
晶振
12.000
2
红外接收
HS0038
1
LED
2
蜂鸣器
1
三极管
9013
2
红外发射
PH303
1
五、安装与调试
1.调试过程描述
方案设计的电路有两部分,一为反射部分(每张图中的下部分电路),二为接收部分(每张图中的上部分电路)。
首先将电路板制作完成,相应的元器件按照电路原理图安插好,并且进行点焊。
由于电路在制作过程中可能出现短路或者断路的情况,所以在调试的时候首先要进行这两个的测试。
测试的方式就是用万用表测量焊点与焊点或者与线路之间是否有出现短路或者断路的情况。
检测和处理好之后,就进行通电测试。
我们设计的时候用的是5V的直流电,介入电路之后打开开关,看LED电源指示灯是否亮,然后进行性能测试。
将两块板相距一段距离,同时打开,在发射板上控制,然后测试在接收板上是否会有相应的反应。
调试距离随调试有反应而增加,直至接收不到发射板的信号为止。
在调试的时候,开始没有反应,考虑是接收板的问题。
借用同学的接收板进行调试,同学的接收板有反应。
所以就断定是接收板的问题。
在进仔细的检查,发现还有个原件(排针)接入电源的没有焊。
将其焊好之后再进行电路检测,检测无误之后连接电路,与发射板一起,结果有反应,能够实现无线遥控控制LED和蜂鸣器的工作。
调试和制作成功。
2.实物照片
六、性能测试与分析
1.红外发射电路
图8红外发射电路
该电路采用8050三极管两级放大,这样能产生足够大的电流驱动红外发射管,能增加遥控距离。
2.单片机最小系统
图9单片机最小系统
复位电路采用手动和自动复位,晶振用12M晶振。
3.按键电路
图10按键电路
按键电路将三个按键接在P2.0,P2.1和P2.2口上,按下按键给单片机置低电平。
4.红外接收电路
红外接收采用一体头作为接受管,它起集成了红外接收、带通滤波和放大电路,使用起来方便简单。
图11红外接收电路
5.LED电路
图6LED电路
LED接在单片机P2.0和P2.1口,当单片机输出高电平,灯不亮;当单片机输出低电平,LED亮。
其中LED1可以改变亮度,通过单片机编程使P2.0口输出占空比不同的方波来改变灯的亮度。
七、结论与心得
本次课程设计分为软件部分和硬件部分。
软件部分涉及ORCAD仿真及电路参数的设计,PROTEL的使用。
硬件部分包括基本的焊接以及调试。
软件仿真部分要注意参数的设计。
硬件焊接过程中要仔细,以免短路或者虚焊,同时要尽量拉开元器件间的距离以减少干扰。
调试过程中要耐心,有时候电路紊乱时可以考虑切断电源一段时间后重新开始实验。
印象最为深刻的是,当我们准备好一切之后,通电却没有收到我们想要实现的功能,我们一遍又一遍地检查电路,直到能确定排除焊接和元器件的问题,查看程序,更改程序,甚至直接给了通电即亮灯的简单命令,依然没有亮灯,我们去请教其他组同学,用我们的发射电路和他们的接受电路,竟然能够实现亮灯及控制灯亮度的功能,我和小伙伴确定了是我们的接收器有问题,然后无奈之下,我们扭转了2个引脚的位置,竟然亮了,我们终于成功了。
在此次课程设计过程中,我收获知识,提高能力的同时,也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
八、参考文献
[1]张文荣.模拟电子技术课程教学新探[J].河北能源职业技术学院学报.2004,4(3).
[2]余道衡,徐承和.电子电路手册[M]. 北京:
北京大学出版社, 1996
[3]樊昌信,曹丽娜.通信原理(第六版)[M].北京:
国防工业出版社,2011.
[4]刘焕成.工程背景下的单片机原理及系统设计(第二版)[M].北京:
清华大学出版社,2011.
[5]聂诗良,李磊民.红外遥控信号的一种编码解码方法[J].仪表技术与传感器,2004(8).
附录:
发送程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
/*sbitkey0=P2^0;
sbitkey1=P2^1;
sbitkey2=P2^2;*/
#definekeyP2
sbithongwai=P1^0;
uinti,j,m;
ucharkeyvol;
/*********1毫秒延时程序**********/
delay1ms(uintt)
{
for(i=0;ifor(j=0;j<120;j++);
}
/***********初始化函数**********/
init()
{
P2=0xff;
keyvol=0;//脉冲个数标记清零
hongwai=0;//关遥控输出
IE=0x00;
IP=0x01;
TMOD=0x20;//8位自动重装模式
TH1=0xf3;//40KHZ初值
TL1=0xf3;
EA=1;//开总中断
}
keywork()
{
if(key==0xfe)//按下第一个按键
{
delay1ms(10);
while(key==0xfe)
{
keyvol=1;//脉冲个数标记为1
}
}
elseif(key==0xfd)//按下第二个按键
{
delay1ms(10);;
while(key==0xfd)
{
keyvol=2;//脉冲个数标记为2
}
}
elseif(key==0xfb)//按下第三个按键
{
delay1ms(10);
while(key==0xfb)
{
keyvol=3;//脉冲个数标记为3
}
}
}
/********发送程序********/
send()
{
ET1=1;
TR1=1;
delay1ms(3);
ET1=0;
TR1=0;
hongwai=1;//40KHZ发3毫秒
for(m=keyvol;m>0;m--)
{
delay1ms
(1);//停1毫秒
ET1=1;
TR1=1;
delay1ms
(1);
ET1=0;
TR1=0;
hongwai=1;//40KHZ发1毫秒
}
delay1ms(10);
}
/********主程序********/
voidmain()
{
init();//初始化
while
(1)
{
keywork();
if(keyvol!
=0)
{
send();
keyvol=0;
}
}
}
/*********40KHZ发生器***********/
//定时中断T1
voidtime_intt1(void)interrupt3