当前位置: 首页 > article >正文

保姆级教程:用STM32F103C8T6的PWM驱动红外模块,实现格力空调万能遥控器

从零构建格力空调万能遥控器基于STM32F103C8T6的PWM红外协议全解析在智能家居DIY领域红外遥控器改造一直是最具实用价值的入门项目之一。本文将带您完整实现一个能精准控制格力空调的STM32红外发射器使用最常见的STM32F103C8T6开发板蓝桥杯竞赛和正点原子开发板标配型号和廉价的红外发射模块。不同于简单的代码复制我们会深入解析格力空调特有的起始码35位连接码32位连接码帧结构并通过PWM精确生成38kHz载波与协议时序。1. 硬件准备与电路连接1.1 所需材料清单核心控制器STM32F103C8T6最小系统板市场价约15-20元红外发射模块38kHz红外发射管建议选用TSAL6200辅助元件100Ω限流电阻NPN三极管如S8050面包板与杜邦线1.2 电路连接示意图STM32F103C8T6 红外发射电路 PA1 (PWM输出) ────┬─── 100Ω电阻 ────┤ │ │ └─── NPN三极管基极 发射极接地 集电极接红外管负极 红外管正极接3.3V注意红外发射管有极性区分长脚为正极。实际连接时建议用万用表二极管档确认。1.3 引脚配置原理STM32的定时器TIM2通道2PA1引脚将产生38kHz PWM载波。当需要发送红外信号时我们通过控制PWM的占空比来模拟协议要求的各种电平宽度载波周期26.3μs (38kHz倒数)有效信号PWM占空比50%13.15μs高13.15μs低静默状态PWM输出保持低电平2. 格力空调红外协议深度解析2.1 帧结构示意图格力空调采用独特的双数据段结构[起始码S] [35位数据] [连接码C] [32位数据] [连接码C]每个部分的时序要求如下表所示信号类型发射端电平宽度μs接收端电平宽度μs起始码S9000低 4500高4500高 9000低数据位0620低 540高540高 620低数据位1620低 1620高1620高 620低连接码C620低 20000高20000高 620低关键细节实际发射时所有电平极性需要反转即发射端的低电平对应接收端的高电平2.2 数据格式详解格力协议采用7字节56位数据结构但实际只使用前35位和后32位。以下是一个典型的功能控制位分布typedef struct { // 第一段35位数据 uint8_t power : 1; // 开关机标志 uint8_t mode : 3; // 模式选择(自动/制冷/除湿/送风/制热) uint8_t fan : 2; // 风速档位 uint8_t temp : 4; // 温度设置(16-30℃) // 第二段32位数据 uint8_t swing_v : 4; // 垂直扫风 uint8_t turbo : 1; // 强力模式 uint8_t econo : 1; // 节能模式 uint8_t light : 1; // 显示屏开关 } GreeProtocol;2.3 校验码计算方法格力空调采用4位校验和计算规则如下取前6个字节的低4位相加加上固定值0x0C对结果取低4位作为校验码具体实现代码uint8_t calculate_checksum(GreeProtocol *proto) { uint8_t sum 0x0C; // 基础值 uint8_t *data (uint8_t*)proto; for(int i0; i6; i) { sum (data[i] 0x0F); // 累加每个字节的低4位 } return sum 0x0F; // 取最后4位 }3. PWM驱动实现详解3.1 定时器配置步骤以下是STM32标准外设库的配置代码void PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_OCInitTypeDef TIM_OCStruct; // 1. 时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 2. GPIO配置复用推挽输出 GPIO_InitStruct.GPIO_Pin GPIO_Pin_1; GPIO_InitStruct.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStruct); // 3. 时基单元配置38kHz载波 TIM_TimeBaseStruct.TIM_Prescaler 72 - 1; // 72MHz/72 1MHz TIM_TimeBaseStruct.TIM_Period 26 - 1; // 1MHz/26 ≈ 38.46kHz TIM_TimeBaseStruct.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, TIM_TimeBaseStruct); // 4. 输出比较配置PWM模式1 TIM_OCStruct.TIM_OCMode TIM_OCMode_PWM1; TIM_OCStruct.TIM_OutputState TIM_OutputState_Enable; TIM_OCStruct.TIM_Pulse 13; // 50%占空比 TIM_OCStruct.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC2Init(TIM2, TIM_OCStruct); // 5. 启动定时器 TIM_Cmd(TIM2, ENABLE); }3.2 信号发送核心算法通过动态调整PWM占空比实现协议要求的各种电平#define BIT_MARK 620 #define ZERO_SPACE 540 #define ONE_SPACE 1620 void send_bit(uint8_t bit_val) { // 发送起始位固定620μs低电平 TIM_SetCompare2(TIM2, 0); delay_us(BIT_MARK); // 发送数据位高电平持续时间不同 TIM_SetCompare2(TIM2, 13); // 50%占空比 delay_us(bit_val ? ONE_SPACE : ZERO_SPACE); } void send_frame(uint8_t *data, uint16_t bit_count) { // 发送起始码 TIM_SetCompare2(TIM2, 0); delay_us(9000); TIM_SetCompare2(TIM2, 13); delay_us(4500); // 逐位发送数据 for(int i0; ibit_count; i) { uint8_t byte_pos i / 8; uint8_t bit_pos i % 8; send_bit((data[byte_pos] bit_pos) 0x01); } // 发送连接码 TIM_SetCompare2(TIM2, 0); delay_us(620); TIM_SetCompare2(TIM2, 13); delay_us(20000); }4. 完整控制流程与调试技巧4.1 典型控制序列初始化硬件PWM、GPIO、定时器构建协议帧GreeProtocol cmd; cmd.power 1; // 开机 cmd.mode 2; // 制冷模式 cmd.temp 25 - 16; // 25℃偏移量16 cmd.fan 2; // 中等风速 cmd.checksum calculate_checksum(cmd);发送完整帧send_frame((uint8_t*)cmd, 35); // 第一段35位 send_connect_code(); send_frame((uint8_t*)cmd 4, 32); // 第二段32位 send_connect_code();4.2 常见问题排查表现象可能原因解决方案空调完全无反应红外发射管极性接反检查LED正负极连接偶尔能触发载波频率偏差过大用示波器校准38kHz频率按键响应不稳定时序精度不足改用硬件定时器延时校验失败结构体字节对齐问题添加__packed关键字修饰4.3 进阶优化建议载波增强在红外管回路串联多个发射管不超过3个提高发射功率低功耗设计在两次发送之间将GPIO设为模拟输入模式减少功耗协议扩展通过分析不同型号格力遥控器的数据包添加特殊功能支持实际测试中发现格力空调对时序的要求相对宽松但连接码的20ms静默期必须准确。建议用逻辑分析仪捕获原始遥控器信号作为参考特别是检查第二段数据后的连接码是否完整发送。

相关文章:

保姆级教程:用STM32F103C8T6的PWM驱动红外模块,实现格力空调万能遥控器

从零构建格力空调万能遥控器:基于STM32F103C8T6的PWM红外协议全解析 在智能家居DIY领域,红外遥控器改造一直是最具实用价值的入门项目之一。本文将带您完整实现一个能精准控制格力空调的STM32红外发射器,使用最常见的STM32F103C8T6开发板&…...

ArcGIS数据入库避坑指南:为什么你的BSM标识码总出错?3个常见问题解析

ArcGIS数据入库避坑指南:BSM标识码生成的3个致命陷阱与实战解决方案 自然资源数据入库就像给城市绘制数字身份证,而BSM标识码就是每块土地的"身份证号"。去年某省级国土调查项目中,37%的入库驳回案例都源于标识码错误——要么行政代…...

FPGA 外置Flash的读写,用户数据存储

FPGA 外置Flash的读写,用户数据存储前言一,该功能验证平台及参考文章1,Xilinx xc7k325tffg676-22,vivado 2017.43,验证的flash芯片:MT25QL2564,参考文章:MT25QL256_datasheet5&#…...

MCP23017 vs 74系列芯片:51单片机IO扩展方案对比与实战

MCP23017与74系列芯片:51单片机IO扩展方案深度解析与实战指南 当51单片机的GPIO资源捉襟见肘时,工程师们往往面临两种主流扩展方案的选择:传统的74系列逻辑芯片与现代化的MCP23017端口扩展器。这两种技术路线各具特色,适用于不同的…...

从IF控制到精准定位:Hall自学习如何重塑无感电机控制

1. 为什么我们需要Hall自学习技术 想象一下你正在组装一台电动滑板车。当你把电机装好准备测试时,发现转速总是不稳定,有时候还会突然卡顿。这种情况很可能就是由于电机内部的Hall传感器安装存在物理偏差导致的。传统电机控制模型假设三个Hall传感器之间…...

NumPy 中 transpose 详解

transpose 用于 NumPy 中高维度数组的轴变换,在二维情况下就是通常说的转置。该方法很不好理解,本文详细介绍该方法。 该方法有两个实现,分别是numpy.ndarray.transpose和numpy.transpose,两者分别是类成员方法和独立的方法&…...

FDTD仿真中PDMS光学参数txt文件的获取、验证与应用指南

1. PDMS光学参数在FDTD仿真中的重要性 做光学仿真的人都知道,材料参数准不准直接决定了仿真结果靠不靠谱。我刚开始用FDTD Solutions仿真PDMS微流控器件时,就吃过参数不准的亏——仿真结果和实验数据差了一大截,折腾了好几天才发现是折射率数…...

PPTist在线演示工具:5分钟快速制作专业幻灯片的完整指南

PPTist在线演示工具:5分钟快速制作专业幻灯片的完整指南 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing …...

【数据库】Redis的线程与IO

百万笔记知识库, 所有基础的笔记都在这里面啦,点击左边蓝字即可获取!助力每一位未来架构师! 欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘 文章目录线程模型通信流程文件事件处理器…...

《手把手教你评估二手车》林绪东 读书笔记

目录笔记一.事故车鉴定1.车漆2.缝隙及整车3.车身骨架笔记 一.事故车鉴定 事故车定义:存在结构性损伤的车辆,以及泡水、火烧车等。 不可通过拆卸螺丝更换的部件,多为结构件。 1.车漆 目的:1.车漆→车伤;2.车漆扣费 检…...

终极指南:如何免费解锁Cursor Pro全部功能,实现无限AI编程助手体验

终极指南:如何免费解锁Cursor Pro全部功能,实现无限AI编程助手体验 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能:…...

SAP PP实战:MRP Area怎么用?手把手教你按产线、委外供应商拆分物料计划

SAP PP实战:MRP Area精细化物料计划管理指南 引言 在制造业生产计划管理中,物料需求计划(MRP)的精确性直接影响着生产效率与成本控制。传统以工厂为单位的MRP运行模式往往难以应对复杂生产环境下的精细化需求——当多条产线并行运…...

Gold-YOLO:从论文到实践,深入剖析其高效目标检测的聚合-分发机制

1. 为什么需要Gold-YOLO的聚合-分发机制 目标检测领域有个经典难题:如何让模型同时看清远处的小目标和近处的大目标?这个问题困扰了研究者多年。传统解决方案FPN(特征金字塔网络)和PANet虽然在一定程度上缓解了多尺度检测的困难&a…...

上门做饭系统的数据可视化大屏:基于Echarts的实时业务监控与源码剖析

一、系统架构总览与业务背景1.1 上门做饭系统业务场景分析上门做饭系统是一种创新的O2O生活服务平台,连接专业厨师与有烹饪需求的用户。系统核心业务包括:用户端App(下单、支付、评价)、厨师端App(接单、路线规划、服务…...

【AI】《Autonomous Vehicles Learning Notes》

文章目录 1、自动驾驶简介 2、感知 传感器 多模态传感器融合 高精尖地图 BEV Occupancy Corner Cases 智能座舱芯片 3、End-to-end 4、Interesting Application 无头汽车 红绿灯检测 【附录】专业名词缩写 未完待续。。。 1、自动驾驶简介 来自:浅谈自动驾驶技术与挑战 L0:主…...

租了台RTX 4070服务器,终于跑通了NVIDIA Isaac Sim 4.2.0(附完整安装避坑指南)

云端RTX 4070实战:零基础部署NVIDIA Isaac Sim 4.2.0全流程实录 去年在机器人竞赛现场,当我那台搭载GTX 1660的笔记本在加载仿真环境时频频崩溃,才真正意识到高性能计算资源对AI机器人开发的决定性影响。这次经历促使我开始探索云端GPU解决方…...

UE4SS技术架构深度解析:从注入原理到虚幻引擎逆向工程完整解决方案

UE4SS技术架构深度解析:从注入原理到虚幻引擎逆向工程完整解决方案 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/r…...

UART接收机设计:如何通过过采样策略提升波特率容错性

1. UART通信的波特率容差挑战 第一次用STM32做UART通信时,我遇到过这样的问题:明明发送端和接收端都设置了相同的115200波特率,但收到的数据总是出现乱码。后来用逻辑分析仪抓波形才发现,原来是两边的时钟源存在0.5%的偏差。这个经…...

实战教程:星图平台私有化部署Qwen3-VL:30B,实现本地AI多模态能力

实战教程:星图平台私有化部署Qwen3-VL:30B,实现本地AI多模态能力 1. 项目概述与准备工作 1.1 为什么选择Qwen3-VL:30B? Qwen3-VL:30B是目前最强大的开源多模态大模型之一,具备300亿参数规模,能够同时处理文本和图像…...

强化学习玩转目标检测:从决策建模到工业实战

1. 强化学习如何重新定义目标检测 传统的目标检测方法就像拿着放大镜在沙滩上找贝壳——你需要反复调整放大镜的位置和倍数,直到看清贝壳的轮廓。而强化学习则像训练一只聪明的海鸥,让它学会自己找到贝壳的最佳观察角度。这种范式转变让目标检测从"…...

FPGA图像采集卡设计笔记:为你的GigE Vision IP相机加个10G网口的升级攻略

FPGA图像采集卡10G网口升级实战:突破千兆带宽瓶颈的设计精要 当Basler相机的CMOS传感器分辨率从500万像素跃升至2000万,千兆以太网的传输带宽瞬间成为系统瓶颈。我曾亲眼见过一位工程师在调试4K60fps图像流时,千兆网口的数据指示灯疯狂闪烁&a…...

AMD Ryzen处理器SMU调试工具:3步解锁隐藏性能潜力

AMD Ryzen处理器SMU调试工具:3步解锁隐藏性能潜力 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcod…...

Python OCR实战:pytesseract高级配置与场景化应用指南

1. 为什么需要pytesseract高级配置? 第一次用pytesseract做OCR识别时,我直接调用了最简单的image_to_string()方法。结果遇到模糊图片时识别率惨不忍睹,处理表格文本时更是错漏百出。后来才发现,Tesseract引擎提供了20种参数配置组…...

Elasticsearch连接中断:深入解析Connection reset by peer问题及优化策略

1. 当Elasticsearch突然"失联"时发生了什么? "Connection reset by peer"这个错误就像你正在和朋友打电话,对方突然毫无预兆地挂断。对于Elasticsearch来说,这意味着客户端还保持着连接状态,但服务端已经单方…...

电路板短路排查实战:从基础检测到精准定位

1. 电路板短路排查的入门指南 刚入行那会儿,我最怕遇到电路板短路的问题。一块价值上万的板子,可能因为一粒锡珠就报废了。记得第一次独立排查短路,我拿着万用表在板子上戳了整整两天,最后发现是电源插座背面两根引脚搭在了一起。…...

Pinpoint 3.0.3 监控探针深度优化:如何调整采样率与错误状态码捕获策略

Pinpoint 3.0.3 监控探针深度优化:采样率与错误状态码捕获策略实战指南 当系统监控数据量呈指数级增长时,如何平衡监控精度与资源消耗成为技术团队面临的现实挑战。某电商平台在促销期间曾因全量采集监控数据导致分析系统过载,而另一家金融企…...

Python零基础到精通教程,字典(dict)与集合(set)

字典和集合是 Python 中最常用、最高效的两种数据结构,都基于哈希表实现,查询速度极快。本教程包含核心用法、代码示例、实战使用场景,新手也能直接学会。一、字典(dict)详解1. 什么是字典?字典是键值对&am…...

BetterNCM Installer:网易云音乐插件管理从未如此简单

BetterNCM Installer:网易云音乐插件管理从未如此简单 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾因网易云音乐功能有限而烦恼?是否羡慕其他音乐播…...

终极Dayflow性能优化指南:从存储限制到高效运行的完整配置方案

终极Dayflow性能优化指南:从存储限制到高效运行的完整配置方案 【免费下载链接】Dayflow The automatic work journal. Privately turns your screen into a timeline of what you actually accomplished. Open-source and local-first. 项目地址: https://gitcod…...

Spring Boot项目里,用oshi-core 6.3.0做个服务器健康监控面板(附完整代码)

Spring Boot集成oshi-core 6.3.0构建企业级服务器监控面板实战 在微服务架构盛行的今天,系统监控已成为保障服务稳定性的关键环节。对于Java开发者而言,如何在Spring Boot项目中快速搭建一套轻量级、低侵入的服务器健康监控系统,是提升运维效…...