【STM32】R05D电控红外协议的美的空调遥控器
目录
- 一、设计思路
- 一、R05D红外协议原理
- 1.协议手册理解
- 2.验证时序(重点)
- 二、硬件实现
- 1.需要的材料
- 2.对发射模块电路进行修改
- 3.STM32 GPIO选择
- 三、代码实现
- 1.载波38kHZ实现
- 2.R05D时序实现
- 3.调用函数并验证
一、设计思路
通常红外遥控采用NEC传输协议,而美的空调采用的是R05D红外协议(应该是自己设计的协议),因此用一般红外编码发射模块无法直接对空调进行控制。
解决方法:获取R05D协议手册 + 用红外接收管对原有遥控器红外接收进行波形分析。
一、R05D红外协议原理
R05D电控功能说明书:https://wenku.baidu.com/view/c46594141ed9ad51f01df2c3.html
1.协议手册理解
总的来说,编码与时序都跟NEC不一样。 下面1–5点为编码讲解;6–10点为时序讲解
- 通常编码格式为: L,A,A’,B,B’,C,C’, S, L,A,A’,B,B’,C,C’
- 第一帧和第二帧相同
- 采用MSB在先,LSB在后;也就是高位先发(重点:手册没讲,是通过接收管波形分析出来的!!!!下一部分时序分析有说明)
- L为引导码;S为分隔码;A为识别码(A=10110010=0xB2,预留方案时A=10110111=0xB7),A’为A的反码;B’为B的反码;C’为C的反码。
- B、C含义如下
例如:自动风,制冷,18摄氏度的编码
L 10110010 01001101 10111111 01000000 00010000 11101111 S L ...(省略)
L 0xB2 0x4D 0xBF 0x40 0x10 0xEF S L 0xB2 0x4D 0xBF 0x40 0x10 0xEF
- 引导码L
- 分隔码S
发送"1"数据
发送"0"数据
终止符和两个控制波形间隔
很明显,编码与时序都跟NEC不一样,注定通过控制GPIO时序来发送R05D协议的编码
2.验证时序(重点)
通过示波器分析遥控器发送的红外编码
L引导码后 接收到A=10110010=0xB2 A‘=01001101=0xB7
因此,证实了上面一部分第3点。高位先发,低位后发!!这跟NEC不一样(NEC采用低位先发送),所以普通红外编码发射模块根本不适用!!
由于之前没有对遥控器进行时序分析,所以默认低位先发,结果还是不行,借了一个遥控器,把红外接收管接示波器,才知道出错了。改了时序就能实现了。
二、硬件实现
1.需要的材料
- 首先要有一台空调(美的中央空调)
- 红外发射模块
- STM32F1
2.对发射模块电路进行修改
由于买的发射模块自带编码,不用NEC编码只能改电路(这里推荐直接买红外发射模块就好了,不带任何编码的那种)
根据原理图,把IRT引出来跟STM32的IO口相接
实物图如下:
直接焊接一条杜邦线,跟STM32相连接
这时候,只需要控制STM32GPIO的输出,就可以控制红外发射的波形,而不需要用到编码芯片了
3.STM32 GPIO选择
本人用的是蓝桥杯嵌入式的开发板(stm32f103rbt6),至于其他芯片也几乎大同小异。
由于载波频率为38KHZ,GPIO必须有定时器功能,因为可以输出PWM波形,设置频率38KHZ,控制输出与否就能实现编码时序。
这里选择使用PA1,属于定时器2通道2
通过搞懂协议原理和修改电路并进行连接后,只需要写出对的时序控制代码就能控制空调了!!
三、代码实现
1.载波38kHZ实现
由于TIM2的输入时钟为72MHZ,通过分频和自动重装载值的设定,得出PWM的频率为72Mhz / 5(预分频) / 378(计数次数) ≈ 38Khz
void TIM_PWM_Init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;GPIO_InitTypeDef GPIO_InitStructure;/* TIM2 clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* PA1引脚设置 */TIM_TimeBaseStructure.TIM_Period = 378; //72 000khz/378/5 = 38.09khzTIM_TimeBaseStructure.TIM_Prescaler = 5-1;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//TIM2预分频设置:72kHZ。APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz /* Channel 2 Configuration in PWM mode */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能// TIM_OCInitStructure.TIM_Pulse=500;//设置占空比时间TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM2, &TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能预装载寄存器//使能TIM2定时计数器TIM_Cmd(TIM2, ENABLE);
}
2.R05D时序实现
通过改变比较计数器,来输出高电平和低电平
接收高电平:对于发送来说就是输出低,比较值为0,占空比0%,红外无输出
接收低电平:对于发送来说就是输出高,比较值为189,占空比50%,红外输出载波
(此发送接收关系与NEC一样,不懂自行百度)
延时用的是嘀嗒定时器
void Lead_Code()
{TIM_SetCompare2(TIM2,189); //接收器拉低delay_us(4400);TIM_SetCompare2(TIM2,0); //接收器拉高delay_us(4400);
}void Stop_Code()
{TIM_SetCompare2(TIM2,189); //接收器拉低delay_us(540);TIM_SetCompare2(TIM2,0); //接收器拉高delay_us(5220);
}void Send_0_Code()
{TIM_SetCompare2(TIM2,189); //接收器拉低delay_us(540);TIM_SetCompare2(TIM2,0); //接收器拉高delay_us(540);
}void Send_1_Code()
{TIM_SetCompare2(TIM2,189); //接收器拉低delay_us(540);TIM_SetCompare2(TIM2,0); //接收器拉高delay_us(1620);
}void Send_Byte(u8 data)
{int i;for(i=7;i>=0;i--){if(data & (1<<i)){Send_1_Code();}else{Send_0_Code();}}
}void Normal_Code(u8 A, u8 B, u8 C)
{Lead_Code();Send_Byte(A);Send_Byte(~A);Send_Byte(B);Send_Byte(~B);Send_Byte(C);Send_Byte(~C);Stop_Code();Lead_Code();Send_Byte(A);Send_Byte(~A);Send_Byte(B);Send_Byte(~B);Send_Byte(C);Send_Byte(~C);Stop_Code();
}
3.调用函数并验证
void main()
{初始化函数();Normal_Code(0xB2, 0x9F, 0x00); //制冷 低风 17
}
至于调控温度,模式,自行根据协议修改发送数值就OK了!
【STM32】R05D电控红外协议的美的空调遥控器相关推荐
- STM32中断回调函数定时器-STM32电控学习笔记06
STM32中断&定时器-STM32电控学习笔记06 day6:2022/9/24 [中断概述] 在 STM32 中,对信号的处理可以分为轮询方式和中断方式,轮询方式就是不断去访问一个信号的端口 ...
- 米家机扫拖机器人说明书_【米家扫拖机器人1C怎么样使用体验】动态导航|缓冲模块|电控水箱|红外发射|APP_摘要频道_什么值得买...
米家扫拖机器人1C怎么样使用体验(动态导航|缓冲模块|电控水箱|红外发射|APP) 米家扫拖机器人1C外盒延续了米家的极简风,米家LOGO.产品素描图以及3个产品特征,没有其他多余的描述介绍.打开包装 ...
- 搭建机器人电控系统——MCU基石——STM32 GPIO原理
文章目录 搭建机器人电控系统--MCU基石 GPIO是什么? GPIO的模式 5种输入模式: 4种输出模式: GPIO的输出速度 搭建机器人电控系统--MCU基石 在上一章中,我讲解了搭建一个机器人电 ...
- 翻转电平函数实现LED闪烁-STM32电控学习笔记05
翻转电平函数实现LED闪烁-STM32电控学习笔记05 day5:2022/9/23 [函数介绍] 在前面帖子大致了解了一下HAL_GPIO_WritePin()函数和HAL_Delay()函数的用法 ...
- PWM控制LED亮度(2-呼吸灯)-STM32电控学习笔记10
PWM控制LED亮度(2-呼吸灯)-STM32电控学习笔记10 day10:2022/9/29 前面学了两三天的PWM了,PWM本身不难理解,至于为啥进度缓慢,还不是这时钟定时器分频值重装载啥的太难理 ...
- 【Robomaster】电控入门手册
文章目录 0 电控介绍 0.1 电控学习内容 0.2 物资准备 1 C语言学习 1.1 学习资料 1.2 学习规划 1.2.1 基础 1.2.2 函数 1.2.3 数组 1.2.4 进阶 2 Ardu ...
- 搭建机器人电控系统——通信协议——CAN通信及其实例
通信协议 串口通信详解 IIC通信详解 SPI通信详解 CAN通信详解 文章目录 通信协议 CAN通信 什么是CAN通信? CAN通信的优点: CAN通信电平格式: CAN通信的结构: CAN通信协议 ...
- 点亮LED-STM32电控学习笔记03
Robocon战队电控学习笔记03 day3:2022/9/21 [基本界面/结构] 在学习开始之前肯定要先了解我们开发的是个什么东西,每个部位是啥功能,这里我放几张官方(fuza)的图片 图一:C板 ...
- 基于 OTA 场景的电控信息安全研究
本文由丛聪,孙潇,史家涛联合创作 摘要 本文首先简单阐述了车联网信息安全现状,并对电控单元 (ECU) 信息安全概念和空中下载技术 (OTA) 概念进行了简要描述:其后,主要分析了车联网典型应用场景 ...
最新文章
- 深入理解 RPC 之集群篇
- Python 字符串的所有方法详解
- zendStudio|Eclipse 相关收藏
- 计算机达人成长之路(3)连载
- Android Loader 异步加载详解二:探寻Loader内部机制
- 关于字符集--总结,补遗以及问题
- 签入在服务器上之后,别人获取了,在解决方案资源管理器中找不到。
- vue 列表渲染 v-for
- STL vector 用法
- Unity上的Oculus Quest2开发(1) ——首先要空工程能在Quest上跑起来吧
- 为什么 iPhone 的原装充电线容易坏?
- 关于学习的反思(上)---系网开发记(2)
- 虚拟机win10系统安装详细教程
- 龙之谷冰龙linux手工服务端,【网游】【龙之谷】v300冰龙巢穴一键服务端+客户端+GM工具+视频教程...
- 微信小程序头像怎么改变形状_微信小程序头像怎么改
- Structs详细用法(一)
- 互联网日报 | 贾跃亭宣布破产重组完成;小米发布首款OLED电视;湖南迎来首家本土航空公司...
- MachO 代码签名剖析
- 【论文阅读笔记 + 代码解读】(2018 AAAI)ST-GCN
- python返回列表中最大和第二大的元素
热门文章
- 【论文阅读】Underwater Image Enhancement: Using Wavelength Compensation and Image Dehazing(WCID)
- 朴素贝叶斯文本分类java_朴素贝叶斯文本分类简单介绍
- redis 之sentinel配置
- 数字基带信号及其频谱特性
- 关于使用讯搜(xunsearch)过程中遇到的坑
- PageRank算法改进
- LB10S-ASEMI整流桥LB10S
- Leetcode 1599. Maximum Profit of Operating a Centennial Wheel (python)
- booth乘法器的原理与verilog实现
- 前端唯一标识那些事儿