|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
红外编解码彻底解析
$ h1 T7 O$ Q6 }: L0 R w! X9 Z, E( ^ o! y% [ p
) ?, t4 u, e. ~5 h9 r& {* k8 |$ E. k" I: Q4 p9 o) X \) I
$ f( Z( F# S' L: ~1 i5 O! [7 I3 Q
1、编码格式
; Q0 a2 W7 r1 s9 R# e, \; { 现有的红外遥控包括两种方式:PWM(脉冲宽度调制)和PPM(脉冲位置调制)。
+ z+ n3 Y) `! o. ]' z) Z5 Z 两种形式编码的代表分别为NEC 和PHILIPS 的RC-5、RC-6 以及将来的RC-7。
3 z: O9 e# b( E. w# g PWM(脉冲宽度调制):以发射红外载波的占空比代表“0”和“1”。为了节省能量,一般情况下,发射红外载波的时间固定,通过改变不发射载波的时间来改变占空比。例如常用的电视遥控器,使用NEC upd6121,其“0”为载波发射0.56ms,不发射0.56ms;其“1”为载波发射0.56ms,不发射1.68ms;此外,为了解码的方便,还有引导码,upd6121 的引导码为载波发射9ms,不发射4.5ms。upd6121 总共的编码长度为108ms。
/ _+ c( ^+ N, n) r 但并不是所有的编码器都是如此,比如TOSHIBA 的TC9012,其引导码为载波发射4.5ms,不发射4.5ms,其“0”为载波发射0.52ms,不发射0.52ms,其“1”为载波发射0.52ms,不发射1.04ms。
& E9 J% c/ c) m& t PPM(脉冲位置调制):以发射载波的位置表示“0”和“1”。从发射载波到不发射载波为“0”,从不发射载波到发射载波为“1”。其发射载波和不发射载波的时间相同,都为0.68ms,也就是每位的时间是固定的。+ e) i0 L, L4 }( e: A% }4 j
通过以上对编码的分析,可以得出以某种固定格式的“0”和“1”去学习红外,是很有可能不成功的。即市面上所宣传的可以学习64 位、128 位必然是不可靠的。
: |, [! K, A3 b% E6 N0 y# ]* n 另外,由于空调的状态远多于电视、音像,并且没有一个标准,所以各厂家都按自己的格式去做一个,造成差异更大。比如:美的的遥控器采用PWM 编码,码长120ms 左右;新科的遥控器也采用PWM 编码,码长500ms 左右。如此大的差异,如果按“位”的概念来讲,应该是多少位呢?64?128?显然都不可能包含如此长短不一的编码。9 J) Y6 @) Y' V* C0 R& }0 t4 f/ K; @+ c
2、学习模式2 M: _/ D/ Z" T9 y9 C$ ]
现在用来学习红外的CPU,无外乎以下几种:MCS-51系列、microchip pic16 系列、winbond w741 系列、holtek ht48 系列,以上的CPU 由于价格便宜、使用量大,被广泛使用在遥控器上。, J* T; E' M V2 T
以上的CPU 的基本点是:执行速度在1us 左右,数据存储器一般为256 个字节。如果按固定格式学习,一般可以学到128 位(其他程序会占用一些数据存储器);如果不按固定的格式,需要找出编码的最小公约数作为基本单位,则可以学习到的位数大大降低,达不到实用的效果。但是,即使如此,找到的最小公约数不可能满足所有的红外设备,除非最小单位为26us(1000000/38k)。如果达到这个速度,以上CPU 的速度远远不够,并且由于存储量的加大,数据存储器也远远不够用。
) Q, B3 J% ?0 s( g 对于电视、音响等,一般使用专用的遥控芯片,比nec,philips,toshiba,sanyo,mitsubish,pana sonic 的芯片,其编码格式固定,一个键只有一个编码,学习比较容易。
3 O4 i" ~5 p F! z% T 而空调不一样,各家空调厂商都是按自己的要求用cpu 做遥控芯片,编码形式就有很多种。比如可能没有引导码(电视音响类都有)、校验方式取累加和(电视音响类一般取反码)等。因为空调的状态多,必须一次发送完毕,有制冷、温度、风速、自动、定时、加湿、制热等,所以编码很长,并且同一个按键,在不同状态下发送的编码不一样,造成学习上的困难。( b9 ~, y+ ?' R9 E" {7 n1 u
红外遥控编码格式, b6 x% F, X3 E
红外遥控器的编码格式通常有两种格式:NEC 和RC5& F* ^% m N; O( f/ T& `+ w
NEC 格式的特征:/ a8 E% ?( R( U
1:使用38 kHz 载波频率
! e7 c7 A) J2 s% P; n5 v2 N% [2:引导码间隔是9 ms + 4.5 ms% a+ r6 ?4 N K' ^
3:使用16 位客户代码
& g2 B7 R+ v; G3 a: i6 e4:使用8 位数据代码和8 位取反的数据代码! ^" ^5 L# O C' @2 e5 @
* V3 [3 N- z9 ^9 B: T
不过需要将波形反转一下才方便分析:
- p U0 Y: b/ ^ 1 C) @: V1 U5 \5 ^
NEC 协议通过脉冲串之间的时间间隔来实现信号的调制(英文简写PWM)。逻辑“0”是由0.56ms的38KHZ 载波和0.560ms 的无载波间隔组成;逻辑“1”是由0.56ms 的38KHZ 载波和1.68ms 的无载波间隔组成;结束位是0.56ms 的38K 载波。
+ D# u# n4 c8 w, D' |
6 {9 P; E3 R+ [4 b G 下面实例是已知 NEC 类型遥控器所截获的波形:遥控器的识别码是 Address=0xDD20;其中一个键值是Command=0x0E;1 X7 k; H9 |- h( s9 L
O/ p# C/ _" q* `3 c0 g6 o
注意:波形先是发低位地址再发高位地址。所以0000,0100,1011,1011 反转过来就是1101,1101,0010,000 十六进制的DD20;
/ M, G: l6 U7 v3 F1 d2 v7 w5 t& D 键值波形如下:4 q4 ^' m& H& [1 h2 u) k
2 ]1 u0 q4 m% K) n7 M/ ^也是要将0111,0000 反转成0000,1110 得到十六进制的0E;另外注意8 位的键值代码是取反后再发一次的,如图0111,0000 取反后为1000,1111。最后一位是一个逻辑“1”。
$ g" r( O* R1 y p4 ]/ T+ y2 T, g; @3 S. q
; K( p3 ]+ k) E
RC5 编码相对简单一些:同样由于取自红外接收头的波形需要反相一下波形以便于分析:$ z8 s. ]" D6 C/ i( k' o
% `9 \3 o6 \9 y( ?( e1 |
反相后的波形:
* z! h, H) h. N$ a, D' k - c/ b" h- T/ ^& c( Q/ ]$ A2 V
根据编码规则:
- _0 @% P3 {- x# F( W * @% {$ C4 d$ C' j
得到一组数字:110,11010,001101! f: o0 |! n3 n" ]6 `' ], |
根据编码定义:
, {3 f% `* s" m! L ( [3 U4 d B. ^% z" p
第一位是起始位S通常是逻辑1- z% }' z+ L! Y
第二位是场位F通常为逻辑1,在RC5 扩展模式下它将最后6位命令代码扩充到7 位代码(高位MSB),这样可以从64 个键值扩充到128 个键值。8 w- C5 D" H2 \
第三位是控制位C它在每按下了一个键后翻转,这样就可以区分一个键到底是一直按着没松手还是松手后重复按。
' L/ z/ \ N4 t' w9 Y2 O" _$ I& S如图所示是同一按键重复按两次所得波形,只有第三位是相反的逻辑,其它的位逻辑都一样。
* _$ i' W) y( C4 v
, y4 ^0 j4 h: {7 Q2 j其后是五个系统地址位:11010=1A,最后是六个命令位:001101=0D。& [5 w' \% \3 w% I. \
4 M4 P* w) E( l6 z
红外线一开始发送一段13.5ms 的引导码,引导码由9ms 的高电平和4.5ms 的低电平组成,跟着引导码是系统码,系统反码,按键码,按键反码,如果按着键不放,则遥控器则发送一段重复码,重复码由9ms 的高电平,2.25ms 的低电平,跟着是一个短脉冲,本程序是免费给大家,版权所有,不得用于商业目的,如需用到本程序到商业上请与本人联系经本人同意后方可用于商业目的,本程序经过试用,能解大部分遥控器的编码!# c" v" S/ x1 ^/ K, ^6 x
7 y; M& G2 u9 L: W4 S
" A. D8 t6 V( i1 e% \3 C. s2 a: x8 l. [. b* {1 e. K+ o
' G1 u* h/ F5 h" u- S4 [ |
|