用STM32F103C8T6和DS18B20复刻电赛经典:红外光通信装置从原理到调试全记录
用STM32F103C8T6和DS18B20复刻电赛经典:红外光通信装置从原理到调试全记录
红外光通信作为电子设计竞赛中的经典题型,至今仍被众多高校选为训练项目。这次我们将从硬件选型到代码调试,完整复现一个支持语音与温度数据同步传输的红外通信系统。不同于市面上常见的模块化方案,这里采用STM32F103C8T6作为主控,配合DS18B20温度传感器和CD4051模拟开关,实现真正的底层通信原理实践。
1. 系统架构设计与核心器件选型
1.1 整体通信框架
系统采用双信道并行传输机制:
- 模拟信道:传输300-3400Hz语音信号
- 数字信道:通过2ASK调制传输DS18B20采集的温度数据
关键参数对照表:
| 模块 | 实现方案 | 技术指标 |
|---|---|---|
| 主控 | STM32F103C8T6 | 72MHz Cortex-M3 |
| 温度传感 | DS18B20 | ±0.5℃精度 |
| 调制方式 | 2ASK | 载波38.4kHz |
| 传输距离 | 直连2m+中继2m | 发射电流<100mA |
1.2 为什么选择这些器件?
- STM32F103C8T6:性价比极高的"蓝色药丸"开发板,GPIO可直接驱动CD4051控制端
- DS18B20:单总线协议节省IO口,防水型号可直接测量环境温度
- CD4051:老牌模拟开关,导通电阻约80Ω,适合低频信号切换
注意:市面上有些成品红外模块内置编码协议,不符合电赛"必须使用分立器件"的要求,选购时需特别注意。
2. 硬件电路搭建要点
2.1 发射端电路设计
核心电路包含三个部分:
语音信号调理电路:
- 麦克风前置放大采用LM358运放
- 截止频率3.4kHz的低通滤波
- 红外发射管驱动电流控制在20-30mA
数字调制电路:
// STM32控制CD4051的GPIO配置 void CD4051_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); }- 电源管理:
- 数字部分3.3V供电
- 模拟部分5V独立稳压
- 中继节点需满足≤5mA的静态电流
2.2 接收端关键设计
- 光敏管选型:建议选用TSOP38238系列,自带38kHz载波解调
- 信号分离电路:
- 语音通道:带通滤波(300-3400Hz)+LM386功放
- 数据通道:比较器整形+STM32解码
3. 软件实现与协议设计
3.1 DS18B20驱动优化
常见问题及解决方案:
- 初始化失败:检查上拉电阻(4.7kΩ)和时序微秒级延迟
- 读数跳变:多次读取取中值,以下为改进版代码:
float DS18B20_GetTemp(void) { uint8_t temp[5]; for(int i=0; i<5; i++) { DS18B20_Start(); temp[i] = DS18B20_ReadTemp(); HAL_Delay(10); } // 排序取中值 bubbleSort(temp, 5); return temp[2] * 0.0625; }3.2 2ASK调制实现
调制流程分四步完成:
- 配置定时器产生38.4kHz PWM载波
- 串口数据打包为Manchester编码
- 通过CD4051切换载波通断
- 接收端采用过零检测解调
关键参数配置:
// 定时器PWM配置 TIM_OC_InitTypeDef sConfigOC = {0}; htim3.Instance = TIM3; htim3.Init.Prescaler = 0; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 72; // 72MHz/72=1MHz htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim3); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 36; // 50%占空比 HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2);4. 调试实战与问题排查
4.1 典型故障现象分析
数字信号中继后丢失:
- 检查发现CD4051控制信号在长线传输时产生振铃
- 解决方案:在控制线串联100Ω电阻并加10pF对地电容
语音信号失真:
- 示波器显示发射管驱动电流不足
- 调整三极管基极电阻使Ic达到25mA
4.2 性能优化技巧
降低中继节点功耗:
- 选用CMOS型运放如LMC6482
- 动态调整红外发射功率
- 实测电流从8mA降至4.6mA
提高传输可靠性:
- 数据包增加CRC校验
- 关键代码段关闭中断
- 红外接收管偏置电压优化
调试建议:先用杜邦线搭建原型系统,确认功能正常后再制作PCB。遇到问题时,按"电源→时钟→信号通路"的顺序排查。
5. 进阶改进方向
5.1 信道抗干扰优化
- 采用伪随机码扩频技术
- 自适应均衡器设计
- RSSI信号强度指示
5.2 系统扩展可能
- 增加多节点组网功能
- 开发上位机监控软件
- 结合太阳能供电方案
在最近一次实验室测试中,这套系统实现了3.2米的有效传输距离(含一次中继),温度数据刷新间隔仅3秒。特别提醒注意红外管件的安装角度,实际测试表明±15°的偏移就会导致信号强度下降40%。
