蓝桥杯嵌入式pwm双端捕获计算占空比
时间: 2025-03-30 14:03:00 浏览: 35
### 蓝桥杯嵌入式比赛中的PWM双端捕获计算占空比
在蓝桥杯嵌入式比赛中,利用PWM信号的双端捕获功能可以实现精确测量输入信号的特性,比如频率和占空比。以下是关于如何通过STM32微控制器上的定时器模块完成这一任务的具体说明。
#### 1. 定时器的工作原理
STM32 的高级控制定时器(如 TIM1 和 TIM8)以及通用定时器(如 TIM2 至 TIM5、TIM9 至 TIM14)支持多种工作模式,其中包括 **输入捕获模式**。这种模式允许我们捕捉外部事件的时间戳,并用于分析信号特征。对于 PWM 输入信号,可以通过双端捕获的方式获取高电平持续时间和整个周期时间,从而计算出占空比[^1]。
#### 2. 配置步骤概述
为了实现 PWM 双端捕获并计算其占空比,需要按照以下方式配置 STM32 的定时器:
##### (1) 设置 GPIO 引脚为复用功能
将 PA6 或 PA7 这样的引脚配置为复用功能,连接到指定的定时器通道(例如 TIM16 CH1)。这一步通常涉及 RCC 时钟使能和 GPIO 初始化代码。
```c
// 启用GPIOA与时钟
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
RCC->APB1ENR |= RCC_APB1ENR_TIM16EN;
// 配置PA6作为TIM16_CH1
GPIOA->MODER &= ~(GPIO_MODER_MODE6); // 清除原有模式
GPIOA->MODER |= GPIO_MODER_MODE6_1; // 设置为复用模式
GPIOA->AFR[0] |= (7 << (6 * 4)); // 将PA6映射至TIM16_CH1
```
##### (2) 配置定时器为输入捕获模式
选择合适的预分频值(PSC)、自动重载值(ARR),并将输入滤波器启用以提高抗干扰能力。同时,需设定两个边沿触发条件分别记录上升沿和下降沿时刻[^2]。
```c
// 配置TIM16基本参数
TIM16->PSC = 79; // 设定预分频系数为80-1
TIM16->ARR = 999; // 自动重装值设为最大计数值(对应1ms)
// 配置IC1通道为PFx模式, 边沿检测
TIM16->CCMR1 |= TIM_CCMR1_CC1S_1 | TIM_CCMR1_IC1F_2;
TIM16->CCER |= TIM_CCER_CC1E; // 开启捕获/比较单元1
TIM16->SMCR |= TIM_SMCR_SMS_2; // 使用TI1FP1作为触发源
TIM16->DCR |= TIM_DCR_DBL_3 | TIM_DCR_DBA_3;// DMA缓冲区大小&地址偏移量
```
##### (3) 获取高低电平宽度数据
当发生第一次有效边沿变化时(即从低变高的瞬间),会存储当前计数器值于 `TIMx->CCR1` 寄存器中;而第二次相反方向的变化则更新另一个寄存器位置。两者差值得到了实际脉宽信息。总周期等于相邻两次相同极性的间隔距离[^3]。
```c
uint32_t risingEdgeTime = TIM16->CCR1; // 上升沿被捕获后的值
uint32_t fallingEdgeTime = TIM16->CCR2; // 下降沿被捕获后的值
float dutyCyclePercent = ((fallingEdgeTime - risingEdgeTime)*100)/(float)(TIM16->ARR);
```
#### 3. 实际应用注意事项
- 确保所使用的外设资源未被其他部分占用;
- 如果目标设备运行速度较快,则可能需要调整 PSC 来适应更短时间段内的分辨率需求;
- 测试阶段建议加入调试串口打印功能以便观察中间变量状态是否正常。
---
阅读全文
相关推荐


















