Link

Supported driver boards

Arduino SimpleFOClibrary has a goal to support as many BLDC and stepper motor drivers as possible. Till this moment there are two kinds of motor drivers supported by this library:

  • BLDC motor driver
    • 3 PWM signals ( 3 phase )
    • 6 PWM signals ( 3 phase )
    • gimbal motor drivers or high-performance boards
  • Stepper drivers
    • 4 PWM signals ( 2 phase )
    • 2 PWM signals + 2 direction signals ( 2 phase )
    • Stepper drivers or double DC motor drivers

Choosing the Appropriate Driver

Selecting the right hardware is a balance of motor type, power requirements, and the level of control precision you need.

1. Motor Type

  • BLDC Motors: Requires a BLDC driver. Ensure the current and voltage ratings match your motor’s specs.
    • ⚠️ No Drone ESCs Traditional drone ESCs are not suitable for FOC because they typically use a fixed commutation scheme and lack the necessary control interfaces.

  • Stepper Motors:
    • Dedicated Stepper Driver: Best for 2-phase motors within standard current ranges (ex.NEMA17)
    • Hybrid Mode: You can actually use any BLDC driver to run a stepper motor. - See example
    • ⚠️ No Step/Dir Drivers Traditional “EasyDrivers” or A4988s (in step/dir mode) cannot be used for FOC because they do not allow direct phase voltage control.

2. Current Requirements

  • Low Current (< 5A): Integrated driver ICs are cost-effective and easy to use.
    • Examples: L6234, DRV8313, DRV8316.
  • High Current (> 5A): Requires discrete MOSFET-based designs with robust thermal management (heatsinks/fans).
    • Examples: DRV8302, VESC-based hardware.
  • Rule of Thumb: Always select a driver with a current rating at least 20-30% higher than your motor’s expected continuous current.

📢 Critical: Read before powering up!

Before running any motor, you must ensure your hardware can handle the stall current. FOC can easily pull more current than a driver can handle if not limited in software.

The Worst-Case Calculation Check your motor’s phase resistance (\(R\)) and your power supply voltage (\(V_{DC}\)). The maximum possible current (\(I_{max}\)) is:

\[I_{max} = \frac{V_{DC}}{R}\]

Safety Steps:

  • Compare: If \(I_{max}\) exceeds your driver’s rating, you must limit the voltage in software.
  • Software Limit: Use driver.voltage_limit and (motor.voltage_limit and/or motor.current_limit) to stay within safe bounds. - see motor docs
  • Power Supply: If you can, use a current-limited lab bench power supply for your initial tests.