导言


在这里插入图片描述
在FOC算法里,SVPWM用于产生三相PWM波给电机。为了生成SVPWM波形,STM32的高级定时器TIM使用互补PWM的中心对齐模式1可以很好地实现。
在这里插入图片描述
如上图所示,按照后面的笔记来配置TIM1后,可以产生的互补PWM波形。

  1. 我们期望的SVPWM,需要每一个PWM周期里,高电平在中间,低电平在两侧。所以,选择PWM_Mode2。 PWM_Mode1是中间低电平,两侧高电平。
  2. 每一个PWM周期都要通过ADC采样一次相电流。当RCR设置1时 ,ARR寄存器的值倒数到0时会触发一次Update Event。从上图看到,Update Event时,在下半桥高电平(导通)的中间位置。我使用的FOC电路板,电流采样电阻在下半桥上,所以采样电流时,必须在下半桥导通的时候,如下图所示。
    在这里插入图片描述
    在这里插入图片描述
    如上图所示,使用示波器监控出来的PWM互补波形。

一、CubeMX


1.1、Clock Configuration

在这里插入图片描述

1.2、TIM

1.2.1、TIM1 Mode and Configuration

在这里插入图片描述
如上图所示,配置三路PWM互补输出,时钟一定要选择内部时钟。

1.2.2、Parameter Settings

在这里插入图片描述
剩下的PWM Channel2与PWM Channel3都跟PWM Channel1的设置一样。

1.2.3、GPIO Settings

在这里插入图片描述
如上图所示,最后检查一下GPIO Speed是不是都设置High。

二、代码


2.1、main.c

在这里插入图片描述
如上所示,启动3路PWM互补PWM波形,并设置对应的占空比,4200相当于占空比50%。

三、细节补充


3.1、PWM Mode1 与 PWM Mode2的区别,为什么PWM Mode1不能使用

  • PWM Mode1,向上计数时,PWM信号从有效电平变成无效电平(假如有效电平是高电平时,PWM信号从高电平变成低电平);
  • PWM Mode2,向上计数时,PWM信号从无效电平变成有效电平(假如有效电平是高电平时,PWM信号从低电平变成高电平);
    在这里插入图片描述
    如上图所示:
  1. 中心对齐模式1 + PWM Mode1的话,触发Update Event时,下半桥是断开的,电流没办法经过采样电阻。如果此时启动ADC采样的话,电流采样会出问题。
  2. 我们期望的SVPWM,需要每一个PWM周期里,高电平在中间,低电平在两侧。所以PWM Mode1也不符合SVPWM的期望。
  3. 综上所述,采样电阻在下桥的话,不能使用中心对齐模式1 + PWM Mode1。

3.2、为什么RCR设置1

在这里插入图片描述
在这里插入图片描述
如上图所示,中心对齐模式下,当RCR=1时,每一次ARR寄存器从最大值倒数至0时,都会触发一次Update_Event。又因为在PWM Mode2模式下,此时下桥导通,可以采样电流了。如下图所示:
在这里插入图片描述

如果采样电阻在上桥,就要使用中心对齐模式1 + PWM_Mode1 + RCR=1

3.3、TIM1触发Upate Event时,下桥真的已经导通吗?

3.3.1、CubeMX

在这里插入图片描述
如上所示,使能TIM1的update interrupt。

3.3.2、tim.c

在这里插入图片描述
如上所示,在tim.c代码里启动TIM1的中断。

3.3.3、main.c

在这里插入图片描述
如上图所示,在Update Event中断时,翻转GPIO的电平。

3.3.4、示波器观察

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐