如何用单片机和FPGA实现家居遥控
扫描二维码
随时随地手机看文章
引言
人们生活中的家用电器种类日益增多,遥控器的种类也随之增加,不同种类的遥控器之间一般不能相互替代,这给人们的生活带来诸多不便。
各类遥控器功能大致相同,大多都有数字键、启动停止键、前进键、快进键、后退键,复杂的也就是增加几个功能键,现实生活中,由于用户的个体差异,特殊功能键的使用频率很低,甚至部分用户自始至终就从未使用过这类键,因此,这些键完全可以简化和归类使用,对于那些不易简化和归类的少量特殊功能键,可以通过开辟自定义按键区的方法予以解决。
鉴于此,本文以单片机和大规模可编程门阵列FPGA为基础,以记录波形的思想设计了一款自学习式通用家居遥控器,又为原本无遥控功能的电灯、电扇、窗帘等设施追加了教练+学习+控制的遥控模型,在电脑上安装了Girder软件后还可实现对电脑的遥控。
1 红外遥控简介
1.1 关于红外线
红外线是波长在0. 75μm 至100μm 之间的电磁波,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。红外通讯一般采用红外波段内的近红外线,波长在0. 75μm 至25μm 之间。红外数据协会( IRDA) 成立后,为了保证不同厂商的红外产品能够获得最佳的通讯效果,红外通讯协议将红外数据通讯所采用的光波波长的范围限定在850nm 至900 nm 之内。
由于红外线的波长较短,对障碍物的衍射能力差,所以适合应用在需要短距离无线通讯的场合,进行点对点的直线数据传输。
1.2 红外遥控编码格式
用于遥控的控制代码大都以不同的编码标准调制在38 kHz 左右的载波频率之上,再以串行格式通过红外载波的通断被发送。下面简单介绍一下常见的编码标准:
1) Pulse 编码(Pulse Coded)
脉冲的长度根据表示的数据‘0’、‘1’而不同,Sony 的遥控用此种编码。
2) Space 编码(Space Coded)
与脉冲编码正好相反,它是以脉冲之间space 的长度不同来表示数据, Panasonic 的遥控用的就是这种编码。
3) Shift 编码(Shift Coded)
此种编码是用电平转换的方向表示数据的,因此所有的位都有着连续的时段,Philips 就用该编码方式。
2 系统的软硬件划分
该系统采用“电脑主机+单片机+FPGA”的结构,系统软件分为两部分:一部分是在主机上运行的Girder程序,用于解码接收到的信号并控制电脑执行指定的动作,另一部分运行在单片机上,用于驱动遥控器的液晶(LCD)显示。系统的硬件分为四部分:学习器,教练器,接收器以及与主机的接口电路,其中学习器兼有学习与遥控的功能,通过学习原有遥控器的编码可以遥控任何拥有遥控功能的电器,它包括单片机和FPGA两部分,由FPGA执行主要的学习与遥控功能以提高运行速度和集成度,单片机用来驱动液晶显示;教练器与接收器负责对原本无遥控功能的设备追加遥控功能,具体来说就是教练器产生种类足够多的编码地址供学习器来学习,接收器则在电器端负责解码对应的地址并产生相应的动作;为实现对电脑的遥控功能而设计的主机接口电路负责把红外信号转换为数字信号传入主机。硬件电路实现的总体框图如图1所示:
图1 硬件系统总体框图
3 系统的硬件设计与实现
3.1 学习器
学习器是硬件电路的主要部分,兼有学习与遥控的功能,它以FPGA为核心,外围电路力求简单,主要由键盘、存储器、接收电路和发射电路组成,考虑到用纯硬件来控制LCD显示的困难较大 ,决定采用微控制器协助FPGA来实现。这里的接收电路与后面要讲的接收器不同,它专为学习功能设置,负责接收已有遥控器的红外信号并送至FPGA内部进行识别、译码以及存储,发射电路由驱动电路和红外发光二极管两部分电路组成,负责将编码信号以红外光的形式发射出去。
总体原理框图如图2所示:
图2.学习器硬件结构
3.1.1 FPGA的设计
包括键盘模块、发射编码调制模块、接收译码存储模块三个模块,另外还有一个总控制模块,其内部结构如图3所示:
图3.FPGA内部结构
总控制模块是一个有限状态机,它负责协调其他各个模块的工作并提供与显示电路和存储器的接口;键盘模块接收用户的按键信息,并编码输出给总模块,这些信息包括按键的地址,按键的类型和用户选择要遥控的器件编码;接收译码存储模块由计数器记录接收信号高低电平的宽度,并将数据存入存储器相应地址中,存储时序由状态机来控制;发射编码调制模块负责由存储器中读取当前按键的数据信息,产生与学习到的信号相似的高低变化的电平,并以38kHz的载波调制输出。
3.1.2 单片机实现的LCD显示电路
显示电路采用RT12864M-2型液晶显示器,由我们较为熟悉的单片机控制液晶来显示遥控器所处的状态并提示用户进行正确的操作。
3.2 教练器
教练器的作用是产生种类足够多的编码信号供学习器来学习,进而控制不同的接收器。
SC2262是一种CMOS工艺制造的低功耗低价位通用编码电路,最多可有12位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441地址码, SC2262最多可有6位(D0-D5)数据端管脚,其编码方式如图4所示。
图4.SC2262的编码脉冲
3.3 接收器
SC2272 是与SC2262 配对使用的一块遥控解码专用集成电路。它可支持多达531441个地址的编码,极大的减少了码的冲突。SC2272 对从Din(14脚)端子送入的信号进行解码。解码出来的地址码与所设置地址输入端进行比较。如果所设置的地址与连续2个字码匹配,则SC2272 做以下动作:
a)当解码得到有“1”数据时,驱动相应的数据输出端为高电平;
b)驱动VT (17脚)输出为高电平。
将SC2272与继电器结合就可以控制电灯、电扇等用电器的电源开关,再加上小型直流电动机就可控制窗帘等机械装置。
3.4 与主机接口
为了能使此遥控器控制电脑就须将红外信号送入主机内,有两种可行的接口,分别为电视卡的红外接收头和串口。
3.4.1电视卡的红外接收头
现在的电视卡很多都带有红外遥控器,这样的遥控器除了可以控制电视的播放外,通过适当的软件,它还可以控制音频、视频播放、图片浏览程序及电脑的关机等,实现真正的电脑遥控功能。这种方法的缺点是需要购买电视卡,成本较高,不予采用。
3.4.2 串口
现在流行的有半软半硬和全软两种方案,半软半硬方案在红外接收头与串口间加入了数据预处理电路,使数据符合串口规范,降低了编程难度,减少了CPU占用率;而全软方案则是直接把红外接收头收到的数据送入串口,完全由软件处理,其编程难度和CPU占用率偏大,但硬件电路非常简单。图5是“软”方案的硬件电路。
图5.串行红外接口电路
由于目前应用串口的技术比较成熟,网上有很多现成的插件可以借鉴,因此我们决定采用串口的方式实现。
4 软件设计
4.1 液晶(LCD)驱动程序
我们采用89S51单片机来控制液晶屏,通过不断循环读取FPGA的状态编码来控制液晶显示器实时地刷新其显示内容,其中包括遥控系统当前所处的状态(是处于学习状态还是遥控状态)以及当前处理的对象类别和编号,防止用户由于不清楚当前遥控的对象而产生误操作,同时在每一个状态液晶屏都要提示用户下一步该如何操作,为用户提供一个十分人性化的使用界面,软件使用Keil C编写。其程序流程如图6所示。
图6.LCD显示软件流程
4.2 Girder程序
Girder是一款完全免费的软件,从本质上说它可接收来自任何输入设备的指令,识别后做事先定义好的动作,如启动某个程序或鼠标双击等。首先要设置好硬件,从网上下载串口驱动文件IgorPlug.dll拷贝到Girder目录下的子目录Plugins中。Girder软件的界面如图7。
进入“filesettings”,点击选项卡上的“Plugins”,找到滚动窗口中的“Igor SFH-56 device”,在它前面的小框中打上勾,再点击左边的“Setting”, 选择你所使用的串口,点击OK就可以通过串口来控制电脑了。
图7.Girder的主界面
对于像关机,关闭显示器等动作,Girder已经有设置好的现成的命令可用,对于一些较复杂的播放软件的控制可以通过简单的设置来完成。
5 关键技术--对编码信号的学习方法
红外遥控信号的编码方式多种多样,例如图8所示的是一种电视卡自带的遥控器的编码波形,它采用的是Space编码,前面9ms的脉冲加4ms低电平是引导码,中间是8位地址码00H、8位地址反码FFH、8位数据码E8H、8位数据反码17H,从引导码开始计时发送108ms后若按键仍没有松开则以后每隔108ms发送一个9ms高+2ms底+0.5ms高的重复简码,直到按键松开为止。
图8. 一种电视卡的遥控器编码波形
如果每一种遥控器都通过解码后存储“0”“1”的数字信号,那么解码的工作将是非常繁重而且不经济的,一个简单的方法是记录下波形中每个高低电平的宽度,使用时再按照原始形式将波形发射出去。
6 结语
智能家居各类产品的智能化加速必将推动家居产业发展,让我们共同期待,相信智能时代还会创造更多的智能奇迹,智能家居生活终会飞入寻常百姓家,普通百姓也能享受高科技时代下的智慧生活。