打印
[STM32G4]

定时器产生指定脉冲宽度

[复制链接]
346|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Sunwaz|  楼主 | 2022-11-23 17:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

如上图所示:
一个朋友A,他想产生一个波形,高电平:1-40us可调,低电平:1-40us可调。

他说,使用定时器中断的方式,总是无法产生1us的中断,使用nop来搭误差又很大。如果使用定时器,那如果奇数us的定时误差也很大,感到很疑惑,不知道怎么做。

我想熟悉STM32的小伙伴都知道该怎么做吧?这个其实很简单,直接使用定时器PWM就好。而产生PWM波形,最主要的三个参数就是
1>分频             为定时器提供基础时钟频率
2>计数值          可以通过计数值来决定周期
3>脉冲值          通过调整脉冲值来调整高低电平的时间分配

对于分频,提供了一个基础的时钟频率,这个频率决定了整个时间的分辨率,当然这个频率越高,导致的误差就会越大。因为这个频率是由锁相环提供,锁相环将HSE或者HSI倍频上去,频率被倍频的时候,误差也被倍频了。

我做实验所用到的外部晶体为24MHz,主频跑的72MHz,定时器1的APB总线时钟频率为72MHz,时钟的分频为0(不分频)。那此时我的时间分辨率为:13.89ns
通过串口接收到high level的数值和low level的数值,然后设置计数值和脉冲值。
计数值=(high level + low level)*72           , 例如 high level = 1us , low level = 2us,此时计数值=216
脉冲值=(计数值*high level)/(high level + low level),此时脉冲值为:72
根据这个参数设置定时器,产生的波形图如图:


这样就产生了~ 如果还有更好的方法,欢迎分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝