使用的开发板是官方的STM32F412ZGTx NUCLEO开发板。本次主要是为了对PWM波形进行脉宽和频率的测量。很多的工程使用的是软件对同一个通道进行3次捕获,比较耗费系统资源,本次介绍使用硬件进行捕获,尽可能降低代码的工作量。
首先打开CubeMX,做如下设置:
1.先设置定时器10,用于输出PWM波形。
2.设置TIM2,用来进行输入捕获
至于为什么这么设置,我们放在最后面说明,此处使用一路信号进行两次捕获,可以降低软件的工作量。
3.其他的串口设置,这里不做说明。时钟树设置如下:
4.对定时器10进行如下设置:
TIM10使用的频率为100M,这里分频为20M,按照图中设置的周期,输出的PWM波形的频率大概在25K左右。
Pulse用来设置占空比。
5.定时器2的参数设置如下:
使能从模式,并且工作在复位模式,且触发信号源是TI1FP1,也就是在TI1FP1的上升沿,会复位所有的计数器,并更新对应的寄存器。定时器2分频之后使用10M的信号源。此处设置的重点是,将IC1捕获设置为上升沿捕获,且设置为直连模式,IC2设置为下降沿捕获。
下面是设计原理,如下:
注意图中红色标记的地方。这样设置之后,IC1,IC2可以对同一信号进行捕获,IC1在上升沿捕获,每次上升沿触发中断,读取对应捕获寄存器的数据就可以计算频率,读取IC2的捕获寄存器可以计算占空比。
使能定时器2的全局中断,用来读取捕获寄存器的数据。
最后生成代码,打开工程添加代码如下:
打开time.c文件,在第一处添加代码如下:
在主函数中添加如下代码:
到此代码生成完成。
可以直接计算出频率和占空比。
测试结果如下:
随着占空比的调节,软件可以准确识别对应的占空比,这里可以用来进行PID控制电机的转速啥的。
配上工程代码:STM32F4的代码:
CSDN下载地址:https://download.csdn.net/download/qq86376032/10445158