卡缪.维丹 发表于 2026-2-12 20:44:48

PWM多通道输出问题 | 已找到问题

//等主板到了再看一下需要用到的引脚
//不是PWMB极性的问题,也不是PS的问题,会不会是极性的问题
void PWM_R_L_motor_init(void)
{
    P2M1&=~0x03;
    P2M0|=0x03;   

    PWMB_CCER1 = 0x00;//写 CCMRx 前必须先清零 CCxE 关闭通道
    PWMB_CCMR1 = 0x60;//通道模式配置
    PWMB_CCMR2 = 0x60;//通道模式配置
    PWMB_CCER1=0x33;    //使能5 6通道

    PWMB_PSCRH = 0;
    PWMB_PSCRL = 0;      // 1 分频,计数时钟 48 MHz

    PWMB_ARRH = 0x12;    // ARR = 4800 - 1 = 4799
    PWMB_ARRL = 0xBF;    // 0x12BF

    PWMB_CCR5H = 0x04;   // CCR = 2400 → 50% 占空比
    PWMB_CCR5L = 0xB0;   // 0x0960 = 2400

    PWMB_CCR6H = 0x09;   // CCR = 2400 → 50% 占空比
    PWMB_CCR6L = 0x60;   // 0x04B0 = 1200

    PWMB_ENO = 0x00;
    PWMB_ENO |= ENO5P;//使能输出
    PWMB_ENO |= ENO6P;//使能输出

    PWMB_PS = 0x00;   //高级 PWM 通道输出脚选择位
    PWMB_PS |= PWMB5_1; //选择 PWMB5 通道   P00~P03
    PWMB_PS |= PWMB6_1;

    PWMB_BKR = 0x80;    //使能主输出
    PWMB_CR1 |= 0x01;   //开始计时
}为什么ch5可以正常输出,ch6却不行,已经详细对比了芯片手册,没找到问题在哪

王昱顺 发表于 2026-2-13 07:57:42

代码是没有问题的,有这么几种可能,可以依次排查一下
1.可能是PWMB_PS没有选择正确,当P00作为PWM5的时候,P01才是PWM6,PWMB组没有互补输出
2.也有可能是最开头的IO模式没有设置正确,
最开头的只设置了P20和P21,需要设置对应的输出口为强推挽模式才可以,
否则默认为高阻输入模式,就是没有输出信号的
其他的应该没有什么问题,可以先排查上面两项

卡缪.维丹 发表于 2026-3-5 16:57:05

王昱顺 发表于 2026-2-13 07:57
代码是没有问题的,有这么几种可能,可以依次排查一下
1.可能是PWMB_PS没有选择正确,当P00作为PWM5的时候 ...

好的,我看了一下问题出在第二点,谢谢王工
{:baoquan:}
页: [1]
查看完整版本: PWM多通道输出问题 | 已找到问题