Pwm_DebugSop
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 12/13/2024 |
1. 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-2,period < (duty - shift),无法输出波形

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

由于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参数,导致实际输出的频率与预期不匹配,此时可以通过查看寄存器反推实际输出的波形,如下图:

实际波形的频率 = 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有没有使能输出波形