STM32 CubeMX输入捕获测量PWM波形频率与占空比

使用的开发板是官方的STM32F412ZGTx NUCLEO开发板。本次主要是为了对PWM波形进行脉宽和频率的测量。很多的工程使用的是软件对同一个通道进行3次捕获,比较耗费系统资源,本次介绍使用硬件进行捕获,尽可能降低代码的工作量。

首先打开CubeMX,做如下设置:

1.先设置定时器10,用于输出PWM波形。

STM32 CubeMX输入捕获测量PWM波形频率与占空比

2.设置TIM2,用来进行输入捕获

STM32 CubeMX输入捕获测量PWM波形频率与占空比

至于为什么这么设置,我们放在最后面说明,此处使用一路信号进行两次捕获,可以降低软件的工作量。

3.其他的串口设置,这里不做说明。时钟树设置如下:

STM32 CubeMX输入捕获测量PWM波形频率与占空比

4.对定时器10进行如下设置:

STM32 CubeMX输入捕获测量PWM波形频率与占空比

TIM10使用的频率为100M,这里分频为20M,按照图中设置的周期,输出的PWM波形的频率大概在25K左右。

Pulse用来设置占空比。

5.定时器2的参数设置如下:

STM32 CubeMX输入捕获测量PWM波形频率与占空比

使能从模式,并且工作在复位模式,且触发信号源是TI1FP1,也就是在TI1FP1的上升沿,会复位所有的计数器,并更新对应的寄存器。定时器2分频之后使用10M的信号源。此处设置的重点是,将IC1捕获设置为上升沿捕获,且设置为直连模式,IC2设置为下降沿捕获。

下面是设计原理,如下:

STM32 CubeMX输入捕获测量PWM波形频率与占空比

注意图中红色标记的地方。这样设置之后,IC1,IC2可以对同一信号进行捕获,IC1在上升沿捕获,每次上升沿触发中断,读取对应捕获寄存器的数据就可以计算频率,读取IC2的捕获寄存器可以计算占空比。

STM32 CubeMX输入捕获测量PWM波形频率与占空比

使能定时器2的全局中断,用来读取捕获寄存器的数据。

STM32 CubeMX输入捕获测量PWM波形频率与占空比

最后生成代码,打开工程添加代码如下:

打开time.c文件,在第一处添加代码如下:

STM32 CubeMX输入捕获测量PWM波形频率与占空比

STM32 CubeMX输入捕获测量PWM波形频率与占空比

STM32 CubeMX输入捕获测量PWM波形频率与占空比


在主函数中添加如下代码:

STM32 CubeMX输入捕获测量PWM波形频率与占空比

到此代码生成完成。

可以直接计算出频率和占空比。

测试结果如下:

STM32 CubeMX输入捕获测量PWM波形频率与占空比

随着占空比的调节,软件可以准确识别对应的占空比,这里可以用来进行PID控制电机的转速啥的。

配上工程代码:STM32F4的代码:

CSDN下载地址:https://download.csdn.net/download/qq86376032/10445158