红外光通信装置电赛报告.docx
《红外光通信装置电赛报告.docx》由会员分享,可在线阅读,更多相关《红外光通信装置电赛报告.docx(50页珍藏版)》请在冰豆网上搜索。
红外光通信装置电赛报告
红外光通信装置-电赛报告
————————————————————————————————作者:
————————————————————————————————日期:
[键入文档标题]
红外光通信装置(F题)
【本科组】
2013年9月6日
摘要
随着红外技术的发展,红外光通信已经成为越来越普及的无线通信方式。
在本次设计作品中,红外光通信装置采用红外光传输及无线工作机制,其组成结构主要包括:
红外发射装置、中继转发节点、红外接收装置三部分组成。
红外发射装置主要是由声音采集系统经单片机存储后发射,红外接收装置接收到的信息经单片机存储后再经过D/A转换播放。
通过采用A/D,D/A转换的方法达到了本次作品设计的目的。
在电子消费领域当中,红外产品的使用较为普遍,它多用于简单的近距离控制,如家电、玩具、各种抄表系统、工业控制、娱乐设施等领域。
所以,其具有很强的现实意义。
关键词:
红外通信发射接收A/D转换D/A转换
Abstract
Withthedevelopmentofinfrared,andinfraredopticalcommunicationhasbecomemoreandmorepopularwayofwirelesscommunication.
Thisdesignworks,infra-redcommunicationdevicesuseinfraredlighttransmissionandwirelessworkingmechanisms,itscompositioninclude:
infraredemittingdevice,relaynode,aninfraredreceiverunitiscomposedofthreeparts.InfraredLaunchercorrespondswithsoundcollectionsystembysingle-chipcomputermemoryafterthelaunch,IRreceiverreceivestheinformationviaasingle-chipstorage,andthenafterd/aconversionplay.Throughtheuseofa/d,d/aconversionwaytoachievethepurposeoftheproductiondesign.
Inthefieldofconsumerelectronics,usinginfraredproductsaremoreprevalent,itisusedforsimplecontrolatcloserange,suchashouseholdappliances,toys,meteringsystems,industrialcontrol,recreationalfacilities,andotherfields.So,ithasalotofpracticalsignificance.
Keywords:
InfraredCommunicationlaunchreceiveA/DconversionD/Aconversion
1系统方案设计
1.1设计任务
根据命题要求,设计并制作一个红外光通信装置。
红外光通信装置利用红外发光管和红外接收模块作为收发器件用来定向传输语音信号,传输距离为2m.传输的语音信号频率范围为300–3400HZ,接收的声音应无明显失真。
此外,增加一路数字信道,实时传输发射端环境温度,并能在接收端显示。
数字信号传输时延不超过10s,温度测量误差不超过2℃,语音信号和数字信号能同时传输。
同时,设计并制作一个红外光通信中继转发节点,以改变通信方向
℃,延长通信距离2m,中继转发节点采用5V直流单电源供电,尽量减小转发节点供电电流。
1.2方案的设计与论证
1.2.1红外光通信装置总体方案设计
整套方案主要由红外发射装置、中继转发节点、红外接收装置三部分组成。
先把传输进红外发射装置的声音经过放大电路进行放大,然后由STC12C5A08S2单片机自身带有的A/D转换功能把模拟信号转换为数字信号对放大之后的语音进行采集,同时把采集到的数字信号存储到STC12C5A08S2单片机中。
然后,经555定时器电路产生38K载波,并利用三极管对单片机中存储的数据和555定时器产生的38K载波进行调制到达中继转发节点,并由1838红外接收头进行解调,接着把解调后的信号编码发送给中继点上的单片机STC11F04E,并由此单片机对其数据进行取反。
再由555定时器电路产生38K载波,利用三极管对经单片机取反后的数据和38K载波进行调制,之后到达接收点。
到达接收点的信号经STC12C5A08S2进行解码,送给TLC5615CP芯片构建的D/A转换电路把数字信号转换为模拟信号,最后再将此模拟信号发送给耳机,并由耳机播放。
采用此方案的框图如下:
放大系统
温度、音频
1.2.2单片机模块的选择
方案
:
传统51系列是的单片机,受其结构本身的限制很大,尤其模拟功能部件的增加更显困难,而且运行速度很慢,功耗比较高,抗干扰能力也不是很强。
方案二:
STM32系列具有一流的外设、低功耗、最大的集成度、简单的结构和易用的工具,是ARM公司的高性能Cortex-M3内核。
但我们对此系列的单片机的编程操作不太熟练。
方案三:
宏晶芯片STC12C5A08S2是增强型的51系统单片机,具有一个时钟,高速、高可靠、宽电压、增加第二复位功能脚和外部掉电检测电路,采用低功耗设计,最重要的是其内部有AD外设和45K的EEPROM,我们可由此进行模数转换和信息存储。
STC11F04E单片机超强抗干扰,超强抗静电,速度快,输入/输出口多,超低功耗,在系统可编程,无需编程器,无需仿真器,可远程升级。
由于对于中继点低功耗的要求,所以把此单片机用于中继转发节点。
基于我们对各种系列单片机运用的熟练程度和此次作品中所要实现的各项基本功能,我们决定在此方案设计中采用方案三。
1.2.3红外发射接收装置模块的选择
方案
:
红外模拟信号。
这种方法速度快,能达到实时传输效果。
但是,在传输过程中,噪音比较大,容易受干扰。
而且,传输的距离也比较近。
方案
:
红外数字信号。
将要发射出去的模拟信号转换成数字信号,将数字信号送给红外发射电路,经该电路的调制转变成红外光信号在空中传输,到达中继转发节点后,转发到红外接收电路,接收电路收到该红外光信号,经过该电路的解调,将此红外光信号还原成可被单片机或其他处理系统处理的信号,由单片机或其他处理系统内部处理得到原来的数据编码。
比较方案
和方案二,又考虑到我们对模拟部分的知识和数字部分的知识的掌握程度,我们决定选择方案二。
1.2.4语音采集模块方案的选择
方案
:
采用语音编解码芯片。
这种方法失真度小,信噪比较低,数据量大。
但在数字图像处理中,由于数据量大,算法难度高,因此实时性成为技术难点之一。
而且,在传输过程中所运用的1838红外接收头传输信息速度慢,而语音编码解码芯片数据量过大,与后续装置不协调。
方案二:
采用A/D,D/A转换装置。
先把模拟信号转换为数字信号,再经中继转换节点在通信协议的控制下把数字信号转换为模拟信号。
比较两种方案,并基于现实的情况,此模块选择方案二。
2单元硬件电路设计
2.1发射部分电路的设计
发射部分主要由双运放NE5532组成的放大器、STC12C5A08S2单片机和NE555定时器构建的电路组成。
其电路图如图1:
图1
2.2中转部分电路的设计
中转部分主要由1838红外接收头、STC11F04E单片机NE555定时器、三极管等搭建的电路组成,其电路图如图2:
图2
2.3接收部分电路的设计
接收部分主要由1838红外接收头、STC12C5A08S2单片机、TLC5615数模转换器、TL431可控精密稳压源等搭建的电路组成。
其电路图如图3:
图3
3程序设计
系统程序主要由发射装置程序和接收装置程序两部分组成。
系统程序流程图如下所示。
3.1发射装置程序流程图
Y
Y
N
N
Y
N
N
Y
N
3.2接收装置程序流程图
N
Y
N
Y
N
Y
N
Y
4系统测试
传输距离测试:
传输距离
传输情况
1m
良好
2m
良好
3m
良好
4m
良好
中继点电流大小:
100MA左右
温度误差:
1°C
无发射信号时无噪音
800HZ信号输出0.3V
有信号时8个LED闪烁,无信号时LED不闪烁
5理论分析与计算
本系统使用数字信号传输,编码规则自定,具体如下:
每串数据有1.5MS高电平,2MS低电平的引导码
高电平时间0.5
低电平时间0.6MS代表二进制数0
高电平时间1.0MS代表二进制数1
传输波形如图:
波形1
波形2
波形3
6结论
本系统功能上和参数上都达到了题目的要求,基本上完成了题目的各项设计。
并按照要求完成了其发挥部分,可以精确的显示温度,也可以利用中继点进行转接,但是声音信号传输延时较大。
优点:
本系统采用数字信号传输数据,能够最大限度的减少干扰且传输距离较长,适用于信息量较少、环境干扰较大的情况传输数据。
本系统的不足:
由于红外数字信号传输使用38K载波频率,很大程度上限制了数据传输的速度,所以本系统不适合音频等数据量较大的数据传输。
所以本系统还有较大的提升空间,如声音信号使用模拟信号传输、温度信号使用数字信号传输能达到声音信号和温度信号实时传输。
参考文献
[1]阎石.数字电子技术基础(第五版)[M].北京:
高等教育出版社,2006.
[2]童诗白,华成英.模拟电子技术基础(第四版)[M].北京:
高等教育出版社,2006.
[3]黄智伟.全国大学生电子设计竞赛技能训练(第2版)[M].北京:
北京航空航天大学,2011.
[4]代万辉,陈松方.全国电子设计大赛培训宝典[M].北京:
北京航空航天大学,2012.
[5]求是科技.8051系列单片机C程序设计完全手册[M].北京:
人民邮电出版社,2006.
[6]杨欣,王玉凤,刘湘黔.电子设计从零开始[M].北京:
清华大学出版社2005.
附录:
源程序
//*************************sendmessage**************************//
#include"STC12C5A60S2.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedchar
typedefunsignedcharBYTE;
typedefunsignedintWORD;
ucharcodestr1[]={0x28,0xA6,0x4A,0x0E,0x05,0x00,0x00,0x84};//ROM1
ucharcodestr2[]={0x28,0xA5,0x86,0x40,0x04,0x00,0x00,0x80};//ROM2
sbitD1=P3^7;
sbitDQ=P3^3;
/*DefineISP/IAP/EEPROMcommand*/
#defineCMD_IDLE0//Stand-By
#defineCMD_READ1//Byte-Read
#defineCMD_PROGRAM2//Byte-Program
#defineCMD_ERASE3//Sector-Erase
/*DefineISP/IAP/EEPROMoperationconstforIAP_CONTR*/
#defineENABLE_IAP0x80//ifSYSCLK<30MHz
sfrADC_DATA=0XBD;
sfrADC_LOW=0XBE;
sbitCS=P2^0;
sbitSCLK=P2^1;
sbitDIN=P2^2;
sbitleft=P1^0;
doublej;
ucharflag,t;
voidDelay(BYTEn);
voidIapIdle();
BYTEIapReadByte(WORDaddr);
voidIapProgramByte(WORDaddr,BYTEdat);
voidIapEraseSector(WORDaddr);
uchartvalue;//温度值
voidDelay999ms()//@30.000MHz
{
unsignedchari,j,k;
_nop_();
_nop_();
i=114;
j=226;
k=60;
do
{
do
{
while(--k);
}while(--j);
}while(--i);
}
/******************************ds1820*********************/
voidDelay1us()//@30.000MHz
{
unsignedchari;
i=5;
while(--i);
}
voidDelay10us()//@30.000MHz
{
unsignedchari;
_nop_();
_nop_();
i=72;
while(--i);
}
voidDelay48us()//@30.000MHz
{
unsignedchari,j;
i=2;
j=99;
do
{
while(--j);
}while(--i);
}
voidDelay700us()//@30.000MHz
{
unsignedchari,j;
i=21;
j=106;
do
{
while(--j);
}while(--i);
}
voidDelay1ms()//@30.000MHz
{
unsignedchari,j;
i=30;
j=43;
do
{
while(--j);
}while(--i);
}
voidrst_Ds18b20()
{
DQ=1;
Delay1us();
DQ=0;
Delay700us();//延迟700us
DQ=1;
Delay1ms();
}
voidwriteDs18b20(uchardate)//写数据
{
uchari;
DQ=1;
Delay1us();
for(i=0;i<8;i++)
{
DQ=0;
Delay10us();
DQ=date&0x01;
Delay48us();
DQ=1;
date>>=1;
Delay1us();
}
}
ucharreadDs18b20()//读数据
{
uchari,date;
DQ=1;
_nop_();
for(i=0;i<8;i++)
{
DQ=0;
Delay10us();
DQ=1;
Delay1us();
Delay1us();
date>>=1;
if(DQ==1)
date=date+0x80;
Delay48us();
}
returndate;
}
voidMatchromDs18b20(uchara)//匹配ROM
{
charj;
writeDs18b20(0x55);//发送匹配ROM命令
if(a==1)
{
for(j=0;j<8;j++)
writeDs18b20(str1[j]);//发送18B20的序列号,先发送低字节
}
if(a==2)
{
for(j=0;j<8;j++)
writeDs18b20(str2[j]);//发送18B20的序列号,先发送低字节
}
}
uintread_temp(ucharz)/*读取温度值并转换*/
{
uchara,b;
rst_Ds18b20();
if(z==1)
MatchromDs18b20
(1);//匹配ROM1
if(z==2)
MatchromDs18b20
(2);//匹配ROM2
writeDs18b20(0x44);//*启动温度转换*/
//delay(1000);
rst_Ds18b20();
if(z==1)
MatchromDs18b20
(1);//匹配ROM1
if(z==2)
MatchromDs18b20
(2);//匹配ROM2
writeDs18b20(0xbe);//*读取温度*/
a=readDs18b20();
b=readDs18b20();
tvalue=((a>>4)|(b<<4));
return(tvalue);
}
voidDAC(ucharw)//转换,将数据写入芯片
{
inta;
CS=0;
for(a=0;a<12;a++)
{
SCLK=1;
_nop_();
_nop_();
if((w&0x80)!
=0)//判断写入数据从第一位开始,看是否有数据输入
DIN=1;//将信号1写入芯片中
else
DIN=0;//将0写入芯片中
_nop_();
_nop_();
SCLK=0;//开启下一个写入数据
w<<=1;
}
CS=1;//关闭芯片
}
voidTimer1Init(void)//
{
AUXR&=0xBF;//定时器时钟12T模式
TMOD&=0x0F;//设置定时器模式
TMOD|=0x10;//设置定时器模式
TL1=0x7A;//设置定时初值
TH1=0xFE;//设置定时初值
TF1=0;//清除TF1标志
TR1=1;//定时器1开始计时
}
/*----------------------------
initializationfunction
----------------------------*/
voidinit()
{
EA=1;//开总中断
ET1=1;//开定时器1中断
PT1=1;//定时器1中断设为高优先级
P1M0=0XFF;
P1M1=0;
P1ASF=0X01;//设置P1.0作为输入
Timer1Init();
}
/*----------------------------
Softwaredelayfunction
----------------------------*/
voidDelay7us()//@30.000MHz
{
unsignedchari;
i=50;
while(--i);
}
/*----------------------------
Softwaredelayfunction
----------------------------*/
voidDelay(BYTEn)
{
WORDx;
while(n--)
{
x=0;
while(++x);
}
}
/*----------------------------
DisableISP/IAP/EEPROMfunction
MakeMCUinasafestate
----------------------------*/
voidIapIdle()
{
IAP_CONTR=0;//CloseIAPfunction
IAP_CMD=0;//Clearcommandtostandby
IAP_TRIG=0;//Cleartriggerregister
IAP_ADDRH=0x80;//Dataptrpointtonon-EEPROMarea
IAP_ADDRL=0;//ClearIAPaddresstopreventmisuse
}
/*----------------------------
ReadonebytefromISP/IAP/EEPROMarea
Input:
addr(ISP/IAP/EEPROMaddress)
Output:
Flashdata
----------------------------*/
BYTEIapReadByte(WORDaddr)
{
BYTEdat;//Databuffer
IAP_CONTR=ENABLE_IAP;//OpenIAPfunction,andsetwaittime
IAP_CMD=CMD_READ;//SetISP/IAP/EEPROMREADcommand
IAP_ADDRL=addr;//SetISP/IAP/EEPROMaddresslow
IAP_ADDRH=addr>>8;//SetISP/IAP/EEPROMaddresshigh
IAP_TRIG=0x5a;//Sendtriggercommand1(0x5a)
IAP_TRIG=0xa5;//Sendtriggercommand2(0xa5)
_nop_();//MCUwillholdhereuntilISP/IAP/EEPROMoperationcomplete
dat=IAP_DATA;//ReadISP/IAP/EEPROMdata
IapIdle();//CloseISP/IAP/EEPROMfunction
returndat;//ReturnFlashdata
}
/*----------------------------
ProgramonebytetoISP/IAP/EEPROMarea
Input:
addr(ISP