玩转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无线手柄是索尼游戏机的遥控手柄,控制 ...
随机推荐
- Web前端代码规范
新增:http://materliu.github.io/code-guide/#project-naming HTML 原则1.规范 .保证您的代码规范,保证结构表现行为相互分离.2.简洁.保证代码 ...
- HDU 5877 Weak Pair(树状数组+dfs+离散化)
http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意: 给出一棵树,每个顶点都有权值,现在要你找出满足要求的点对(u,v)数,u是v的祖先并且a[u]*a ...
- WPF基础学习笔记整理 (一)
基础知识: WPF:Windows Presentation Foundation,用于Windows的现代图形显示系统: WPF用于编写应用程序的表示层: 引入“内置硬件加速”和“分辨率无关”: S ...
- python 数据交换
例1 def change(data): data[],data[]=data[],data[] print('函数内交换位置后:') ): print('data[%d]=%3d' %(i,data ...
- Python day17 模块介绍1(time,random)
module模块和包的介绍(略掉了) 常用模块 # time模块 import time print(time.time())#时间戳,在1970年开始到现在一共多少秒 print(time.gmti ...
- eclipse开发go语言入门案例
1.配置eclipse下配置GO语言的插件 点击eclipse的“Help”菜单,找到“Install New Software…”菜单项.如下图: 点击“Install New Software…” ...
- 远程SqlServer服务器
①,安装net framework3.5. ②,安装sqlserver2014(例). ③,基本配置. 安装sqlserver2014时,开启混合认证模式.当然,也可以在安装后,通过sqlserver ...
- Codeforces 834C - The Meaningless Game
834C - The Meaningless Game 数学. 思路1:判断a•b能不能化成v3且a%v==0且b%v==0.v可以直接用pow求(或者用cbrt),也可以二分求:还可以用map映射预 ...
- Codeforces 580A - Kefa and First Steps
580A - Kefa and First Steps 思路:dp dp[i]表示包括前i个元素中a[i]在内的最大增序列. 代码: #include<bits/stdc++.h> usi ...
- 为什么需要API网关?
目录 0:00 微服务与网关(Microservices & API Gateways) 大家好,我叫Macro,今天我们谈论有关微服务和网关的话题.我是Mashape的CTO,也同时是开源网 ...