玩转X-CTR100 l STM32F4 l 红外遥控接收

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】

X-CTR100控制器具有红外接收头,例程实现NEC协议的红外遥控器进行解码显示,遥控器需要自行准备。
原理
红外遥控是一种广泛应用的通信和控制手段,由于其结构简单、功耗低、抗干扰能力强、可靠性高及成本低等优点而广泛应用于家用电器、工业控制和智能仪器系统中。通用红外遥控系统由发射和接收两大部分组成。应用编码/解码专用集成电路芯片来进行控制操作。
通用红外遥控系统由发射和接收两大部分组成。应用编码/解码专用集成电路芯片来进行控制操作,如图所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。

红外遥控器是通过发送一定的控制信号来实现对电器的控制,这个控制信号就是一串红外脉冲编码信号。通过发送的不同编码脉冲来表示不同的功能按键信号,电器通过红外接收系统接收到编码脉冲,并进行相应的解码执行相应的功能,这样就实现了红外遥控家用电器的目的。由此可见编码在红外遥控系统中的重要性,不过编码方式目前还没有一个统一的国际标准,每个生产厂家所使用的编码格式各不相同。目前使用的编码标准主要有RC5、NEC、SONY、REC80、SAMSWNG等,主要是欧洲和日本生产厂家所使用的编码格式。国内家用电器的生产厂家,其编码方式多数是按照上述的各种编码方式进行编码的,应用较多的是NEC型编码方式。
本教程以常用的NEC编码标准进行说明,例程也是针对NEC编码遥控器设计。
NEC标准:遥控载波的频率为38KHz(占空比1:3)当某个键按下时,系统首先发射一个完整的全码,如果按键超过108ms仍未松开,接下来发射的代码(连发代码)将由起始码(9ms)和结束码(2.5ms)组成。
一个完整的全码 = 引导码 +用户码 +用户码 + 数据码 + 数据码 + 数据反码。

其中,引导码高电平9ms,低电平4.5ms;系统码8位,数据码8位,共32位;其中前16位为用户识别码,能区别不同的红外遥控设备,以防止不同的机种遥控码互相干扰。后16位为8位的操作码和8位的操作反码,用于核对数据是否接收准确。收端根据数据码做出应该执行上面动作的判断。连发代码是在持续按键时发送的码。它告知接收端。某键是在被连续的按着。
NEC标准下的发射码表示发射数据0时用"0.56ms高电平 + 0.565ms低电平 = 1.125ms"表示;数据1用"高电平0.56ms + 1.69ms = 2.25ms"表示。需要注意的是:当一体化接收头收到38kHz红外信号时,输出端输出低电平,否则为高电平。所以一体化接收头输出的波形和发射波形是反向的。

例程
使用定时器输入捕获功能实现了遥控器红外解码,解码后的键值和按键次数通过串口输出显示。
硬件说明
硬件资源:
- 串口UART1
- LED灯
- 红外遥控接收头
- NEC编码红外遥控器(需自备)
硬件连接:
红外接收部分硬件电路,

软件生态
X-SOFT软件生态,X-API扩展文件如下。
ax_ir.c—— 红外接收源文件
ax_ir.h——红外接收头文件
红外码的解码通过定时器TIM9的通道CH1输入捕获事件实现,通过中断函数void TIM1_BRK_TIM9_IRQHandler()实现红外解码。
用户接口函数
|
void AX_IR_Init(void); //红外遥控接口初始化 uint16_t AX_IR_ReadKeyStatus(void); //读取按键值和键次数 |
特殊说明,1.8固件 PLL_N 默认为360,实测解码错误,之前固件版本为336,改为336后,解码正常。
修改位置为,system_stm32f4xx.c,400行位置。
|
#if defined (STM32F40_41xxx) #define PLL_N 336 //360 /* SYSCLK = PLL_VCO / PLL_P */ #define PLL_P 2 #endif /* STM32F40_41xxx */ |
软件说明
使用定时器输入捕获功能实现了遥控器红外解码,解码后的键值和按键次数通过串口输出显示。
主程序代码如下。
|
int main(void) { uint16_t a; uint8_t key,cnt;
//XRT1初始化 AX_Init(115200); printf("***X-CTR100 红外接收例程***\r\n\r\n"); printf("请对着红外接收头按遥控器\r\n");
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
//红外接收初始化 AX_IR_Init();
while (1) { a = AX_IR_ReadKeyStatus();
key = a&0x00FF; // 取出键值 cnt = ((a&0x7F00)>>8); //取出按键次数
if(a) { if(a < 0x8000) //按键未抬起 { printf("Key = %X Count = %d \r\n", key, cnt ); } else { printf("Key = %X Count = %d END\r\n", key, cnt); } }
AX_Delayms(100); } } |
实现效果
遥控器对准红外接收头按键,显示键值和按键次数。

玩转X-CTR100 l STM32F4 l 红外遥控接收的更多相关文章
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- C8051 PCA实现红外遥控接收
这里使用的处理器是C8051F005.红外接收头接处理器引脚,中断方式接收按键数据. 一 PCA介绍 1.1 PCA 可编程计数器阵列(PCA)提供增强的定时器功能,与标准8051计数器/定时器相比, ...
- 红外遥控接收发射原理及ESP8266实现
红外遥控是利用近红外光进行数据传输的一种控制方式.近红外光波长0.76um~1.5um ,红外遥控收发器件波长一般为 0.8um~0.94um ,具有传输效率高,成本低,电路实现简单,抗干扰强等特点, ...
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 玩转X-CTR100 l STM32F4 l PS2无线手柄
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...
随机推荐
- C#入门经典 第六章 委托
C#入门经典 第六章 6.6 委托的声明非常类似于函数,但不带函数体,且要使用delegate关键字. 委托的声明指定了一个返回类型和一个参数列表. 在定义了委托后,就可以声明该委托类型的变量. 接着 ...
- label表单的关联性
<input type="checkbox" id="cr" /> <label for="cr">点击关联复选框& ...
- HDU 5884 Sort(二分+优先队列)
http://acm.hdu.edu.cn/showproblem.php?pid=5884 题意:有个屌丝设计了一个程序,每次可以将k个数组进行合并,代价为这k个数组总的长度之和.现在另外一个屌丝要 ...
- oadrunner11录制手机app脚本
oadrunner11录制手机app视频:http://pan.baidu.com/s/1bnc4cHL 注意点: 1.手机和loadrunner安装的电脑必须在同一网段2.视频的www.baidu. ...
- 说说前端那些事之ajax
原生ajax请求 前些日子,忙着考驾照,没有时间对知识进行总结,感到十分惭愧啊,刚好趁现在有时间,做个知识总结,希望对各位有所帮助. 很多人都知道ajax是用来进行数据请求的,但是具体的请求方法会有些 ...
- Struts2文件上传的大小限制问题
问题:上传大文件报错…… 解决:修改struts.xml文件中的参数如下 <constant name="struts.multipart.maxSize" value= ...
- U3D协程yield的使用和理解
部分内容参考网址:http://blog.csdn.net/huang9012/article/details/29595747 Win7+U3D 4.6.7 1.在c#中使用①首选需要定义一个返回值 ...
- 枚举1--求小于n的最大素数
枚举1--求小于n的最大素数 总结: 素数是不能被比它小的素数整除. /* 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计 ...
- Android Studio 常用快捷键和使用技巧
Android Studio 1.Ctrl+E,可以显示最近编辑的文件列表 2.Shift+Click可以关闭文件 3.Ctrl+[或]可以跳到大括号的开头结尾 4.Ctrl+Shift+Backsp ...
- Confluence 6 从外部目录中同步数据手动同步缓存
你可以通过单击用户目录(User Directories)界面中的同步(Synchronize)按钮,手动进行同步.如果一个同步进程已经正在同步的过程中的话,你就不能在上一个同步进程完成之前重新进行同 ...