前言

美的空调采用R05D红外协议,因此用一般红外编码发射模块无法直接对空调进行控制,本文通过获取R05D协议手册并且使用用红外接收管对原有遥控器红外接收进行波形分析。

一、R05D红外协议手册

R05D电控功能说明书:https://wenku.baidu.com/view/c46594141ed9ad51f01df2c3.html

二、编码格式

1.对于一般情况(无定时设定、无经济运行设定、无摇摆设定)。

编码格式:(不管是开机还是从其它模式转入或改变温度、风速时均发送相同的、包含所有设定信息的代码)
L,A,A’,B,B’,C,C’, S, L,A,A’,B,B’,C,C’

1.1 第一帧和第二帧相同
1.2 采用MSB在先,LSB在后;也就是高位先发(重点:手册没讲,是通过接收管波形分析出来的!!!!下一部分时序分析有说明)
1.3 L为引导码;S为分隔码;A为识别码(A=10110010=0xB2,预留方案时A=10110111=0xB7),A’为A的反码;B’为B的反码;C’为C的反码。
1.4 B,C所代表的含义如下
BC含义

在这里插入图片描述

在这里插入图片描述

2.波形规范:(接收端输出波形)

2.1 引导码:L
在这里插入图片描述
2.2 两帧之间分隔符:S
在这里插入图片描述
2.3 数据“0”
在这里插入图片描述
2.4 数据“ 1”
在这里插入图片描述
2.5 一次发码的终止符:在这里插入图片描述
2.6 发射波形
在这里插入图片描述

3.实际波形

使用逻辑分析仪测量红外接收器接收到的遥控器信号
在这里插入图片描述
由上图可知:
A:10110010 (0XB2) 设备识别码
B:00111111 (0X3F) 高风
C:10010000 (0X90) 设定温度27℃,制冷模式

三、功能实现

1.器材

本项目采用STM32F103C8T6作为主控
使用940nm红外发射器

2.电路连接

STM32需要选择具有PWM输出功能的引脚,本项目使用了PB11引脚,使用TIM2_CH4产生38kHz方波作为载波,连接至三极管的基极,控制发射器的通断。
在这里插入图片描述

3.代码实现

使用STM32CUBEMX进行配置,将定时器2通道4配置为38kHz的PWM输出,72000k/5/378=38.09≈38k。
将定时器4配置为72分频,用于获取us延时函数。

//us延时函数
void user_delaynus_tim(uint32_t nus)
{

    uint16_t  differ = 0xffff-nus-5;
    //设置定时器4的技术初始值
  __HAL_TIM_SetCounter(&htim4,differ);
  //开启定时器
  HAL_TIM_Base_Start(&htim4);

  while( differ<0xffff-5)
    {
        differ = __HAL_TIM_GetCounter(&htim4);
    };
 //关闭定时器
  HAL_TIM_Base_Stop(&htim4);
}
void Normal_Code(uint8_t A, uint8_t B, uint8_t 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();
}
void Lead_Code()
{
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 189);
	user_delaynus_tim(4400);
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 0);
	user_delaynus_tim(4400);
}
void Stop_Code()
{
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 189);
	user_delaynus_tim(540);
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 0);
	user_delaynus_tim(5220);
}

void Send_0_Code()
{
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 189);
	user_delaynus_tim(540);
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 0);
	user_delaynus_tim(540);
}

void Send_1_Code()
{
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 189);
	user_delaynus_tim(540);
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 0);
	user_delaynus_tim(1620);
}

void Send_Byte(uint8_t data)
{
	int i;
	for(i=7;i>=0;i--)
	{
		if(data & (1<<i))
		{
			Send_1_Code();
		}
		else
		{
			Send_0_Code();
		}
	}
}

4.函数调用

void main()
{
	Normal_Code(0xB2, 0x9F, 0x00); //制冷 低风 17
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐