STM32CubeMX 定时器双通道检测PWM的频率和占空比

目录

一,STM32GubeMX基本配置

1,基础外设配置(可跳过)

2,时钟配置

3,配置定时器脉冲捕获配置

4,配置输入捕获中断

二,Kile5代码编写

三,原理分析


一,STM32GubeMX基本配置

1,基础外设配置(可跳过)

2fdc544ab68b4cc4a541a9d204c7021d.png

ed1f09f5f412473087a59d1e87bb0cd5.png

2,时钟配置

b6449e1159c44095b0326ab2d14ff7d3.png

3,配置定时器脉冲捕获配置

8dbc7a9fa5614a46adbfb58895c71f05.png

注意:PSC预分频器的取值会影响到检测频率的范围,PSC越小可以检测的频率就越大,但是相对的就不能检测小频率,计算频率和占空比公式如下

其中

CK_PSC:系统时钟    72000000

PSC :预分频寄存器的值 0~65535

ARR:定时器对应通道捕获的的值  0~65535

计算最大频率时设ARR = 1,           则 Hz(Max) = 72000000/PSC;

计算最小频率时设ARR = 65535,   则 Hz(Min) = 1098/PSC;(72000000/65535 = 1098)

由此可以确定不同PSC对应可以检测的频率范围

(1)Slave Mode(从模式配置):

       Reset Mode(复位模式): 外部引脚有一个输入脉冲进来或者内部有一个脉冲进来定时器计数器归0重新计数(上升沿或者下降沿),触发的触发信号的来源由Trigger Source决定。

(2)Trigge Source(触发源选择):

         TI2FP2:经过滤波之后的通道二的信号

042ecedaf97f43e68adaaeb49cf4bce1.png

        虽然TIM输出的通道数目很多,但是能用来做PWM输入捕获的只有TI1FP1和TI2FP(STM32F4xx中文参考手册(456页)),所以我们的检测信号源只能是这两个其中的一个。

cfaa8524163143239760e59b9618eb69.png

(3)CHannel(输入通道和输入模式选择):

        如果触发源选择TI1FP1,那么由上图可知Channel1应该配置为Direct(直接输入模式),Channel2设置为Indrect(间接输入模式)。

         总之,选择那个通道为Trigge Source(触发源选择)   那个就要配置为direct。而且间接输入的CCR计数值小于直接,通常用来做占空比的分子。

(4)Polarity Selection(触发方式):

        上升沿和下降沿不影响占空比的相关配置,只要两个相反就可以了。

4,配置输入捕获中断

9ed20325b9ae4207b60d5ed5fbd9d375.png

二,Kile5代码编写

TIM接口初始化

   HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);  
   HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);//使能两个接口

中断函数

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM3)
    {
             sprintf(LIN2,"     %dHZ      ",1000000/(TIM3->CCR2 + 1));
             sprintf(LIN3,"     %d%%      ",(TIM3->CCR1 + 1)*100/(TIM3->CCR2 + 1));
    }
} 

三,原理分析

示例分析 

STM32F4xx中文参考手册(456页)

e4fa0bad0cf144af96edd5a7f2f233b7.png

         上图是Channel1配置为上升沿触发,Channel2配置为下降沿触发的输入捕获原理图,当TI1产生第一个上升沿时Channel1被触发   CNT清0重新开始计数,当TI1为下降沿时Channel2被触发CCR2保存CNT的值    但是CNT不会清零 ,当TI1变为上升沿时CCR1被触发保存CNT的值。所以CCR2捕获的就是占空比,CCR1捕获的就是周期。

        为什么下降沿没有触发CNT复位呢?查看手册可以发现控制触发方式由CCER寄存器的CC1P和CC1NP决定。

3a6bd9dd9e3e4e189b53c611f1ecf20e.png

 0974e30564e84ce1a2a7e1a83de94156.png

仿真查看寄存器CCER,发现代码配置默认为CC1NP/CC1P=0,

d2a2603a29514a93b19244ea2524cd20.png

由上可知  程序默认CCNP/CC1P == 0, 所以TIxFP为上升沿触发

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ENEC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值