基于stm32单片机外文文献_记:关于输出任意占空比与频率的一种方式——基于STM32单片机...

b43a3d57f70c8dbd32195c7897d203de.png

0x00前言

写下这篇文章的主要目的时总结一下最近发现的一个较方便的波形调制方式。可以一定程度脱离手工计算,支持发出任意频率、任意占空比PWM控制信号的方式,使用了较为方便的寄存器的方式进行驱动。本文分为两部分,分别讲述了一个调制信号的思路以及实现的方式、一个计算死区的方式。 阅读本文,您可能需要掌握的知识:

875c22d4aed57198eda36ad90c382dbb.png
掌握的知识树

0x10 调制信号的方式

项目的主要要求在于,可以随意的调制出任意占空比1~10KHzPWM方波。因为这个需求的难度,所以使得软件模拟变成了很难的一件事情。遂我使用STM32系列的高级定时器对波形进行模拟。再查阅了相关资料后我得出的结论,计算波形主要的参数在于占空比以及分频系数上。

0x11 占空比

计算占空比的公式主要是:

项目除了较为宽泛的频率选择,还有宽泛的占空比选择。所以为了方便选择占空比,本人主要的思想在于:确认一个固定的定时器累加值。从而在给定了PWM占空比的情况下,就可以得到当前占空比的阈值。而且只需要调高定时器累加值(分母),就可以得到更高的占空比精度。一般的占空比范围于定时器累加值范围表述约为:

20c91140e530548e174c8ae0ee2c4e4a.png
占空比与定时器累加值的设定关系

一般来说,占空比精度做到大约万分之一(0.01%)即可。

0x12 分频系数

仔细翻找了官方的一些文档,以及第三方标准库(StdLib)。得到了一个较为完备的公式:

而频率对于计时时间的转换公式为:

则公式可以简化成:

根据此公式,在已知频率、累加器、系统时钟的情况下,可以轻松得出当前定时器分频系数为:

直接带入即可计算出可以使用的分频系数,而且基本上不会溢出。也可以通过分频系数推断出当前最高输出的频率。


0x20 死区时间

根据官方给的记录

fa1e73ad0bc458186541876d1c8bfb98.png

而官方的寄存器记录中并没有提到关于DTS相关的信息,但是在前面的地方就会有解释,这个DTS可以认为是定时器总线时钟片的原子单位。本人使用了120MHz的时钟,也就是说t_DTS=8μs

可以先得到官方例子中的125ns得到对应的分频比:

82bff430d3f84c1174da3c1251674c9b.png

对此,就可以根据这个分频比就可以分出几个层级,并套用上方给出的几个公式。这里需要注意的是,这个DT计算出DTC的值,需要将其拼接在一起。 根据8ns(

)的分片可以得到:

647c81f22d25705aa18699aa31cc81c2.png

而计算方式反推示例:

其中,区间为上述文档中的数据区间,比例系数则为当前的区间比例(1,2,8,16),固定比例为64或者32。


更新了一部分代码在我的博客……对知乎的版权维护堪忧……就不贴了,反正都是小透明

更多

更多关于嵌入式开发的文章,请前往

https://www.abcde.engineer​www.abcde.engineer

版权声明:本文为博主原创文章,博客地址:https://www.abcde.engineer。

未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值