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);
为什么这样配置实现不了
启动高速pwm前,需要确保pll时钟已经起振,一般建议设置好pll时钟后等个1ms,然后打开高速异步pwm。
然后再使用异步读写pwm方式操作pwm寄存器
你可以先实现传统的高速pwm调整占空比,然后再尝试移相部分
以及,高速异步部分的寄存器需要额外设置hspwma_cfg
王昱顺 发表于 2025-12-3 21:01
启动高速pwm前,需要确保pll时钟已经起振,一般建议设置好pll时钟后等个1ms,然后打开高速异步pwm。
然后再 ...
初始化时已经给了默认频率和相位,这部分是正常的,现在想动态调整频率和相位,实现不了,不知道问题出在哪里 rnisqnqs 发表于 2025-12-3 21:42
初始化时已经给了默认频率和相位,这部分是正常的,现在想动态调整频率和相位,实现不了,不知道问题出在 ...
需要HSPWMA_CFG = 0x13;
王昱顺 发表于 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); rnisqnqs 发表于 2025-12-4 10:05
都有设置的,
P_SW2 |=0x80;
PWMA_ARR_DATA=arr8); // 自动重 ...
那你可以试试不使用高速PWM,先用同步方式,试试看能不能正常调节
如果能的话,考虑是WritePWMA这个函数的问题
页:
[1]