2013电子设计大赛F题-红外通信

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2013年全国大学生电子设计竞赛红外光通信装置(F题)
2013年9月7日
摘要
设计红外通信收发系统,该系统由信号产生模块、红外光发送模块和红外光接收模块三部分构成,实现对信号的产生、发送、接收以及实现对信号的功率放大。

掌握系统的原理,用Altium designer软件绘制原理图并生成PCB 板,然后实际操作搭建电路板。

系统主要由信号产生电路,红外光发射系统,红外光接收系统三个模块构成,由音乐芯片构成的信号产生电路发出电信号,通过发送系统转化为光信号发送,通过接收系统接受光信号并将其转化为电信号,再通过喇叭将其重新转化为语音信号,实现红外光通信的全过程。

首先主要用LM386芯片构成音乐产生电路,发出电信号,由于发出的信号比较微弱,所以需要再经过一个分压式共射电路适当放大信号,并通过LED红外发送管转化为光信号发送。

?信号经接收管接收后,通过运放电路得到较高的输出功率,驱动喇叭发出音乐芯片的音乐。

利用放大器LM386、AD623、AD8608可以得到200的增益,驱动喇叭得到所需功率。

Abstract
Design of infrared communication transceiver system, the system module, the infrared light generated by the signal of sending module and infrared receiving module, realize the signal producing, sending, receiving, and realize the signal of power amplifier. The principle of control system, with Altium designer software map principle and generate the PCB, and then practical building circuit boards. System is mainly composed of signal generation circuit, infrared launch system, the infrared receiving system three modules, which composed the music chip issue electrical signal circuit, by sending system is converted into optical signals to send, receive light signals by receiving system and convert it into electrical signals, then convert it to speech signal over the loudspeaker, realize the whole process of infrared communication. First mainly with LM386 circuit chip music, send electrical signals, because the signals are faint, so need to pass a partial pressure type radio appropriate amplified signals, and through the LED infrared transmitting tube into the light signal transmission. Signal after receiving tube, high output power is obtained by op-amp circuit, drive the horn music chip music. Using amplifier LM386, AD623, AD8608 can get the gain of 200, and drive the horn to get the required power.
目录
1系统方案 (4)
1.1 发射管的论证与选择 (4)
1.2 输入端运放的论证与选择 (4)
1.3 信号传输的论证与选择 (4)
1.4 功率放大器的论证与选择 (6)
1.5 温度信号的获取与传输 (6)
1.6 显示模块 (6)
2系统理论分析与计算 (6)
2.1 语音信号的放大与接受 (6)
2.2 温度信号的接受 (6)
2.3 传输距离的测试 (6)
3电路与程序设计 (6)
3.1电路的设计 (6)
(6)
(7)
(7)
(8)
(8)
(8)
3.2程序的设计 (9)
(9)
(9)
(10)
4测试方案与测试结果 (10)
4.1测试方案 (10)
4.2 测试条件与仪器 (10)
4.3 测试结果及分析 (10)
5总结 (11)
附录1:电路原理图 (12)
附录2:源程序 (13)
红外光通信装置(F题)
1、系统方案论证:
总体系统由信号产生电路、红外光发射系统、红外光接收系统三个模块构成,由音乐芯片构成的信号产生电路发出电信号,通过发送系统转化为光信号发送,通过接收系统接收光信号并将其转化为电信号,再通过喇叭将其重新转化为语音信号,实现红外光通信的全过程。

1.1发射管的选择
我们有两种选择:
(1)普通红外发射管:普通红外发射管具有价格低,功耗小的优点,但传输距离较近,只能达到几十厘米。

普通红外发射管的改进:
①磨头:经过我们的大量实验发现,普通红外发射管的顶端具有聚光的功能,接收端不易对正,影响调试,把聚光头磨平,使接收管容易接收;
②发射管串联:我们实验了2个发射管串联的方法,可扩大接收范围,增加传输距离。

(2)大功率发射管:大功率管的性价比很高,具有传输距离远的特点。

实测传
输3.4KHz正弦波距离能够达到2m,幅值可达几百毫伏。

综上所述,我们决定选用大功率发射管。

1.2.输入端运放的选择方面,我们有两种选择:
(1)LM124:可以双电源供电(±15V)或单电源供电,带宽为1MHz,理论上满足声音信号的放大要求。

(2)AD623:其为仪表放大器,单电源供电,轨到轨输出,带宽为800KHz,且其自带参考电压,放大倍数方便调节。

考虑中继装置要求为5V供电,所以整个系统均使用5V供电,因此确定使用AD623作为放大电路。

1.3.信号传输方法的选择
我们有两种方案:
方案1:语音信号输入后,经运放放大,到A/D转换器转换为数字信号,接驱动电路将信号发出;接收端接收数字信号,进入单片机并控制D/A还原为语言信号,最后通过功放输出。

原理框图如图1所示。

流程图:
图1 方案一原理框图
本方案存在的缺点:
使用单片机、A/D、D/A等器件,控制复杂;数据通过标准异步串行协议传输,若声音信号的频率为3.4KHz,按最小2倍采样率,采用异步串行传输的最小频率为68KHz,实测传输频率的增加会使信号迅速衰减,难以达到传输的距离。

方案2:直接传输模拟信号。

语音信号经过放大后驱动红外发光管发射模拟信号,接收端接收信号并经过功放驱动喇叭。

原理框图如图2所示。

流程图:
图2 方案二原理框图
红外发射管可工作在线性工作区或非线性工作区,本方案选择直接传输模拟信号,因此必须工作在红外发光二极管的线性区域,具体如图3所示。

图3 红外发光二极管的线性工作区
通过上述分析,本方案原理简单,使用器件少、成本低、且实现容易,因此选择方案2。

1.4功率放大器的选择
对于功率放大器我们选择了LM386,因为它是专为低损耗电源所设计的功率放大器集成电路无动作时仅消耗4mA电流,且失真低,我们用它来驱动喇叭工作。

1.5温度信号的获取及传输:
温度传感器采用目前使用最多的的DS18B20温度传感器,该传感器具有精度高,功耗小,采用STC89C52单片机采集温度,将16位温度信号转换成10HZ的脉冲信号传输时采将其与20KHZ的高频信号进行调制加载到语音信号上一起传输。

1.6显示模块:
本作品采用OLED屏幕进行显示
2、理论计算与分析
2.1语音信号的放大及接收
经实测,语音信号的幅值为-200~+200mv,根据输入信号的具体幅值,我们选择10~20倍的放大,这样接收端才能够有效接收信号。

由于AD623的驱动电流比较小,无法驱动发射管,所以先经过AD623做了一级电压跟随,再经过运放AD8608放大,以保证发射管能够有效发射。

2.2温度信号的接收
温度信号为10Hz的低频信号,语音信号频率范围300Hz~3.4KHz,为了将温度信号发送过去并且和语音信号分离开,先将温度信号与20KHz的脉冲波进行调制,再用与门电路将其与语音信号混合,一起传到发射端。

2.3传输距离的测试
方案一:采用单个普通红外发射管传输,实验时很难达到对齐,最好测试距离30cm.
方案二:将一个普通二极管聚光头磨平,降低了对正的要求,但传输距离下降到20cm.;
方案三:一个大功率红外发射管,传输距离达到3m,波形无明显失真。

3、电路与程序设计
3.1电路设计:
图4 发射电路图设计
3.1.2接收电路设计
图5 接收电路设计
图6 小灯指示电路设计图
单阈值电压比较器:Vs>0,Vo=-Vom;Vs<0,Vo=Vom。

下面是LM386的原理图:
R1=0放大倍数为200倍
图7 LM386原理图
3.1.5中继节点电路设计
图8 中继节点电路设计图
3.1.6 5V稳压电路设计图
图9 5V稳压电路设计图
3.2程序的设计
测量距离使用STC89C52作为主控简单,易实现;超声波模块使用HC-SR04探测距离范围:4毫米~4米,误差4%,足够实现本题目中的测量要求。

3.2.2程序流程图
3.2.3程序代码:附录二
4、测试方案与测试结果
4.1 测试方案
给发送端输入加峰峰值为100mV,频率为3.4kHz的正弦波,测试其输出端的放大倍数及偏置电压(也即确定发光二极管线性区的基准点)。

测试接收端的输入,观察示波器的波形是否有明显失真,如有失真,调整发射端的偏置电压及放大倍数至波形正常;测试接收端输出的正弦波的波形是否正常。

发送模块和接收模块距离保持2m,给发送端接入正弦波信号,给发送端、接收端加电,测试接收端输出正弦波的幅值及失真情况。

发送模块和接收模块距离保持1m,给发送端接入语言信号(MP3音乐),给发送端、接收端加电,听扬声器音乐是否正常;逐渐增加传输距离至2m,听扬声器音乐是否正常。

4.1.5中继装置测试
发送模块和中继模块距离保持0.5m,中继改变90度后与接收端保持0.5m,输入音频信号,给发射端、中继节点、接收端供电,听扬声器音乐是否正常;逐渐增加中继节点与接收端距离至两米,听扬声器音乐是否正常;逐渐增加发射端与中继节点距离至2m,听扬声器音乐是否正常。

4.2所用元器件与测试元件清单
电路元器件测试仪器
集成运算放大器LM386 AD623
AD8606
发光管、接收管
可变电阻
电阻电容若干
大功率管
二极管若干直流稳压电源函数发生器万用表
示波器
4.3测试结果及分析
4.3.2 输入340-3.4kHz的信号
结果:2m之内无明显失真
4.3.3 输入语音信号改为800Hz单音信号时:
发射语音信号频率(Hz)接受装置的输出电压
800 2V
4.3.4 射端输入信号的幅度至0V,此时接收装置输出端噪声电压为 25mv 。

4.3.5 收装置不能接收发射端信号时有灯闪烁。

4.3.6 红外光通信中继转发节点,可以改变通信方向90°并且延长通信距离2 m;
最小电流为20m A。

4.3.7 测距我们采用超声波模块和STC89C52测距
5、总结
通过这次实验,实现了一个简单的红外通信的发送和接收装置。

实现传输距离为:2m内无明显失真
当输入频率为800Hz时,电压为:2v
噪声电压:20mV
当方向改变90°时,通信距离为:2m内无明显失真
中继节点电流20mA
超声波测距
附录1:电路原理图
1.1发射电路:
1.2接收电路:
1.3中继转发节点
附录2:源程序
超声波测距源程序:
#include <AT89x51.H>
#include <intrins.h>
#define RX P1_1
#define TX P1_0
#define LCM_RS P2_0
#define LCM_RW P2_1
#define LCM_E P2_2
#define LCM_Data P0
#define Busy 0x80
void LCMInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
void Delay5Ms(void);
void Delay400Ms(void);
void Decode(unsigned char ScanCode);
void WriteDataLCM(unsigned char WDLCM);
void WriteCommandLCM(unsigned char WCLCM,BuysC);
unsigned char ReadDataLCM(void);
unsigned char ReadStatusLCM(void);
unsigned char code Cls[] = {" "};
unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'}; static unsigned char DisNum = 0;
unsigned int time=0;
unsigned long S=0;
bit flag =0;
unsigned char disbuff[4] ={ 0,0,0,0,};
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM();
LCM_Data = WDLCM;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
void WriteCommandLCM(unsigned char WCLCM,BuysC)
{
if (BuysC) ReadStatusLCM();
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
unsigned char ReadDataLCM(void)
{
LCM_RS = 1;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
return(LCM_Data);
}
unsigned char ReadStatusLCM(void)
{
LCM_Data = 0xFF;
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
while (LCM_Data & Busy);
return(LCM_Data);
}
void LCMInit(void)
{
LCM_Data = 0;
WriteCommandLCM(0x38,0);
Delay5Ms();
WriteCommandLCM(0x38,1);
WriteCommandLCM(0x08,1);
WriteCommandLCM(0x01,1);
WriteCommandLCM(0x06,1);
WriteCommandLCM(0x0C,1);
}
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) {
Y &= 0x1;
X &= 0xF;
if (Y) X |= 0x40;
X |= 0x80;
WriteCommandLCM(X, 1);
WriteDataLCM(DData);
}
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength;
ListLength = 0;
Y &= 0x1;
X &= 0xF;
while (DData[ListLength]>0x19)
{
if (X <= 0xF)
{
DisplayOneChar(X, Y, DData[ListLength]);
ListLength++;
X++;
}
}
}
void Delay5Ms(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}
void Delay400Ms(void)
{
unsigned char TempCycA = 10;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
*/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.87)/100;
if((S>=700)||flag==1)
{
flag=0;
DisplayOneChar(0, 1, ASCII[11]);
DisplayOneChar(1, 1, ASCII[10]);
DisplayOneChar(2, 1, ASCII[11]);
DisplayOneChar(3, 1, ASCII[11]);
DisplayOneChar(4, 1, ASCII[12]);
}
else
{
disbuff[0]=S%1000/100;
disbuff[1]=S%1000%100/10;
disbuff[2]=S%1000%10 %10;
DisplayOneChar(0, 1, ASCII[disbuff[0]]);
DisplayOneChar(1, 1, ASCII[10]);
DisplayOneChar(2, 1, ASCII[disbuff[1]]);
DisplayOneChar(3, 1, ASCII[disbuff[2]]);
DisplayOneChar(4, 1, ASCII[12]);
}
}
/********************************************************/ void zd0() interrupt 1
{
flag=1;
}
/********************************************************/ void StartModule()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
/********************************************************/ void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/*********************************************************/ void main(void)
{
unsigned char TempCyc;
Delay400Ms();
LCMInit();
DisplayListChar(0, 0, yz);
DisplayListChar(0, 1, tel);
ReadDataLCM();
for (TempCyc=0; TempCyc<10; TempCyc++)
Delay400Ms();
DisplayListChar(0, 1, Cls);
while(1)
{
TMOD=0x01;
TH0=0;
TL0=0;
ET0=1;
EA=1;
while(1)
{
StartModule();
while(!RX);
TR0=1;
while(RX);
TR0=0;
Conut();
delayms(100);
}
}
}。

相关文档
最新文档