rnisqnqs 发表于 2025-12-3 20:08:13

144MHZ的高速高级HSPWM硬件移相怎么动态调整频率和相位

                P_SW2 |=0x80;
                PWMA_ARR_DATA=arr <<1;
                PWMA_PERIOD=144000000/arr;
                PWM3_Duty=0;      
                PWM4_Duty=PWMA_PERIOD;               
                PWM5_Duty=PWMA_PERIOD/2;
                PWM6_Duty=PWMA_PERIOD/2;
      
                HSPWMA_CFG = 0x03;               
                WritePWMA((u8)&PWMA_ARRH, (u8)(PWMA_PERIOD-1)>> 8);      // 自动重装载寄存器,控制PWM周期
                WritePWMA((u8)&PWMA_ARRL, (u8)(PWMA_PERIOD-1));               
                WritePWMA((u8)&PWMA_CCR3H, (u8)(PWM3_Duty >> 8));      //设置占空比时间
                WritePWMA((u8)&PWMA_CCR3L, (u8)PWM3_Duty);
                WritePWMA((u8)&PWMA_CCR4H, (u8)(PWM4_Duty >> 8));      
                WritePWMA((u8)&PWMA_CCR4L, (u8)PWM4_Duty);
      
                HSPWMA_CFG = 0x13;         
                WritePWMA((u8)&PWMA_CCR5H, (u8)(PWM5_Duty >> 8));      
                WritePWMA((u8)&PWMA_CCR5L, (u8)PWM5_Duty);      
                WritePWMA((u8)&PWMA_CCR6H, (u8)(PWM6_Duty >> 8));      
                WritePWMA((u8)&PWMA_CCR6L, (u8)PWM6_Duty);



               为什么这样配置实现不了


         



王昱顺 发表于 2025-12-3 21:01:39

启动高速pwm前,需要确保pll时钟已经起振,一般建议设置好pll时钟后等个1ms,然后打开高速异步pwm。
然后再使用异步读写pwm方式操作pwm寄存器
你可以先实现传统的高速pwm调整占空比,然后再尝试移相部分
以及,高速异步部分的寄存器需要额外设置hspwma_cfg

rnisqnqs 发表于 2025-12-3 21:42:49

王昱顺 发表于 2025-12-3 21:01
启动高速pwm前,需要确保pll时钟已经起振,一般建议设置好pll时钟后等个1ms,然后打开高速异步pwm。
然后再 ...

初始化时已经给了默认频率和相位,这部分是正常的,现在想动态调整频率和相位,实现不了,不知道问题出在哪里

王昱顺 发表于 2025-12-4 09:43:50

rnisqnqs 发表于 2025-12-3 21:42
初始化时已经给了默认频率和相位,这部分是正常的,现在想动态调整频率和相位,实现不了,不知道问题出在 ...




需要HSPWMA_CFG = 0x13;

rnisqnqs 发表于 2025-12-4 10:05:00

王昱顺 发表于 2025-12-4 09:43
需要HSPWMA_CFG = 0x13;

都有设置的,
                P_SW2 |=0x80;
                PWMA_ARR_DATA=arr <<1;
                PWMA_PERIOD=144000000/arr;
                PWM3_Duty=0;      
                PWM4_Duty=PWMA_PERIOD;               
                PWM5_Duty=PWMA_PERIOD/2;
                PWM6_Duty=PWMA_PERIOD/2;
      
                HSPWMA_CFG = 0x03;               
                WritePWMA((u8)&PWMA_ARRH, (u8)(PWMA_PERIOD-1)>> 8);      // 自动重装载寄存器,控制PWM周期
                WritePWMA((u8)&PWMA_ARRL, (u8)(PWMA_PERIOD-1));               
                WritePWMA((u8)&PWMA_CCR3H, (u8)(PWM3_Duty >> 8));      //设置占空比时间
                WritePWMA((u8)&PWMA_CCR3L, (u8)PWM3_Duty);
                WritePWMA((u8)&PWMA_CCR4H, (u8)(PWM4_Duty >> 8));      
                WritePWMA((u8)&PWMA_CCR4L, (u8)PWM4_Duty);
      
                HSPWMA_CFG = 0x13;         
                WritePWMA((u8)&PWMA_CCR5H, (u8)(PWM5_Duty >> 8));      
                WritePWMA((u8)&PWMA_CCR5L, (u8)PWM5_Duty);      
                WritePWMA((u8)&PWMA_CCR6H, (u8)(PWM6_Duty >> 8));      
                WritePWMA((u8)&PWMA_CCR6L, (u8)PWM6_Duty);

王昱顺 发表于 2025-12-4 10:28:59

rnisqnqs 发表于 2025-12-4 10:05
都有设置的,
                P_SW2 |=0x80;
                PWMA_ARR_DATA=arr8);      // 自动重 ...

那你可以试试不使用高速PWM,先用同步方式,试试看能不能正常调节
如果能的话,考虑是WritePWMA这个函数的问题
页: [1]
查看完整版本: 144MHZ的高速高级HSPWM硬件移相怎么动态调整频率和相位