如何使用8位PIC测量IR信号的脉冲宽度?


14

我和我的朋友想设计一个通用的学习型遥控器,像这样,用于学习。我们基本上要做的是存储和重放红外脉冲。

我们要检测36kHz,38kHz和40kHz信号。40kHz信号的周期为25μ

我们想使用一个8位PIC单片机,现在我们选择了PIC16F616,它将以20MHz的高速晶体振荡器运行。我们有两种选择:

  1. 使用Interrupt On Change模块。
  2. 使用CCP模块的捕获模式。

第一种选择如下:

假设寄存器设置为:unsigned char _10_us = 0;。该寄存器将保留时间。带有周期寄存器的TMR2模块被设置为每产生一个中断。发生中断时,它将增加寄存器并退出。这将使最大时间为2.55毫秒。如果需要更多的时间测量,则可以定义其他寄存器,并根据需要递增。μ_10_us_1_ms

_10_us_10_usμ

这个选择使我挠头。TMR2中断大约每50条指令发生一次。中断处理大约需要20条指令。我剩下30条指令来计算周期并将其保存到数组中。这种方法行得通吗?

第二种选择如下:

设置CCP模块的捕获模式,以便当CCP1引脚上发生事件(从高到低)时,它将产生中断。在中断程序中,它将设置一个标志,以便程序中的任务可以计算(如果需要)并保存CCPR1H(可能不需要)和CCPR1L的值。然后,我们将更改捕获模式的配置,以便在发生低到高沿时触发中断。然后它将等待下一个事件。由于从未使用过,因此无法估算此方法的性能。

另外的选择?

我们可以使用红外解调器IC,例如TSOP17xx系列。那将完全解决我们的问题。但是,有些问题浮现在脑海。

我们的阅读距离要求不高;1米(约3英尺)。如果我们选择一个,就是在38kHz的可正常工作的TSOP1738,如何以及将与36kHz和40kHz的信号,这项工作?

TSOP17xx系列数据表的第4页显示“响应频率相关性”图。据我们了解;

  • 40kHz,即38kHz的〜1.053,将给出〜0.6的相对响应度。
  • 36kHz,即38kHz的〜0.95,将给出〜0.65的相对响应度。

这些值是什么意思?我们可以使用TSOP1738罚款吗?


为什么不只编写一个软件循环来计算脉冲之间的循环次数呢?
Rocketmagnet

@Rocketmagnet我不明白。如果有时间,您可以写一个答案吗?另外,请记住,除了上述问题之外,我们还会做很多其他事情,例如RS232和SPI。
Abdullah kahraman 2012年

Answers:


11

0.65

不必担心PIC的性能。TSOP1738将不会输出38 kHz信号。这就是载波频率,TSOP1738去除了该载波频率以取回具有更低频率的基带信号,其脉冲持续时间约为1 ms,因此有大量时间来准确测量边缘之间的时间。

以下作用域图像说明了这一点:

在此处输入图片说明

这是一个RC5代码。顶部信号是36 kHz调制信号,底部信号是实际代码。

在此处输入图片说明

这放大了基带信号的一个脉冲。您可以看到36 kHz载波的各个脉冲。

关于载波频率的另一句话。您可能正在使用未知频率的遥控器。TSOP1738的输出未提供它,因此,如果要读取它,则必须将IR光电二极管或晶体管连接到PIC的输入之一,并读取两个相同的时间边沿。那是可行的。不同载波频率的周期时间:

40 kHz:25 µs
38 kHz:26.3 µs
36 kHz:27.8 µs

20 MHz PIC16F616的指令周期为200 ns(它将时钟除以4!)。因此,三个频率的读数应分别约为125、131和139。这足以将它们区分开。但是,如果您愿意,可以让许多边沿通过,并且仅在第10次中断后读取计时器,例如:1250、1316、1389。不要太长,因为您必须使时间短于基带信号的一个脉冲。

成功!


现在,这很轻松,谢谢。很久以前,我已经基于TSOP1738创建了一个“ IR学习器”,但这真是一团糟。
abdullah kahraman 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.