You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32中PWM移相:角度转定时器Ticks的最佳实现方法

目标:在STM32F303CBT6的TIM1与TIM8 PWM之间实现移相

实现方案

将TIM1/TIM8配置为主从模式,通过修改计数器值调整移相,示例代码:

TIM_SetCounter(TIM1, 0); // 0° 相位偏移
TIM_SetCounter(TIM1, 72); // 180° 相位偏移

问题背景与初始转换逻辑

需要将相位偏移角度转换为写入TIM_SetCounter的Ticks值(0~72 ticks对应0~180°)。已知参数:

  • PWM频率f=100kHz,周期10µs,半周期5µs
  • 72 ticks对应半周期,全周期为144 ticks,延时范围0~5µs

最初编写的转换函数如下:

int degPhaseShiftCalc(int tdelay) {
  int phShift = (360 * 100 * tdelay) / 1000;
  return phShift;
}

int tDelayCalc(int phShift) {
  float tdelay = (phShift * 1000) / (360 * 100);
  int result = round(tdelay / 0.07);
  return result;
}

其中0.07为每tick的微秒数(5µs/72ticks),因系统仅接受整数tick故使用取整。

计算异常现象

  • 180° 对应71 ticks(小于预期的72)
  • 150° 对应57 ticks
  • 36° 对应14 ticks
  • 0~35° 均输出0 ticks

推测异常因半周期tick数过少导致,需调整定时器参数使tick数>72。

核心疑问

如何最佳实现角度转Ticks的转换函数?

已解决方案

感谢@Simon Goater、@Chris_B,将计算转换为完整的浮点数运算,修改后的代码如下:

float tdelay = ((float)phShift * 1000.0) / (360.0 * 100.0);

转换为浮点数运算后问题得到解决。

内容的提问来源于stack exchange,提问作者Delta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:20:25