安卓

注册

 

发新话题 回复该主题

传统遥控终结者基于RealtekRTL8 [复制链接]

1#
北京哪治疗白癜风最好 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/sfxbdf/

前言

遥控器是每个家庭中的必备电子产品之一,一直以来占据著家庭里很重要的位置,但是随著越来越多的电子产品进入家庭普通生活,每一个电子产品都有自己的遥控器,这样就不可避免产生大量重复的应用,而且他们之间互不相容,大多的遥控器会给人带来很多的困扰,尤其是中老年的生活增加诸多的不便。因此开发一种新型的万能遥控器非常的必要,它们能够相容所有的电器控制协议,这样使用者就不必担心电器之间的互不相容的问题,“一键在手,快乐无忧”新型万能遥控器逐步成为家庭所有电器的统领者,我们的万能遥控器杀手就是在这样的背景下产生的!

项目概述

本项目基于Realtek半导体RTLDS的新型应用,RTLDS系列产品是一颗单芯片的Bluetooth蓝牙/WIFI无线芯片,它们的出现结束了以往诸侯混战的市场格局,因此成为终结传统遥控器的杀手级产品,也被称为当代“遥控器杀手”。本专案是一种小型且便宜的多设备可以通过遥控器控制的遥控器智慧手机应用程式。它允许用户控制家庭可以访问互联网的任何地方的电器通过智慧手机。它适用于所有类型和通过品牌的红外线控制电器保留编码和自学。另外具备语音辨识功能。以下详细介绍一种不同于传统遥控器。这是朝着真正的智慧家居应用的发展方向。

特点:

1、仅用一个即可替换所有传统遥控器。您的智慧手机将成为所有人的控制器电器

2、即使您身处家中,也要控制家用电器离开家。当你在办公室时,你可以使用您的智慧手机安排预录在几英里外的家里的电视上播放。

3、帮助您的家人经营您的房屋电器,无论您身在何处。当你是外出旅行,你的父母或小孩在家中使用高科技设备时遇到麻烦,您可以帮助他们从以下位置操作设备您的智慧手机。

系统组成部分一、硬件

包含一个Wi-Fi/BT模组,该模组是连接到家用无线路由器。这允许用于智慧手机和该设备互联互通且远端可控。

包含红外接收器和发射机以学习和发送红外线信号。

使用前,请带好遥控器然后按不同的键让xRemote学习和在您的设备中记录设备的代码序列家,从而控制他们。

然后将代码发送并存储在您的手机。

在智慧手机上使用应用程式进行控制时电器,您的手机会发送命令通过网路或Wi-Fi,xRemote设备。然后,xRemote将回应并通过红外发送代码序列发射器,因此可以被设备接收。

1.硬件设计

我们的项目是建立一个可以连接和控制传统的家用电器以及新型智慧设备的智慧远端控制中心。要打造这个很酷的产品,我们必须非常重视硬体电路设计,这是整个开发过程硬体设计中最重要的部分之一。硬体电路设计分为几个关键过程,包括顶层设计,选择合适的电子元件,设计电子电路和测试程式。

1.1系统结构

要创建此智慧遥控器,我们首先需要构建一个硬体系统来完成功能。微处理器是整个平台的核心,它是所有处理必需的处理部分。遥控器包含一个Wi-Fi/BT模组,该模组已连接到家庭无线路由器,因此可以通过移动应用程式进行访问。控制器还包含六个红外发射器和一个红外接收器,因此可以学习传统遥控器的控制信号控制,然后代之以工作。此外,该设备还包含两个感测器温度和照度。另外,需要稳压器来产生稳定的3.3v电源输出。下面是系统简化结构图。

1.2主控芯片的选择

定义系统结构后,我们需要找到合适的主控芯片及Wi-Fi/BT芯片或者模组。由于我们正在构建一个可以在未来可持续拥有长生命周期的产品,因此我们做出选择时需要考虑几个关键标准,包括性能,品质,价格和易于开发。如上图所示,我们使用瑞芯微RK及Realtek制造的wifi/BTCombo无线芯片RTLDS作为我们的核心微处理器及Wi-Fi/BT通讯芯片或者模组。我们最终选择此芯片组的主要原因是它完美平衡了价格和性能。该芯片组不仅仅功能强大,还完美的结合了Wi-Fi/BT模组(符合IEEE.11n),因此它减少了系统的复杂化和解决2.4GHzRF信号传输的工作。以至于更少使用器件来实现2.4GWi-Fi/BT应用需要的外部元件。由于我们的MCU是采用了高性能RK,它是为个人平板电脑和智慧音讯设备设计的高性能四核应用程式处理器。提供了许多嵌入式强大的硬体引擎来优化高端应用程式的性能。RK支援几乎全格式的H.解码器,支持p

60fps,H.解码器支持p

60fps,通过p

30fps支持H.编码器,高品质的JPEG编码器/解码器。嵌入式3DGPU使RK完全相容OpenGLES1.1/2.0/3.2、DirectX11FL9_3、OpenCL2.0和Vulkan1.0。特殊的2D硬体引擎将最大限度地提高显示性能,并提供运行非常顺利。RK具有高性能的外部记忆体界面(DDR3/DDR3L/DDR4/LPDDR2/LPDDR3),能够维持需要的记忆体频宽。该芯片的选择能够远远的满足了我们系统未来的扩展及灵活的新功能增加问题,下面的图表显示了基本的框图:

因此我们可以在其上运行定制的Linux,从而简化了高级开发Wi-Fi/BT资料处理之类的应用程式,并避免可能很容易的超载问题。嵌入式Linux系统还大大增加了功能,并且我们设备的可扩展性。我们选择RK芯片组的另一个原因是它提供了多种硬体界面,例如作为SPI,I2C和USB。这些界面可用于连接周边设备的负载和因此将支援更多的应用程式。我们在系统期间发现在互联网上的资料与认同了23ds芯片的组合较少。所以整个开发过程变得颇具挑战性。1.3硬体基本电路设计

1.3.1wifi/BT芯片或者模组(RTLDS)

下图是Realtek的RTLDS的系统方框图,RTLDS的SDIO/UART硬体界面以及GPIO外部界面用于外部控制。所以我们在原理图设计中连接所有可用的GPIO埠,SDIO埠及其他埠。内部序列传输和接收埠TXD和RXD已连接以测试固件升级功能。该芯片由3.3V直流电源供电,可以通过将RST埠设置为高电平来复位。下面是功能框图官方资料表中提供的RTLDSSoC的原理框图:

1)RTLDS使用关键点注意事项:

a.RTLDSmodulePIN38支援两种供电方式,3.3V直接供电方式和Vbat(3.3V-5.5V)供电方式,需要根据客户设计严格搭配使用。Vbat供电方式必须通过Module的PIN39(VBAT_EN)来开启和关断VBATLDO输出3.3V,若如果原本DS模组的PIN39(CHIP_EN)没有拉出来,则需上在module上使用R6与R7电阻分压,来使VBATEnable,相比若VBAT_IN无法off的platform,能有VBAT_EN控制的话相对会更省电

b.RTLDS/RTLCS的模组是有拉出PIN39(VBAT_EN),

*对3.3V供电方式VBAT_EN无法reset整个IC,需要将WL_DIS#与BT_DIS#同时拉low,才能够reset整个IC;

*对Vbat供电方式可以关断VbatLDO输出,相当于给IC断电以达到reset整个IC的目的。

*再次强调,使用Vbat供电方式,VBAT_EN必须外接host的GPIO来控制

c.RTLDS/RTLCS模组的VBAT_EN的电压域为1.6V~3.3V,只要在这个范围之内的,VBAT就会输出3.3V;同样的模组的Pin12(WL_DIS#)Pin34(BT_DIS#)可以支援1.8V与3.3V,只要在1.6V~3.3V之间,均可认为high

d.RTLDS/RTLCSModule的PIN13的电压也是由Module的PIN22(VDDIO)来决定,可以支持1.8V与3.3V

e.RTLDS/RTLCSModule的PIN7的电压是由Module的PIN22(VDDIO)来决定,可以支持1.8V与3.3V。不过另外需要注意的是该Pin也是我们ICTEST_MOD_SELpin,需要在IC上电的时候拉low,我们IC内部有pulllow电阻,因此需要确认外部host端是否有pullhigh电阻,若是则拿去该电阻,另外也需

要确认Host端在我们WIFIon的时候为low!

1.3.2系统计时器

在这个专案中,需要一个精确的计时器才能生成38kHz的载波红外信号。也可以使用TLC计时器芯片由德州仪器(TI)提供。我们选择一个外接的TLC作为计时器芯片的原因是它提供了三个操作模式:单稳态模式,非稳态模式和双稳态模式(施密特触发器),因此可以实现不同的功能,例如PWM或LED闪烁。所有这些模式都易于实现。计时器芯片可以在2MHz的最大频率下运行,因此能够处理红外传输所需的频率。TLC支援开/关调制机制在其输出波形上。RESET埠决定计时器输出的开/关,这样我们就可以通过将此埠连接到MCU的GPIO埠来调制资料。触发电平约为电源电压的三分之一和阈值电平约为电源电压的三分之二。对于应用电路,我们使用官方介绍的Astable操作模式包含时序元件R7,R8和C5的数据手册。二极体D1用于减小输出波形的占空比,以便可以限制功耗为最小。经过测试后,振荡可在输出接近38kHz,因此IRLED以此频率发射脉冲IR射线,输出周期接近1:3,从而将功耗降低了三倍。

1.3.3红外线发射器

在本项目中,产生的红外信号由多个红外LED发出以进行远端控制家用电器。在这里,我们使用TSAL大功率红外发光二极体由VishaySemiconductors制造。我们选择这种红外LED的原因是它的高可靠性和高辐射强度。该IRLED的半强度角约为±30度,因此我们决定使用6个此IRLED覆盖所有方向。从系统设计的角度来看,这些IRLED的开/关将由TLC计时器输出控制。根据资料表,TSALLED的典型正向电压为1.35V。正向电流为mA。因此,很难以5V的功率连续支援两个LED计时器的输出电压可以达到3V高。所以我们决定连接这些并行排列的IRLED。每个IRLED都连接到一个双极电晶体和一个小电阻。电晶体起到开关的作用,小电阻器提供红外LED具有足够的电流(实际测试中最大为mA恒定电流)。我们使用的电晶体这是2N型BJT,可驱动高达1A的电流。

1.3.4红外线接收器

在此专案中,需要红外接收器以接收发射的38KHz红外信号来自传统的遥控器。在这里,我们使用TSOP红外接收器模组由VishaySemiconductors制造。它是专为红外线设计的小型接收器一个PIN二极体和一个前置放大器组装在一个引线框架上的远端控制系统。解调后的输出信号可以直接由微处理器进行解码,这是主要的我们选择此红外接收器模组的原因。该模组的应用电路设计参见资料手册。

1.3.5模数转换

在该专案中,需要使用模数转换器以转换来自将感测器转换成数位信号,然后可由MCU读取和处理。在这里我们用ADS超小型,低功耗,12位模数转换器,由德州仪器(TI)。我们之所以选择该芯片作为ADC,是因为它具有四个输入通道,因此我们将来可能会在不更换ADC芯片的情况下将其他感测器集成到系统中。ADS使用与I2C相容的序列界面来传输资料,并且该界面也是RKSoC支援。与SPI界面相比,I2C仅使用两根线,并且易于实行。该界面非常适合低频资料传输,例如感测器资料。应用电路设计请参见datasheet。

1.3.6感测器

1.3.6.1温度感测器

在该专案中,使用温度感测器来收集环境温度资料。我们在这里使用的温度感测器是LM35,这个精密摄氏度温度感测器由德州仪器(TI)制造。我们选择LM35作为温度感测器的原因是在实际应用中不需要任何外部校准。另一个原因是精度:室温下的典型精度为±0.25°C,并且覆盖整个检测范围-40°C至+°C。应用电路设计请参见datasheet。

1.3.6.2照度感测器

在该专案中,照明感测器用于收集环境光强度资料。我们在这里使用的照明感测器是PDV-P,CdS光电导光电管由AdvancedPhotonixInc.设计。它可以感应至nm的光。这取决于电阻的照明电阻范围为16kΩ至33kΩ。应用电路设计有关该感测器的资讯,请参见datasheet。

1.4硬体驱动

要遥控所有红外线装置,关键是要了解基本的红外协议。我们在驱动程式中实现了一个通用协议,即NEC红外协议。即使从接收器中学到的电波不属于这两个,我们仍然有记录发送从设备中学习的机制。

1.4.1NEC协议

NEC协定具有在38kHz频率载波的收发器上运行。NECIR传输协定使用消息位元的脉冲距离编码。每个脉冲突发为.5s,逻辑位元的发送方式如下:

逻辑0–.5s的脉冲突发,后跟.5s的间隔,总发送时间为1.毫秒;逻辑“1”–.5s的脉冲突发,后跟1.ms的空间,总发送时间为2.25毫秒,当按遥控器上的一个键时,传输的消息包括以下,按顺序:

1)9ms脉冲突发

2)4.5ms空间

3)接收设备的8位元位址

4)位址的8位元逻辑逆

5)8位命令

6)命令的8位元逻辑逆

7)最后的.5s脉冲突发,表示消息传输结束。

1.4.2NEC协议的实现

红外感测器驱动程式的设计或多或少地通过切换来类比红外协议板上的I/O引脚。有三个寄存器负责对I/O进行操作:

RALINK_REG_PIORENA是I/O的启用寄存器,我们需要在初始化时将其设置为高;

RALINK_REG_PIODIR是控制此引脚是输入还是输出的寄存器。

RALINK_REG_PIODATA是资料寄存器,因此我们需要在写入时设置寄存器的值并从该寄存器复制(如果已读取)。

一个问题是如何实现高精度延迟。Linux内核提供了睡眠功能直到几微秒后才能释放CPU。实现高分辨率延迟的一种更好的方法是使用高分辨率计时器结构。基本用法情况如下所示:

1)执行hrrtimer_init,包括使用ktime_set来设置计时器到期时间,以及使用hrtimer_init函数初始化hrtimer,并设置回呼函数指标。

2)在需要延迟的地方,调用hrtimer_start函数,然后调用wait_event函数直到event_queue被唤醒。

3)在回呼函数中,执行所需的操作,唤醒事件伫列,然后返回HRTIMER_NORESTART。

另外,实现小延迟的一种更容易的方法是在LINUX内核中设置函数延迟。它是系统繁忙的等待功能,系统在延迟时常常会被锁定,因此只能用于较少的延迟超过2毫秒。对于接收器,主要问题是如何检测接收器何时收到正确的波形。一种方法是使用高分辨率计时器并每隔一次扫描输入引脚。我们之所以不采用这种想法,是因为它占用了系统资源,不够准确(毫秒错误)。Linux内核支持中断。实施接收器唤醒功能的正确方法。内核的中断处理资料结构由设备驱动程式根据需要设置控制系统的中断。为此,设备驱动程式使用一组Linux内核服务用于请求中断,启用和禁用它的中断。各个设备驱动程式调用这些常式以注册其中断处理常式位址。request_irq函数说明红外线驱动程式注册I/O中断。Linux中断处理子系统的主要任务之一是将中断路由到正确的中断处理代码。Linux使用一组指向资料结构的指标包含处理系统中断的常式的位址每次IR接收器接收到资料时;它将产生低逻辑电平,因此系统将被中断唤醒。驱动程式中的Handler函数被调用,触发的函数被调用记录波形。

二、软件发展

对于liunx及安卓系统的软体发展相对比其他的系统开发更为复杂,但是Realtek已经全部考虑到这些开发者的困扰问题,Realtek提供了一篮子的芯片驱动程式,使用者只需要将这些驱动push到指定的路径即可轻松建立好完整的应用系统。完全不必担心驱动程式的复杂羞涩难懂,只剩下安心编写上层应用层程式了。

2.1嵌入式服务器

2.1.1详细结构

服务器由三部分组成-调度器,服务器,udp广播模组。当系统开机或服务器崩溃时,控制器将运行服务器。还可以负责连接智慧手机命令指定或存储在其中Wi-Fi热点快闪记忆体。服务器运行协议以与智慧手机进行通信,并将调用界面。udp广播模组将向Wi-Fi网路广播服务器的IP和MAC位址。然后,智慧手机可以捕获套装软体并使用该资讯连接服务器,RTLDS系统提供了软AP和STA。软AP是指接入点。在此模式下,系统将配置为Wi-Fi热点。其他附近的设备可以找到我们指定的SSID,并使用正确的金钥来访问我们的系统。我们用当我们需要使用者指定Wi-Fi网路或连接到主机丢失。STA是指网站。在这种模式下,系统可以通过以下方式连接到其他热点:我们指定的资讯。连接到主机后,系统将切换到此模式并且连接稳定。Wi-Fi服务器中使用了许多Linux工具,例如网路工具,记忆体工具。最多常用的是ifconfig,iwconfig,nvram_set和nvram_get。不同工具的组合构成服务器的工具集。

2.1.2调度器

调度器将首先检测记忆体中是否存储有一对SSID和金钥。如果有此类资讯,它将尝试切换到STA模式并连接指定的热点。如果成功,它将直接启动服务器应用程式并等待直到服务器关闭。如果没有的话将切换到AP模式并启动服务器应用程式。如果没有此类资讯,将确保它处于AP模式并启动服务器应用。在执行任何操作之前,服务器将检查系统模式寄存器以找出哪些内容的模式。调度器的存在将减少服务器应用程式失败的机会。当服务器由于某种原因关闭时,它将重新启动。

2.1.3服务器

服务器应用程式负责运行协定,调用界面并检查连接状态。它运行TCP通讯端服务器,并连续接受Wi-Fi中的任何连接请求网路或乙太网。连接到通讯端用户端时,它将根据资料做出回应以及协定中的规则。服务器支援四个请求–初始化Wi-Fi连接(iniWi-Fi),连接测试(iniConnection),学习新的IR代码(iniLearn),然后通过IR发送IR代码收发器(iniControl)。使用者必须连接到我们系统建立的AP并设置正确的SSID和密码,在以下情况下的本地网路:现有Wi-Fi的SSID或密码网路已更改,系统设置为预设值或系统无法连接至旧主机由于未知原因。iniWi-Fi请求旨在将SSID/密码传输到装置。当我们的设备收到此资讯时,它将首先将其存储到记忆体的快闪记忆体中,然后尝试连接到指定的Wi-Fi热点。iniConnection请求用于测试连接。服务器将简单地向用户端打招呼。如果成功,则可以应用其他请求。当使用者想要将新按钮从他或她的IR控制器录制到智慧手机时应用程式,他或她应发送iniLearn请求并按一下指向我们设备的按钮。服务器将调用IR界面,IR收发器将自动记录代码。最后,将代码返回给发送请求的智能手机。iniControl请求将首先触发从智慧手机接收IR代码,并且然后通过红外收发器将其发送出去。通讯端连接接受超时设置为15秒,通讯端收发超时设置为5秒。当连接接受超时发生时,服务器将检查连接状态。如果连接仍然有效,则将不会执行任何操作。如果连接是丢失时,如果记忆体中没有保存SSID或密码,它将切换到AP模式,并且当有SSID和密码时,会返回并尝试重新连接。这些设定确保服务器将定期检查连接并确保可访问。

2.1.4UDP广播

UDP广播将不断从系统读取IP和MAC位址,并且将此资讯广播到本地Wi-Fi网路中每个主机上的多个埠。在这里,我们只想广播到某些特定的埠,以便我们不使用广播IP在路由器上。我们分析IP地址和子网路遮罩,并在本地手动广播网路。此方法的另一个优点是,并非所有路由器都支持广播,因此此方法更具适应性。模组将每10秒钟广播一次资讯。换句话说,如果是智慧手机要连接到该设备,它应该在本地网路上监听10秒多一点。如果无法听到来自服务器的任何消息,则表明该服务器不在此网路中。如果能够接收UDP套装程式,服务器必须在此网路中。该模组的结构非常直观。首先,模组读取并分析IP和MAC服务器本身的地址。如果不存在IP地址,则模组将等待一小段时间然后重试,直到读出正确的IP地址为止。分析将给出本地网路并准备构造UDP包。然后将包裹发送到每个主机上指定的埠一一对应,这与埠扫描策略非常相似。每次我们将埠或IP地址加1直至到达每个IP地址。之后,我们再次读取服务器本身的IP和MAC地址。

2.1.5服务器实用程式

为Wi-Fi服务器构建了一些实用程式,以使开发更加容易。所有实用程式都是基于Linux工具。这是列表和简要说明。

1.change_to_STA:将系统切换到STA模式;

2.change_to_AP:将系统切换到AP模式;

3.cmdCall:通过管道(popen())调用应用程式,使调用者能够准备好应用程式的输出被调用;

4.FLASH_read:从记忆体中读取资料;

5.Conn_Wi-Fi:连接到指定的Wi-Fi热点。它能够检测到Wi-Fi网路自动并连接到它。此外,这将确保服务器获得IP使用udhcpc工具从DHCP服务器获得的位址;

6.device_ap_reset:在服务器上设置AP–SSID,密码,模式等。

7.iniServerSocket:初始化通讯端服务器;

8.LOCAL_Wi-Fi_connection_test:测试当前连接状态;

9.broadcast_ip_selfadder:帮助计算UDP广播的下一个IP地址;

10.broadcast_ip_

分享 转发
TOP
发新话题 回复该主题