【STM32】R05D电控红外协议的美的空调遥控器

news/2025/1/8 21:28:08/

目录

  • 一、设计思路
  • 一、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点为时序讲解

  1. 通常编码格式为: L,A,A’,B,B’,C,C’, S, L,A,A’,B,B’,C,C’
  2. 第一帧和第二帧相同
  3. 采用MSB在先,LSB在后;也就是高位先发(重点:手册没讲,是通过接收管波形分析出来的!!!!下一部分时序分析有说明)
  4. L为引导码;S为分隔码;A为识别码(A=10110010=0xB2,预留方案时A=10110111=0xB7),A’为A的反码;B’为B的反码;C’为C的反码。
  5. 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
  1. 引导码L

在这里插入图片描述

  1. 分隔码S

在这里插入图片描述

  1. 发送"1"数据 在这里插入图片描述

  2. 发送"0"数据
    在这里插入图片描述

  3. 终止符和两个控制波形间隔
    在这里插入图片描述

很明显,编码与时序都跟NEC不一样,注定通过控制GPIO时序来发送R05D协议的编码

2.验证时序(重点)

通过示波器分析遥控器发送的红外编码

在这里插入图片描述
L引导码后 接收到A=10110010=0xB2 A‘=01001101=0xB7

因此,证实了上面一部分第3点。高位先发,低位后发!!这跟NEC不一样(NEC采用低位先发送),所以普通红外编码发射模块根本不适用!!
由于之前没有对遥控器进行时序分析,所以默认低位先发,结果还是不行,借了一个遥控器,把红外接收管接示波器,才知道出错了。改了时序就能实现了。

二、硬件实现

1.需要的材料

  1. 首先要有一台空调(美的中央空调)
  2. 红外发射模块
  3. 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了!


http://www.ppmy.cn/news/128790.html

相关文章

stc8单片机控制美的空调

stc8单片机通过红外模拟成空调遥控器 文章分为红外遥控原理和单片机实现两个部分 1 红外遥控原理 通常红外遥控为了提高抗干扰性能和降低电源消耗&#xff0c;红外遥控器常用载波的方式传送二进制编码&#xff0c;常用的载波频率为38kHz&#xff0c;这是由发射端所使用的455kH…

小爱同学控制美的美居中的家电热水器,空调等

背景 家里大多数家电都是支持接入米家App的&#xff0c;美的家电不能接入小米&#xff0c;电脑安装Home Assistant成功实现小爱语音控制美的燃气热水器。 实现步骤&#xff1a; 1. 安装docker 我的电脑是windows的&#xff0c;那就直接安装docker desktop https://desktop.…

home assistant 调用api控制智能家居 小米风扇 美的空调

文章目录 打开风扇示例api官方文档&#xff1a;用到的接口1.创建token2.先获取所有可用服务的信息3.先去配置 自动化 添加自动化 动作 添加调用服务 找到你要服务比如风扇打开&#xff0c;然后选中你要操作的设备 再点击当前动作右边三个点 选择用yaml编辑除了使用device_id 还…

破解红外发射-美的空调实战篇

前言 本文带你无前提条件&#xff0c;从零模仿破解美的RN02D/BG型号空调遥控器发送原理。 1.教程的直接目的:使用stm32&#xff0b;远红外发射管开启空调。 2.包含学习知识:通过本文你可以了解stm32hal库使用定时器提供us级延迟方法&#xff0c;使用定时器pwm功能方法&#x…

美的空调和小米紧追,格力如何淡定?

各个企业都陆续公布了今年上半年的业绩&#xff0c;与格力相关的小米和美的也陆续公布了业绩&#xff0c;业绩显示美的空调业务和小米的营收与格力的差距进一步收窄&#xff0c;面对这两家企业所取得的成绩&#xff0c;显然格力已难以淡定。 请输入图片描述 格力领先优势缩小 美…

STM32解析美的空调红外遥控器

STM32解析美的空调红外遥控器 1.红外线简介 在光谱中波长自760nm至400um的电磁波称为红外线&#xff0c;它是一种不可见光。目前几乎所有的视频和音频设备都可以通过红外遥控的方式进行遥控&#xff0c;比如电视机、空调、影碟机等&#xff0c;都可以见到红外遥控的影子。这种…

618不知道买什么空调?看看美的导风黑科技“美的风尊”空调吧!

长久以来&#xff0c;人们被冷风吹出一身“问题”后&#xff0c;许多谣言便开始出现在各大平台上。 例如&#xff1a;生病不能吹空调&#xff0c;孕妇不能吹空调&#xff0c;老人小孩不能吹空调等一些类问题。但是美的为解决这样的问题推出了美的风尊这系列空调。 型号是&…

基于stm32f103红外遥控美的空调

一、红外nec协议 红外遥控的编码目前广泛使用的是&#xff1a;NEC Protocol的PWM&#xff08;脉冲宽度调制&#xff09;和Philips RC-5 Protocol的PPM&#xff08;脉冲位置调制&#xff09;&#xff0c;而美的空调大多采用nec协议的R0d电控功能。 NEC协议的特征&#xff1a; …