JISHUZHAI 发表于 2024-8-18 20:20:14

参考例程23.10.15,使用PWMA输出互补带死区PWM,但是示波器测量无死区时间

本帖最后由 DebugLab 于 2024-8-18 22:43 编辑

参考例程23.10.15,修改PWMA输出互补带死区PWM,使用OC1和OC1N,但是示波器测量无死区时间,对比例程,没找到问题点,求助大神。使用芯片为8H1K08 TSSOP20封装。

void PWM_init()
{
//左右推挽MOS使用对称死区PWM驱动,使用PWMA的PWM1P和PWM1N
//预分频数等于PSCR值+1,
//边沿对齐模式PWM频率= 主频/((PSCR + 1)*(ARR + 1)) duty = CCR / (ARR + 1)参考23.7.7 1128页 已验证
//中间对齐模式PWM频率= 主频/((PSCR + 1)*(ARR * 2)) duty = CCR / (ARR) 已验证
   
P_SW2 |= 0x80;

PWMA_ENO = 0x03;      //输出通道使能 1P1N
PWMA_PS = 0x00;         //输出引脚选择切换

PWMA_PSCR = 1000;
//    PWMA_PSCRH = 0x10;      //预分频
//    PWMA_PSCRL = 0X00;
PWMA_DTR = 0x2F;      //死区时间
   
//    PWMA_CCER1 = 0x00;      //关闭通道OCi,方便配置CCMR
PWMA_CCMR1 = 0x68;      //OC1选择在模式6(PWM模式1),并使能CRR预装载
   
PWMA_ARR = 800;
//    PWMA_ARRH = 0x08;       //自动重装值,溢出值
//    PWMA_ARRL = 0X00;
   
PWMA_CCR1 = 400;
//    PWMA_CCR1H = 0X04;      //比较值
//    PWMA_CCR1L = 0x00;
   
PWMA_CCER1 = 0x05;      //打开通道OC1和OC1N,并配置极性,高电平有效
   
PWMA_BKR = 0x80;      //主输出使能
PWMA_IER = 0x02;      //使能中断
PWMA_CR1 = 0x01;      //使能计时器   
}



JISHUZHAI 发表于 2024-8-18 22:00:00

本帖最后由 JISHUZHAI 于 2024-8-18 22:03 编辑

布丁橘长第49期。网上看了一个视频,找到问题了。主要原因在于死区时间的脉冲来源问题,脉冲来自预分频之前,而不是之后。
它山之石可以攻玉,其实STC8H的PWM和STM32的高级定时器一样,参考了好多相关内容理解。
C:\Users\Administrator\Desktop\微信图片_20240818215753.png

JISHUZHAI 发表于 2024-8-19 09:54:36

wnagming 发表于 2024-8-19 06:19
那和你代码有什么关系?

程序没问题,死区时间设置太小了,没观察出来。加大死区时间,观察就比较明显了

梁工 发表于 2024-8-19 16:07:03

JISHUZHAI 发表于 2024-8-19 09:54
程序没问题,死区时间设置太小了,没观察出来。加大死区时间,观察就比较明显了 ...

死区一般是用于驱动MOSFET上下管才用到的,一般就是0.5~2us,示波器要用1us/DIV才能观察到明显的死区。MOSFET驱动需要的死区是固定的,跟PWM周期没有关系,所以死区时钟来自主频,二不是PWM时钟。
页: [1]
查看完整版本: 参考例程23.10.15,使用PWMA输出互补带死区PWM,但是示波器测量无死区时间