Link

选择应用的PWM引脚简短指南

在为应用选择引脚时,有几个方面需要考虑。最重要的是要确保所选引脚与正在使用的硬件兼容。 请务必检查你的微控制器系列和SimpleFOC是否支持必要的PWM生成、位置传感器和电流传感技术。你可以在我们的文档这里找到相关信息。

一旦确定你的微控制器适合该应用,就该考虑使用哪些引脚了。主要有三个问题:

  1. 哪些引脚用于PWM生成?
  2. 哪些引脚用于位置传感器?
  3. 哪些引脚用于电流传感?

在本指南中,我们将重点关注第一个问题:哪些引脚用于PWM生成?

这些问题的答案取决于你使用的微控制器和拥有的硬件。以下是SimpleFOC支持的微控制器系列以及每个系列支持的PWM生成模式列表:

MCU2 PWM模式4 PWM模式3 PWM模式6 PWM模式PWM频率配置PWM中心对齐定时器-ADC同步
Arduino AVR(8位)✔️✔️✔️✔️✔️(4kHz或32kHz)✔️
Arduino DUE✔️✔️✔️✔️
stm32✔️✔️✔️✔️✔️✔️✔️
esp32 MCPWM✔️✔️✔️✔️✔️✔️✔️
esp32 LEDC✔️✔️✔️✔️✔️✔️
esp8266✔️✔️✔️✔️
samd21/51✔️✔️✔️✔️✔️❌(2/3/4PWM)
✔️(6PWM)
✔️(仅samd21 - 与第一个定时器同步)
❌(samd51)
teensy3✔️✔️✔️✔️✔️❌(2/3/4PWM)
✔️(6PWM)
teensy4✔️✔️✔️✔️✔️❌(2/3/4PWM)
✔️(6PWM)
✔️(3PWM强制)
❌(2/3/4PWM)
✔️(6PWM)
✔️(3PWM对齐)
Raspberry Pi Pico✔️✔️✔️✔️✔️❌(2/3/4PWM)
✔️(6PWM)
Portenta H7✔️✔️✔️✔️
nRF52✔️✔️✔️✔️✔️❌(2/3/4PWM)
✔️(6PWM)
Renesas(UNO R4 Minima)✔️✔️✔️✔️✔️❌(2/3/4PWM)
✔️(6PWM)

需要注意的是,所有受支持的系列都可以在2/3/4PWM模式下使用。但是,并非所有架构都支持6PWM模式。此外,所有受支持的架构都可以配置PWM频率,但对于Arduino AVR板,频率可以设置为4kHz或32kHz。

选择PWM引脚时的另一个重要因素是尝试使用属于同一定时器的PWM引脚。这很重要,因为属于同一定时器的引脚生成的PWM信号将具有相同的频率和相位。这对于FOC算法的正常工作很重要。 经验法则:

  • 对于2PWM模式,尝试只使用一个定时器。
  • 对于3PWM模式,尝试只使用一个定时器。
  • 对于4PWM模式,尽可能尝试只使用一个定时器,如果不行,则每相使用一个定时器(即两个定时器)。
  • 对于6PWM模式,尽可能尝试只使用一个定时器,如果不行,则每相使用一个定时器(即三个定时器)。

注意:PWM中心对齐

SimpleFOC在某些情况下会同步(中心对齐)不同定时器生成的PWM信号(如上表所示),但最好还是使用属于同一定时器的引脚。

注意:定时器-ADC同步 - 低侧电流传感

低侧电流传感所需的定时器和ADC同步仅适用于某些系列的微控制器:stm32、esp32(基于MCPWM)和Teesny 4。

获取与引脚相关的定时器信息有时很困难,特别是对于经验不足的用户。因此,在接下来的几个部分中,我们将提供一些关于如何为一些最受欢迎的微控制器系列找到PWM引脚的信息。

Arduino AVR板

对于Arduino AVR板(UNO、MEGA、Nano、Leonardo等),PWM引脚通常标有~符号。这些引脚是可以生成PWM信号的引脚。如果你正在编写2PWM、3PWM或4PWM模式的应用程序,可以使用任何PWM引脚。PWM定时器是相互同步的,因此你不必担心此信息。

但是,如果你使用6PWM模式,则必须使用属于同一定时器的引脚。属于同一定时器的引脚如下:

Arduino UNO/Nano/Pro mini Atmega328P

定时器引脚
TIM056
TIM1910
TIM2311

Arduino Leonardo Atmega32u4

定时器引脚
TIM0311
TIM1910
TIM35
TIM4613

Arduino MEGA Atmega2560

定时器引脚
TIM0134
TIM11211
TIM2109
TIM3532
TIM4876
TIM5444546

因此,如果使用这些板中的一个在6PWM模式下,确保使用属于同一定时器的高/低引脚对。在这种情况下,atmega328Patmega32u4必须使用它们所有的PWM引脚来生成6PWM信号(atmega32u4不能使用引脚5,因为它在定时器TIM3上是单独的)。此外,atmega2560有足够的引脚仅使用一个定时器运行两个6PWM驱动器。

ESP32板

Esp32板有两个PWM生成模块:LEDCMCPWMLEDC模块用于为LED生成PWM信号,但它也可以用于电机控制。MCPWM模块是专门为电机控制设计的。 尽管LEDC的灵活性远不如MCPWM,但它仍然能够运行SimpleFOC支持的所有驱动器。但是,使用LEDC时,你将无法使用低侧电流传感,因为定时器无法与ADC同步。

MCPWM模块

因此,当使用具有MCPWM模块的esp32板(例如esp32esp32s3)时,你可以使用任何引脚进行任何形式的PWM生成。该模块使esp32非常灵活,并允许任何引脚在PWM模式下使用,以及与任何定时器相关联。通常,esp32板有2个MCPWM独立模块,允许实例化:

  • 4个2PWM模式驱动器实例
  • 4个3PWM模式驱动器实例
  • 2个4PWM模式驱动器实例
  • 2个6PWM模式驱动器实例

SimpleFOC将自动为你的应用程序完成适当的定时器和通道的关联。

ESP32 SoC具有MCPWM
ESP32✔️
ESP32-S2
ESP32-C2
ESP32-S3✔️
ESP32-C3
ESP32-C6✔️

所有具有MCPWM的esp32架构默认将使用MCPWM进行电机控制。

LEDC模块

但是,如果使用仅支持LEDC模块的板(例如esp32s2esp32c3),你将无法将其用于大多数电机控制模式。LEDC模块不如MCPWM模块灵活,不推荐用于电机控制应用。你仍然可以使用2PWM、3PWM、4PWM和6PWM模式。LEDC定时器通常有8个通道,不同的板有不同数量的可用通道和定时器。所有引脚都可用于PWM生成,但前8个引脚与第一个定时器相关联,接下来的8个引脚与第二个定时器相关联,依此类推。

以下是不同esp32芯片可用的通道数量列表,取自esp32技术参考手册

ESP32 SoCLEDC通道数量
ESP3216
ESP32-S28
ESP32-S38
ESP32-C26
ESP32-C36
ESP32-C66

如果用户希望为支持MCPRM的板强制使用LEDC驱动器,他必须设置SIMPLEFOC_ESP32_USELEDC

STM32板

Stm32是SimpleFOC支持的最强大的微控制器系列,至少在电机控制能力方面是这样。SimpleFOC支持大多数STM32板,所有这些板都可以在6PWM模式下使用。此外,从版本v2.3.3开始,SimpleFOC库默认同步不同定时器生成的PWM信号。因此,对于除6PWM生成之外的所有用例,用户不必担心与引脚相关联的定时器,但是仍然建议使用属于相同定时器的引脚。

⚠️ 注意: SimpleFOC不支持stm32板的反相通道,因此用户必须使用非反相的引脚。它们仅支持6PWM模式。

对于6PWM模式,用户有两个选择:

  1. 使用属于同一定时器的引脚。 这是推荐的,因为所有stm32板都有通常为TIM1TIM8的定时器,这些定时器是为此类应用设计的,并提供最佳性能。
  2. 每相使用一个定时器。 这也是一个很好的解决方案,特别是如果使用高级定时器所需的引脚不可用时。但是,在这种情况下,应用程序使用2或3个定时器而不是1个,这可能会降低微控制器并行执行其他任务的能力。

一旦你向SimpleFOC驱动程序对象提供一组引脚,库将自动将引脚与适当的定时器和通道相关联,并找到电机控制的最佳组合。如果引脚与你尝试使用的电机控制模式不兼容,库将抛出错误。

找到属于同一定时器的引脚并非易事,特别是对于经验不足的用户。因此,我们创建了一个网站,可以相对容易地浏览最受欢迎的stm32板的引脚和定时器。

打开stm32引脚分配助手

根据经验,大多数stm32板具有属于高级定时器TIM1的以下引脚:

  • PA8 - 通道1
  • PA9 - 通道2
  • PA10 - 通道3
  • PB13 - 反相通道1N
  • PB14 - 反相通道2N
  • PB15 - 反相通道3N

因此,这是6PWM模式首选的引脚组合。

Teensy板

Teensy板非常强大,有很多可用于PWM生成的定时器。SimpleFOC库支持所有Teensy3和Teensy4板,所有这些板都可以在6PWM模式下使用。

以下表格取自teensy文档,列出了不同teensy系列的PWM引脚:

具有PWM功能的引脚
Teensy 4.10、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、18、19、22、23、24、25、28、29、33、36、37、42、43、44、45、46、47、51、54
Teensy 4.00、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、18、19、22、23、24、25、28、29、33、34、35、36、37、38、39
Teensy 3.62、3、4、5、6、7、8、9、10、14、16、17、20、21、22、23、29、30、35、36、37、38
Teensy 3.52、3、4、5、6、7、8、9、10、14、20、21、22、23、29、30、35、36、37、38
Teensy 3.2 和 3.13、4、5、6、9、10、20、21、22、23、25、32
Teensy LC3、4、6、9、10、16、17、20、22、23
Teensy 3.03、4、5、6、9、10、20、21、22、23

SimpleFOC不会同步Teensy板的不同定时器生成的PWM信号,因此建议使用属于同一定时器的引脚。

Teensy3

因此,使用Teensy3板时,建议(不是严格约束)使用属于同一定时器的引脚。属于同一定时器的引脚如下表所示。

Teensy 3.6

定时器引脚
FTM05、6、9、10、20、21、22、23
FTM13、4
FTM229、30
FTM32、7、8、14、35、36、37、38
TPM116、17

Teensy 3.5

定时器引脚
FTM05、6、9、10、20、21、22、23
FTM13、4
FTM229、30
FTM32、7、8、14、35、36、37、38

Teensy 3.2 和 3.1

定时器引脚
FTM05、6、9、10、20、21、22、23
FTM13、4
FTM225、32

Teensy LC

定时器引脚
FTM06、9、10、20、22、23
FTM116、17
FTM23、4

Teensy 3.0

定时器引脚
FTM05、6、9、10、20、21、22、23
FTM13、4

所有Teensy3板都可以在定时器FTM0上以6PWM模式使用,并且那些具有FTM3的板也可以在FTM3上使用6PWM模式。至少在版本v2.3.3之前,SimpleFOC不允许其他定时器组合用于6PWM模式。

Teensy4

使用Teensy4板时,建议(不是严格约束)使用属于同一定时器的引脚。属于同一定时器的引脚如下表所示。

Teensy 4.1

定时器子模块引脚
FlexPWM101、44、45
FlexPWM110、42、43
FlexPWM1224、46、47
FlexPWM137、8、25
FlexPWM204、33
FlexPWM215
FlexPWM226、9
FlexPWM2336、37
FlexPWM3054
FlexPWM3128、29
FlexPWM3351
FlexPWM4022
FlexPWM4123
FlexPWM422、3
QuadTimer1010
QuadTimer1112
QuadTimer1211
QuadTimer2013
QuadTimer3019
QuadTimer3118
QuadTimer3214
QuadTimer3315

Teensy 4.0

定时器子模块引脚
FlexPWM101、36、37
FlexPWM110、34、35
FlexPWM1224、38、39
FlexPWM137、8、25
FlexPWM204、33
FlexPWM215
FlexPWM226、9
FlexPWM3128、29
FlexPWM4022
FlexPWM4123
FlexPWM422、3
QuadTimer1010
QuadTimer1112
QuadTimer1211
QuadTimer2013
QuadTimer3019
QuadTimer3118
QuadTimer3214
QuadTimer3315

Teensy4有两种定时器类型的组合:FlexPWMQuadTimer。对于2PWM、3PWM和4PWM模式,你可以使用上面列出的任何引脚,即使它们属于QuadTimerFlexTimer通道的组合。但是,为了获得最佳效果,建议使用属于同一定时器的引脚,或者至少每相使用一个定时器。特别是因为SimpleFOC库在版本v2.3.3中,默认情况下不会同步2PWM、3PWM和4PWM模式下不同定时器生成的PWM信号。此外,生成的PWM信号也不是中心对齐的。

SimpleFOC默认仅对6PWM驱动器进行中心对齐和定时器同步。如果你想在Teensy4上强制中心对齐的3PWM模式,可以设置SIMPLEFOC_TEENSY4_FORCE_CENTER_ALIGNED_3PWM标志。这将强制中心对齐的3PWM模式,并在使用多个定时器时同步定时器。但是,这两种模式都需要使用FlexPWM定时器,不能与QuadTimer定时器一起使用。

6PWM

从版本v2.3.3开始,SimpleFOC仅允许在FlexPWM定时器上使用6PWM模式。属于QuadTimer定时器的引脚不支持6PWM。此外,SimpleFOC要求为6PWM模式的每个相使用一个子模块,如果不是这种情况,SimpleFOC将显示错误。 为了使用6PWM,对于每个相,从相同的时间和子模块中选择引脚AB。引脚X在6PWM模式下不使用。

中心对齐3PWM

如果你想在Teensy4上强制中心对齐的3PWM模式,可以设置SIMPLEFOC_TEENSY4_FORCE_CENTER_ALIGNED_3PWM标志。对于此模式,你可以使用属于任何FlexPWM定时器的任何引脚ABX。如果使用多个定时器,SimpleFOC将自动同步它们。如果应用程序允许,建议使用定时器的通道AB,并避免X。此外,如果设置了该标志并且你尝试使用QuadTimer定时器,SimpleFOC将显示错误。

以下表格显示了每个定时器和子模块的引脚ABX

Teensy 4.1

FlexTimer子模块ABX
FlexPWM1045441
FlexPWM1143420
FlexPWM12474624
FlexPWM138725
FlexPWM20433-
FlexPWM215--
FlexPWM2269-
FlexPWM233637-
FlexPWM3054--
FlexPWM312928-
FlexPWM33-51-
FlexPWM4022--
FlexPWM4123--
FlexPWM4223-

Teensy 4.0

FlexTimer子模块ABX
FlexPWM1037361
FlexPWM1135340
FlexPWM12393824
FlexPWM138725
FlexPWM20433-
FlexPWM215--
FlexPWM2269-
FlexPWM312928-
FlexPWM4022--
FlexPWM4123--
FlexPWM4223-