当前位置:文档之家› 红外遥控器的基本原理

红外遥控器的基本原理

红外遥控器的基本原理•红外线的特点人的眼睛能看到的可见光,若按波长排列,依次(从长到短)为红、橙、黄、绿、青、蓝、紫,红光的波长范围为0.62μm~0.7μm,比红光波长还长的光叫红外线。

红外线遥控器就是利用波长0.76μm~1.5μm 之间的近红外线来传送控制信号的。

红外线的特点是不干扰其他电器设备工作,也不会影响周边环境。

电路调试简单,若对发射信号进行编码,可实现多路红外遥控功能。

红外线发射和接收人们见到的红外遥控系统分为发射和接收两部分。

发射部分的发射元件为红外发光二极管,它发出的是红外线而不是可见光。

常用的红外发光二极管发出的红外线波长为 940nm 左右,外形与普通φ5mm 发光二极管相同,只是颜色不同。

一般有透明、黑色和深蓝等三种。

判断红外发光二极管的好坏与判断普通二极管一样的方法。

单只红外发光二极管的发射功率约100mW。

红外发光二极管的发光效率需用专用仪器测定,而业余条件下,只能凭经验用拉距法进行粗略判定。

接收电路的红外接收管是一种光敏二极管,使用时要给红外接收二极管加反向偏压,它才能正常工作而获得高的灵敏度。

红外接收二极管一般有圆形和方形两种。

由于红外发光二极管的发射功率较小,红外接收二极管收到的信号较弱,所以接收端就要增加高增益放大电路。

然而现在不论是业余制作或正式的产品,大都采用成品的一体化接收头。

红外线一体化接收头是集红外接收、放大、滤波和比较器输出等的模块,性能稳定、可靠。

所以,有了一体化接收头,人们不再制作接收放大电路,这样红外接收电路不仅简单而且可靠性大大提高。

红外遥控器的协议•鉴于家用电器的品种多样化和用户的使用特点,生产厂家对红外遥控器进行了严格的规范编码,这些编码各不相同,从而形成不同的编码方式,统一称为红外遥控器编码传输协议。

了解这些编码协议的原理,不仅对学习和应用红外遥控器是必备的知识,同时也对学习射频(一般大于300MHz)无线遥控器的工作原理有很大的帮助。

到目前为止,笔者从外刊收集到的红外遥控协议已多达十种,如: RC5、SIRCS、 S ON y、 RECS80、Denon、NEC、Motorola、Japanese、SAMSWNG 和 Daewoo 等。

我国家用电器的红外遥控器的生产厂家,其编码方式多数是按上述的各种协议进行编码的,而用得较多的有 NEC协议。

红外遥控器的结构特征•红外遥控发射器由键盘矩阵、遥控专用集成电路、激励器和红外发光二极管组成。

遥控专用集成电路(采用 AT89S52 单片机)是发射系统的核心部分,其内部由振荡电路、定时电路、扫描信号发生器、键输入编码器、指令译码器、用户码转换器、数码调制电路及缓冲放大器等组成。

它能产生键位扫描脉冲信号,并能译出按键的键码,再经遥控指令编码器得到某键位的遥控指令(遥控编码脉冲),由 38KHZ 的载波进行脉冲幅度调制,载有遥控指令的调制信号激励红外二极管发出红外遥控信号。

在红外接收器中,光电转换器件(一般是光电二极管或光电三极管,我们这里用的是 PIN 光电二极管)将接收到的红外光指令信号转换成相应的电信号。

此时的信号非常微弱而且干扰特别大,为了实现对信号准确的检测和转换,除了高性能的红外光电转换器件,还应合理地选择并设计性能良好的电路形式。

最常用的光电转换器件是光电二极管,当光电二极管 PN 结的光敏面受到光照射后,PN 结的半导体材料吸收光能,并将光能转换为电能。

当光电二极管上加有反向电压时,二极管中的反向电流将随入射光照强度的变化而变化,光的辐照强度越大,其反向电流越大。

也就是说,光电二级管的反向电流随入射的光脉冲作同频率的变化。

红外遥控器的应用•红外遥控器由于受遥控距离、角度等影响,使用效果不是很好,如采用调频或调幅发射接收编码,则可提高遥控距离,并且没有角度影响。

红外遥控发射和接收模块可以用在室内红外遥控中,它不影响周边环境、不干扰其它电器设备。

由于其无法穿透墙壁,所以不同房间的家用电器可使用通用遥控器而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。

现在红外遥控在家用电器、室内近距离遥控中得到了广泛的应用。

另外模块还可以用在其他红外遥控系统中,应用前景十分广阔。

51单片机设计的红外线遥控器电路图及工作原理你家里是否有一个电视机遥控器或者空调机遥控器呢?你是否也想让它遥控其他的电器甚至让它遥控您的电脑呢?那好,跟我一起做这个“红外遥控解码器”。

该小制作所需要的元件很少:单片机TA89C2051一只,RS232接口电平与TTL 电平转换心片MAX232CPE 一只,红外接收管一只,晶振11.0592MHz,电解电容10uF4只,10uF一只,电阻1K1个,300欧姆左右1个,瓷片电容30P2个。

发光二极管8个。

价钱不足20元。

电路图及原理:主控制单元是单片机AT89C2051,中断口INT0跟红外接受管U1相连,接收红外信号的脉冲,8个发光二极管作为显示解码输出(也可以用来扩展接其他控制电路),U3是跟电脑串行口RS232相连时的电平转换心片,9、10脚分别与单片机的1、2脚相连,(1脚为串行接收,2脚为串行发送),MAX232CPE的7、8脚分别接电脑串行口的2(接收)脚、3(发送脚)。

晶振采用11.0592MHz,这样才能使得通讯的波特率达到9600b/s,电脑一般默认值是9600b/s、8位数据位、1位停止位、无校验位。

电路就这么简单了,现在分析具体的编程过程吧。

如图所示,panasonic遥控器的波形是这样的(经过反复测试的结果)。

开始位是以3.6ms低电平然后是3.6ms高电平,然后数据表示形式是0.9ms低电平0.9ms高电平周期为1.8ms表示“0”, 0.9ms低电平 2.4ms高电平周期为3.3ms表示“1”,编写程序时,以大于3.4ms小于3.8ms高电平为起始位,以大于2.2ms小于2.7ms高电平表示“1”,大于0.84ms小于1.11ms高电平表示“0”。

因此,我们主要用单片机测量高电平的长短来确定是“1”还是“0”即可。

定时器0的工作方式设置为方式1:mov tmod,#09h,这样设置定时器0即是把GATE置1,16位计数器,最大计数值为2的16次方个机器周期,此方式由外中断INT0控制,即INT0为高时才允许计数器计数。

比如:jnb p3.2,$jb p3.2,$clr tr0这3条指令就可以测量一个高电平,接下来读取计数值TH0,TL0就可以分辨是起始位还是“1”或“0”。

在确定码表之前,您可以使用P0口的8个发光二极管来显示编码,16位编码分两次显示:mov p0,keydataacall delay_1s ;//1ms延时子程序mov p0,keydata+1ljmp main根据P0相继的两次显示的编码,记录每个按键的编码,形成编码表,即遥控器编码的解码完毕。

码表确定之后,以后接收到遥控器的编码之后,就与码表比较,找到匹配的码项,并把该码项对应的顺序号输出到P0口,同时也把顺序号向串行口输出到电脑,电脑接收该数据后由串口软件决定如何处理。

程序不长,下面是完整的程序和注释:(先看流程图)keydata equ 30h ;//该地址和31H地址用来存放遥控器按键编码。

org 00hmain:mov keydata,#0 ;// 清零mov tmod ,#09h ;//设置定时0方式1,GATE=1mov r7,#0 ;//计数器,用来计数是否满8位mov r6,#0 ;//计数器,用来计数是否满2字节(解16位编码) jb p3.2,$ ;//是否为低电平again: ;//如果为低,继续往下面执行mov tl0,#0 ;//清零TL0mov th0,#0 ;//清零TH0setb tr0 ;//开启定时器0jnb p3.2,$ ;//等待高电平到来jb p3.2,$ ;//高电平到来,此时开始计数clr tr0 ;//高电平结束,停止计数mov a,th0 ;//读取th0 值,TL0忽略不计clr c ;//subb a,#12 ;//jc again ;//th0<12则转,即小于3.4ms,你可以算一下这个时间 mov a,#14 ;//clr c ;//subb a,th0 ;//和14比较,如果TH0>14则大于3.8msjc again ;//大于3.8ms,从新再检测nextbit: ;//起始位找到了,然后下一位mov tl0,#0 ;//mov th0,#0 ;//setb tr0 ;//启动定时器jnb p3.2,$ ;//等待高电平jb p3.2,$ ;//高电平到来,此时开始计数clr tr0 ;//高电平结束,停止计数mov a,th0 ;//读取计数值,TL0忽略不计clr c ;//subb a,#8 ;//th0和8比较jc next ;;;;//若 <2.2ms则转,再判断是否大于0.84ms mov a,#10 ;//再跟10比较clr c ;//subb a,th0 ;//jc again ;;;;;;;//若 >2.7ms,则放弃,从新检测mov a,keydata ;// 符合大于2.2ms 小于2.7ms,即为“1” setb c ;//C = 1rrc a ;//把1移位进Amov keydata,a ;//保存inc r7 ;//计数器加1cjne r7,#8,nextbit ;//是否满8位inc r6 ;//计数加1cjne r6,#2,last8 ;//是否满两字节sjmp seach ;//不满两字节,再新采集last8: ;//满1字节,再接下来第二字节mov keydata+1,a ;//把第一字节编码数据保存到31h里mov r7,#0 ;//计数器R7清零sjmp nextbit ;//继续采集数据next: ;//小于2.2ms时转到这里mov a,th0 ;//读取计数值TH0swap a ;//高4位与低4位对换mov r1,a ;//保存到R1anl tl0,#0f0h ;//取TL0高4位,低4位忽略不计mov a,tl0 ;//clr c ;//rrc a ;//rrc a ;//rrc a ;//rrc a ;//add a,r1 ;//mov r1,a ;//subb a,#30 ;//以上几行是把TH0的低4位和TL0的高4位合并为1字节作为计数值jc nextbit ; //判断是否 <0.84ms,是则放弃,继续采集 mov a,r1 ;//否clr c ;//cjne a,#64,continue ;//跟64比较continue: ;//jnc nextbit ; //a>64表示采样值 >1.11ms 放弃mov a,keydata ;//否则,符合位“0”clr c ;//C = 0rrc a ;//把零右移进Amov keydata,a ;//保存inc r7 ;//计数器加1cjne r7,#8,nextbit ;//是否满8位inc r6 ;//计数器加1cjne r6,#2,last_8 ;//是第一字节已经满sjmp seach ;//last_8: ;//如果为第二字节mov keydata+1,a ;//则保存第一字节到31hmov r7,#0 ;//清零R7sjmp nextbit ;//seach: ;//匹配按键编码mov r0,#-2 ;//按键编码字节个数计数器mov r1,#-1 ;//按键顺序计数器seach1: ;//inc r0 ;//seach2: ;//inc r0 ;//inc r1 ;//cjne r1,#29,compare ;//是否R1=29sjmp exit0 ;//compare: ;//开始匹配mov a,r0 ;//mov dptr,#keycode ;//地址指针指向码表首址movc a,@a+dptr ;//取码cjne a,keydata,seach1 ;//比较inc r0 ;//R0+1,再比较下一字节(每个按键编码为2字节)mov a,r0 ;//;mov dptr,#keycode ;//movc a,@a+dptr ;//比较cjne a,keydata+1,seach2 ;//是否匹配,不匹配则继续跟下一字节比较 mov p1,r1 ;//如果匹配,把按键顺序号输出到p1send: ;//mov tmod,#20h ; //设置timer 1,mode 2mov tl1,#0fdh ;//设置定时器初值mov th1,#0fdh ;//mov scon,#01010000b;//以上设置,即设置串口波特率系数为:9600,8,1,0setb tr1 ;//启动定时器1loop_s: ;//mov sbuf,r1 ;//把R1(按键顺序号)输出到串口jnb ti,$ ;//等待是否发送完毕clr ti ;//发送完毕,清零TIexit0: ;//ljmp main ;//循环keycode: ;//每两字节代表一个按键的编码db 11111000b,00000000b, 11111100b,00000000b, 11111001b,11000000b db 11111100b,11000000b, 11111010b,00000000b, 11111010b,00100000b db 11111010b,01000000b, 11111010b,01100000b, 11111010b,10000000b db 11111010b,10100000b, 11111010b,11000000b, 11111010b,11100000b db 11111011b,00000000b, 11111011b,00100000b, 11111011b,01000000b db 11111011b,01100000b, 11111111b,01100000b, 11111111b,10100000b db 10001100b,10001110b, 10001101b,11101110b, 10001100b,10101110b db 10001101b,11001110b, 11111000b,11100000b, 11111100b,10000000b db 11111100b,01000000b, 11111001b,10100000b, 11111100b,10100000b db 11111100b,01100000bend---------------------------------------------------------------------------------各种遥控器编码不同,如果你采用的是其他遥控器,修改几个参数即可(当然按键的编码表肯定不同了),即计数器的值不同,不过有的遥控器有机器码(机器码每个按键都是一样的),此时可以跳过机器码的采集。

相关主题