TIM定时器的输出频率和占空比、TIM定时器输入捕获频率和输入捕获占空比
强制类型转化一下。
TIM定时器的输出频率和占空比

频率的计算需要有一个预分频系数(PSC),预分屏系数可以在cube里配置
ARR也在cube里配置,通常为99
HCLK是时钟频率,我们配置的是80MHZ(见下图)

比赛的时候就是对这两个公式【频率、占空比】的计算以及修改寄存器
因为寄存器都是从0开始,所以它真实的值都要加1
cube配置
例题

先配置引脚

配置time16

选定上面的PWM Generation CH1之后,设定ARR为100-1;(100减1)
设定ARR为100-1,这样占空比就取决于CCRx了。【根据占空比的计算公式】

计算PSC的值,根据频率的计算公式
这里因为例题中PA6的输出频率为100HZ,所以计算出来的PSC为7999

同理配置time17
选择PWM Generation CH1,ARR为99

根据频率200,所以这里PSC=3999

配置好后,生成代码
写代码
首先,先开启定时器【不要忘记】

用公式去获取频率:虽然题目说了,但是也可以获取一下。
先定义变量,占空比也定义一下。

TIM16->ARR:这样写就可以直接获取它的值,但是在计算公式中需要把它的值加1,前面我们说了寄存器都是从0开始,所以它真实的值都要加1

然后在LCD上显示PA6和PA7的频率

现象

下面配置一下占空比
因为占空比都是10%,用变量先给它配一下变量,然后把变量的值送到CCR

TIM16->CCRx应该是 TIM16->CCR1,因的是通道1。为它用
又因为ARR+1等于100,所以可以把占空比的值直接给CRRx

占空比的值在LCD上显示
现象

接下来完成(2)(3)调整占空比



比较完整代码

TIM定时器输入捕获频率

我们这个板上一共有两个信号发生器,并且可以通过PA15和PB4采集它们发出的信号,R40和R39是两个电位器,可以调节PA15和PB4采集的频率。
在板子R37、R38旁边的两个蓝色旋钮就是R40和R39
配置cube

TIM2设置

直接模式输入捕获(Input Capture Direct Mode)
开启中断

PSC设置成79(没有说为什么设置成79

同理TIM3配置
通道1配置成输入模式【直接模式输入捕获】

开启中断以及PSC设置成79
配置完成之后,生成代码
代码编写
打开之后,先来开启一下定时器
输入捕获,有中断,所以需要加IT

写中断回调函数
在中断里处理需要先判断一下定时器两个if函数
两个if函数里面容易错的部分:一是Instance的I要大写,二是右边是TIM2不是htim2
htim->Instance==TIM2
注意:下面函数有一处错误,那就是HAL_TIM_ReadCapturedValue【里面的d不能少】
以及这个函数返回的值是uint32_t型,所以我们前面定义的是uint32_t cap1,cap2,R39_frq,R40_frq;



接下来可以把频率在lcd上显示一下
结果

void LCD_Proc(void){ sprintf(buf,"R40_frq:%dHz ",R40_frq); LCD_DisplayStringLine(Line0,(uint8_t *)buf); sprintf(buf,"R39_frq:%dHz ",R39_frq); LCD_DisplayStringLine(Line1,(uint8_t *)buf); } 有一个疑惑:为什么在”R40_frq:%dHz “的Hz后面加几个空格,显示屏上就可以正确显示Hz,但是如果没有这几个空格,但数字比较小时候,单位就会变成Hzz,Hzzz


输入捕获占空比
捕获原理

疑问:根据crr的值和时钟,就可以知道输入捕获频率,为什么?【见下图】
答:两次电平跳变的时间间隔:T=△CCR/时钟频率【时钟频率是固定已知的,比如系统设定为某一特定值。】输入信号频率就是1/T
疑问:那这个输入频率和上面计算的方式根本不一样,那这两个频率一样吗?

输入捕获频率一个通道就可以了,但是输入占空比,需要两个通道
然后根据上升沿和下降沿之间的时间差,去除以两次捕获上升沿之间的时间差就可以得出占空比
配置cube
在上一个输入捕获频率的基础上来做
把TIM2的通道二配置成间接捕获

再将参数改成下降沿Falling Edge

同样配置TIM3


生成代码
编写代码
因为定时器都又开启了一个通道,所以要再开启一下定时器
有两个通道,就不能只判断定时器,还要去判断通道
先捕获上升沿

还要捕获下降沿的值
先去定义变量,duty是占空比,计算时,强制类型转化一下,防止它的计算结果为0,计算占空比的时候,分母乘以100,是计算它的百分比


TIM3同理

在lcd上显示一下

结果
将PA6和PA7的引脚接在了j9j10这两个跳线帽这里,就不让它用这个555信号发生器,直接通过通过PA15和PB4这两个引脚直接去获取PA6和PA7的一个频率和占空比


当通过按键,改变PA6和PA7的值时,R39和R40的占空比也会随之改变
更多推荐





所有评论(0)