参考例程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:03 编辑
布丁橘长第49期。网上看了一个视频,找到问题了。主要原因在于死区时间的脉冲来源问题,脉冲来自预分频之前,而不是之后。
它山之石可以攻玉,其实STC8H的PWM和STM32的高级定时器一样,参考了好多相关内容理解。
C:\Users\Administrator\Desktop\微信图片_20240818215753.png
wnagming 发表于 2024-8-19 06:19
那和你代码有什么关系?
程序没问题,死区时间设置太小了,没观察出来。加大死区时间,观察就比较明显了 JISHUZHAI 发表于 2024-8-19 09:54
程序没问题,死区时间设置太小了,没观察出来。加大死区时间,观察就比较明显了 ...
死区一般是用于驱动MOSFET上下管才用到的,一般就是0.5~2us,示波器要用1us/DIV才能观察到明显的死区。MOSFET驱动需要的死区是固定的,跟PWM周期没有关系,所以死区时钟来自主频,二不是PWM时钟。
页:
[1]