串行通讯与红外解码
- 格式:ppt
- 大小:5.25 MB
- 文档页数:43
红外解码方法简述1 引言低速的红外无线传输是一种廉价的无线通讯/控制方案,在家电领域已经广泛使用。
在嵌入式领域,只要工作环境比较优良,数据量小,传输距离较近(5米以内),同样可以采用红外无线传输。
本站的A Tmega16学习板上设计了红外发射管与接收管,配合站长家中闲置的“HITACHI VM101”型电视遥控器,详细分析一下此遥控器的红外编解码原理与单片机解码方法。
2 红外数据序列采集“HITACHI VM101”型电视遥控器结构非常简单,主芯片是M50560-123FP ,外围配有455kHZ 晶体做为主时钟源,一个红外发射管,一个发射管的驱动三极管以及若干阻容器件。
考虑到此芯片为专用芯片,就算找到芯片资料去啃E 文也对以后没有多大帮助,所以站长采用了最直接的方法——软件采集输出电平变化时间间隔。
按照学习板的红外接收管连接方法,当接收到红外数据时,在A Tmega16的INT0脚上电平为高,电平的上升沿变化可以做为数据接收的开始。
普通使用的红外管载波频率为38kHz-40kHz 之间,这样可以先设计一个n 倍于载波频率的定时器计时,在中断触发以后对INT0脚上的高低电平计时,就可以得到一个完整的红外数据序列。
站长首先采用了110kHz 的定时器来采集数据,计时用了一个16位的变量,得到的一个数据序列如下:922 1384 1440 1498 1555 1613 1669 1727 1784 1842 1899 2072 2129 2187 2243 2416 2473 2531 2588 2761 2818 2991 3047 3221 3277 3451 3507 3565 3622 3795 3852 3910 3966 4140 4196 4369 4426 4484 4541 4714 4771 4944 5000 5058 5115 5173 5230 5288 5344 5402 5459 5517 5573 5747 5803 5861 5918 5976 6033 6206 6262 6436 6492 6666 6722 6895 6952 序列一 110kHz 定时采集序列其中相邻两个数的差值即为电平维持时间。
串口通信+红外通信通过串口发送红外遥控器的解码值到PC/***************************************************************** *********** @file main.c* @author xr* @date 2014年3月31日22:30:08* @version V1.2.3* @brief 串口通信+红外通信通过串口发送红外遥控器的解码值到PC* @note 单片机STC89C52RC MCU 晶振 11.0592MHZ*************************************************************** ***********/#include <reg52.h>void ConfigUart();void UartSend(unsigned char dat);void delayms(unsigned int xms);extern bit irflag;extern unsigned char ircode[4];extern void ConfigInfrared();void main(){ConfigUart();ConfigInfrared();while (1){if (irflag) //接收到红外数据{irflag = 0;UartSend(ircode[0]); //发送用户码delayms(100);//延时100msUartSend(ircode[2]); //发送键码}}}/*** @brief 延时xms* @param xms* @retval 无*/void delayms(unsigned int xms){unsigned int x, y;for (x = 0; x < xms; x++)for (y = 0; y < 110; y++);}/*** @brief 配置串口通信* @param 无* @retval 无*/void ConfigUart(){TMOD &= 0x0F;//清零T1控制位TMOD |= 0x20;//T1方式2,八位自动重装模式TH1 = 0xFD; //波特率 = 256-1/2^SMOD*T1溢出率 X=256-11059200/12/32/波特率TL1 = TH1;//波特率9600bpsTR1 = 1;ET1 = 0;//只用T1的计数SCON |= 0x50;//串口方式1 SM0 SM1 SM2 REN TB8 RB8 TI RI 0101 0000/*SM0 = 0;SM1 = 1;//方式1 SM2多机通信位REN = 1;//允许接收数据TI = 0;//发送完成中断标志RI = 0;//接收完成中断标志*/ES = 1;//开串口中断EA = 1;//开总中断}/*** @brief 串口发送一个字节数据到PC* @param 待发送数据* @retval 无*/void UartSend(unsigned char dat){SBUF = dat;//while (!TI);//等待发送完成,在中断模式下不需要等待,否则进不了中断}/*** @brief 串口中断* @param 无* @retval 无*/void Uart_ISP() interrupt 4 //串口中断标号是4{if (TI) //等待发送完成{ //发送完成TI = 0;//清零}}/**************************************************************** * @file infrared.c* @author xr* @date 2014年3月31日20:51:23* @version V1.2.3* @brief 红外通信--红外遥控器NEC协议解码* @note 单片机STC89C52RC MCU 晶振 11.0592MHZ************************************************************** */#include <reg52.h>sbit IRD = P3^3;//红外接收检测端口bit irflag = 0;//接收到数据的标志unsigned char ircode[4];//存放红外遥控器发送的用户码,用户码反码键码键码反码/*** @brief 红外配置* @param 无* @retval 无*/void ConfigInfrared()TH0 = 0;TL0 = 0;//清零T0计数TMOD &= 0xF0;TMOD |= 0x01;//T0方式1TR0 = 0;//在没有红外信号之前先关闭T0ET0 = 0;//只用T0的计数//外部中断1IT1 = 1;//设置外部中断触发方式为下降沿触发EX1 = 1;//开启外部中断1}/*** @brief 获得IRD红外检测引脚的高电平时间(空闲时间)* @param 无* @retval 高电平持续的计数值*/unsigned int getHeighTime(){//在检测外部信号前,必须先将IRDIO口拉高IRD = 1;TH0 = 0;TL0 = 0;//清零T0计数TR0 = 1;//开启T0计数while (IRD) //持续高电平{//超时判断if (TH0 > 0x40) //当IRD持续高电平时间17.7ms,远远大于引导码的9ms,是误码{break;//退出}TR0 = 0;//停止计数return (TH0*256 + TL0);//返回高电平计数值}/*** @brief 获得IRD红外检测引脚的低电平时间(载波时间) * @param 无* @retval 低电平持续的计数值*/unsigned int getLowTime(){IRD = 1;//释放IRD,检测外部信号TH0 = 0;TL0 = 0;//清零T0计数TR0 = 1;//开始计数while (!IRD) //持续低电平{if (TH0 > 0x40) //超过18ms就是误码,错误信号{break;}}TR0 = 0;//停止计数return (TH0*256 + TL0);//返回低电平计数值}/*** @brief 外部中断1服务程序,检测红外信号* @param 无* @retval 无void EXINT_ISP() interrupt 2 //外部中断标号2{unsigned char byte;//接收数据unsigned char i, j;unsigned int time;//时间time = getLowTime();//获得载波时间if (time < 7833 || time > 8755) //引导码载波是9ms,这里规定在8.5ms-9.5ms之间是9ms的载波{//范围之外,误码IE1 = 0;//清零外部中断1中断标志,为下一次再进入中断return;//退出中断}//否则是9ms的载波time = getHeighTime();//空闲时间if (time < 3686 || time > 4608) //引导码的空闲时间4.5ms 这里规定4ms-5ms是4.5ms的空闲{IE1 = 0;//清零中断标志return;//退出中断}//否则是4.5ms的空闲//开始接收用户码和键码等for (i = 0; i < 4; i++){for (j = 0; j < 8; j++){time = getLowTime();//载波if (time < 423 || time > 608) //560us的载波和560us的空闲是0 范围460us-660us{IE1 = 0;return;}//560us载波time = getHeighTime();if (time > 423 && time < 608) //560us空闲{//bit '0'byte >>= 1;//低位在前,移入一位0}else if (time > 1198 && time < 1658) //1.68ms的空闲是1 范围 1300us-1800us{//bit '1'byte >>= 1;//移入一位byte |= 0x80;//移入的一位置1}else{//误码IE1 = 0;return;//退出中断}}ircode = byte;}//接收完成irflag = 1;//退出中断时清零中断标志IE1 = 0;}。
STC89C58RD+ 红外遥控解码与串口程序//以下程序适用于STC89C58RD+ ,使用22.1184MHz晶振,用1838来对红外遥控器解码,1838的1脚接外中断0脚,即单片机P3.2脚//红外遥控器发出的红外信号经过1838处理后输出的是9.5ms低电平(也可能是4.5ms低电平)加4.5ms高电平的前导码,后面8位的地址码,8位的地址反码(也可能是地址码),8位的数据码,8位的数据反码,总共32位码//其中0码由O.56ms低电平和0.56ms高电平组合而成.脉冲宽度为1.12ms;1码由0.56ms低电平和1.69ms高电平组合而成,脉冲宽度为2.25ms#include<reg52.h>#include<stdio.h>#include<string.h>unsigned char count;unsigned int Address_Part,Data_Part;unsigned char date;bit Rev_flag;bit Over_flag;//unsigned int time_data[35];//unsigned char time_count;void init_config()//初始化函数{TMOD=0x21;//设置定时器0为工作方式1,定时器1为方式2--8位自动重装PCON |=0x80;//SMOD=1,要产生115200波特率必须置位REN=1;//启动串行接收数据SM0=0;SM1=1;//SM0,SM1设置串行口为工作方式1,10位异步收发器-->1位起始位,8位数据,1位停止位TI=1;//要使用printf()函数,就需要置位,后期不能置0TL1=0xff;//256-(2*fosc/(384*baud));TH1=0xff;//定时器1的初值,22.1184M晶振TR1=1;//启动T1定时器TH0=0x00;TL0=0x00;//设置定时器0初值IT0=1;//设置外中断0为下降沿触发ET0=1;//开定时器0允许中断//ET1=1;//开定时器1允许中断EX0=1;//开外中断0//TR0=1;ES=1;//开串口中断EA=1;//开总中断Rev_flag=0;Over_flag=0;}void main(){init_config();while(1){if(Over_flag){Over_flag=0;printf("Address_Part:%x,Data_Part:%x\n\r",Address_Part,Data_Part);}if(Rev_flag)//判断串口接受到数据,只是把从串口调试助手发过来的数据发回去,测试收发用而已{ES=0;Rev_flag=0;SBUF=date;//发送数据while(!TI);//发送数据完毕才跳出死循环ES=1;// TI=0;}/* if(time_count==40)//把收到的时间th值传给串口打印出来{time_count=0;printf("time:\n\r");for(;time_count<35;time_count++){printf("%d \n\r",time_data[time_count]);}memset(time_data,0,sizeof(time_data));EX0=1;//开外中断0}*/}}void exter() interrupt 0{unsigned int th;unsigned char tl;bit ds;TR0=0;//关定时器0th=TH0;//提取出高8位tl=TL0;//提取出低8位th<<=8;//左移8位th=th|tl;//算出定时器总共的计数值TH0=0x00;//初始值TL0=0x00;/* time_data[time_count]=th;//这段代码的作用是在不知道th的数值是多少为前导码,为0,为1时,把收到的时间th给提取出来,方便传给串口打印出来time_count++;if(time_count==35){time_count=40;EX0=0;}TR0=1;*//*这段判断前导码和0、1的值是12M晶振下的if(th>950&&th<1225)ds=0;//判断0和1else if(th>2050&&th<2345)ds=1;else if(th>13325&&th<13600)//判断前导码*///这段判断前导码和0、1的值是22.1184M晶振下的if(th>1900&&th<2260)ds=0;//判断0和1else if(th>4000&&th<4300)ds=1;else if(th>24900&&th<25350)//判断前导码{Address_Part=0;Data_Part=0;count=0;Over_flag=0;TR0=1;return;}else{TR0=1;return;}//去除干扰,当接收的是准备进前导码时的下降沿和截止码时,该语句起作用,没有该语句,则只能接收一次count++;if(count<16){Address_Part=Address_Part|ds;Address_Part=Address_Part<<1;TR0=1;}else if(count==16){Address_Part=Address_Part|ds;TR0=1;}else if(count<32){Data_Part=Data_Part|ds;Data_Part=Data_Part<<1;TR0=1;}else if(count==32){Data_Part=Data_Part|ds;Over_flag=1;}//接收完32位,后面应该有连续码,但不需要,所以不作处理}void time0() interrupt 1//要是没有该函数,可能会因为溢出而导致解码不正确{TR0=0;}void ser() interrupt 4{if(RI)//一定要加该判断句,不然串口调试助手那里会一直收到数据{RI=0;date=SBUF;//提取数据Rev_flag=1;}}。
红外解码说明文档作者:ruihuan_vb@时间:2013-12-71、红外遥控的基本原理红外遥控器发出的红外光信号,所以只能产生1 0 信号。
但是,为防止自然光的干扰,同时为了增大红外管的发射功率,正真发出的“1”信号是:38K的载波信号。
(而0 1 信号的区分就在于对发射管的关闭时间)。
红外一体化接收头接收到信号后会对信号进行滤波,所以一体化接收头输出的信号是经过滤波放大后的电平信号,并且对对电平信号进行了反相输出。
2、一般电平编码的结构红外遥控的数据编码是多种多样的,但是一般都会一这这种情况出现:引导码加数据。
引导码由9ms(可能有时候要设置到9.1ms)的低电平和4.5ms的高电平构成。
“0”信号由0.6ms的低电平和0.6ms的高电平组成;“1”信号由0.6的低低电平和1.2ms的高电平组成。
(注:这里说的电平是说的是红外一体化接收头的输出电平)。
红外一体化接收头的输出波形,示波器保存的图片3、红外遥控的电路设计1)发射电路红外遥控的发射电路比较简单,但是要想做的比较好还是有要注意的地方的。
NPN 三极管直接拉红外发射头就可以构成一个红外发射电路了。
但是,要注意的是:驱动红外发射管要加隔离电阻,并且这个隔离电阻不能太大,因这个隔离电阻决定了红外发射的功率。
发射电路的关键就在这里了,这个发射管的隔离电阻的阻值不要超过10欧姆,否则发射距离会非常近的,并且还有注意发射信号的载波的占空比不要设为1/2 最好是1/3 (这个好像是跟一体化接收头的原理有关的,而且将占空白降低方便增大发射功率)。
2)红外接收电路红外接收电路比较简单,一般用一个一体化接收头接到单片机的引脚就可以了。
我们这用过的型号是:HS0038B。
4、如何利用单片机的外设来实现对应的功能红外解码功能:因为红外解码的第一步骤是对电平长度的检测,因而最好是利用单片机的捕获功能来检测电平的长度,然后再根据电平长度来判断其意义(建议:不要检测双边沿,最好是检测一个周期的电平,例如下降沿的时间间隔)。
串口通信发送红外遥控器解码值本程序所用的原理图下载: 点这里,单片机芯片使用的stc89c52;找到数码管的原理图即可.这是一整个单片机开发板的电路图其他的忽略./*************************************************** ********************************************** * @filemain.c* @authorxr* @date2014年3月31日10:26:47* @versionV1.2.3* @brief红外通信 NEC协议进行红外遥控器解码显示用户码和键码到数码管上* @note单片机STC89C52RC MCU 晶振 11.0592MHZ************************************************* ********************************************** */#include ;//红外输出数据口sbit IRD = P3^3;//外部中断引脚bit irflag = 0;unsigned char ircode[4];//接收解码得到的数据unsigned char code LedTable[] = {0xC0, //"0"0xF9, //"1"0xA4, //"2"0xB0, //"3"0x99, //"4" 0x92, //"5" 0x82, //"6" 0xF8, //"7" 0x80, //"8" 0x90, //"9" 0x88, //"A" 0x83, //"B" 0xC6, //"C" 0xA1, //"D" 0x86, //"E"0x8E//"F"};unsigned char LedBuff[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//数码管显示缓冲区unsigned char thr0, tlr0;void ConfigTimer0(unsigned int xms);void ConfigTimer1();void main(){ConfigTimer0(1); //定时1msConfigTimer1();while (1){if (irflag)//接收到红外数据,则刷新显示{LedBuff[5] = LedTable[ircode[0] >;>; 4];//取用户码的高4位字节LedBuff[4] = LedTable[ircode[0] & 0x0F];//取用户码的低四位字节LedBuff[1] = LedTable[ircode[2] >;>; 4];//取键码的高四位LedBuff[0] = LedTable[ircode[2] & 0x0F];//取键码的低四位}}}/*** @brief定时器T0配置* @param定时时间xms* @retval无*/void ConfigTimer0(unsigned int xms){unsigned int tmp;tmp = 65536-xms*11059200/12/1000;thr0 = (unsigned char)(tmp >;>; 8);tlr0 = (unsigned char)(tmp & 0x00FF);TMOD &= 0xF0;TMOD |= 0x01;//T0方式1TH0 = thr0;TL0 = tlr0;TR0 = 1;EA = 1;ET0 = 1;//设置定时器T0的中断优先级高于外部中断的优先级//IP中断优先级寄存器 PT2 PS PT1 PX1 PT0 PX0PT0 = 1;//提高T0的优先级,优先进行数码管刷新,消除数码管显示抖动}/*** @brief数码管刷新* @param无* @retval无*/void refresh(){static unsigned char j = 0;P0 = 0xFF;//消隐P1 = (0x08 | j);//000 0 1 ADDR2 ADDR1 ADDR0P0 = LedBuff[j++];if (j >;= 6)j = 0;}/*** @briefT0中断服务* @param无* @retval无*/void Timer0_ISP() interrupt 1{TH0 = thr0;TL0 = tlr0;refresh();//数码管刷新}/**********************红外解码*************************************/ /*** @brief配置定时器T1,开启外部中断,T1用来计数* @param无* @retval无*/void ConfigTimer1(){TMOD &= 0x0F;//清零T1控制位TMOD |= 0x10;//T1方式1TH1 = 0;TL1 = 0;//初始化计数值为0TR1 = 0;//在没有进入外部中断前,先关闭定时器T1 ET1 = 0;//关闭T1中断,只用来计数IT1 = 1;//设置外部中断为下降沿触发中断EX1 = 1;//开启外部中断}/*** @brief获得高电平时间(空闲时间)* @param无* @retval无*/unsigned int getHeighTime(){//在检测外部电平之前,先将红外检测引脚拉高释放IRD = 1;TH1 = 0;TL1 = 0;//重新清零TR1 = 1;//打开定时器T1开始计数while (IRD){//进行超时判断,若高电平时间大于9ms,即引导码时间,则直接退出if (TH1 >; 0x40) //(0x40*256) * (12/11059200) s = 17.7ms{break;//退出}}TR1 = 0;//关闭计数return (TH1*256 + TL1);//返回IRD引脚持续的高电平时T1计数值}/*** @brief获取低电平时间(载波)* @param无* @retval无*/unsigned int getLowTime(){//释放IRD检测引脚IRD = 1;TH1 = 0;TL1 = 0;//清零T1计数值TR1 = 1;//启动T1计数while (!IRD){if (TH1 >; 0x40) //TL1计数满则进位TH1,时间:TH1*256*12/11059200 s = 17.7ms{ //时间大于了NEC协议的引导码载波时间9ms,进行强制退出,避免假等待break;}}TR1 = 0;//关闭计数return (TH1*256 + TL1);//返回低电平持续的计数值每计数一次是一个机器周期的时间即1.08us}/*** @brief外部中断服务,检测红外信号* @param无* @retval无*/void ExINT_ISP() interrupt 2 //外部中断1中断标号为2{unsigned int time;//时间unsigned char i, j;unsigned char byte = 0;time = getLowTime();//获取低电平T1计数值,即引导码的9ms载波if ((time ; 8755)) //范围8.5-9.5msX=0.0085/(12/11059200){//错误引导码IE1 = 0;//清零外部中断标志return;//退出中断}//符合引导码的9mstime = getHeighTime();//获取高电平时间if ((time ; 4608)) //范围4ms-5ms{//不是4.5ms的空闲IE1 = 0;//清零外部中断return;//退出中断}//是正确的引导码for (i = 0; i ; 645)) //范围350us-700us{IE1 = 0;//清零外部中断标志return;//退出中断time = getHeighTime();//空闲时间if ((time >; 322) && (time ;>;= 1;//地位在前,先接收低位}else if ((time >; 1198) && (time ;>;= 1;byte |= 0x80;//高位置1}else{//无效码IE1 = 0;return;}}ircode = byte;//接收数据}//全部接收完毕irflag = 1;IE1 = 0;//清零外部中断标志位}。
AVR单片机捕获中断实现红外线解码摘要:AVR单片机是Atmel公司推出的一个单片机系列。
由于该系列单片机的集成度高,因此,其软/硬件设计都变得更加简洁。
文中介绍通过AVR单片机的捕获中断来实现红外线通讯解码的一种方法。
关键词:AVR;红外线解码;输入捕获中断1 红外线编码红外线编码是数据传输和家用电器遥控常用的一种通讯方法,其实质是一种脉宽调制的串行通讯。
家电遥控中常用的红外线编码电路有μPD6121G型HT622型和7461型等。
本文就以这些电路的编码格式来讨论怎样使用AVR单片机的捕获中断功能来实现其解码。
红外线通讯的发送部分主要是把待发送的数据转换成一定格式的脉冲,然后驱动红外发光管向外发送数据。
接收部分则是完成红外线的接收、放大、解调,还原成同步发射格式相同(但高、低电位刚好相反的脉冲信号。
这些工作通常由一体化的接收头来完成,主要输出TTL兼容电平。
最后通过解码把脉冲信号转换成数据,从而实现数据的传输。
图1是一个红外线遥控制系统的原理框图。
图2示出该红外遥控系统的编码格式。
图中,μPD6121G遥控器的二进制“0”由0.56ms的间隔加0.565ms的脉冲表示;二进制“1”由0.56ms的间隔加1.685ms的脉冲表示。
每次发送的32二进制码可分成两部分,其中前16位是遥控器辨识码,主要用于区别不同遥控器,后16位是操作码。
这两个部分的后8位都是前8位的反码,用作数据校验。
每帧数据以9ms的间隔加4.5ms的脉冲作为数据头。
2 AVR单片机AVR系列单片机是Atmel公司于1997年推出的一款全新配置的、采用精简指令(RISC-Redued Instruction Set CPU)结构的新型8位单片机。
由于AVR 单片机采用单指令操作,所以,在相同时钟的情况下,AVR的指令周期只有8051型机的1/2,而且AVR采用两极指令流水线,可以在执行当前指令的同时获取下一条指令,所以具备1MI/s/MHz的调整处理能力。
智能红外遥控开关原理及设计发布时间:2010-10-17 发布人:21世纪电子网0 引言红外遥控是当前使用最为广泛的通信和控制手段之一,由于其结构简单、体积小、功耗低、抗干扰能力强、可靠性高及成本低等优点而广泛应用于家电产品、工业控制和智能仪器系统中。
然而市场上的绝大部分遥控器都是针对各自特定的遥控对象设计的,不能直接应用于通用的智能仪器研发及其更一般的控制场合。
通常情况下,一般家庭所使用的电视机、空调、VCD/DVD等家用电器都使用了红外遥控器,而这些红外遥控器都是针对各自产品所设计的,从而导致了一般家庭中拥有数个遥控器,那么,能否将这些遥控器的功能进行复用,进而减少遥控器的数量,使遥控器的功能更加强大,就显得十分必要了。
电源开关广泛应用于家庭、工厂、仓库、以及办公室等场所。
传统的机械式电源开关存在接触电阻大、易磨损、可靠性低以及寿命短等缺点,特别是当家用电器的遥控器繁多的情况下,如果能借助这些遥控器设计开关用于代替传统的机械式电源开关,不仅节约了成本,而且操作方便。
使用电视机等家用电器的遥控器实现开关操作,安装和代换都很方便,可以用它代换家居中非常普及的墙壁开关,从而提高遥控器在家电领域的实用价值。
1 工作原理智能红外遥控开关主要由红外接收、放大整形、微控制器、开关控制以及降压电源等模块组成,其原理框图如图1所示。
智能红外遥控开关的功能是将常见家用电器的遥控器,如电视机、VCD/DVD等,由用户任意指定一个按键作为这个红外遥控开关的控制键。
使用时,用户按下智能红外遥控开关的“学习”按键,然后再对准遥控开关的红外接收头按下遥控器上指定的这个开关控制按键,遥控器发出的红外编码信号经过红外接收头接收后,再经过放大整形,输入到微控制器,微控制器通过内置的E2PROM记住遥控器这个指定按键的编码。
那么,用户下次使用时,当按下遥控器这个指定按键后,其发出的红外编码信号同样经过红外接收头,放大整形后输入到微控制器,由微控制器发出控制信号控制开关控制模块里面继电器的导通与断开,进而控制输出电压的通断。
红外遥控系统原理及单片机红外线遥控是目前使用最广泛的一种通信和遥控手段。
由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
1 红外遥控系统通用红外遥控系统由发射和接收两大部分组成。
应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
图1 红外线遥控系统框图2 遥控发射器及其编码遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。
图2 遥控码的“0”和“1” (注:所有波形为接收端的与发射相反)上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管产生红外线向空间发射,如图3示。
图3 遥控信号编码波形图UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。
该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。
UPD6121G最多额128种不同组合的编码。
单片机的红外串行通信我们知道,在红外通信中(例如电视机、电风扇、DVD等家电的遥控器,其载波频率通常为38KHZ。
也有一些系统使用32KHZ ,36KHz,40KHz,56KHz等载波频率,但是比较少见。
我们可以用T0或T1脚产生38KHZ的波特率,然后把串口 TXD 送出的信号也叠加到上面(调制,这样就形成线外信号的载波传输,调制后再通过红外发光二极管发送出去。
接收则使用 3端红外接收模块。
红外接收模块的载波频率固定为38KHZ ,集成了红外线的接收、放大、解调等功能,解调后的数据直接输入UART的RXD引脚。
通信的波特率设置为2400bps (38KHZ的载波频率不适于更高的波特率。
为了避免发射时造成对本机的干扰,我们采用了半双工的通信方式。
所谓半双工通信,指的是主机与从机可以进行双向通信,但是不能同时进行,在同一时间内,要么是主机发射,从机接收;要么是从机发射,主机接收。
事实上,一般红外线接收模块的接收载波中心频率虽然是 38KHZ ,但其接收频率实际上是非常宽的,从30KHz到60KHz它都可以正确接收和解调。
所以主机和从机使用不同的载波频率以实现全双工通信也是比较困难的,除非使用选频特性比较好的红外线接收电路。
在红外线传输过程中采用的是负逻辑,即有红外线表示逻辑0,无红外线表示逻辑1。
而红外接收模块平时为高电平,接收到红外信号就变为低电平。
如何增加传送距离呢?有两个方法:其中一个方法是采用高灵敏度的红外接收电路,但是其成本比较高,且比较容易受到干扰。
另一个方法是提高发射功率(指峰值功率,不一定需要提高平均功率,这可以通过减小连接到发射器的电阻R来实现,通常可以减小到10Q。
但是需要注意的是,在这种情况下,为了降低功耗和对其他红外设备的干扰,红外线载波的占空比需要降低。
一般选择30%左右的占空比,,也就是DATCLK的高电平时间应为18uS左右,而低电平时间应为8uS左右(38KHZ载波频率广告插播信息广告插播信息维库最新热卖芯片:AD890JP PEB3265HV1.5VNQ830IS61LV12816L-10TEPM5130QC-1A2918SW MC33274AP B58775NMP4370831SM5872BS二.PC红外接收原理1. RS232标准简介现在的PC中,一般已经集成了红外通信端口,但由于其通信协议比较复杂,与单片机接口不便。
详解红外遥控器编码解码原理!红外遥控器原理介绍红外线遥控是目前使用最广泛的一种通信和遥控手段。
由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
红外遥控系统:通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、 LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
红外的简单发射接收原理:在发射端,输入信号经放大后送入红外发射管发射,在接收端,接收管收到红外信号后,由放大器放大处理后还原成信号,这就是红外的简单发射接收原理。
1、红外遥控系统结构红外遥控系统的主要部分为调制、发射和接收,如图1所示:打开今日头条,查看更多精彩图片红外遥控是以调制的方式发射数据,就是把数据和一定频率的载波进行“与”操作,这样既可以提高发射效率又可以降低电源功耗。
调制载波频率一般在30khz到60khz之间,大多数使用的是38kHz,占空比1/3的方波,如图2所示,这是由发射端所使用的455kHz晶振决定的。
在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9kHz≈38kHz。
目前有很多种芯片可以实现红外发射,可以根据选择发出不同种类的编码。
由于发射系统一般用电池供电,这就要求芯片的功耗要很低,芯片大多都设计成可以处于休眠状态,当有按键按下时才工作,这样可以降低功耗芯片所用的晶振应该有足够的耐物理撞击能力,不能选用普通的石英晶体,一般是选用陶瓷共鸣器,陶瓷共鸣器准确性没有石英晶体高,但通常一点误差可以忽略不计。
红外线通过红外发光二极管(LED)发射出去,红外发光二极管(红外发射管)内部构造与普通的发光二极管基本相同,材料和普通发光二极管不同,在红外发射管两端施加一定电压时,它发出的是红外线而不是可见光。
红外遥控器解码研究背景近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
传统的遥控器大多数采用了无线电遥控技术,但是随着科技的进步,红外线遥控技术的成熟,红外也成为了一种被广泛应用的通信和遥控手段。
继彩电、录像机之后,在录音机、音响设备、空调机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
由于红外线抗干扰能力强,且不会对周围的无线电设备产生干扰电波,同时红外发射接收范围窄,安全性较高。
红外遥控虽然被广泛应用,但各产商的遥控器不能相互兼容。
当今市场上的红外线遥控装置一般采用专用的遥控编码及解码集成电路,由于其灵活性较低,应用范围有限。
所以采用单片机进行遥控系统的应用设计,遥控装置将同时具有编程灵活、控制范围广、体积小、功耗低、功能强、成本低、可靠性高等特点,因此采用单片机的红外遥控技术具有广阔的发展前景。
研究目的本设计主要研究并设计一个基于单片机的红外接收系统,并实现对电视遥控器的解码及编码值显示。
控制系统主要是由52系列单片机、电源电路、红外遥控器发射、红外接收电路、LCD显示电路等部分组成,红外接收头接收到的编码信息通过单片机处理,单片机根据不同的遥控器按键信息进行处理并在LCD上相应的显示相应的按键值编码信息以加深对红外编码的理解。
研究意义红外遥控的特点是不影响周边环境、不干扰其它电器设备。
由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控器而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。
信息可以直接通过红外光进行调制传输,例如,信息直接调制红外光的强弱进行传输,也可以用红外线产生一定频率的载波,再用信息对载波进行调制,接收端去掉载波,取到信息。
从信息的可靠传输来说,这就是我们今天看到的大多数红外遥控器所采用的方法。
单片机串行口红外通信的设计红外通信原理红外通信是利用波长为900nm~1000nm的红外波作为信息的载体,发射装置把二进制信号经过高频调制后发送出去,接收装置把接收的红外高频信号进行解调为原来信息的一种通信传输方式。
其中调制方式有脉宽调制(通过改变脉冲宽度调制信号PWM)和脉时调制(通过改变脉冲串之间时间间隔调制信号PPM)两种,本文采用PPM 脉时调制方式。
2 串行口红外通信硬件设计红外发射和红外接收电路主要包括新茂单片机SSU7301、***光电子公司的红外发射管SE303和红外接收管PIC12043,以及驱动三极管8550、电阻和电容,红外通信硬件原理图见图1。
红外发射硬件设计红外发射是利用单片机SSU7301的串行数据发送口TXD(P3.1)控制驱动三极管BG1进行二进制数据“0”和“1”的传输(数据由串行发送缓冲器SBUF中送出),以及利用P3.4口控制驱动三极管BG2进行高频38.4kHz调制(高频驱动信号由定时器/计数器T0的方式2自动重装模式产生),从而可靠地实现了红外发射管D1在传输数据“0”时进行高频红外发射和数据“1”时被截止的发射功能。
状态关系见表1,波形见图2。
红外接收硬件设计红外接收是利用红接收管PIC12034收到高频信号输出低电平确定为数据“0”,而没收到高频信号输出高电平确定为数据“1”的方式经过解调,把数据通过单片机SSU7301的串行数据接收口RXD(P3.0)进行串行方式接收(接收数据存储在串行口缓冲器SBUF 中)。
红外通信软件设计DL/T645-1997《多功能电能表通信》中规定电能表的红外载波频率为38kHz±1kHz;初始速率为1200 bps;通信的字节格式为8位二进制码D0~D7,传输时加上一个起始位(0),一个偶校验位P和一个停止位(1),共11位,传输时先传低位,后传高位,传输序列见图3。
根据以上要求,本设计中红外载波频率采用38.4kHz,波特率为1200bps,串行口采用模式3为9位异步通信方式,加1位起始位和1位结束位,传送一个字节数据为11位。
手把手教你红外遥控解码实验单片机轻松入门教学 ------- 『电子驿站』原创,转载请注明出处!---------------------------------------------------------------------------------------------------------------红外线遥控是目前使用最广泛的一种通信和遥控手段。
由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
【红外遥控系统】通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
图1a图1b【遥控发射器及其编码】遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管产生红外线向空间发射,如图3所示,连发波形如图4所示。
UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。