历史上的今天
今天是:2025年12月14日(星期日)
2022年12月14日 | STM32之红外遥控信号自学习实现
2022-12-14 来源:zhihu
1 序言
很早前就想实现这个红外遥控自学习的这个实验,用于来自己控制房子里如空调等红外遥控设备的自动化,NEC的标准到具体的产品上可能就被厂家定义为不一样了,所以自学习就应该是接收到什么就发送什么,不用管内容是什么!
2 硬件实现原理

由上述原理图可知,当IE为高电平时发送红外光,为低电平时不发送红外光。
在NEC协议中,信息传输是基于38K载波,也就是说红外线是以载波的方式传递。
发送波形如下图所示:

NEC协议规定:
发送协议数据“0” = 发送载波560us + 不发送载波560us
发送协议数据“1” = 发送载波560us+ 不发送载波1680us
发送引导码 = 发送载波9000us + 不发送载波4500us
在红外接收端,如果接收到红外38K载波,则IR输出为低电平,如果不是载波包括固定低电平和固定高电平则输出高电平。在IR端接收的信号如下所示:


3 软件实现自学习
设计原理:

1、 根据接收波形记录电平和电平持续时间,以便于发送。
2、电平记录采用定时器捕获功能,从下降沿接收引导信号开始,每触发一次改变触发方式,从而使每个电平变化都能捕获到。
源码实现如下:
定时器捕获初始化设置(CubeMax软件自动配置生成):


定时器捕获中断回调处理:


3、设置的定时器溢出时间为10ms,如果10毫秒内不再接收电平变化则默认接收结束,设置结束标志。

至此,实现了红外遥控的学习功能,获得的记录数据为记录长度和电平信号数组与电平信号维持的时间数组。

4、发送实现
设置定时器输出38KPWM信号,在记录电平为0是输出记录时间的38K载波信号,如果为1则不输出载波,实现如下:
PWM生成设置(CubeMax自动配置生成):


发送实现,注意点就是记录为0时发载波,记录为1时不发载波:

往PWM比较寄存器设置948即为设置38KPWM波,也可在初始化时固定948,在此函数内启停定时器即可;
至此,自学习功能的全部思路已实现,通过对各个不同类型的红外遥控进行功能测试,均成功。
PS:查看很多资料发现很多红外解码未判断低电平时间,个人感觉不是很好,应该是不仅高电平时间得符合,低电平时间也应该符合。
自己写了一个小函数验证了一下,这个函数只是验证,未经仔细推敲,还可优化,仅供参考这一思想。
误差设计:±200us(拍脑袋值)





解析的话一般高位在前,所以左移,经测试帧格式为:引导码+用户码+用户码反码+命令码+命令码反码,能成功解析数据!解析的话根据具体协议,具体分析。
史海拾趣
|
关于输入电阻和输出电阻,纠结了好长时间,现在终于明白了,拿出来给大家看一下,呵呵 输入电阻是用来衡量放大器对信号源的影响的一个性能指标。输入电阻越大,表明放大器从信号源取的电流 ...… 查看全部问答> |
|
evc4.0能开发运行在wince5.0的程序么? 对于bin文件有什么要求么? 还是有其他别的注意事项啊? 原来运行在wince4.2上正常的程序,到wince5.0就不是有效的wince程序了是什么问题, 详细介绍最好啊!!!… 查看全部问答> |
|
为什么用vs2005还是EVC4SP4编译刚建好的例子时总提示要连接ActiveSync呢? 为什么用vs2005还是EVC4SP4编译刚建好的例子时总提示要连接ActiveSync呢? 环境是WINCE5 ,ActiveSync装的版本是4.2中文版. 是不是调试的时候一定要插上硬件呢?不插上可以调试WINCE5平台下开发的程序吗? EVC4下的错误提示是: An application ...… 查看全部问答> |
|
求用最小系板和DS18B20来测量温度并在12864液晶上显示 各位玩MSP430的大大们,求助啦~! 想用MSP430最小系统版和DS18B20来测量温度,且在12864LCD液晶上面显现出数据来! 可不可以帮忙写下代码啊! 急用啊! 下面的CX-1A系统版的原理图 小弟感激不尽! [ 本帖最后由 z9 ...… 查看全部问答> |
|
处理一批2.4寸TFT屏,每人限购10PCS,有美女,有送! 2.4寸TFT屏,带触摸屏,ILI9320驱动!引脚定义如下图: 前天 12:21 上传下载附件 (146.79 KB) 屏的图片如下: 前天 12:21 上传下载附件 (73.57 KB) 前天 12:21 上传下载附件 (63.51 KB) 显示效果如下: ...… 查看全部问答> |
|
这几天发现一件怪事,之前的EXP430G2不能下载程序了,找了一块板还是同样的问题。 ”Fatal error:failed to re-initalize Session aborte!\" 1.4打印的信息是: Sat Nov 03, 2012 19:20:19: Firmware version 30066536 Sat Nov 03, 2012 19:20 ...… 查看全部问答> |
|
Proteus 如何利用matlab 2013A CCS5.2 实现仿真调试 楼主 求解1 Proteus 的.hex文件不能用只能用cof文件 求解2 Proteus DSP 16位的存储单元 为啥存储器寄存器区都是 8位一个单元 求 ...… 查看全部问答> |




