完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
利用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) 不同的编码协议不一定就是这个数据所以要能够自适应。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1847浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
609浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
503浏览 3评论
507浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
488浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 15:47 , Processed in 1.013993 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号