硬汉嵌入式论坛

 找回密码
 立即注册
查看: 339|回复: 12
收起左侧

[TIMER] 求助:一个定时器怎么实现4路时差和占空比可调的波形

[复制链接]

2

主题

1

回帖

7

积分

新手上路

积分
7
发表于 2025-8-4 17:53:32 | 显示全部楼层 |阅读模式
各位大佬们:

如何使用一个定时器的四个通道生成占空比相同,并且有固定相位差的四个脉冲,类似于图片里面的,有点像梯形。实现这种方式的方法有哪些。 6f34fdda1d8ed6cb2e39728f28464c38.png
回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
发表于 2025-8-4 18:47:43 | 显示全部楼层
定时,在中断里拉高拉低处理啊,这个肯定不能用自带的PWM了
回复

使用道具 举报

85

主题

798

回帖

1053

积分

至尊会员

积分
1053
发表于 2025-8-4 23:45:59 | 显示全部楼层
8个CCR,两两组合成一个PWM
回复

使用道具 举报

4

主题

90

回帖

102

积分

初级会员

积分
102
发表于 7 天前 | 显示全部楼层
本帖最后由 Penguins 于 2025-8-5 00:10 编辑

使用高精度定时器 (HRTIM) 即可解决,或使用 DMA 控制 IO
回复

使用道具 举报

4

主题

90

回帖

102

积分

初级会员

积分
102
发表于 7 天前 | 显示全部楼层
xinhaic 发表于 2025-8-4 18:47
定时,在中断里拉高拉低处理啊,这个肯定不能用自带的PWM了

使用高精度定时器 (HRTIM) 即可解决,或使用 DMA 控制 IO
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 7 天前 | 显示全部楼层
我这个可以

视频教程第16期:DMA双缓冲实现32路脉冲并行同步控制(2022-05-26)
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=112560
回复

使用道具 举报

7

主题

117

回帖

138

积分

初级会员

积分
138
发表于 7 天前 | 显示全部楼层
难点在哪里,像STM32的一些4通道定时器,一个定时器都可以实现4个不同频率、不同占空比、不同相位的独立PWM,你这就相位不一样而已
回复

使用道具 举报

102

主题

573

回帖

894

积分

金牌会员

积分
894
QQ
发表于 7 天前 | 显示全部楼层
楼上说的对,每个定时器都可以输出4个不同频率,不同占空比,不同相位的PWM。用输出比较,在比较中断里修改CCR的值就行。
驱动步进电机做加减速一般用的都是这种方案。你可以去看某火,某原子,某石的教程,里面有详细的代码。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 6 天前 | 显示全部楼层
会飞的猪_2020 发表于 2025-8-5 14:23
楼上说的对,每个定时器都可以输出4个不同频率,不同占空比,不同相位的PWM。用输出比较,在比较中断里修改 ...

这个帖子就是,实用价值不高,远不如定时器中断控制IO方便。速度快了,进出中断非常频繁,而且是4个通道交错的进入,频率要求会更高。

STM32H7实现单个定时器中不同通道配置不同频率PWM的方法
https://forum.anfulai.cn/forum.php? ... id=89008&fromuid=58

配合DMA的话,不够灵活,需要要用户编排好4组CCR的值来,制作个缓存, 类似这个

STM32H7的PWM + DMA突发模式实现定时器寄存器的批量更新
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=88989




回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 6 天前 | 显示全部楼层
死不低头 发表于 2025-8-5 14:14
难点在哪里,像STM32的一些4通道定时器,一个定时器都可以实现4个不同频率、不同占空比、不同相位的独立PWM ...

无法独立,都是在同一个定时器时间基准下的。
回复

使用道具 举报

7

主题

117

回帖

138

积分

初级会员

积分
138
发表于 6 天前 | 显示全部楼层
eric2013 发表于 2025-8-6 09:21
无法独立,都是在同一个定时器时间基准下的。

实际测试过,是可以的,只是速度上不去,也不会非常准确,因为需要不停的进中断改CCR值,4个通道都必须用比较匹配翻转模式
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 6 天前 | 显示全部楼层
死不低头 发表于 2025-8-6 12:08
实际测试过,是可以的,只是速度上不去,也不会非常准确,因为需要不停的进中断改CCR值,4个通道都必须用 ...

时间基准无法独立,全部都要在这个基础上,动态调节CCR来实现。调节频率非常不方便。

我们的bsp_timer.c里面做的单次定时器模式就是采用的这个方式实现的,不同的仅仅是没有做GPIO输出,这个模式用在单次定时器输出上非常合适。
回复

使用道具 举报

7

主题

25

回帖

46

积分

新手上路

积分
46
发表于 5 天前 | 显示全部楼层
这个TIM+DMA写GPIO的方式太牛了,比直接用外设PWM来的更灵活,更巧妙
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 00:01 , Processed in 0.051395 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表