I am an idot and I have blown up like 20 controller boards

I am clearly doing something way wrong, but I’m at a loss as to what it is.

I’ve blown up a wide variety of different boards using different driver architectures from different manufacturers while trying to do basic things, so clearly I’m doing something wrong.

I am trying to drive these single pole BLDC motors.

The only thing which seems to stand out about them is that they are pretty low impedance…1.3ohms between each pair of windings.

Whenever I try to drive them they seem to more or less immediately smoke the driver boards.

Most recently I’ve been testing this board: GitHub - makerbase-motor/MKS-ESP32FOC

https://www.aliexpress.us/item/3256805324882671.html?spm=a2g0o.order_list.order_list_main.11.4d471802jCyZRs&gatewayAdapt=glo2usa

Running one of their example programs but with the parameters adjusted to match my setup.

/// MKS ESP32 FOC Open loop speed control example; Test Library:SimpleFOC 2.1.1 ; Tested hardware:MKS ESP32 FOC V1.0
/// Enter "T+number" in the serial port to set the speed of the two motors.For example, to set the motor to rotate at a speed of 10rad/s, input "T10"
/// When the motor is powered on, it will rotate at 5rad/s by default
/// When using your own motor, do remember to modify the default number of pole pairs, the value in BLDCMotor(7).
/// The default power supply voltage of the program is 12V.
/// Please remember to modify the voltage_power_supply , voltage_limit variable values when using other voltages for power supply

#include <SimpleFOC.h>

BLDCMotor motor = BLDCMotor(20);                               //According to the selected motor, modify the number of pole pairs here, the value in BLDCMotor()
BLDCDriver3PWM driver = BLDCDriver3PWM(32,33,25,22);
 
/// BLDC motor & driver instance
BLDCMotor motor1 = BLDCMotor(20);                              //Also modify the value in BLDCMotor() here
BLDCDriver3PWM driver1  = BLDCDriver3PWM(26,27,14,12);

/// Target Variable
float target_velocity = 5;

/// Serial Command Setting
Commander command = Commander(Serial);
void doTarget(char* cmd) { command.scalar(&target_velocity, cmd); }

void setup() {
 

  driver.voltage_power_supply = 24;                   //According to the supply voltage, modify the value of voltage_power_supply here
  driver.init();
  motor.linkDriver(&driver);
  motor.voltage_limit = 1;   // [V]                   //According to the supply voltage, modify the value of voltage_limit here
  motor.velocity_limit = 40; // [rad/s]
 
  driver1.voltage_power_supply = 24;                  //Also modify the value of voltage_power_supply here
  driver1.init();
  motor1.linkDriver(&driver1);
  motor1.voltage_limit = 1;   // [V]                  //Also modify the value of voltage_limit here
  motor1.velocity_limit = 40; // [rad/s]

 
  // Open Loop Control Mode Setting
  motor.controller = MotionControlType::velocity_openloop;
  motor1.controller = MotionControlType::velocity_openloop;

  // Initialize the Hardware
  motor.init();
  motor1.init();


  // Add T Command
  // Enter "T+number" in the serial port to set the speed of the two motors.For example, to set the motor to rotate at a speed of 10rad/s, input "T10".
  command.add('T', doTarget, "target velocity");

  Serial.begin(115200);
  Serial.println("Motor ready!");
  Serial.println("Set target velocity [rad/s]");
  _delay(1000);
}

void loop() {
  motor.move(target_velocity);                    //When the motor is powered on, it will rotate at 5rad/s by default
  motor1.move(target_velocity);

  //User Newsletter
  command.run();
}

Plugging the power in insta kills the driver board.

Does anyone have a suggestion about where I might be going wrong?

I’m glad I’m not the only one here who is burning through board like crazy.

What is the resistance of the windings?
If they are in the low mOhm range, 1v is probably too high for them.

Also, what part of the board is letting the magic smoke out? Fets?

I also have the MKS esp32foc board. In the schematics you can see, that the IN_H and IN_L ports of the drivers are connected for 3PWM.
This allows no external dead_time setting and that ends in shootthrough currents with bigger inductance motors.

My MKS board is still alive because I used a powersupply with 2A max.

I am using the MKS Dual FOC Plus V3.1 boards with low impedance three phase brushless motors too. These are very similar to what you are using and indeed, you need to be really careful - I blew up a couple boards before I got myself a current-limited power supply. It trips and turns off the outputs if the set current is exceeded, which saved me numerous times as I learned. I was never able to get the board working well in current sensing mode, but they work great in TorqueControlType::voltage mode.

Looking at your code, you don’t have the following lines in your setup() routine. I think this may be contributing to your issues since I believe that these default to the voltage_power_supply value!

driver.voltage_limit = 1.0;
driver1.voltage_limit = 1.0;

Good luck!
Mark

do you mean you are trying to drive a motor with a single pole pair? if so how come you have this line in your code, BLDCMotor motor = BLDCMotor(20); ? if it’s a single pole pair should it not be 1 if so? are you sure it’s a single pole pair motor?