玩转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无线手柄是索尼游戏机的遥控手柄,控制 ...
随机推荐
- [luogu 3957]跳房子
题目链接 50分做法 挺显然的一个做法,因为金币量是单调的(如果你花i枚金币可以得到最优解,i+1枚也一定可以),所以可以二分答案 然后对于二分出来的每个答案,都做一遍dp,效率$O(n^2logn) ...
- java 类构造器中加入有参构造器及调用顺序【思路】
package com.ykmimi.new1; /** * * @author deadzq * */ public class AnyThing { public AnyThing() { thi ...
- 通过java代码对kylin进行cube build
转:http://www.cnblogs.com/hark0623/p/5580632.html 通常是用于增量 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...
- python 筛选
data=[,,,,,,,-,-] result=[x ]
- Linux 设置定时任务 清空日志
Step 1:前提是linux服务器安装了crond 定时任务需要crond服务的支持 1.启动方法 service crond restart 2.该服务默认是开机启动的 取消定时任务 1.全部取消 ...
- iOS Socket编程-C语言版(UDP)
. UDP Socket编程 先讲一讲UDP编程,因为比TCP要简单多了.首先,我们需要明白UDP是用户数据报协议,英文名为User Datagram Protocol,它是面向无连接的. 注意:So ...
- C#中的约束类型
- windows7 asp.net发布IIS 拒绝访问 解决方法
在windows7中打开DNN网站有以下问题: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP ...
- Redis之列表类型命令
Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967 ...
- Dajngo的CBV和FBV
CBV: class. base. view 路由: url(r'students/', views.StudentsView.as_view()) 视图: from django.views imp ...