0x00前言
写下这篇文章的主要目的时总结一下最近发现的一个较方便的波形调制方式。可以一定程度脱离手工计算,支持发出任意频率、任意占空比PWM控制信号的方式,使用了较为方便的寄存器的方式进行驱动。本文分为两部分,分别讲述了一个调制信号的思路以及实现的方式、一个计算死区的方式。 阅读本文,您可能需要掌握的知识:
0x10 调制信号的方式
项目的主要要求在于,可以随意的调制出任意占空比的1~10KHz的PWM方波。因为这个需求的难度,所以使得软件模拟变成了很难的一件事情。遂我使用STM32系列的高级定时器对波形进行模拟。再查阅了相关资料后我得出的结论,计算波形主要的参数在于占空比以及分频系数上。
0x11 占空比
计算占空比的公式主要是:
项目除了较为宽泛的频率选择,还有宽泛的占空比选择。所以为了方便选择占空比,本人主要的思想在于:确认一个固定的定时器累加值。从而在给定了PWM占空比的情况下,就可以得到当前占空比的阈值。而且只需要调高定时器累加值(分母),就可以得到更高的占空比精度。一般的占空比范围于定时器累加值范围表述约为:
一般来说,占空比精度做到大约万分之一(0.01%)即可。
0x12 分频系数
仔细翻找了官方的一些文档,以及第三方标准库(StdLib)。得到了一个较为完备的公式:
而频率对于计时时间的转换公式为:
则公式可以简化成:
根据此公式,在已知频率、累加器、系统时钟的情况下,可以轻松得出当前定时器分频系数为:
直接带入即可计算出可以使用的分频系数,而且基本上不会溢出。也可以通过分频系数推断出当前最高输出的频率。
0x20 死区时间
根据官方给的记录
而官方的寄存器记录中并没有提到关于DTS相关的信息,但是在前面的地方就会有解释,这个DTS可以认为是定时器总线时钟片的原子单位。本人使用了120MHz的时钟,也就是说t_DTS=8μs
。
可以先得到官方例子中的125ns得到对应的分频比:
对此,就可以根据这个分频比就可以分出几个层级,并套用上方给出的几个公式。这里需要注意的是,这个DT计算出DTC的值,需要将其拼接在一起。 根据8ns(
而计算方式反推示例:
其中,区间为上述文档中的数据区间,比例系数则为当前的区间比例(1,2,8,16),固定比例为64或者32。
更新了一部分代码在我的博客……对知乎的版权维护堪忧……就不贴了,反正都是小透明
更多
更多关于嵌入式开发的文章,请前往
https://www.abcde.engineerwww.abcde.engineer版权声明:本文为博主原创文章,博客地址:https://www.abcde.engineer。
未经博主允许不得转载。