发布时间:2026/7/15 13:45:44
嵌入式实战解析:从PWM输出到输入捕获的完整信号链路 1. PWM信号生成基础PWM脉冲宽度调制是嵌入式系统中最常用的信号控制技术之一。我第一次接触PWM是在大学做智能车项目时当时需要控制电机转速。老师给了我们一个简单的比喻PWM就像快速开关的水龙头通过控制开关的时间比例来控制水流大小。定时器是PWM的核心。以STM32为例每个通用定时器有4个独立通道每个通道都可以配置为PWM输出模式。关键寄存器包括TIMx_ARR自动重装载寄存器决定PWM周期TIMx_CCRx捕获/比较寄存器决定占空比TIMx_CNT计数器寄存器实时计数值// STM32 PWM初始化示例寄存器版 void PWM_Init(TIM_TypeDef* TIMx, uint32_t channel, uint16_t arr, uint16_t psc) { // 1. 使能时钟 if(TIMx TIM1) RCC-APB2ENR | RCC_APB2ENR_TIM1EN; else if(TIMx TIM2) RCC-APB1ENR | RCC_APB1ENR_TIM2EN; // 2. 配置时基单元 TIMx-PSC psc - 1; // 预分频 TIMx-ARR arr - 1; // 自动重装载值 // 3. 配置PWM模式 switch(channel) { case 1: TIMx-CCMR1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // PWM模式1 TIMx-CCER | TIM_CCER_CC1E; // 使能通道1 break; // 其他通道类似配置... } // 4. 启动定时器 TIMx-CR1 | TIM_CR1_CEN; }实际项目中我常用PWM控制LED亮度。比如要实现呼吸灯效果需要动态调整CCR值。有个坑要注意当ARR值较小时如100亮度变化会显得不平滑。后来我发现将ARR设为1000左右再用浮点运算计算CCR值效果会好很多。2. 输入捕获技术解析输入捕获是PWM的逆向过程用于测量外部信号的时序参数。去年做无人机项目时我需要测量遥控器接收机的PWM信号输入捕获帮了大忙。输入捕获的工作流程配置定时器时钟和捕获通道设置捕获边沿上升沿/下降沿触发捕获时当前CNT值锁存到CCR计算相邻捕获值差值得到脉宽测量PWM的关键是双边沿捕获。通常需要两个通道配合通道1捕获上升沿记录周期开始通道2捕获下降沿记录高电平时间// 输入捕获中断处理示例 void TIMx_IRQHandler(void) { if(TIMx-SR TIM_SR_CC1IF) { // 通道1捕获 rising_edge TIMx-CCR1; TIMx-CCER ^ TIM_CCER_CC1P; // 切换捕获边沿 } if(TIMx-SR TIM_SR_CC2IF) { // 通道2捕获 falling_edge TIMx-CCR2; duty_cycle (falling_edge - rising_edge) * 100 / period; } TIMx-SR 0; // 清除中断标志 }实测中发现高频信号1MHz测量需要优化代码使用DMA传输捕获值减少中断延迟开启定时器预分频降低计数频率使用从模式自动复位计数器3. 完整信号链路实现构建闭环控制系统时我常用一个定时器同时做PWM输出和输入捕获。最近做的智能窗帘项目就是这样实现的硬件连接TIM3_CH1PA6输出PWM控制电机TIM3_CH2PA7输入捕获检测限位开关关键配置// 定时器3配置PWM输出输入捕获 void TIM3_Config(void) { // 共用时基配置 TIM3-PSC 84 - 1; // 1MHz计数频率 TIM3-ARR 10000 - 1; // 10ms周期 // PWM输出配置通道1 TIM3-CCMR1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1; // PWM模式1 TIM3-CCER | TIM_CCER_CC1E; // 输出使能 // 输入捕获配置通道2 TIM3-CCMR1 | TIM_CCMR1_CC2S_0; // CC2通道输入 TIM3-CCER | TIM_CCER_CC2E | TIM_CCER_CC2P; // 下降沿捕获 TIM3-DIER | TIM_DIER_CC2IE; // 捕获中断使能 NVIC_EnableIRQ(TIM3_IRQn); TIM3-CR1 | TIM_CR1_CEN; }抗干扰设计经验在捕获引脚加10kΩ上拉电阻配置输入滤波TIMx_CCMRx中的ICF位软件去抖连续3次捕获值差5%才确认有效4. 高级应用与调试技巧在工业电机控制项目中我遇到了信号同步问题多个PWM需要严格同步输出。解决方案是使用定时器的主从模式配置TIM1为主模式Master设置TRGO输出为更新事件其他定时器TIM2/TIM3为从模式从定时器选择ITR1为触发源// 定时器同步配置 TIM1-CR2 | TIM_CR2_MMS_1; // 主模式选择更新事件 TIM2-SMCR | TIM_SMCR_SMS_2; // 从模式-触发模式 TIM2-SMCR | TIM_SMCR_TS_2; // 选择ITR1触发源调试PWM的实用方法用示波器观察波形时建议先关闭所有中断排除软件干扰测量异常时检查TIMx_CR1的CEN位是否意外清零使用定时器Break功能紧急停止PWM输出有个记忆深刻的调试案例PWM输出突然消失最后发现是GPIO复用功能没有正确配置。现在我的检查清单里一定会包含GPIO模式寄存器MODER配置为复用功能GPIO复用功能选择寄存器AFR选择正确的定时器GPIO速度寄存器OSPEEDR设为高速模式

相关新闻

2026/7/15 13:45:44

初雪皮肤设计解析:技能特效与游戏平衡的艺术

为什么说初雪皮肤是方舟以来出的最有用的皮肤?在《明日方舟》这款策略塔防游戏中,干员的皮肤不仅仅是外观装饰,更可能影响玩家的使用体验和战术选择。近期推出的初雪皮肤引发了广泛讨论,很多玩家认为这是方舟迄今为止最有实用价值…

2026/7/15 13:45:43

ArcGIS面要素最小边界几何:从凸包到包络矩形的参数详解与应用场景

1. 最小边界几何工具的核心价值与应用场景在空间分析与地理决策中,我们常常需要快速把握面要素的空间分布特征。想象一下城市规划师需要评估一片建筑群的扩张趋势,或是生态学家要分析森林斑块的破碎化程度——这时候Minimum Bounding Geometry工具就像一…

2026/7/15 13:40:42

Sileo:为现代iOS越狱生态构建的高效APT包管理器

Sileo:为现代iOS越狱生态构建的高效APT包管理器 【免费下载链接】Sileo A modern package manager for iOS 11 and higher. 项目地址: https://gitcode.com/gh_mirrors/si/Sileo Sileo是一款专为iOS 11及以上版本设计的现代化APT包管理器前端,它重…

2026/7/15 14:51:00

终极指南:3步在Linux系统免费安装专业版Photoshop CC 2022

终极指南:3步在Linux系统免费安装专业版Photoshop CC 2022 【免费下载链接】Photoshop-CC2022-Linux Installer from Photoshop CC 2021 to 2022 on linux with a GUI 项目地址: https://gitcode.com/gh_mirrors/ph/Photoshop-CC2022-Linux 还在为Linux系统缺…

2026/7/15 14:51:00

FreeRTOS调度器在做什么?从任务状态机说起

一段代码跑在单片机里,和我们平时写PC程序最大的不同是什么?不是语法,不是编译器——是"同时做多件事"的方式。PC上开十个窗口,操作系统帮你来回切换,你感觉不到延迟。但在STM32上,一个单核Corte…

2026/7/15 14:51:00

CANN/asc-devkit Conv3D End接口

End 产品支持情况产品 是否支持 Ascend 950PR/Ascend 950DT x Atlas A3 训练系列产品/Atlas A3 推理系列产品 √ Atlas A2 训练系列产品/Atlas A2 推理系列产品 √ Atlas 200I/500 A2 推理产品 x Atlas 推理系列产品AI Core x Atlas 推理系列产品Vector Core x Atlas 训练系列产…

2026/7/15 14:51:00

Three.js 建筑线条教程

建筑线条 Building Line ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 OrbitControls 相机…

2026/7/15 14:51:00

CANN/asc-devkit三维卷积偏置接口

SetBias 产品支持情况 产品 是否支持 Ascend 950PR/Ascend 950DT x Atlas A3 训练系列产品/Atlas A3 推理系列产品√ Atlas A2 训练系列产品/Atlas A2 推理系列产品√ Atlas 200I/500 A2 推理产品x Atlas 推理系列产品AI Core x Atlas 推理系列产品Vector Core x Atlas 训练系…

2026/7/15 14:45:59

OpenNMT完整指南:从零开始构建神经机器翻译系统的终极教程

OpenNMT完整指南:从零开始构建神经机器翻译系统的终极教程 🚀 想要快速构建专业的神经机器翻译系统吗? OpenNMT作为开源神经机器翻译的标杆项目,为您提供了从数据预处理到模型训练的完整解决方案。本终极教程将带您深入了解如何使…

2026/7/14 12:47:32

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南

3步解锁音乐自由:ncmdumpGUI终极NCM文件解密转换指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#…

2026/7/14 19:23:19

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境

CANoe 19 SP3 配置 GB/T 27930-2023 A类系统:3步搭建BMS仿真测试环境随着新能源汽车行业的快速发展,充电通信协议的标准化和测试验证变得尤为重要。GB/T 27930-2023作为中国智能充电协议的最新版本,对充电机与电动汽车之间的通信提出了更严格…

2026/7/14 18:30:06

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡

3步搞定RTL8852BE驱动:从零开始配置Wi-Fi 6网卡 【免费下载链接】rtl8852be Realtek Linux WLAN Driver for RTL8852BE 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8852be 还在为Linux系统无法识别RTL8852BE Wi-Fi 6网卡而烦恼吗?&#x1f…

2026/7/15 0:08:29

【LINUX】驱动

【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】

2026/7/15 0:08:29

【1982-2026】全国高精度建筑轮廓|村级精度|SHP矢量

🔍 数据简介 本次分享1982-2026年全国村级精度建筑轮廓矢量数据,覆盖全国各省市区县,到村级别精细,为2026年最新实时采集成果,非网传仅60/77个城市的老旧数据。 数据含带高度/不带高度双版本,单体建筑边界精…

2026/7/15 0:08:29

【1975-2026】全国水系水路数据|河流/水库/运河|SHP矢量

🔍 数据简介 本次分享1975-2026年全国高精度水系水路矢量数据,覆盖全国全域,包含河流、水系、水库、运河、湿地、冰川、沟渠等全类别水文要素。 数据集包含双层矢量图层,字段分类清晰、要素齐全,支持2013-2026逐年完整…

2026/7/15 13:36:32

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…