找回密码
 立即注册
查看: 255|回复: 5

PWMA互补输出带死区时间,死区的波形怎么改成两个高电平(现在是一高一低)|好了

[复制链接]
已绑定手机

2

主题

3

回帖

26

积分

新手上路

积分
26
发表于 2025-2-24 14:49:57 | 显示全部楼层 |阅读模式

void PWMA_config(void)
{
        P_SW2 |= 0x80;                //SFR enable   

        PWMA_PSCR = 0x007F;        // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMA_DTR  = 0xff;                // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,  
                                                //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
        PWMA_ARR = 3455;        // 自动重装载寄存器,  控制PWM周期
        
        PWMA_CCER1  = 0;
        PWMA_CCER2  = 0;
        
        PWMA_SR1    = 0;
        PWMA_SR2    = 0;
        PWMA_ENO    = 0;
        PWMA_PS     = 0;
        PWMA_IER    = 0;
//        PWMA_ISR_En = 0;

        PWMA_CCMR4  = 0x68;                // 通道模式配置, PWM模式1, 预装载允许
        PWMA_CCR4   = 1727;                // 比较值, 控制占空比(高电平时钟数)
        PWMA_CCER2 |= 0x50;                // 开启比较输出, 高电平有效
        PWMA_PS    |= (0<<6);        // 选择IO, 0:选择P1.6 P1.7, 1:选择P2.6 P2.7, 2:选择P6.6 P6.7, 3:选择P3.3 P3.4
        PWMA_ENO   |= 0xc0;                // IO输出允许,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P
//        PWMA_IER   |= 0x10;                // 使能中断

        PWMA_BKR    = 0x80;                // 主输出使能 相当于总开关
        PWMA_CR1    = 0x81;                // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
        PWMA_EGR    = 0x01;                //产生一次更新事件, 清除计数器和预分频计数器, 装载预分频寄存器的值
//        PWMA_ISR_En = PWMA_IER;        //设置标志允许通道1~4中断处理
}


截图202502241449362454.jpg 截图202502241449291040.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2025-2-24 14:51:32 | 显示全部楼层
通道都改成反向输出试试.
回复 支持 反对

使用道具 举报 送花

已绑定手机

2

主题

3

回帖

26

积分

新手上路

积分
26
发表于 2025-2-24 14:54:52 | 显示全部楼层
电子DI*** 发表于 2025-2-24 14:51
通道都改成反向输出试试.

请问一下,是需要改哪个寄存器呀

点评

PWMA_CCER2,更改这个就可以了  详情 回复 发表于 2025-2-24 15:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-2-24 15:13:02 | 显示全部楼层
mmmas*** 发表于 2025-2-24 14:54
请问一下,是需要改哪个寄存器呀

PWMA_CCER2,更改这个就可以了
回复 支持 反对

使用道具 举报 送花

已绑定手机

2

主题

3

回帖

26

积分

新手上路

积分
26
发表于 2025-2-24 16:06:22 | 显示全部楼层
王*** 发表于 2025-2-24 15:13
PWMA_CCER2,更改这个就可以了

感谢。改好了
回复 支持 反对

使用道具 举报 送花

已绑定手机

2

主题

3

回帖

26

积分

新手上路

积分
26
发表于 2025-2-24 16:06:37 | 显示全部楼层
void PWMA_config(void)
{
        P_SW2 |= 0x80;                //SFR enable   

        PWMA_PSCR = 0x007F;        // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
        PWMA_DTR  = 0xff;                // 死区时间配置, n=0~127: DTR= n T,   0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,  
                                                //                                0xc0 ~(0xc0+n), n=0~31: DTR=(32+n)*8T,   0xE0 ~(0xE0+n), n=0~31: DTR=(32+n)*16T,
        PWMA_ARR = 3455;        // 自动重装载寄存器,  控制PWM周期
       
        PWMA_CCER1  = 0;
        PWMA_CCER2  = 0;
       
        PWMA_SR1    = 0;
        PWMA_SR2    = 0;
        PWMA_ENO    = 0;
        PWMA_PS     = 0;
        PWMA_IER    = 0;
//        PWMA_ISR_En = 0;

        PWMA_CCMR4  = 0x68;                // 通道模式配置, PWM模式1, 预装载允许
        PWMA_CCR4   = 1727;                // 比较值, 控制占空比(高电平时钟数)
        PWMA_CCER2 |= 0xF0;                // 死区改成个高电平了现在
        PWMA_PS    |= (0<<6);        // 选择IO, 0:选择P1.6 P1.7, 1:选择P2.6 P2.7, 2:选择P6.6 P6.7, 3:选择P3.3 P3.4
        PWMA_ENO   |= 0xc0;                // IO输出允许,  bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,  bit3: ENO2N,  bit2: ENO2P,  bit1: ENO1N,  bit0: ENO1P
//        PWMA_IER   |= 0x10;                // 使能中断

        PWMA_BKR    = 0x80;                // 主输出使能 相当于总开关
        PWMA_CR1    = 0x81;                // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,  bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
        PWMA_EGR    = 0x01;                //产生一次更新事件, 清除计数器和预分频计数器, 装载预分频寄存器的值
//        PWMA_ISR_En = PWMA_IER;        //设置标志允许通道1~4中断处理
}
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 08:55 , Processed in 0.447279 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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