登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请帮忙分析一款“学习型红外遥控器”

作者:allstudy 栏目:单片机
请帮忙分析一款“学习型红外遥控器”
    最近发现家里遥控器老是弄混(唉,遥控器多了,也是一件麻烦事)。如果有一种可对家中各种红外遥控器发射的控制信号进行识别、存储和再现的智能型红外遥控器,用这样一个遥控器控制家中所有电器该多好。这就是大家称作的学习型红外遥控器。于是,下了不少工夫查找了许多资料,对红外遥控也做了一点表面研究,现总结一点文档,与大家一同探讨(有不对之处,请大家指正!);另外由于本人愚顿还未开窍,还有部分东西想不太明白,在此也向专家们请教,请知道的老兄支点招,在此小弟先谢过了!!!
一、红外遥控概述
    红外遥控系统一般都是由发射部分和接收部分组成。
    1、发射部分的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它发出的便是红外线而不是可见光。目前大量使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通Φ5发光二极管相同,只是颜色不同。

    2、接收部分主要元件是红外接收管,它是一种光敏二极管(实际上是三极管,基极为感光部分)。在实际应用中要给红外接收二极管加反向偏压,它才能正常工作,亦即红外接收二极管在电路中应用时是反向运用,这样才能获得较高的灵敏度。
    由于红外发光二极管的发射功率一般都较小(100mW左右),所以红外接收二极管接收到的信号比较微弱,因此就要增加高增益放大电路。前些年常用μPC1373H、CX20106A等红外接收专用放大电路。最近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装(如图中的HS0038),均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VO或OUT)。红外接收头的引脚排列因型号不同而不尽相同,可参考厂家的使用说明。成品红外接收头的优点是不需要复杂的调试和外壳屏蔽,使用起来如同一只三极管,非常方便。但在使用时注意成品红外接收头的载波频率。
http://bbs.21ic.com/upfiles/img/200682114849807.jpg(图一)
    
    3、红外通信的基本原理是发送端将基带二进制信号调制为一系列的脉冲串信号,通过红外发射管发射红外信号。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。
    红外遥控常用的载波频率为38KHZ,这是由发射端编码芯片所使用的455KHZ晶振来决定的。在发射端要对晶振进行整数分频,分频系数一般取12,所以455KHZ÷12≈37.9 kHz≈38KHZ。也有一些遥控系统采用36kHz、40kHz、56kHz等。
    红外遥控的特点是不影响周边环境、不干扰其它电器设备。由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控器而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。
    由于各生产厂家生产了大量红外遥控专用集成电路,需要时按图索骥即可。因此,红外遥控在家用电器、室内近距离(小于10米)遥控中得到了广泛的应用。

二、红外遥控编码标准
    目前市面上出现的遥控编码有很多种,但常用的红外遥控编码主要是NEC标准和PHILIPS标准,其它都是这两类的变种。
1、NEC编码标准:编码芯片有PT2221/PT2222、HT6221/HT6222等
此标准下的发射端所发射的一帧码含有一个引导码、8位用户码、8位用户反码,8位键数据码、8位键数据反码。引导码由一个9ms的高电平和4.5ms的低电平组成。当按下持续时间超过108ms时,则发送简码(简码由9ms高电平和2.25ms的低电平组成)来告之接收端是某一个按一直按着,象电视的音量和频道切换键都有此功能,简码与简码之间相隔是108ms。“1”和“0”的区分采用脉冲位置调制方式(PPM)。如下图所示:
../uploadfile/200705141459353767.jpg(图二)

2、PHILIPS的RC-5编码标准:编码芯片有SAA3010、PT2210/PT2211/PT1215、HT6230
    RC-5编码标准的一帧有以下几部分组成:
1)起始码部分  2个逻辑1;
2)控制码部分,1位;
3)系统码部分,5位;
4)指令码部分,6位。
    连续发射时,重复波形与第一次发射波形相同。控制码位在前后再次按键中交替改变。0和1码传送采用双相位编码发送技术。编码规则如下图所示:
http://bbs.21ic.com/upfiles/img/20068211485728.jpg(图三)

3、其它变种的编码类型
    像TC9028PT2212PT2213等芯片的码型与NEC标准类似,只是引导码变为4.5ms高电平+4.5ms低电平,简码4.5ms高电平+4.5ms低电平+0.56ms高电平+1.68ms低电平+1.56ms高电平组成。
    像PT2461LC7461等芯片的码型也是与NEC标准类似,数据帧长度变长了,引导码+13位用户码+13位用户反码+8位键数据码+8位键数据反码。简码为9ms高电平+4.5ms低电平+0.56ms高电平组成。

     三、红外信号的学习与再生(学习型遥控器的电路和编程实现)
    目前大多数人采用的方法都是用一体化接收头做为信号的接收,然后把解调出来的信号送入单片机进行学习(记录各个高低电平的时间长度),然后存入EEPROM内,学习OK后再发送的是把EEPROM的高低电平的时间数据读取并与38KHZ载波进行调制然后发送出去。如下图所示:
http://bbs.21ic.com/upfiles/img/200682114921928.jpg(图四)
    例如:由AVR系列单片机ATMEGA8、一体化红外接收头HS0038、存储器、还原调制与红外发光管驱动电路组成。一体化红外接收头负责红外遥控信号的解调,将调制在38KHZ上的红外脉冲信号解调并反向后再输入到ATMEGA8的INT0引脚,边沿触发方式,并由单片机计数器进行高电平与低电平宽度的测量。
这里使用具有I2C总线接口的E2PROM 芯片AT24C32作为存储器,其容量为4KB,用来保存识别出来的遥控信号的高电平与低电平宽度数据。通常遥控信号的二进制脉冲码长为32位,每位由一个高电平与一个低电平组成,应保存的信号宽度数据为64个,再加上引导码2个数据,共计66个数据,每个数据用一个字节来表示,一个遥控信号命令就需要66个字节来保存。考虑到不同的遥控系统有一定的区别,有些遥控信号命令长度较长,所以存储空间应适当留有余量。在实际应用中,可根据红外遥控设备的数量及每个设备的遥控命令数量等具体情况来决定E2PROM 芯片的容量和型号。

    遥控信号的还原和发射是通过单片机的一个IO口输出二进制脉冲码(高电平与低电平的维持时间为学习识别时保存的一组宽度数据)与38KHZ载波进行调制,调制后的信号经驱动后通过红外发光管发射出去。
但这样的处理方法,因为一体化红外接收头工作电压一般都要求是5V,在供电能力方便的情况下采用这种方式还是不错的,但如果想象普通遥控器一样只能采用两节干电池供电,那以上方法是没法做到的。
后来我从市场买了一个自学习型遥控器,打开小研究了一番,其电路原理如下图所示:
http://bbs.21ic.com/upfiles/img/200682114949720.jpg(图五)
    
    另外,我用编程器读出AT24C32内的数据,发现每一个按键对应于一个32字节的区域,也就是说一个按键的红外信号经单片机学习处理变成一个32字节的数据,但这32个字节数,我一个个键进行分析,但没想明白它反应的是个什么的关系,像电视的电源开关键其32字节的数据为(这里学习的红外遥控器信号是用NEC标准编码的):
8B  2A  1F  09  56  00  0B  AA     31  75  00  00  00  00  00  00
00  00  00  F0  A5  55  4A  49     29  52  95  49  4A  49  00  F1
数字键1的32字节数据如下:
8F  2A  1F  09  56  00  0B  AA     31  75  00  00  00  00  00  00
00  00  00  F0  A5  55  4A  49     29  55  55  24  92  49  00  F1

现在有两点我没想明白:
1、这里接收红外信号是采用红外接收二级管,但这里经三极管放大反向之后送入单片机口线上的信号还是调制在38KHZ的波形,也就是说这个波形是没有经过解调的。
我想弄明白的事:单片机是如何对这波形进行解调的吗?或者说这单片机处理程序是并没有进行解调而是直接记录特征数据,然后存入EEPROM,这样又是如何做到的吗?
2、存储于EEPROM的32字节数,是个什么样的特征数据,它能再生重新原样的发射出去。
     能只用32个字节的数据记录一个按键的红外遥控信息,这比之前用66个字节(甚至更多)的方法来得更加简洁,一个4K的EEPROMAT24C32)能够记录的按键数就多得多了。

一直没想明白这两个问题,这款学
2楼: >>参与讨论
allstudy
可能是由于级别没到,图没法直接显示出来
只能通过网址打开

3楼: >>参与讨论
allstudy
先浮起来,静等
 
4楼: >>参与讨论
gipsyer
资料收集的比较全
先顶一下

5楼: >>参与讨论
gipsyer
个人意见
1.感觉主芯片可能不是一个单纯的mcu,可能内部集成了载波调制/解调功能,如果能查到芯片资料,那就能肯定了。
2.如果用66个字节表示一个遥控信号,那么可称之为“万能”遥控,单片机只起一个转发功能,不必去关心遥控具体是什么协议。
至于你从市场买的自学习型遥控器,从你提供的数据分析,其实他并不是用32个字节,只是用了4个字节(52  95  49  4A/55  55  24  92  49 )来识别不同的按键,这样的话,单片机就要能识别出遥控器使用的协议(如NEC)。

6楼: >>参与讨论
conanfans
载波不同怎么
 
7楼: >>参与讨论
conanfans
载波不同怎么办呢?
 
8楼: >>参与讨论
sxl_72
学习型遥控器的学习是连载波一起学的
再按原格式一起发出,因为载波有很多,一般20k到120K都有,还有400k的,所以要一起学进去;第二,由于数据量大,所以最好要压缩再存储,我以前做到128字节储存一个250bit长的数据码(不是载波),因为空调的码很长;第三,有些遥控器有跳码,要特殊处理。
所以只学习38k的遥控器不能称之为万能遥控器。

9楼: >>参与讨论
lanmp
400K载波
8M晶振够用么

10楼: >>参与讨论
sxl_72
谁告诉你是8M晶振的,当然在电路上下点功夫也是可以的
 
11楼: >>参与讨论
allstudy
TO:gipsyer
1、单片机用的是EM78P156E(义隆的),接的是TCC脚,应该是计录下降沿或上升
2、按你这样理解,他首先单片机要能识别出编码协议,然后再记录四个它了的数值,我是用了个NEC编码的遥控器得到的数据。另外我在家时有试着学习我的空调遥控器,春兰空调,发现学习不了(空调编码太长了)

还是没想能,-----

12楼: >>参与讨论
allstudy
TO:sxl_72
我想确实如你所说的,需要把载波一同记录下来,但单片机是如何记录的呢?
另外,按你所说如何压缩?能详细说明一下吗?
有相关资料能不能Email(all_study@163.com)一些给我,先谢谢过

* - 本贴最后修改时间:2006-9-28 15:07:30 修改者:allstudy

13楼: >>参与讨论
sxl_72
资料我就没有了
我曾开发过一款学习型遥控器,我只是说了一些我的做法:
我是将收到的信号接到单片机的一个外部触发中断脚上,然后计时。


14楼: >>参与讨论
allstudy
TO:sxl_72
你是把载波也都记录下来了,就是把包括载波在内的所有高、低电平的时间数记录下来,那这样的时间数占用字节很长时,那就是要象你所说的压缩再存储,那能解释一下,你是采用什么算法压缩的吗?

15楼: >>参与讨论
lanmp
TO: allstudy
晶振用的是多少的?
EM78P156E只有13KBIT ROM和48byte RAM。真的能完成么?

16楼: >>参与讨论
allstudy
TO:lanmp
用的是10MHZ晶振,我对这款MCU不熟
你理顺了它的处理方式吗?

17楼: >>参与讨论
谈的元
学习型遥控器的学习是连载波一起学的,基本不可能
 
18楼: >>参与讨论
老怪物
呵呵.
 
19楼: >>参与讨论
allstudy
请老怪物兄发表一下看法,谢谢
 
20楼: >>参与讨论
sxl_72
这么肯定
学习型遥控器的学习是连载波一起学的,基本不可能
---------------------------------------------------为什么,请解释,不过我的产品已在欧洲上市了,呵呵

21楼: >>参与讨论
石湖天随
请谈的元兄谈下你用什么方法来识别栽波频率的?
 
22楼: >>参与讨论
gipsyer
连载波一起?
TO:sxl_72
连载波一起学?难度很大.
1.首先MCU速度要足够快,因为38KHZ(占空比为1/3)的高电平只有8.8us,对于一个12M的C51来说,一个但周期指令就要1us,要完成计数/判断/存储,还有误差,太难了。
2.数据量太大,一个电平(高或低)就要用一个字节的话,10ms就要380字节。
当然,不是完全照搬,有载波识别功能,另外记算,不过还是很惊人的。
当然连载波一起学的优点很多,与载波无关,与协议无关,只要ROM足够大,堪称“万能”。另外硬件电路也简单,省去了调制/解调。
3.也很想知道数据怎么压缩的,效率如何?

to allstudy :
从电路连接上看,似乎连载波一起学,但从MCU,EEPROM资料看,不可能。
所以猜测你的学习型遥控器只能学习有限的几种遥控器。


23楼: >>参与讨论
谈的元
请教sxl_72的产品叫什么名字??在国内哪有卖?我买几个
 
24楼: >>参与讨论
dadodo
连载波一起学?开玩笑!
一体化接收头输出的信号已经没有载波了,只有数据.

对于确定的一体化接收头,能接收的载波也已经确定了.比如常用的1838系列,只能接收38K的红外码,如果用来接收36K或其他频率调制的红外信号,接收头输出的已经是不准确的数据.

除了电视以为的如空调/投影机等,红外编码格式并不完全符合NEC或PHILIPS的标准,甚至很多是企业自定的格式.

想要做一款"万能"学习型红外遥控器还是可行的,前提是红外载波频率一样,如果采用38K接收头,理论上可以学习任何一种38K调制的红外信号,只要你的存储空间够大.我曾做过一个这样的学习型遥控器在产品上,可以学习遥控电视/DVD/空调/投影机...效果很好.

* - 本贴最后修改时间:2006-9-13 0:32:04 修改者:dadodo

25楼: >>参与讨论
谈的元
国内有吗??什么名字
国内有吗??什么名字

26楼: >>参与讨论
平常人
韩国有人用ARM做出来了;LOGITECH的Harmony早就上市啦
开开眼吧


* - 本贴最后修改时间:2006-9-6 22:09:57 修改者:平常人

27楼: >>参与讨论
笨笨兔
为什么没有人讨论一下Apple的那个方案,
为什么没有人讨论一下Apple的那个方案,

我大概能看出他用的MCU型号(懒的去确认了),8M晶振时应该有2MIPS吧(或者4MIPS,反正不会到8MIPS的),那么如果要学习的载波是100K,也就是脉宽只有10uS,再考虑1/3的占空比,需要记录的高电平只有3uS!,软件还有其他功能要实现。。。。难呀。

我大致考虑的结果:如果用AVR的MEGA8以8MIPS,纯软件学习38k载波,可以做到。可是,38k载波的话,用红外一体头就可以了,根本不用学。


28楼: >>参与讨论
LEITUOXIN
可以连载波一起学习
可以连载波一起学习,但这不是主要功能,还是好好想数据压缩吧!一般4个bytes的码用16个bytes EEPROM就可以记录下来

29楼: >>参与讨论
dadodo
如果要连载波一起学,就不能用一体化接收头
在载波频率未知的情况下,如何识别有效信号和滤除杂波是关键。

30楼: >>参与讨论
hiberhe
前段时间在超市买过一个学习型的,20元钱,用着还不错
 
31楼: >>参与讨论
xwj
一般载波频率是一致的,可以归类成样本的
同一遥控器载波频率是一致的,可以归类成样本
也就是说只要学习几个脉冲就知道载波频率了
再根据载波样本学习(或组合)编码即可

一个按键保存载波的高、低宽度,解调后的编码即可

32楼: >>参与讨论
allstudy
谢谢
先试试看

33楼: >>参与讨论
卢向东

在35楼时,还忘了一点,如果单片机是用高速单片机,低电平可以用每次累加得到,如果是51单片机,就不能累加了,只能计中断次数,结束后把中断次数乘以38KHZ周期得到低电平时间长度,这样就很精确了.

 

34楼: >>参与讨论
kele

学习型遥控器当然不能用集成的接收模块,要不载波频率都无法学习的,应该就用一般的发射管就可以学习了,先开始学习载波频率,然后对上升沿或者下降沿进行计数就可以算出接收的时间了!

35楼: >>参与讨论
lowe88
关于载波的学习希望有高手能出来点醒下大家~
参与讨论
昵称:
讨论内容:
 
 
相关帖子
多个16c554怎样初始化他的寄存器?
大侠:并口扩展用哪块芯片啊?8255好吗?
奇怪了,我的DS1302秒可以走,可是到了60,分就是不更新
DATASHEET你喜欢下载哪个厂商的?
C语言中子程序不能正常返回。
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号