【SimpleFOC】Arduino PWM 引与 Atmega 引脚对应关系

在 Arduino Nano(基于 ATmega328P)上驱动无刷电机(BLDC)时,不能随意指定引脚,需根据以下关键因素选择:
1. 硬件限制
(1) PWM 引脚必须匹配定时器
无刷电机通常需要 3 路相位可调的 PWM(如 FOC 控制),而 ATmega328P 的硬件 PWM 通道有限:
-
Timer0:
D5 (OC0B)、D6 (OC0A)-
用于电机驱动时需注意:
Timer0也控制millis()和delay(),修改配置会影响时间函数。
-
-
Timer1:
D9 (OC1A)、D10 (OC1B)-
推荐使用:16 位定时器,精度更高,适合电机控制。
-
-
Timer2:
D3 (OC2B)、D11 (OC2A)-
8 位定时器,频率调节灵活,但分辨率较低。
-
最少需占用 3 路 PWM,因此需选择同一定时器的不同通道或组合多个定时器(例如 D9, D10, D5)。
(2) 电流驱动能力
-
ATmega328P 的 GPIO 引脚最大输出电流为 40mA,无法直接驱动电机,必须外接:
-
MOSFET/IGBT 驱动模块(如 IR2104 + MOSFET)
-
预驱芯片(如 DRV8301)
-
无刷电调(ESC)(需标准 PWM 信号,如
D9)
-
2. 软件库依赖
常见无刷电机库(如 SimpleFOC、BLDC_Controller)对引脚有严格要求:
-
必须使用硬件 PWM 引脚(见上表)。
-
部分库要求 PWM 引脚属于同一定时器(如
Timer1的D9, D10),以确保同步输出。

浙公网安备 33010602011771号