导读:开启新的专栏啦~希望大家可以多多支持呀!!!《蓝桥杯嵌入式》专栏文章是博主在自学stm32期间所做的学习笔记,同时为了备战蓝桥杯比赛,博主在学习期间所用的开发板为蓝桥杯嵌入式专用开发板。菜鸟思维,写的可能会有一点繁琐,但是我觉得学习是要一步一步来的,也希望自己可以把每一点都弄懂。希望可以对初学者有些帮助,如有错误,欢迎评论区留言指正哦~
一、一个总结性说明
STM32的定时器配置中的时钟分割,是与定时器的输入捕获功能和滤波单元相关的。不同的参数代表以不同的采样频率对输入信号进行采样,当连续采样到 N(滤波带宽) 次个有效电平时,认为一次有效的输入电平。(但是这个采样频率只是一个基准频率,实际中的采样频率是可以设置的,我们根据程序所设置这个实际的采样频率与定时器通道的滤波单元有关,下面的内容中会细说这一部分)。
二、解释说明
1、首先要知道这三种不同的采样频率基准是通过设置控制寄存器TIMx_CR1中的CKD(时钟分频因子)来实现的,手册上有详细的说明:
一般我们在设置时钟分割时,都将其设置为0(采样频率为定时器输入频率),实际上也就是TIM_CKD_DIV1:
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim//等同于TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
2、关于定时器通道的滤波单元
STM32的定时器输入通道都有一个滤波单元,分别位于每个输入通路上和外部触发输入通路上,它们的作用是滤除输入信号上的高频干扰。
那么滤除高频干扰的功能是如何实现的呢?
举个例子: 检测一次输入信号为高电平,假设采样频率是18MHZ,滤波带宽是6,那么我们需要以18MHZ的采样频率,在连续6个采样周期内检测到高电平,才可判断输入信号为高电平,也就是说采样信号的高电平持续时间至少为6个采样周期(1/3MHZ),相对应的采样信号的频率最大为3MHZ,从而滤去了频率高于3MHZ的信号。 再举一个例子: 假如要监测一个占空比为50%,频率为1MHZ的方波信号,且利用滤波功能,滤去高频信号干扰(假设采样频率仍为18MHZ),那么我们的滤波带宽应该是多少呢?N<=9 仍然可以利用检测高电平的思路来理解:占空比为50%,频率为1MHZ的方波信号,它的高电平持续时间为1/2MHZ,那么连续采样的时间就是1/2MHZ,也就是9个采样周期,且最多为9个采样周期。可以看一下图:
图上可见:假如采样脉宽大于9,那么就监测不到该方波信号了。
3、上面的时钟分割设置中我们设置了采样频率基准,而实际中的采样频率和滤波带宽是可以设置的:外部触发输入通道的滤波参数在从模式控制寄存器(TIMx_SMCR)的ETF[3:0]中设置;每个输入通道的滤波参数在捕获/比较模式寄存器1(TIMx_CCMR1)或捕获/比较模式寄存器2(TIMx_CCMR2)的IC1F[3:0]、IC2F[3:0]、IC3F[3:0]和IC4F[3:0]中设置。
具体可见手册:
从上面的图中我们也可以看出:实际采样频率与采样频率基准有关,故改变采样频率基准可改变滤波的频率。
4、关于“数字滤波器是一个事件计数器,它记录到N个事件后会产生一个输出的跳变。”这句话的说明:
事件是什么?数字滤波器的一个事件就是对输入信号的一次采样结果。 输出的跳变是什么?输出的跳变就是一个脉冲。 举例说明: 比如要求检测一个输入的上升沿,当选择ETF[3:0]=0011时,以频率fSAMPLING=fCK_INT对输入信号采样,如果在监测到一个上升沿(连续2次采样的结果为一低一高)后,连续8个采样周期都检测到高电平,则数字滤波器输出一个脉冲,否则不输出脉冲。
5、应用:结合输入捕获的中断,可实现按键的去抖动功能,每个定时器最多可以实现4个按键的输入,这个方法也可以用于键盘矩阵的扫描,而且因为是通过中断实现,软件不需频繁的进行扫描动作。
参考链接:
希望大家可以多多点赞收藏,也不要忘记点一个大大的关注哦~感谢大家!!
祝您2021大吉大利,升职加薪~~
行数:42
字数:1481
主题:默认主题