[STM32G4] 定时器产生指定脉冲宽度

[复制链接]
1325|16
 楼主| Sunwaz 发表于 2022-11-23 17:08 | 显示全部楼层 |阅读模式
40496637dddc6d91c7.png
如上图所示:
一个朋友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
根据这个参数设置定时器,产生的波形图如图:
71898637de305ccede.png

这样就产生了~ 如果还有更好的方法,欢迎分享
大鹏2365 发表于 2024-7-28 23:21 | 显示全部楼层
对于更高的精度需求,可以使用硬件定时器(例如STM32的高级定时器)或其他专用硬件来生成精确的波形。
田舍郎 发表于 2024-7-28 23:32 来自手机 | 显示全部楼层
高电平有过冲
lxs0026 发表于 2024-7-30 20:35 | 显示全部楼层
使用实际测量的周期进行校准,调整PWM参数,以补偿时钟源的误差。
Uriah 发表于 2024-10-21 07:31 | 显示全部楼层

钳位二极管最常用于集成电路中
帛灿灿 发表于 2024-10-21 09:27 | 显示全部楼层

它迅速由高阻态变为低阻态
Bblythe 发表于 2024-10-21 10:30 | 显示全部楼层

减少反射,避免振荡,方便调试
周半梅 发表于 2024-10-21 12:26 | 显示全部楼层

得到正常工作状态下的输出电压和电流。
Pulitzer 发表于 2024-10-21 13:29 | 显示全部楼层

在电路中有部分电子元器件比较“脆弱”
Wordsworth 发表于 2024-10-21 16:28 | 显示全部楼层

产生一个充电放电的过程
Wordsworth 发表于 2024-10-21 16:28 | 显示全部楼层

产生一个充电放电的过程
Clyde011 发表于 2024-10-21 17:31 | 显示全部楼层

齐纳二极管作为ESD保护与单向TVS原理相同
公羊子丹 发表于 2024-10-21 18:24 | 显示全部楼层

并在必要时进行去毛刺。
万图 发表于 2024-10-21 19:27 | 显示全部楼层

之所以称为ESD静电保护器
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部