打印
[STM32F1]

STM32F103输出两路PWM,如何实现图中相位

[复制链接]
645|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
想用STM32F103RCT6输出两个PWM输出,他们的周期和极性相同,但一个输出与另一个输出相差180度。
调整占空比时同时影响两者。类似互补输出,但不完全符合。如下图,该如何配置参数

使用特权

评论回复
沙发
香水城| | 2025-3-9 08:39 | 只看该作者
本帖最后由 香水城 于 2025-4-21 14:43 编辑

推荐思路:
1、任一路采用PWM输出,另一路采用OC Toggle+DMA 周期性修改CCR值,当然你用中断也行,但频率太高的话占用CPU太厉害;
2、2路都使用上面提到的采用OC Toggle+DMA 周期性修改CCR值的方案;
3、尝试使用中心对齐的方式来实现
4、上面都是基于1个TIMER, 如果使用2个timer 就更方便了。

利用定时器比较输出切换实现定制波形示例

使用特权

评论回复
板凳
铁头电子player|  楼主 | 2025-3-10 20:27 | 只看该作者
香水城 发表于 2025-3-9 08:39
推荐思路:
1、任一路采用PWM输出,另一路采用OC Toggle+DMA 周期性修改CCR值,当然你用中断也行,但频率太 ...

感谢技术大佬,用这方法马上要成功了,波形还不是非常完美

使用特权

评论回复
地板
三生万物| | 2025-4-14 01:06 | 只看该作者
建议楼主使用一个高级定时器(如TIM1TIM8)或通用定时器(如TIM2/3/4),因为它们支持互补输出和相位调整

使用特权

评论回复
5
淡漠安然| | 2025-4-14 02:11 | 只看该作者
PWM Generation ModePWM模式)。极性:High(根据需求选择)。周期(ARR值):例如设置为1000(对应1kHz PWM,假设时钟72MHz,预分频72-1

使用特权

评论回复
6
光辉梦境| | 2025-4-14 03:16 | 只看该作者
使用输出比较,通过调整CCR(捕获/比较寄存器)的值实现相位偏移:CH1CCR= 占空比。CH2CCR= (占空比 + ARR/2) % ARR

使用特权

评论回复
7
暖了夏天蓝了海| | 2025-4-14 04:27 | 只看该作者
可以使用主从定时器生成基准PWMCH1)。从定时器(TIM2):通过触发输入(ITRx)同步,并设置ARR/2的延迟

使用特权

评论回复
8
远山寻你| | 2025-4-14 05:15 | 只看该作者
一般来说,相位差计算 (duty + ARR/2) % ARR确保CH2的上升沿始终比CH1延迟半个周期

使用特权

评论回复
9
江河千里| | 2025-4-14 06:37 | 只看该作者
CubeMX中设置两个通道的极性相同(如Active High

使用特权

评论回复
10
夜阑风雨| | 2025-4-14 07:14 | 只看该作者
可以通过SetPWM_Duty函数统一调整两个通道的CCR

使用特权

评论回复
11
一秒落纱| | 2025-4-14 08:28 | 只看该作者
如果相位差不准,检查ARR是否为偶数(奇数会导致180°偏移不精确)

使用特权

评论回复
12
冰春彩落下| | 2025-4-14 09:20 | 只看该作者
如果定时器通道数量不足,可以通过软件翻转GPIO实现:使用一个定时器中断,在中断中手动翻转两个GPIO(其中一个GPIO的翻转时间延迟半个周期)

使用特权

评论回复
13
别乱了阵脚| | 2025-4-14 10:22 | 只看该作者
用两个定时器试试呢?也许能让输出波形移植吧

使用特权

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

本版积分规则

9

主题

10

帖子

0

粉丝