
起因; o( V. b0 F& y- r 一直想通过定时器的捕获通道捕获 PWM,这种需求是非常基本的。各种开发板例程也都有,但是精度不怎么样,能捕获的频率也不是很高。对于高频和高精度情况下明显不适用。 有经验的工程师会选择参考手册中介绍的 PWM 输入捕获功能,但是该功能有一个很大的限制:" C* P+ N! }' }3 O / w, ^) q2 g$ D) }4 ` 一个定时器有四个通道,但是只有两个通道才可以使用 PWM 输入捕获,这极大的限制了可用通道,而在有些需求中,定时器可用通道当然是越多越好。 所以鱼鹰一直在苦思冥想一个高精度的通用的 PWM 输入捕获程序。; c: P/ Y- i& t) q # r% c- A* {& r1 T 领悟1 M( ^& T% M9 b/ y: u, j 一天晚上,鱼鹰一边洗衣,一边思考,终于灵光一闪,既然编码器功能可以借助两组通道完成编码器,为什么 PWM 输入捕获不能使用类似的机制呢?; w( D: B! [- }1 J s; m b& b# q$ n! f6 ?$ B) {! q5 c1 r: C 手册中的 PWM 输入因为使用了 从模式 功能,才有上述限制,只要我不使用从模式,仅仅使用两个通道的捕获功能,就可以解除该限制了吧? 所以借助《如何高效的扩展定时/计数器?》里面介绍的知识,鱼鹰顿悟了…… 2 P k) U* |/ C 效果 左边用逻辑分析仪设置的输出参数,右边通过捕获程序捕获的结果。: o9 ^+ V( w- @1 b: E STM32F103,主频 72 Mhz,定时器时钟频率 72 MHz。 " M/ O& n: |/ l9 U) d! j ![]() ![]() ![]() ![]() ![]() 9 I8 y$ L1 Z0 |+ y% d: z 我们从上图可以知道,即使输入 PWM 频率高达 1 Mhz,我们的程序还是将其准确测量出来了。 当然在占空比计算方面,因为定时器频率自身的原因,计算的并不精确,和实际的误差比较大,不过在这么高的频率下,只是 10% 的误差,我认为还是可以接受的。8 B) x3 _ b5 s& ^ - K/ |' C" E T1 m 而频率达到 3 MHz 时,频率比较接近(4 % 误差),但是占空比已经出现了很大误差,已经不可用了(可能计算有点问题)。 100 K,占空比 5 % 的情况下,频率测量误差 0%,占空比误差 1%!!! 7 y, T+ }, l0 Z% k' V - _0 f6 \7 c. V J* _! h+ D' g8 [ 优缺点 由于时间与篇幅原因(花了很多时间做测试),本篇笔记不会介绍捕获原理(鱼鹰要写的话,一定会尽可能的介绍清楚,所以字数会比较多,目前时间不足),主要是想通过本篇介绍 F103 72Mhz 的情况下所能达到的极致效果,让各位在接任务时有一个概念,看是否能简单通过 103 完成功能。 现在简单介绍一下鱼鹰这个方案的优缺点:5 @+ p4 \ d# S z" a9 b 优点:: p) Y# J: _3 g* c1 } 1、不占用 CPU 资源,使用 DMA 与定时器捕获功能完成。 而如果使用中断的方式,100KHz 下,10 us 就需要进入一次中断,基本不用干其他事情了。一旦中断被别的代码短暂禁用,错过了捕获,那计算的结果可能就有问题了。4 R- D4 X' F+ E 2、可以分时使用定时器的四个通道,不会被所谓的从模式所限制,但能达到和手册介绍 PWM 输入捕获功能一样的精度。 3、可以捕获高频信号(MHz),并且精度高。- ]) T% t) e4 k0 D) T- }: Q 4、精度和定时器时钟频率有很大关系(F1 1/72 us),如果 F4 的芯片,定时器频率更高,那么可以达到更高的精度(可以算优点,也可以算缺点)。+ D' r9 l2 o) b, M5 D6 ~ 5、因为采用 DMA 传输 + 硬件(定时器)方式,计算的结果可以信任,不需要太多的处理(比如滤波)。 6、单个通道可以达到很高的捕获率,甚至可以通过特定的算法进行实时捕获,而对 CPU 本身的影响却很小(即不占用 CPU 资源实时捕获计算)。+ `' [& f7 Y, K) @6 h3 a 7、解除STM32定时器只能捕获上升沿或下降沿,而不能双边沿捕获的限制。 $ W1 r! { X w0 a( N4 r& E0 g, m 缺点: J- D: z# l0 ]3 @7 l; g 1、只能分时测量每个通道的 PWM,不能同时测量(如果频率很高,几十个微秒就能切换 一次测量,问题不大)。# G, j, R i3 c: M4 K! g 2、占用 DMA 传输通道,导致对应的通道的外设不能使用(比如串口) 3、代码很简单,但是很难理解(下面的代码计算了所有捕获,实际上只要计算几个就行,因为数据可以信任)。
- E+ A( Z8 ]% M6 I) | - b+ O3 d4 w; J& q1 p |