登录/注册

stm32捕捉pwm

更多

在STM32中捕获PWM信号的频率和占空比,通常需要利用定时器(TIM)的输入捕获(Input Capture)功能。以下是实现的基本思路和步骤:


硬件准备

  1. 引脚连接
    • 将PWM信号输入到支持输入捕获功能的定时器通道引脚(如TIMx_CHy,例如PA0对应TIM2_CH1)。
    • 确保所选定时器的通道支持输入捕获模式(参考芯片手册)。

软件配置(以HAL库为例)

1. 定时器初始化

2. 输入捕获通道配置

3. 启动捕获并开启中断

   HAL_TIM_IC_Start_IT(&htim, TIM_CHANNEL_1); // 启动输入捕获并开启中断

中断处理逻辑

在捕获中断中记录两次边沿的时间差,计算PWM的周期占空比

  1. 第一次捕获(上升沿)
    记录计数器值 t1,然后切换为捕获下降沿:

    t1 = HAL_TIM_ReadCapturedValue(&htim, TIM_CHANNEL_1);
    __HAL_TIM_SET_CAPTUREPOLARITY(&htim, TIM_CHANNEL_1, TIM_ICPOLARITY_FALLING);
  2. 第二次捕获(下降沿)
    记录计数器值 t2,计算高电平时间(占空比):

    t2 = HAL_TIM_ReadCapturedValue(&htim, TIM_CHANNEL_1);
    duty_time = t2 - t1;  // 高电平时间
    __HAL_TIM_SET_CAPTUREPOLARITY(&htim, TIM_CHANNEL_1, TIM_ICPOLARITY_RISING);
  3. 第三次捕获(下一个上升沿)
    记录计数器值 t3,计算周期:

    t3 = HAL_TIM_ReadCapturedValue(&htim, TIM_CHANNEL_1);
    period = t3 - t1;     // 周期
  4. 计算频率和占空比

    float frequency = (float)定时器时钟频率 / (period * (分频系数 + 1));
    float duty_cycle = (float)duty_time / period * 100.0f;

关键注意事项


示例代码片段

// 在中断回调函数中处理捕获事件
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
    static uint32_t t1, t2;
    static uint32_t period, duty_time;

    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {
        if (当前为上升沿) {
            t1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_ICPOLARITY_FALLING);
        } else {
            t2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_ICPOLARITY_RISING);
            period = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1) - t1;
            duty_time = t2 - t1;
        }
    }
}

通过上述方法,可以实时捕获PWM的周期和占空比。实际应用中需根据具体型号(如STM32F1/F4)调整定时器和引脚配置。

请问stm32f103rct6上升沿捕捉最小的高电平是多少?

使用stm32f103rct6,主频率72m,测试PWM5ch1(pa0)捕捉上升沿,100KHz30%~90%的占空比上升沿可以

2024-05-30 07:03:05

STM32PWM波形输出配置的大神总结

STM32的PWM波形输出配置的大神总结

2023-10-24 16:00:31

如何通过4个定时器捕捉和1个PWM捕捉读5个马达的操作速度

应用: 本样本代码显示如何通过 4 个定时器捕捉和 1个 PWM 捕捉读5个马达的操作速度 。 BSP 版本: M031 BSP CMSIS

2023-08-29 08:17:46

使用STM32输出PWM波形

本文目的是通过在STM32平台上采用定时器的方法输出PWM波形,进而熟悉和掌握PWM的原理和产生。目录(一)

资料下载 张艳 2021-11-30 14:21:16

[STM32]STM32F407系列教程之四,pwm产生原理

[STM32]STM32F407系列教程之四,pwm产生原理

资料下载 张静 2021-11-29 17:51:03

STM32F4 PWM-DAC实验例程

STM32F4 PWM-DAC实验例程(电源技术是sci吗)-STM32F4 PWM

资料下载 佚名 2021-09-16 10:14:07

基于多相机捕捉系统下的通用物体运动捕捉方法

基于多相机捕捉系统下的通用物体运动捕捉方法

资料下载 佚名 2021-06-25 10:34:32

基于STM32单片机的小车PWM调速系统

基于STM32单片机的小车PWM调速系统

资料下载 jameschen1978cw 2021-06-03 09:22:20

STM32CubeMx入门教程(4):PWM应用

导语“使用STM32CubeMx配置定时器输出PWM波,生成初始化代码。”

2023-07-11 15:23:59

互联管理器配置pwm捕捉测量占空比和频率,在配置IO时GPTMR_IN 和PWM_IN是否都可以作为pwm捕捉,测量占空比和频率?

互联管理器配置pwm捕捉测量占空比和频率,在配置IO时,GPTMR_IN 和PWM_IN是否都可以作为

2023-05-26 06:29:52

LINUX中的IMX6ULL如何设置GPT2为输入捕捉模式来捕捉外部PWM信号频率?

LINUX中的IMX6ULL如何设置GPT2为输入捕捉模式来捕捉外部PWM信号频率?我尝试自己写了一个Capture的驱动程序,但是我无法触发捕

2023-04-04 07:21:49

STM32CUBEIDE(11)----输出PWM及修改PWM频率与占空比

本章STM32CUBEMX配置STM32F103输出PWM,并在示波器中查看效果。

2022-11-30 14:12:45

STM32CUBEMX(1)--PWM

本篇文章主要介绍如何使用STM32CubeMX输出PWM,并制作呼吸灯效果。

2022-11-14 15:29:15

如何通过STM32的定时器输出PWM

  本文将介绍通过STM32的定时器输出PWM,如果对定时器不太熟悉的同学可以看下之前的文章《STM32基础定时器详解》,关于定时器的基础功能不

2021-02-20 15:08:25

STM32_ TIM输出PWM波形

STM32_TIM输出PWM波形

2020-04-08 11:09:32

7天热门专题 换一换
相关标签