gyn1656449216 发表于 2025-7-4 11:13:15

疑问,PWM输出两路互补居中问题

使用的单片机为STC8H3K48S4,
硬件引脚固定为P2.0 P2.1 现在想输出如图两路PWM来驱动逆变器。
根据文档尝试过互补输出,但占空比25%的互补输出与要求不符。
我应该用什么方法

乘风飞扬 发表于 2025-7-4 11:33:01

可参考这里180度相位差的例子:

STC8H系列-高级PWM范例程序下载,2024/1/3 更新
https://www.stcaimcu.com/thread-1779-1-1.html
(出处: 国芯技术交流网站)

gyn1656449216 发表于 2025-7-4 14:05:24

乘风飞扬 发表于 2025-7-4 11:33
可参考这里180度相位差的例子:

STC8H系列-高级PWM范例程序下载,2024/1/3 更新


请问这里的占空比有范围限制吗,占空比设置50%时另一路没有输出

梁工 发表于 2025-7-5 12:34:21

你这个不是互补输出,是180度相位差的两路PWM,不知道你的PWM频率多少Hz。
请参考:从“沙发”下载附件,测试“15B-PWMB-2个相位差180度的PWM输出P2口-匹配输出0或1”

梁工 发表于 2025-7-5 12:35:04

gyn1656449216 发表于 2025-7-4 14:05
请问这里的占空比有范围限制吗,占空比设置50%时另一路没有输出

180度相位差,周期为1000,则PWM占空比一定要小于500,即0~499.

网老四 发表于 2025-7-8 14:38:39

你用的这个型号单片机,不支持移相功能,
可以使用中央对齐模式,两路独立的通道输出,一个通道正逻辑输出,另一个通道负逻辑输出,可以实现你的要求.稍微麻烦些.
也可以换个思路,
试试把PWM占空比设为固定50%,互补输出,然后调接死区时间来实现调节等效占空比的方法,
只要死区时间调节范围足够宽,就能实现你想要的效果,但要注意,死区寄存器DTR是一个字节,并且数值与死区时间(PWM时钟数)是非线性的,最大死区时间为1008个PWM时钟:


PWMA_DTR = 60; //   DTR=n=0~127:死区时间 = n T,
                           //   DTR=0x80+n, n=0~63: 死区时间 =(64+n)*2 T,
                        //    DTR=0xc0+n, n=0~31: 死区时间=(32+n)*8T,
                        //   DTR=0xE0+n, n=0~31: 死区时间=(32+n)*16T, 最大1008 T


gyn1656449216 发表于 2025-7-8 22:48:58

网老四 发表于 2025-7-8 14:38
你用的这个型号单片机,不支持移相功能,
可以使用中央对齐模式,两路独立的通道输出,一个通道正逻辑输出,另一 ...

感谢回答,通过互补输出加死区调节已经实现目标输出
页: [1]
查看完整版本: 疑问,PWM输出两路互补居中问题