今天学习定时器的输入捕获部分,因为没有信号发生器,因此本文选用定时器自己输出信号再输入捕获测量频率和占空比。
代码如下:
首先是PWM中的代码增加了一个PSC的代码来设置PSC值,这样在改变占空比时比较方便
之后新建一个C文件,对GPIO、TIM以及TIM的IC、触发源模式以及开启时钟,使用测周法测量频率,相当于每来一个上升沿就将CNT的值存入CCR中,进行计算频率
触发源选用主从触发模式,对CNT进行清0,使得在一个周期内的数是从0开始计
以及频率与占空比的返回函数
以下是实验结果,输入是一个1000Hz以及占空比为50%的信号。
接下来是理论部分:
与昨天的输出比较不同,输入捕获,主要是当引脚出现上升沿或者下降沿时,将CNT的值输入到CCR中,可以用来测量信号的频率、占空比等
以下是频率减小的信号,对频率进行测量时,有以下方法:
测周法的意思就是,在一个周期内,以一个标准频率去计次,N/Fc就是一共用的时间相当于周期,频率就是倒数为Fc/N。这个方法适合低频,数据跳变快,更新快,会受噪声影响,因为是一个周期内,也存在正负1误差。多计数N可以减少误差
反之测频法适合高频,更新慢,数值相对稳定,相当于一段时间的平均值,多个周期测量,会出现正负1误差,因为在一定的阀门时间内,可能在最后只测到半个周期,因此计数需要多加1或者减1.
中界频率就是当以上两个频率相等时,求解的结果,当频率小于中界频率使用测周法误差更小,反之使用测频法。
以下是输入捕获通道电路图
首先将信号输入,经过滤波到达边沿检测器,通过CC1P去选择极性,然后选用上升沿或者下降沿到达TIFP1处,这里分两路,一路到至从模式控制器,可以自动清除一个周期后的CNT值,一路到达后续的数据选择器,输出到IC1,分频器,之后通过设置输出最终结果。
之后是“主从触发模式”
主要使用了TI1FP1或者TI2FP2作为从模式的输入,相当于通道1或者2,如果用3或者4可能需要申请中断进行手动清零,比较浪费软件资源。
接下来是使用了两路通道分别进行频率和占空比的输出:
两路通道的设置相反,左上角的图可以看出,CCR1放的是整个周期的CNT值,而CCR2则是高电平期间的CNT值,因此CCR2/CCR1就是占空比的值。