红外光通信装置设计与总结报告摘 要 随着计算机与通信技术的飞速发展,计算机通信得到广泛应用,硬件技术可谓是日新月异,其总体趋势向着高集成、高稳定性、高速和高性价比方向发展。
而红外无线通信系统装置则是目前应用较为广泛的通信形式。
该红外通信系统通过将音频信号调制在465KHZ 的载波上,然后再经红外发射电路发射出去,在接受指令时通过红外接收管接受红外信号,经选频放大电路和滤波电路完成解调,最后通过功率放大电路经扬声器还原声音。
另一方面,本实验利用PIC18f4520进行信息的采集和处理,利用放大电路跟内置A/D 转换芯片,对温度进行测量并显示在1602上。
一丶方案设计信号的调制方式有三种,即调幅、调频、调相其中调频调制具有比幅度调制调频率高、带宽宽、抗干扰强,同时比调相方式经济等特点。
锁相环技术(PLL )是一种能自动跟踪输入信号相位的闭环自动控制系统。
该技术在频率调制方面应用十分广泛,遍及广播、电视、雷达、导航、计算机及仪表等领域。
锁相环集成电路CD4046( 能跟踪输入信号相位的闭环自动控制系统)是一种低频多功能单片机数字锁相环集成电路,最高工作频率1.3MHz,电源电压3~18V 。
与类似的双极性单片锁相环集成电路相比,功耗仅为其数百分之一,因而它在频率调制与解调、频率合成、电视机彩色副波提取、FM 立体声解码、遥控系统、频率的编码和译码等诸多方面均得到了应用。
集成环路部件以其低成本、性能优良、使用简便而得到了青睐。
本文介绍了集成锁相环cd4046在频率的调制与解调方面的应用。
基于频率调制和锁相环技术的优点,本文在文献【1】的基础上介绍一种应用锁相环和红外技术制作而成,采用频率调制方式,用红外线传送音频信号的调频红外无线耳机。
该耳机具有供电方式多样,传输距离10m 以内,音质较好,红外信号基本不受电磁干扰,性价比高等特点。
二丶 设计框图(1)设计框图思路发射部分 接收部分(2)设计细节框图发射机接收机三丶电路设计调制电路音频信 号预放大电 路 CD4046调制 红外线二极管发射 接受信号并放大CD4046解调 功放电路电路当从9脚输入载波信号Ui时,从4脚可输出受输入信号调制的调频信号Uo,由于调频时VCO有一定的频偏,所以不需要12脚外接电阻,仅用R5和C6确定、VCO的中心频率fo如果对频偏有要求,则根据实际需要选择12脚电阻。
解调电路解调电路(C1与R1作用同调制电路,R3与C2控制fo的频带宽度)从14脚输入调频波信号Ui与VCO输出的信号经PDI获得变化的误差电压,该电压通过低通滤波器滤掉高频成分,继而获得随调制信号变化而变化的信号,经跟随器得到解调信号,从10脚输出Uo,从而实现解调过程接收电路功放电路四·参数计算CD4046调制,解调的中心频率VCO的中心频率fo由图1中的VDD、R1、R2和C1的关系曲线图决定。
当CD4046的供电电压为5V,R2为0时,fo与R1、C1的曲线关系如图2所示。
fmin表示输入信号的最小频率,fmax表示输入信号的最大频率。
当R2为∞时,锁定频率范围2fc由如下公式决定:2fc=(1/π)√2π|fmax-fmin|/(R1C1) 由该式得允许的频率偏移值fc五丶通信原理分析红外线通信,通常又叫红外光通信,是利用红外线传送信息的一种通信方式。
红外线通信所传输的内容是多样的,可以是音频信号,也可以是视频信号。
利用红外线,可以构成无绳电话及无线耳机系统。
红外线的传输距离不远,一般在十米以内,但可以避免频谱占用,信号失真等电气指标较易处理,应用于普通的办公室和家庭等场合应该已经可以满足要求。
六丶程序#include <p18cxxx.h>#include "k18.h"#include "lcd1602.h"#include "ds18b20.h"#include"ds1302.h"/*实验说明:18B20芯片插入K18开发板P4插座,插入时注意方向,18B20芯片上的型号朝外*/void main(void){int tp; /*寄存器定义*/LCD_init();k18_init();LCD_setxy(2,1);LCD_wrstr("TEMP:");LCD_setxy(2,14);LCD_wrchar(USER_CHAR6);/*在LCD屏上显示单个预定义字符:℃*//*K18主板初始化*/while(1){tp=get_temp();/*调用温度转换函数*/if(tp>0x3fff) /*判断是否为负温,若是负温,前面显示负号*/{LCD_setxy(2,7);LCD_wrchar('-');}else{LCD_setxy(2,7);LCD_wrchar('+');/*是正温,前面显示正号*/}tp&=0x3fff;/*屏蔽最高两位符号位*/LCD_setxy(2,13);LCD_wrlval(tp,5,2);}#include <p18cxxx.h>#include <delays.h>#include"k18.h"#include "ds18b20.h"//******************************************************************** **// reset_ds18b20: DS18B20复位//功能----DS18B20复位//入口参数: ----无//出口参数: ----无//******************************************************************** **void reset_ds18b20(void){unsigned int i;DQ_LOW(); /*主机拉总线至低电平*//*=====晶振改变时,修改下句=====*/Delay100TCYx(12);/*保持至少480us*/DQ_HIGH();}//******************************************************************** **// ack_ds18b20: 等待DS18B20应答//功能----等待DS18B20应答//入口参数: ----无//出口参数: ----0: 没有DS18B20器件或主机复位失败// 1: 发现DS18B20器件//******************************************************************** **unsigned char ack_ds18b20(void){unsigned char Value=1;DQ_HIGH(); /*释放总线等电阻拉高总线*/while(DQ==1);while(DQ==0)Value=0;/*接收到应答信号*//*=====晶振改变时,修改下句=====*/Delay10TCYx(5);/*延时20us*/if (Value) return 0;return 1;}//******************************************************************** **//read_ds18b20: 读DS18B20//功能----读DS18B20//入口参数: ----无//出口参数: ----DS18B20内部表示的温度值,双字节,16进制,FC90~0000~07D0//******************************************************************** **unsigned int read_ds18b20(void){int i=0;unsigned int u=0;for (i=0;i<16;i++){DQ_LOW();/*=====晶振改变时,修改下句=====*/Delay10TCYx(2);/*从高拉至低电平,产生读时间隙,2us*/u>>=1;DQ_HIGH();Delay10TCYx(5);/*此句必须要加,否则由于刚设置为输入,信号不稳定,立即读入时会是错误值*/if(DQ) u|=0x8000;/*读入位*//*=====晶振改变时,修改下句=====*/Delay10TCYx(14);//56us}return (u);}//******************************************************************** **//write_ds18b20: 向DS18B20写指令//功能----向DS18B20写指令//入口参数: ----DS18B20操作指令//出口参数: ----无//******************************************************************** **void write_ds18b20(unsigned int ku){int i=0;for (i=0;i<8;i++){DQ_LOW();/*=====晶振改变时,修改下句=====*/Delay10TCYx(0.5);/*从高拉至低电平,产生写时间隙,2us*/DQ =ku&0x01;/*最低位移出*//*=====晶振改变时,修改下句=====*/Delay10TCYx(15);/*60us,调试时发现不能大于65us,否则正常工作*/DQ_HIGH(); /*释放总线*/Delay10TCYx(0.5);/*2us*/ku>>=1;}}//******************************************************************** **//get_temp: 读DS18B20温度//功能----读DS18B20温度//入口参数: ----无//出口参数: ----实际温度的100倍,若为负温,高两位置1;其它不变。
//******************************************************************** **unsigned int get_temp(void){int i;unsigned int tp,flag;flag=1;reset_ds18b20();//复位ack_ds18b20();//从机应答write_ds18b20(SkipROM);//忽略ROM匹配write_ds18b20(B20Convert);//发送温度转化命令/*-----------------------------------*//*中间没有进行时间的延时,因此下面这段代码得到的温度数据并不是本次转换的结果,而是上次转换的结果*//*在主次序中应该进行两次测量之间的延时*/reset_ds18b20();//复位ack_ds18b20();//从机应答write_ds18b20(SkipROM);//忽略ROM匹配write_ds18b20(B20ReadScr);//发送读温度命令Delay10TCYx(37.5);/*150us*/tp=read_ds18b20();/*读出温度*//*-----------------------------------*/if(tp>0x0fff) /*判断是否为负温,若是负温,取反加一,乘6.25*/{tp=~tp;tp++;tp=(unsigned int)(tp*6.25);tp|=0xC000;}elsetp=(unsigned int)(tp*6.25);/*是正温*/return(tp);}七·总电路图发射部分接收部分。