红外光通信课程设计报告Word文件下载.docx
- 文档编号:18792740
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:18
- 大小:265.06KB
红外光通信课程设计报告Word文件下载.docx
《红外光通信课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《红外光通信课程设计报告Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
440KΩ(1个);
10KΩ(8个);
100Ω(1个);
1MΩ(1个);
300Ω(1个);
电容:
47uF(1个);
4.7uF(2个);
5pF(4个);
22uF(1个);
稳压电源1个:
5V
示波器1个
三.系统实现功能原理
系统要实现一个红外光通信系统,输入数据由发射端的4*4扫描键盘确定,共有16种数据,用4位8421二进制码来表示数据经过编码芯片进行编码并加上地址信息,再调制到38KHz的载波上,通过940nm的红外光进行数据传输。
接收端首先通过红外接收一体化管进行接收与解调,再经过2272进行解码,当发射数据地址与接收数据地址一致时,2272将通知单片机接收数据,单片机接收数据并经过处理,将在数码管上显示出发射端所按下的扫描键盘的值。
1.硬件总功能框图:
发射:
接收:
2.编码(SC2262IR)/解码(SC2272M4)芯片框图及工作流程图
(1)SC2262芯片框图:
SC2262芯片工作流程图:
(2)SC2272芯片框图:
SC2272芯片工作流程图:
四.系统原理图及说明
1.发射端原理图:
说明:
(1)由于Dout比较小,并且2262的Dout端驱动电流较小,所以基极不必加限流电阻,又通过实验发现,集电极无须加限流电阻就可以使红外发光二极管正常工作,而且发射功率也比较大。
(2)振荡电阻选择440KΩ(PT2262IR的PDF文件中在红外应用处提到若要得到38KHz的载波,建议在发射端使用440KΩ的振荡电阻)
(3)47uF的电容是减少电源波动对发射已调波的影响
(4)键盘扫描口使用P2口,这样可以减少行上的4个电阻,若使用P0口,则必须使用8个上拉电阻。
电阻大小选择10KΩ,既可以减小电流,又可以减小微小波动对键盘的影响。
(5)地址端我们采用全部悬空的状态做为地址
2.接收端原理图:
(1)经测量,红外一体化接收管的输出在无信号输入时为高电平,在有信号输入时,输出为输入的反,所以我们在IRM838S的OUT脚加上一三极管8050以及10KΩ的集电极限流电阻(保护作用)来完成反向的作用,2272的DIN脚加在集电极上。
这样发射和接收的波形就完全一致了。
(2)接收端的振荡电阻使用1MΩ(PT2272的PDF中在红外应用中提到建议在接收端使用1MΩ的震荡电阻。
(3)8段共阳数码管接在P0口,上拉电阻300Ω就可以点亮数码管。
但是,若在P0口使用共阴极数码管则需要用上拉电阻,这是由于P0口是开集输出,无法直接驱动共阴极数码管。
(4)地址端我们采用全部悬空的状态作为地址,与发射地址一致
五.程序流程图
1.发射端AT89S52程序流程图
通过单片机进行键盘扫描,将键值传给2262,并使2262进行发射。
2.接收端AT89S52程序流程图
单片机扫描2272的VT端,当有相同地址的数据到达2272,单片机将读入数据,并用数码管显示相应的键值。
六.系统源程序
1.发射端(C语言)
#include<
reg51.h>
sbitable=P1^4;
//2262IR发射使能控制端
sbitline1=P2^3;
//行列键盘的行与列与单片机端口的连接关系
sbitline2=P2^2;
sbitline3=P2^1;
sbitline4=P2^0;
sbitrow1=P2^7;
sbitrow2=P2^6;
sbitrow3=P2^5;
sbitrow4=P2^4;
voidwait(void);
voidkeywork(void);
voidtransmit(void);
voidmain(void)//主程序
{
unsignedchari;
for(i=0;
i<
10;
i++)
wait();
//启动后等待一段时间,待单片机稳定后执行功能
}
r:
keywork();
//键盘扫描
transmit();
//数据发射
able=1;
//停止2262IR发射
gotor;
//跳回键盘扫描程序,等待下一个按键
voidwait(void)//等待子程序
unsignedchari1;
unsignedcharj1;
for(j1=0;
j1<
0xff;
j1++)
for(i1=0;
i1<
i1++);
voidkeywork(void)//键盘扫描子程序
{
en:
P2=0xff;
//单片机行列端口均置高
line1=0;
//第1列端口置零,检查第1列是否有键按下
if(row1==0)//若第1行为0,则执行以下大括号中语句
P1=0x10;
//P1口低4位输出键值0,而使能端P1.4=1(不发射)
return;
//返回主程序
elseif(row2==0)//若第2行为0,则执行以下大括号中语句
P1=0x11;
//P1口低4位输出键值1,而使能端P1.4=1(不发射)
elseif(row3==0)//若第3行为0,则执行以下大括号中语句
P1=0x12;
//P1口低4位输出键值2,而使能端P1.4=1(不发射)
elseif(row4==0)//若第4行为0,则执行以下大括号中语句
P1=0x13;
//P1口低4位输出键值3,而使能端P1.4=1(不发射)
line1=1;
//第1列没有键按下时,第1列端口置高
line2=0;
//第2列端口置零,检查第2列是否有键按下
P1=0x14;
//P1口低4位输出键值4,而使能端P1.4=1(不发射)
P1=0x15;
//P1口低4位输出键值5,而使能端P1.4=1(不发射)
P1=0x16;
//P1口低4位输出键值6,而使能端P1.4=1(不发射)
P1=0x17;
//P1口低4位输出键值7,而使能端P1.4=1(不发射)
line2=1;
//第2列没有键按下时,第2列端口置高
line3=0;
//第3列端口置零,检查第3列是否有键按下
P1=0x18;
//P1口低4位输出键值8,而使能端P1.4=1(不发射)
P1=0x19;
//P1口低4位输出键值9,而使能端P1.4=1(不发射)
P1=0x1a;
//P1口低4位输出键值a,而使能端P1.4=1(不发射)
P1=0x1b;
//P1口低4位输出键值b,而使能端P1.4=1(不发射)
line3=1;
//第3列没有键按下时,第3列端口置高
line4=0;
//第4列端口置零,检查第4列是否有键按下
P1=0x1c;
//P1口低4位输出键值c,而使能端P1.4=1(不发射)
P1=0x1d;
//P1口低4位输出键值d,而使能端P1.4=1(不发射)
P1=0x1e;
//P1口低4位输出键值e,而使能端P1.4=1(不发射)
P1=0x1f;
//P1口低4位输出键值f,而使能端P1.4=1(不发射)
gotoen;
//没有键按下时,回到子程序首,重新扫描
}
voidtransmit(void)//发射子程序
{
able=0;
//使2262IR发射
//等待一段时间
2.接收端(C语言)
sbitvt=P1^4;
//定义数据有效端口,当VT=1时,单片机将从2272中取数据
voidreceive(void);
5;
//启动后等待,待单片机稳定后执行功能
P0=0x00;
//同时闪数码管,可检查数码管是否正常
P0=0xff;
re:
receive();
//接收数据并显示
//持续一段时间
//使数码管熄灭
gotore;
//接收下一数据
unsignedcharj;
for(j=0;
j<
j++);
voidreceive(void)//接收子程序
unsignedchara;
re1:
if(vt==1)//如果VT=1,那么执行以下大括号中的程序
a=P1;
//将P1口的数据读入单片机中
a=a&
(0x0f);
//由于2272是4位瞬时输出,所以只取低4位,高4位置零
if(a==0x00)//如果接收数据是0,则执行以下大括号中程序
P0=0x14;
//设置P0口,使数码管显示0(考虑到电路焊接方便,所以我们//的数码管连接并不是直接将数码管的a到h顺序连接到P0口,//而是由高到低依次是edcgfhab)
return;
elseif(a==0x01)//如果接收数据是1,则执行以下大括号中程序
P0=0xDE;
//设置P0口,使数码管显示1
elseif(a==0x02)//如果接收数据是2,则执行以下大括号中程序
P0=0x2C;
//设置P0口,使数码管显示2
}
elseif(a==0x03)//如果接收数据是3,则执行以下大括号中程序
P0=0x8C;
//设置P0口,使数码管显示3
elseif(a==0x04)//如果接收数据是4,则执行以下大括号中程序
P0=0xC6;
//设置P0口,使数码管显示4
elseif(a==0x05)//如果接收数据是5,则执行以下大括号中程序
P0=0x85;
//设置P0口,使数码管显示5
elseif(a==0x06)//如果接收数据是6,则执行以下大括号中程序
P0=0x05;
//设置P0口,使数码管显示6
elseif(a==0x07)//如果接收数据是7,则执行以下大括号中程序
P0=0xDC;
//设置P0口,使数码管显示7
elseif(a==0x08)//如果接收数据是8,则执行以下大括号中程序
P0=0x04;
//设置P0口,使数码管显示8
elseif(a==0x09)//如果接收数据是9,则执行以下大括号中程序
P0=0x84;
//设置P0口,使数码管显示9
elseif(a==0x0a)//如果接收数据是a,则执行以下大括号中程序
P0=0x44;
//设置P0口,使数码管显示a
}
elseif(a==0x0b)//如果接收数据是b,则执行以下大括号中程序
P0=0x07;
//设置P0口,使数码管显示b
elseif(a==0x0c)//如果接收数据是c,则执行以下大括号中程序
P0=0x35;
//设置P0口,使数码管显示c
elseif(a==0x0d)//如果接收数据是d,则执行以下大括号中程序
P0=0x0E;
//设置P0口,使数码管显示d
elseif(a==0x0e)//如果接收数据是e,则执行以下大括号中程序
P0=0x25;
//设置P0口,使数码管显示e
elseif(a==0x0f)//如果接收数据是f,则执行以下大括号中程序
P0=0x65;
//设置P0口,使数码管显示f
elsegotore1;
//若VT=0则继续扫描VT口
七.系统性能
我们最终的系统可以完成当发射端有按键按下,接收端马上显示出所按键的键值,数码管点亮1秒后熄灭,这是可以显示下一个接收数据。
发射管电流约为20mA,发射管一只,接收管一只。
当发射接收对准时,红外传输距离可达5米,但角度要求教高,偏离30度左右就无法接收。
但当发射接收管距离小于半米时,接收管可背对发射管接收数据。
八.改进方案
通过我们的实验,发现当振荡电阻的大小匹配时,可以增加传输距离,在我们的系统中,采用的振荡电阻是2262/2272的PDF文件中建议使用的大小,但是当我们用电位器进行微调时,可以继续增大传输距离,但是由于电阻大小不易用现有电阻搭配出。
同时,我们发现,红外发射管的极限电流虽是20mA,但是当电流增大到100mA时,红外发光二极管还是可以不连续的正常工作。
所以可以直接在发射端的三极管处再级联一个三极管,同时在集电极串上一100欧左右的限流电阻,则可以大大增加传输距离,最远能达10m,但是不能连续发射,而且管子的寿命会大大降低。
所以我们还是采用了20mA的安全电流使红外发光二极管工作。
角度问题我们的解决方案是朝各个方向都并联红外发光二极管,这样可以大大增大传输角度。
也可以使用透镜,但由于时间关系我们没有做相关实验。
九.结束语
通过本次课设,首先使我们掌握了单片机的使用以及其外围电路的设计,同时使我们熟练的掌握的单片机的编程语言,以及在调试过程中应注意的问题。
其次是使我们掌握的编码/解码芯片(2262/2272)的使用。
同时,在发射端和接收端的模拟电路的设计,巩固了我们模拟电子技术的知识,以及在工程中应如何使用三极管,彻底的从理论走向了实践。
在搭系统的过程中,我们了解到一个系统的完成,并不是一些芯片连到一起就能实现的,一定要考虑到单片机以及其他IC的输入输出要求以及驱动电流和灌入电流大小,只有将芯片、元件的作用和性能完全搞清楚,才能制作出可运行的系统。
同时,我们焊接的水平也有很大提高,从原来焊接16键行列键盘的4个小时减少到1个半小时。
在系统搭建完毕后,我们也学会了如何调试程序,以及如何测试系统的性能,以及如何改进。
没有理论计算,一味的尝试经常得不到满意的结果,只有理论联系实际,才能得到我们想要的结果。
总之,在本次课设中我们学到了在书本上学不到的知识,这对我们以后的学习以及工作都是非常有用的。
在搭建系统的过程中,贯穿了我们上大学以来所有电类的知识,使我们对所学知识有了更深的了解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 红外光 通信 课程设计 报告