历史上的今天
今天是:2025年03月29日(星期六)
2019年03月29日 | 基于STM32F407的万能红外遥控器
2019-03-29 来源:eefocus
利用stm32f407的PA8引脚的复用功能输入捕获功能,将遥控器每个按键所对应的波形记录下来,再通过红外发射头发射出去,进而来控制电器。
由于要对所有遥控器适用,这就要求程序要能够在不知道红外编码方式的前提下学习,所以我决定将遥控器发出来的所有波形都记录下来,用的时候再按这个波形发射就能够实现遥控,中间不需要解码出相应的键值码。
编程学习波形的大致思路:
将遥控器每一个按键所对应的波形学习下来(即储存高低电平的时间 参考nec编码协议部分内容)每一位信息应该对应两个时间,所以要存储200多个时间信息,建立二维数组进行存储,利用输入捕获捕获到下降沿的时候开始计时,并立即设置为上升沿捕获,上升沿时来时读取低电平时间存到数组第一位,立即将计数器清零并设置为下降沿捕获,开始计数,下降沿来时读取计数器的数值存储到素组第二位,依次类推,直到这个键值信息存储完毕,结束判断是根据是不是超过90ms的高电平,结束时最后一位可以不要。
发射学习到的波形:
利用定时器产生38khz的载波频率,将数组里边的数值作为发射时间,奇数位为发射红外引号,偶数位不发射,这样就能产生学习到的波形。具体载波发生器参见32定时器章节。
设计步骤:准确采集红外信息 解码采集到的信息 储存信息并能编码发送
发现问题及解决方案:如果不解码不好存储,(采集到的波形数据太大,尤其是空调的)所以需要转换思路,在不知道编码协议的情况下,根据自己采集到的波形规律自己设计程序解码,再按照自己的解码方式编码发送出去即完成接收和发送,从而达到万能遥控的目的
无论哪种编码方式都会有起始位(大部分是一位起始位,也有的是两位起始位)所以必须要确定好起始位,几乎所有的红外编码格式都是有一个固定的发射红外的时间(比如NEC协议 先发射560us的红外,紧接着再发560us或者1680us来决定是0还是1)所以起始位结束后(接收端)就会有一个560us的低电平(不一定是560us,但是不会超过800us)这样就能把起始位提取出来,等需要的时候再发射出去,而且同一个公司的遥控器用的起始位大体相同,但是为了保险起见一个遥控器的起始位单独存起来,换遥控器就采集新的起始位。
解码思路:从第三位有效数据开始判断是不是小于1000us若是则将前两位保存起来作为起始信号,第三位作为发射红外的时间,紧接着再往下判断是不是大于1000us,若是则提取出来作为延时时间,例如nec协议 9000 4500(起始位) 560(发射时间) 560(延时时间0) 560(发射时间) 1680(延时时间1) 不同的编码协议不一定就是这个数据所以要能够自适应
下一篇:STM32休眠与唤醒
史海拾趣
|
开放源码软件Linux是大家广为熟知的,但你听说过“开放源码硬件”吗?中国电子学会和FPGA领域的老大美国赛灵思公司 (Xilinx)联手,最近将“开放源码硬件”这一理念创新地引入了刚刚揭开帷幕的“Xilinx杯中国高校开放源码硬件创新大赛”中,推出了国 ...… 查看全部问答> |
|
http://group.eeworld.net/aawolf_mobile/topic/2aa41dba-eefc-4bc4-8232-ed1191c645b0.aspx 我遇的问题和帖子里面的一样。问题在:CommSend这边没有反应了。代码如下: (原帖问题解决了但没有给出解决方法。请各路高手帮忙) //////////// ...… 查看全部问答> |
|
【MSP430共享】用VB实现PC机与MSP430单片机串行通信的研究 摘 要: 串行通信已经成为计算机与其他设备进行数据交换的最广泛的途径之一。本文主要论述了P C机与 MS P 4 3 0单片机之间实现串行通信的硬 件设计; 以及如何利用MS P 4 3 0的串口通信模块和VB提供的串行通讯控件 MS C o mm来实现 P C机与 Ms P 4 ...… 查看全部问答> |
|
在用SMSC3320做Device时,总线供电,线上VBUS=5V,结果一1K电阻,在3320的VBUS输入端测得电压1.5V,是否正常?我用的是Device模式,是否可以不要VBUS? 另外,3320的VDD33输出为0,VBAT=5V,是不是内部LDO损坏? 我在DP脚外界1.5k电阻与3.3V想拉 ...… 查看全部问答> |
|
随着物联网 (IoT) 内器件的互联程度越来越高,并且客户需求也使得固件和软件升级变为重要的产品要求,这一切都使得针对这些更新的架构搭建成为前沿产品设计中的一个关键组成部分。虽然能耗比较高的应用往往包含一个伴随处理器,连同一个诸如MSP430 ...… 查看全部问答> |




