STM32输入捕获模式详解(下篇):PWM输入捕获与PWI模式

STM32输入捕获模式详解(下篇):PWM输入捕获与PWI模式PWI 模式是专为捕获 PWM 信号设计的输入捕获模式

1. 前言

在上篇文章中,我们详细介绍了STM32输入捕获模式的基本原理和应用方法,包括测频法和测周法。本文将重点探讨如何通过STM32的PWI(PWM Input)模式实现对PWM信号的频率和占空比测量。我们将结合具体的硬件电路,解释定时器的两个通道(如CH1和CH2)如何连接到同一引脚并实现输入捕获,同时分析数据在寄存器和内部电路中的传输过程。

2. PWI模式概述

PWI模式是专为捕获PWM信号设计的输入捕获模式。在该模式下,定时器的两个输入捕获通道(通常为CH1和CH2)协同工作,通过捕获PWM信号的两个不同特征(通常是上升沿和下降沿)来实现对信号频率占空比的测量。

  • CH1通常用于捕获PWM信号的上升沿,以此来测量信号的周期。
  • CH2则用于捕获PWM信号的下降沿,用于计算占空比。

3. 定时器内部电路与工作原理

3.1 定时器两个通道的协作

在PWM输入捕获模式中,定时器的两个输入通道(CH1 和 CH2)连接到同一个GPIO引脚(如PA6)。输入信号经过GPIO后,通过内部的输入选择电路(TIx)进入定时器。定时器的内部捕获逻辑会将CH1设置为检测上升沿,而CH2设置为检测下降沿。

这种模式下,两个通道共用一个引脚,通过寄存器配置使得两个通道的输入源保持同步。CH1通道负责捕获PWM周期,CH2负责捕获低电平持续时间,通过这两个时间的差值,可以计算信号的占空比。

3.2 数据传输过程

当PWM信号进入GPIO引脚时:

  1. 上升沿触发CH1捕获,定时器的CCR1寄存器保存当前计数器(CNT)值。这个值用于计算信号的周期。
  2. 下降沿触发CH2捕获,CCR2寄存器保存计数器值,用于计算信号的低电平持续时间。
  3. 通过读取CCR1和CCR2的值,软件可以计算出PWM信号的频率和占空比。

4. PWI模式的寄存器配置

PWI模式依赖于STM32的输入捕获寄存器配置。以下几个关键寄存器需要配置:

  • TIMx_CCR1: 用于存储CH1捕获到的计数器值(上升沿)。
  • TIMx_CCR2: 用于存储CH2捕获到的计数器值(下降沿)。
  • TIMx_SMCR: 用于配置定时器的触发输入和从模式。
  • TIMx_CR1: 用于启动定时器。

为了使两个通道共用同一个引脚,通常需要将TIMx_CH1设置为输入触发源,并启用从模式控制寄存器(SMCR),将定时器设置为复位模式(Reset Mode)。这样可以确保在检测到上升沿时,定时器会重新开始计数,从而确保两个捕获值的差值能够精确反映信号特性。

5. PWI模式的代码实现

以下代码展示了如何使用STM32定时器的PWI模式来捕获PWM信号,并计算信号的频率和占空比。代码基于你提供的初始化函数,并进行了标准库配置。

5.1 PWI模式初始化

void IC_Init(void) { // 使能GPIOA和TIM3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 配置PA6为输入模式 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; // PA6引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置TIM3基本参数 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructre; TIM_TimeBaseInitStructre.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructre.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructre.TIM_Period = 65536 - 1; // 自动重装载值 (ARR) TIM_TimeBaseInitStructre.TIM_Prescaler = 72 - 1; // 预分频值 (PSC) TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructre); // 配置TIM3输入捕获通道1(上升沿捕获) TIM_ICInitTypeDef TIM_ICInitStructure; TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; // 上升沿捕获 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; // 直接TI输入 TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; // 输入分频 TIM_ICInitStructure.TIM_ICFilter = 0xf; // 滤波 TIM_PWMIConfig(TIM3, &TIM_ICInitStructure); // 配置从模式为复位模式 TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); // 选择TI1作为触发输入 TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); // 从模式为复位模式 // 启动定时器 TIM_Cmd(TIM3, ENABLE); } 

5.2 读取频率和占空比

// 获取PWM信号的频率 uint32_t IC_GetFreq(void) { return  / (TIM_GetCapture1(TIM3) + 1); // 单位为Hz } // 获取PWM信号的占空比 uint32_t IC_GetDuty(void) { return (TIM_GetCapture2(TIM3) + 1) * 100 / (TIM_GetCapture1(TIM3) + 1); } 

6. 测频法与测周法的应用

在PWI模式下,测频法和测周法都可以应用于捕获信号特性。通过测量上升沿和下降沿的捕获值,频率和占空比计算如下:

  • 测频法:利用CH1通道捕获的上升沿之间的时间差(周期),并根据定时器的时钟频率计算信号频率。

    公式

  • 测周法:通过捕获的上升沿和下降沿之间的时间差,计算信号的周期。

    公式

然后,通过周期的倒数得到信号频率。对于占空比,公式如下:

7. 小结

通过本文的讲解,您应该对STM32的PWI模式有了较为深入的理解。我们介绍了定时器的两个通道如何协同工作,通过CH1捕获上升沿,CH2捕获下降沿,实现对PWM信号频率和占空比的测量。结合具体的电路和内部数据传输过程,PWI模式为信号的精确捕获提供了高效的解决方案。在实际应用中,您是否使用过PWI模式?该模式在处理复杂PWM信号时表现如何?欢迎在评论区分享您的经验和看法!

今天的文章 STM32输入捕获模式详解(下篇):PWM输入捕获与PWI模式分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-30 08:46
下一篇 2024-12-30 08:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/92809.html