Pwm_DebugSop

REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 12/13/2024

    1. Debug流程图

    图1-1 PWM无法输出波形的Debug流程图

    2. Debug流程说明

    2.1 硬件问题

    检查到PWM无输出波形时,可操作寄存器或者GPIO指令将对应PIN脚设为GPIO并拉高拉低(请注意某些PIN脚GPIO功能优先级并不是最高的,此时需要先清除更高优先级),如果实际输出电平没有变化,则可判断为硬件问题,可按照如下顺序排查:

    2.1.1 HW-A 检查电阻

    查看原理图的对应PIN脚是否有电阻漏焊,漏焊则需要补焊电阻,否则PIN脚不通

    2.1.2 HW-B 检查焊接情况

    如果更换Board后,GPIO是可以拉高拉低的,那么可能是芯片虚焊,需要rework

    2.1.3 HW-C 请求协助

    联系硬件同事协助排查并重焊芯片

    2.1.4 HW-D 问题上报

    如果更换Board后,GPIO仍然无法拉高拉低,联系FAE上报问题

    2.2 软件问题

    判断为软件问题时,可按照如下顺序排查:

    2.2.1 SW-A 检查PWM寄存器配置

    dump PWM bank,检查寄存器设定是否生效,以PCUPID举例

    Channel Bank Period Reg Duty Reg Shift Reg Enable Reg Group status Group enable
    PWM0 0x1019 0x4-0x5 0x2-0x3 0x0-0x1 0x61 BIT0 0x64 BIT0 0x63 BIT0
    PWM1 0x1019 0x14-0x15 0x12-0x13 0x10-0x11 0x61 BIT1 0x64 BIT0 0x63 BIT1
    PWM2 0x1019 0x24-0x25 0x22-0x23 0x20-0x21 0x61 BIT2 0x64 BIT0 0x63 BIT2
    PWM3 0x1019 0x34-0x35 0x32-0x33 0x30-0x31 0x61 BIT3 0x64 BIT0 0x63 BIT3
    PWM4 0x101A 0x4-0x5 0x2-0x3 0x0-0x1 0x61 BIT0 0x64 BIT0 0x63 BIT0
    PWM5 0x101A 0x14-0x15 0x12-0x13 0x10-0x11 0x61 BIT1 0x64 BIT0 0x63 BIT1
    PWM6 0x101A 0x24-0x25 0x22-0x23 0x20-0x21 0x61 BIT2 0x64 BIT0 0x63 BIT2
    PWM7 0x101A 0x34-0x35 0x32-0x33 0x30-0x31 0x61 BIT3 0x64 BIT0 0x63 BIT3
    PWM8 0x101C 0x4-0x5 0x2-0x3 0x0-0x1 0x61 BIT0 0x64 BIT0 0x63 BIT0
    PWM9 0x101C 0x14-0x15 0x12-0x13 0x10-0x11 0x61 BIT1 0x64 BIT0 0x63 BIT1
    PWM10 0x101C 0x24-0x25 0x22-0x23 0x20-0x21 0x61 BIT2 0x64 BIT0 0x63 BIT2
    PWM11 0x101C 0x34-0x35 0x32-0x33 0x30-0x31 0x61 BIT3 0x64 BIT0 0x63 BIT3
    PWM12 0x102B 0x4-0x5 0x2-0x3 0x0-0x1 0x61 BIT0 0x64 BIT0 0x63 BIT0
    PWM13 0x102B 0x14-0x15 0x12-0x13 0x10-0x11 0x61 BIT1 0x64 BIT0 0x63 BIT1
    PWM14 0x102B 0x24-0x25 0x22-0x23 0x20-0x21 0x61 BIT2 0x64 BIT0 0x63 BIT2
    PWM15 0x102B 0x34-0x35 0x32-0x33 0x30-0x31 0x61 BIT3 0x64 BIT0 0x63 BIT3
    PWM16 0x102B 0x44-0x45 0x42-0x43 0x40-0x41 0x61 BIT4 0x64 BIT0 0x63 BIT4
    PWM17 0x102B 0x54-0x55 0x52-0x53 0x50-0x51 0x61 BIT5 0x64 BIT0 0x63 BIT5
    PM PWM0 0x1A 0x4-0x5 0x2-0x3 0x0-0x1 0x7F BIT0 NA NA
    PM PWM1 0x1A 0x14-0x15 0x12-0x13 0x10-0x11 0x7F BIT1 NA NA

    如果选定的PWM通过Group Status为0,那么波形输出的需要同时满足两个条件:

    Period Reg的值 > (Duty Reg - Shift Reg)的值 && Enable Status = 0
    

    如果选定的PWM通过Group Status为1,那么波形输出的需要同时满足三个条件:

    Period Reg的值 > (Duty Reg + Shift Reg)的值 && Enable Status = 0 && Group Enable = 1
    

    如图2-1,各个配置正确,PWM正常输出波形:

    period(0x4) = 0x0077, PWM clock = 12Mhz, 实际波形的周期 = 12000000 / (0x0077 + 1) = 100000HZ

    duty(0x2) = 0x003B,shit(0x0) = 0x000B, 实际波形的占空比 = (0x003B - 0x000B) / (0x0077 + 1) = 40%

    图2-1 PWM正常波形的Bank配置

    如图2-2,period < (duty - shift),无法输出波形

    图2-2 PWM异常period

    如图2-3,enable staus = 1,无法输出波形

    图2-3 PWM disable

    由于PWM会有不同的精度模式,可能在高精度模式下,使用低精度的方法传参,那么会导致PWM寄存器配置不合理,此时确认寄存器的配置,可以反推应用层的传参是否合理

    2.2.2 SW-B 检查PADMUX

    检查PWM寄存器正确配置后,仍然无法输出波形或者输出波形异常,则需要检查PADMUX是否存在冲突,详见Gpio_DebugSop中的PADMUX冲突检查内容

    2.2.3 SW-C 检查时钟源

    PWM寄存器及PADMUX均检查完毕后,仍然无法输出波形,则需查看PWM Clock是否被异常关闭,以PCUPID为例

    Channel Bank Offset BIT
    PWM0 0x1038 0x38 BIT8
    PWM1 0x1038 0x38 BIT8
    PWM2 0x1038 0x38 BIT8
    PWM3 0x1038 0x38 BIT8
    PWM4 0x1038 0x38 BIT8
    PWM5 0x1038 0x38 BIT8
    PWM6 0x1038 0x38 BIT8
    PWM7 0x1038 0x38 BIT8
    PWM8 0x1038 0x38 BIT8
    PWM9 0x1038 0x38 BIT8
    PWM10 0x1038 0x38 BIT8
    PWM11 0x1038 0x38 BIT8
    PWM12 0x1038 0x38 BIT8
    PWM13 0x1038 0x38 BIT8
    PWM14 0x1038 0x38 BIT8
    PWM15 0x1038 0x38 BIT8
    PWM16 0x1038 0x38 BIT8
    PWM17 0x1038 0x38 BIT8
    PM PWM0 0x0E 0x1C BIT10
    PM PWM1 0x0E 0x1C BIT10

    查看对应通道的BIT是否为0,0表示Clock已经enbale,1表示disable,此时直接操作寄存器将Clock enable后即可输出PWM波形,那么可定位完全是Clock相关的问题,clock被关需要先检查pcupid-clks.dtsi的时钟配置, 配置auto_enable = <1>表示系统起来之后clock常开, RISCV和LINUX需要同时使用不同通道的PWM时需要如此配置;ignore = <1>表示clock由模块自行开关, 当只有RISCV使用PWM时把LINUX端配置拿掉按如此配置

    若如上配置没有问题,将初始化时的PWM Clock信息和PWM enbale后的PWM Clock信息提供FAE进行debug

    2.2.4 SW-D 请求协助

    上述步骤SW-A,SW-B,SW-C均检查OK,请提供PWM的参数设定记录、PWM相关报错LOG以及PWM BANK信息,联系FAE debug

    3. 常见问题说明

    3.1 PWM输出的频率与设定不符合

    PWM传参可以是高精度模式(周期和占空比均以纳秒为单位)和低精度模式(周期以赫兹为单位,占空比以百分比为单位),有可能出现是在高精度模式下按照低精度方法传入参数,也有可能误输入了shift参数,导致实际输出的频率与预期不匹配,此时可以通过查看寄存器反推实际输出的波形,如下图:

    图3-1 PWM Bank信息

    实际波形的频率 = PWM Clock频率 / (Period Reg + 1) = 12000000/ (0x2EDF + 1)= 1000 HZ
    
    实际波形的占空比 = (Dutry Reg - Shift Reg) / (Period Reg + 1) = (0x176F - 0X95F) / (0x2EDF + 1)= 30%
    

    实际输出周期1000HZ且占空比30%的情况下,高精度模式传入参数为period = 1000000 ns, duty = 500000 ns , shift = 200000 ns,低精度模式下传入参数为period = 1000 HZ,duty = 50%,shift = 30%

    3.2 开机启动相关问题

    常见异常现象为开机上电瞬间PWM控制的电机会转一段时间,由于SOC上电时PWM对应的GPIO还没有配置成PWM,会有一个默认电平,当默认电平满足电机转动条件时就会发生该现象,只有软件跑起来配置成PWM才会正常,这种问题需要设计硬件电路时提前规划

    3.3 配置Dead Time时没有波形输出

    配置PWM Dead Time输出带有死区的互补波形时如果没有波形输出,一般是没有使能作为触发Dead Time波形的PWM波,Dead Time波形总共有6组,0-5组的触发PWM分别是12-17,当没有波形时检查作为触发的PWM有没有使能输出波形