【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點為時序講解
例如:自動風,制冷,18攝氏度的編碼
發送"1"數據
發送"0"數據
終止符和兩個控制波形間隔
很明顯,編碼與時序都跟NEC不一樣,注定通過控制GPIO時序來發送R05D協議的編碼
2.驗證時序(重點)
通過示波器分析遙控器發送的紅外編碼
L引導碼后 接收到A=10110010=0xB2 A‘=01001101=0xB7
因此,證實了上面一部分第3點。高位先發,低位后發!!這跟NEC不一樣(NEC采用低位先發送),所以普通紅外編碼發射模塊根本不適用!!
由于之前沒有對遙控器進行時序分析,所以默認低位先發,結果還是不行,借了一個遙控器,把紅外接收管接示波器,才知道出錯了。改了時序就能實現了。
二、硬件實現
1.需要的材料
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一樣,不懂自行百度)
延時用的是嘀嗒定時器
3.調用函數并驗證
void main() {初始化函數();Normal_Code(0xB2, 0x9F, 0x00); //制冷 低風 17 }至于調控溫度,模式,自行根據協議修改發送數值就OK了!
總結
以上是生活随笔為你收集整理的【STM32】R05D电控红外协议的美的空调遥控器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FPGA之简易频率计的设计
- 下一篇: STM32单片机硬件I2C读取AHT10