如何创建基于MAXQ的“学习”遥控器

描述

消费娱乐设备的红外(IR)遥控器杂乱无章,似乎是世界各地家庭的永久固定装置。但是,使用MAXQ2000微控制器和一些廉价的器件,可以构建一个遥控器,从其他遥控器“学习”代码并按需回放代码。

概述

简单的红外(IR)遥控器在许多家庭中占有崇高的地位。原因不难理解。使用遥控器,可以控制现代家庭中常见的各种娱乐设备。您可以从世界各个角落召唤节目,收听来自多个来源的音乐,播放音频和视频媒体,甚至保存节目以供以后查看(如果需要),所有这些都可以在您最喜欢的房间舒适地进行。

然而,红外遥控器的普及已经演变成一个问题。很少有家庭没有三个、四个或更多这样的小设备弄乱桌子。有一个用于电视,一个用于DVR,另一个用于VCR,还有一个用于音频系统,此列表不包括有线电视盒或卫星接收器,分配开关,DVD刻录机或任何其他引起我们注意的设备。

这种遥控器组合的解决方案是学习遥控器,它从另一个遥控器学习代码。学习遥控器处于“学习”模式,第二个遥控器“教导”学习遥控器如何传输命令,例如调高音量。从那时起,每当按下适当的按钮时,学习遥控器都可以发送学习的命令。

本应用笔记演示了如何围绕MAXQ2000微控制器(Maxim的MAXQ RISC微控制器之一)构建这种学习遥控器。但在设计细节之前,需要一些背景知识。

cpu

用光控制

第一个电视遥控器是Zenith® Space Commander。它使用机械布置,在激活时以特定频率产生超声波音调。想想音叉:当敲击时,它会以固定的、可预测的频率振动。理论上,音叉发出的声波可以被接收并解释为做某事的命令。因为早期的遥控器是完全机械的,所以不需要电池。然而,它只有三个命令:电视打开和关闭、频道向上和频道向下。

随着半导体器件变得越来越便宜和越来越受欢迎,红外光取代超声波成为首选的控制机制。简单来说,红外遥控系统由一个发射调制红外光束的手持单元和一个接收调制红外并解释调制的基本单元组成,通常作为采取某些操作的命令。然而,由于工程可行性、物理现实和市场需求的结合,此操作的细节并不那么简单。

残酷的事实是,环境中充满了红外辐射,因此期望在嘈杂的辐射能量之上听到任何微不足道的调制方案是不现实的。所有发热的东西也会发出红外辐射。例如,白炽灯泡比可见光发出更多的红外。甚至人体也会发出红外辐射。因此,大多数红外远程发射器在应用数据之前使用低频载波(通常在28kHz和60kHz之间)调制光。

以固定频率调制光束,可以很容易地从典型家庭环境中的所有干扰红外辐射中检测出来。通过使用简单的带通滤光片,可以隔离和解释红外信号。为此目的,有各种廉价的集成电路,包括红外光电二极管和带通滤光片。

产生这种调制光束很简单。红外发光LED器件常见且价格低廉;创建调制光束可以像从适当的振荡器驱动红外 LED 一样简单。有关可以调制和接收IR调制数据的电路,请参见图1

cpu


图1.电信号被转换成调制的红外光束,然后又转换成电信号。为了扩展发射器的范围,使用了PNP驱动器。可以针对所选的红外 LED 调整组件值。

随着调制LED光源和接收器IC以与光源相同的频率工作,人们有了远程控制系统的开端。当LED电路工作并在接收器范围内时,接收器输出变为活动状态。如果只需要该操作(外部电路的简单开关控制),则任务将完成。

但仅靠开关控制是不够的。即使是简单的遥控器也可以发送各种不同的命令,例如音量增大和减小、通道选择、输入源选择,也许还有单个数字。出于这个原因,需要其他东西,一种进一步“调制”调制光束的方法。这就是故事变得有趣的地方。

随着红外遥控器被广泛接受,每个制造商都采取了自己的方式来调制光束。虽然所有设备都使用数字控制(即调制波束的特性表示数字“1”或“0”位),但具体情况差异很大。有些使用简单的不归零(NRZ)调制。其他人使用一种脉宽调制(PWM)的形式,因此长脉冲代表一种状态,短脉冲代表交替状态。还有一些使用一种双相调制形式,其中开到关转换代表一种状态,关到通转换代表另一种状态。这种令人困惑的情况一直持续到今天,这使得创建一个通用遥控器来操作任何制造商的设备成为真正的挑战。

设计变量

设计通用学习遥控器时必须考虑三个变量:载波频率、位格式和帧格式。

载波频率

载波频率是光被调制的频率。它与实际比特率无关。对于任何给定系统,这是一个恒定频率,范围约为28kHz和60kHz,但通常在36kHz和38kHz之间工作。

位格式

位格式是系统区分“1”和“0”位的方式,它因制造商而异。在某些情况下,“亮起”周期的宽度是决定因素。索尼®制造的一些系统使用 1,100μs 的“亮通”脉冲表示“1”位,而 550μs 的“亮通”脉冲表示“0”位。脉冲之间的间隔始终为550μs。

另一种位格式保持“亮通”脉冲固定,但改变恒定宽度脉冲之间的空间。一些松下(松下®)系统发出恒定的800μs脉冲流,但将“1”位指定为脉冲之间的2,400μs空间,将“0”位指定为脉冲之间的800μs空间。

最常用的代码系统之一是飞利浦 RC-5 代码。在此代码中,每个位单元由一个889μs的调制光突发和一个889μs的空间组成。如果位单元由“亮起”周期后跟“关闭”周期组成,则认为它表示“1”;如果它由“熄灯”周期后跟“亮起”周期组成,则认为它表示“0”。在RC-5系统中,通过在每帧的开头强制执行两个“1”位来确保位同步。图 2 说明了各种位格式。

cpu


图2.红外遥控系统中可以使用几种位格式,但都涉及用载波调制光束,然后使用几种技术之一调制载波。

帧格式

确定位格式后,设计人员必须确定帧格式。在许多情况下,这将包括一个同步脉冲(通常是比普通数据脉冲稍长的脉冲),然后是特定格式的数据位。通常,数据由两部分组成:传达所需功能的“数据”部分,以及与要控制的设备相对应的“自定义”部分。因此,一个设备的某个数据项可以对应于另一个设备的不同数据项。

一些代码每帧传输两次信息:一次在正常模式下,一次在位检测颠倒的情况下。通过这种方式,提供了一定程度的基本错误检查。如果两个副本不匹配,则假定该命令无效。

传输帧后,通常会一遍又一遍地重复。常见的帧重复率范围约为每秒 10 到 20 帧。一些协议只传输一次代码,然后重复“键下”代码。本文中描述的系统不会处理这些协议,因为假定每个重复帧都包含数据和自定义代码。

最后,一些协议,包括RC-5协议,在每次按键时都会反转一点。这有助于识别接收间隙是否是由于信号丢失造成的,例如,有人在遥控器和基本单元之间行走,或者它是否实际上代表第二次按键。此功能未在此项目中实现。

寻求普遍性

基于上述讨论,通用学习遥控器似乎需要知道这些位格式中的每一种才能完成其任务。如果我们担心结果数据集的大小,这将是真的:典型的红外遥控消息只有几十位长。但鉴于内存相对便宜,我们可以简单地对传入的比特流进行采样并记录样本。

因此,对于这个项目,我们真的不关心位格式或帧格式。这是因为这个系统只是简单地记录和播放它看到的任何内容。通过对正在使用的系统保持不可知性,可以保证真正的普遍性。

接收和记录

接收器电路本身很简单。上拉至V的光电晶体管DD构成输入电路,可直接连接至MAXQ2000微控制器的输入引脚。不需要或实际上不需要特殊的接收器IC。我们不关心范围,而是希望记录实际的调制包络,而不管载波频率如何。

在饱和模式下操作光电晶体管是一个小问题。光电晶体管不是特别快的器件;它们具有从完全打开到完全关闭状态的恢复时间,该时间大于大多数系统的位时间。因此,如果光信号过多,光电晶体管将饱和。它将完全错过载波频率,仅遵循调制波形的轮廓。但如果信号太少,根本就没有可识别的波形。图 3 说明了这些条件。

cpu


图3.接收红外信号时,信号强度必须正确。如果信号强度太高,光电晶体管将饱和,仅检测到信号的低频部分。如果信号强度太低,载波频率永远不会超过检测阈值。

因此,将主遥控器和学习遥控器放置在恰到好处的距离至关重要。但是这个距离是多少?为了确定这一点,学习遥控器中的软件会执行一些预采样以确定距离是否正确。在开始记录之前,学习遥控器(即MAXQ2000微控制器)对输入通道上的信号进行采样。如果没有,遥控器会假定信号电平太低,并点亮适当的 LED。但是,如果微控制器遥控器在输入通道上看到转换,但没有100μs或更小的脉冲(可以假设载波频率大于10kHz),则假定信号电平过高并点亮不同的LED。最后,如果微控制器观察到由“关闭”周期分隔的快速脉冲突发,则假定信号电平处于“最佳点”是理想的。然后,学习遥控器的代码将转换为录制状态。

在录制状态下必须发生几件事。微控制器遥控器必须确定载波的输入频率。由于微控制器的工作频率为16MHz,载波的频率(最多)为60kHz,因此可以精确测量载波频率。累积从后缘到后缘的四个样本。然后将结果除以 <> 以确定高周期和低周期时间。

接下来,接收器开始搜索大于10ms的传输间隙。每个协议都在同一代码的重复传输之间设置一个间隙,并且没有协议允许单个代码内的间隙大于约1ms。当找到间隙时,接收方知道这是代码序列的开始。录制可以开始了。

为了记录代码,微控制器遥控器会累积载波开启的时间。当它观察到载波丢失时,遥控器会累积载波保持关闭的时间。这会产生一个开和关时间矢量,可用于在需要时重新创建信号。

由于这是一个演示项目而不是成品,因此这些开关时间的矢量存储在易失性RAM中。在实际产品中,软件子程序可能会将这些载体复制到非易失性存储(例如EEPROM)中。

回放

对按钮进行编程后,CPU 进入睡眠模式。在此模式下,将保留寄存器和RAM,但CPU时钟将停止。只有中断(或重置)才能唤醒 CPU。

按下按钮时,CPU 被唤醒并扫描其输入引脚以确定按下了哪个按钮。然后,它指向 RAM 中的向量,其中包含有关如何播放与按钮关联的代码的说明。

RAM 向量包括:包含开关周期数计数的标头;表示载波频率的值;以及表示每个开关周期的导通时间和关断时间的值对序列。第一个标头值,即开关周期数,存储在环路计数器寄存器(LC1)中。将此值保存在计数器寄存器中,可以轻松遍历所有周期值。

标头中的第二个值(载体周期)被缩放并存储掉。在 IR 导通期间,该值被加载到另一个环路计数器寄存器 (LC0) 中。由于MAXQ2000为单周期内核,通过程序环路的时序是完全可靠的。因此,载波可以通过在高周期通过四指令周期循环执行,然后在低周期通过四指令周期循环执行来生成。执行继续以这种方式,执行周期循环,然后执行关闭周期循环。

这是执行路径将停留的地方,通过打开红外 LED 一段时间然后关闭一段时间来生成载波,如果不是计时器的话。对于每个半位时间,矢量包含一个值,用于写入MAXQ2000定时器通道之一。定时器以32分频模式工作,因此定时器分辨率约为2μs。

在每个半位周期开始时,计时器将加载该周期的持续时间。然后,当程序代码打开和关闭红外 LED 时(在导通期间)或干脆关闭红外 LED (在关闭期间),经常测试定时器以确定位时间是否已过期。

半位时间到期后,环路计数器寄存器(LC1)递减并测试零。如果它不为零,则有更多的位要传输,并且分支被带到循环的顶部。否则,将测试该按钮以查看它是否仍被按下。如果按钮仍处于活动状态,则整个循环(从向量读取初始化值并重新初始化计数器)将再次开始。否则,CPU 将重新进入睡眠状态,直到按下下一个按钮。

增强基本的远程操作

到目前为止,我们有一个工作学习遥控器,但只有一个按钮。这种设计最明显的增强是更多的按钮。添加这些按钮是一个简单的过程,仅涉及少量的额外硬件。当 CPU 空闲时,所有行驱动程序都设置为输出“1”状态。每列上的软(即高电阻)下拉使这些输入保持在空闲状态的低电平。当用户按下任意按钮时,相应的列被驱动为高电平,CPU 被唤醒(图 4)。然后,CPU 可以将每一行设置为高,一次一行,并确定按钮所在的行和列。

cpu


图4.要使用其他密钥扩充项目,激活任何密钥都必须中断处理器。在睡眠模式下,所有列线通过软下拉电阻保持低电平,所有列线被驱动为高电平。当按下任何键时,列线被拉高,从而唤醒处理器并启动行扫描过程。

第二种增强功能是使用MAXQ2000中的定时时钟外设唤醒CPU,使其在特定时间执行一系列编程的IR命令。时间时钟是一种低功耗外设,设计用于长时间使用电池供电。当MAXQ2000处于休眠模式,高频时钟停止时,时间时钟继续工作。时钟可以根据一天中的时间或时间间隔生成中断以唤醒 CPU。例如,时间时钟可以唤醒CPU,以便遥控器可以向电缆或卫星盒发送命令,然后向VCR或PVR发送命令以开始录制节目。在程序结束时,可以再次唤醒CPU以结束录制。

第三种可能性是将MAXQ2000连接到个人计算机。通过这种方式,PC可以用作编程站,可能从网络中提取编程信息并将其自动加载到通用遥控器中。

因此,只需少量外部元件和少量软件,精密的MAXQ200

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分