红外发射与接收设计总结
对于红外发射与接收设计我们采用了两种方案,一种方案是不用编解码芯
片,直接用单片机加红外发射头或红外一体化集成接收头来显现数据之间的简单
通信,此方案所用元器件少,可节约成本,但编程难度相对而言较大。首先发端
需要编程让单片定时器输出端能产生 38khz 的方波,这个我们已在单片机开发板
实现了一部分功能,我们所使用的单片机开发板的电路原理图可见附录 A,发端
产生 38khz 的方波程序可见附录 B。另外接收端需要考虑的因素比较多,即我们
如何考虑发端与收端编码与解码一致,即实现对不同对象发送不同的码。可以考
虑对 int 口中断计数,获得高低电平持续时间,由此进行解码。也可以通过 int
中断口计数接收方波脉冲的个数(当然这个个数可限定在一定范围,不必那么精
确),这些都还只是理论上的分析,具体行不行还得实践一下。我们在单片机开
发板基础上编写了一个功能简单的接收端程序,这个程序的功能是只要单片机
int 中断口有信号沿跳变,数码管会顺时显示数字同时蜂鸣器会响,参考程序可
见附录 C。并且此次编写的发端程序和收端程序通过 kell 编译下载到开发板的
单片机上后,发端和收端可以通信,即发端通过红外发射头将 38khz 方波发出去
后,收端可以接收得到,并且每接收到跳变信号,数码管会显示数字同时蜂鸣器
响。如果还要进一步实现更复杂的功能,可以进一步修改程序,附录中的程序仅
供参考。
另外,我们还考虑使用编解码芯片实现红外通信,编码芯片选用 PT2262-IR
,解码芯片可选用PT2272_N4/PT2272-L4/PT2272-M6/PT2272-L6. ,其中L 表示
锁存输出,数据只要成功接收就能一直保持对应的电平状态,直到下次遥控数据
发生变化时改变。M表示非锁存输出,数据脚输出的电平是瞬时的而且和发射端
是否发射相对应,可以用于类似点动的控制。PT2262编码出来的数据流是一段一
段的,包括同步码、地址码、数据码。对于PT2262的选型我们要注意一下,PT2262
没有带后缀的用示波器观察其数据输出流,其波形不是周期性的,出1101110101
等等类似的编码波形,而对于接受端选用的HS0038一体化红外接收头只能解调出
38khz的周期性的方波,对于那些不规则的波形解调不出。而PT2262-IR专用于红
外编码,其编码出来的数据L流呈周期特性,只要能编码出38khz的数据流,HS0038
就能解调出来。我们还是用面包板搭建了简易的红外编解码电路,也是基于
PT2262/PT2272.发射端的电路可有两种,可见附录D,接收端的电路可见附录E.
问题是我们要在发射端产生38khz的数据流,接收端才能收到。这可以调节
PT2262-IR 的15、16脚的振荡电阻来控制,PT2262数据手册提供红外部分电路在
这两端所给出的阻值范围是430k-470k,而要产生38khz频率可将振荡电阻控制在
450k左右,当然我们是在面包板的基础上进行估计,实际应用中这两端最好接一
个电位器,以方便调节电阻。接受端的振荡电阻接一个1M的电阻就差不多了。
当然有时会出现发端发出,收端可以接收到信号,但不能解码。不能解码的原因
很多,有可能是地址码不对,或是接收到信号的幅度太低,或是信号干扰严重,
这些都要试着确定一下。
附录 A 单片机开发板电路图
附录 B 红外发射端 C 程序
#include
#include
#include
#include
sbit P35=P3^5;
void InitTIMER0(void);
unsigned
void counter0(void);
void main(void)
int num;
{
int
tag=0;
InitTIMER0();
IT1=1;
EX1=1;
EA=1;
if(TF1==1)
if(tag==0)
{counter0();
tag=1;}
else
{tag=0;
counter0();}
if(num==20000)
TR1=0;
}
void InitTIMER0(void)
{
TMOD|=0x20;
TH1=0xf4;
TL1=0xf4;
ET1=1;
TR1=1;
EA=1;
}
void counter0(void) interrupt 0
{
EX0=0;
if(P35==0)
{
else
{
P35=1; }
P35=0; }
num++;
EX0=1;
}
附录 C 红外接收端 C 程序
#include
#include
#include
#include
sbit BELL=P2^6;
sbit LED0=P2^0;
unsigned
int num;
void counter1(void);
unsigned char seg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
bit FINT1;
void main(void)
{
IT1=0;
EX1=1;
EA=1;
if(FINT1)
{
P0=seg[2];
LED0=0;
BELL=0;
}
if(num==20000)
EX1=0;
}
void counter1() interrupt 2
{
using
1
EX0=0;
FINT1=1;
num++;
EX0=1;
}
附录 D 红外编解码发送端编码电路
S2
1
2
VCC
4
3
SW DIP-2
PT1 7
Q1
9 01 3
J P2
PT2 2 6 2-IR
1
2
3
4
5
6
7
8
9
1 8
1 7
1 6
1 5
1 4
1 3
1 2
1 1
1 0
D5
D4
R8
4 50 K
PT1 7
D0
D1
D2
D3
R1 1
2 K
VCC
R7
4 .7
D1
红外发射管
C4
4 7UF
Q2
9 01 3
电路图一
S2
1
2
VCC
4
3
SW DIP-2
PT1 7
Q1
9 01 3
J P2
PT2 2 6 2-IR
1
2
3
4
5
6
7
8
9
1 8
1 7
1 6
1 5
1 4
1 3
1 2
1 1
1 0
D5
D4
R8
4 50 K
PT1 7
D0
D1
D2
D3
R1 1
2 K
电路图二
PT2262 的数据端可接单片机。
Q2
9 01 3
D1
红外发射管
R7
4 .7
VCC
附录 E 红外编解码接收端解码电路
VCC
R15
1M
PT14
D0
D1
D2
D3
JP2
1
18
17
2
16
3
15
4
14
5
13
6
12
7
11
8
9
10
PT2272-L4
D5
D4
J2
123
HS0038B
VCC
Q1
9013
R16
10K
4
1
T
P
VCC
HS0038 的 vcc 和 gnd 之间可接 0.1uf 的电容,以便滤除干扰,同时 PT2272
的数据端可接单片机。