Small BLDC Motor Configuration Issue with SimpleFOCMini v1.0

Hi everyone,

I’m experiencing issues configuring a small BLDC motor with the SimpleFOCMini v1.0 driver, and I would appreciate your advice. Here’s a detailed description of the problem:

Initially, the motor was wound with wire of 0.2 mm, and its phase resistance was measured at 0.63 Ω. When testing in open-loop mode, the motor did not rotate, and the driver overheated quickly. To address this, I rewound the motor using 0.1 mm wire, increasing the phase resistance to 11.5 Ω.

After the rewinding, the motor started rotating in open-loop mode, but its performance was very poor:

  • The motor rotated with significant vibrations and could be stopped with the slightest touch.
  • The motor itself got very hot during operation, while the driver remained cool.

Motor Specifications:

  • Stator size: 11 mm diameter, 4.2 mm height
  • Winding: 0.1 mm wire, 60 turns per tooth, phase-to-phase resistance 11.4 Ω
  • Rotor: 12 magnets (configured as 6 pole pairs in the library)

Driver and Power:

  • Driver: SimpleFOCMini v1.0
  • Power supply: 12 V

My Questions:

  1. Could the high phase resistance (11.5 Ω) be the cause of the motor’s poor performance and overheating?
  2. Is 12 V too high for such a small motor?
  3. Are there any adjustments or specific configurations I should make to improve the motor’s behavior?

I would greatly appreciate any advice or suggestions to address these issues.

Thank you in advance! :blush:

Feels like a really tiny motor!

  1. Since you are making your own motor, I strongly suggest using a bench power supply where you can monitor the current and set limits, instead of a battery or “blind” power supply/wall adapter. This will save you much grief and time. e.g. something like this: Amazon.com: DC Power Supply, Bench Power Supply with Encoder Knob, Adjustable Regulated Power Supply with 5V 3.6A USB & Type-C Quick-Charge, Variable Power Supply with Overcurrent Protection (0-30V 0-10A) : Industrial & Scientific

  2. Start with a very small .voltage_limit, like 1.0 onwards to prevent overheating.

  3. High phase resistance should be a cause for lower temperature, not overheating, since it implies less current.

  4. 0.1mm wire means 38AWG, whose official current capacity seems to be 0.2A. But you are pushing 12V/11.4Ω ~= 1A. Which may work transient, but since you have packed 60 turns in such a small space, it will result in overheating.

  5. You are at approx 62Amp-Turns per tooth, that defines your max torque. How many turns did you do at 0.2mm?

IMHO, it can still work, but you will need to find out and set all the parameters very correctly so high current flows only for short durations of high load, not otherwise. Work with a very small voltage_limit until you get smooth rotation, since if you cant get to that it means there is some fundamental flaw in your design.

Thank you so much for your detailed response! I’m already using a bench power supply, so I can easily adjust the voltage and monitor the current during testing.

The motor I’m working with is based on this one: RUNONO 4300KV Brushless Motor. I don’t know how many turns it had originally, but its phase resistance was 0.63 Ω before I rewound it. Now, with 0.1 mm wire and 60 turns per tooth, the resistance is 11.4 Ω.

I chose 12V for the driver because it’s within the listed range (8–35V) for the SimpleFOCMini, but I’ll try lowering the voltage_limit as you suggested to see if that helps.

Thanks again for your advice—it’s been really helpful!

I’ve recorded a video showing how the motor behaves with the following configuration. The motor doesn’t rotate smoothly and heats up to over 60°C within a short time of operation.

Here’s the code I’m using:

#include <SimpleFOC.h>

BLDCMotor motor = BLDCMotor(6, 11.4);
BLDCDriver3PWM driver = BLDCDriver3PWM(44, 45, 46, 47);

void setup() {
  Serial.begin(115200);
  driver.voltage_power_supply = 8;
  driver.voltage_limit = 5;
  driver.pwm_frequency = 25000;
  if (!driver.init()) {
    while (1);
  }
  motor.linkDriver(&driver);
  motor.voltage_limit = 4;
  motor.controller = MotionControlType::velocity_openloop;
  if (!motor.init()) {
    while (1);
  }
  motor.target = 15.28;
}

void loop() {
  motor.move();
}

Since it was a high kv motor, it was probably designed for high rpm usage with self cooling from a prop, and back-emf resulting in very low current. Also the listing says 1-2S, so it was originally designed for a max of ~8-9V.

I think you should reduce the motor.voltage_limit until it takes < 0.1A, and doesn’t overheat, (find the min current where it does move). Also, I am not sure about this, but once you put in the phase resistance value, then motor.current_limit seems to become relevant. Set it to a large nonsensical value like 50 temporarily to see if current was being limited.

My feeling is that for very low velocity control of such a small enclosed motor, you will need to have closed loop. Because then it will increase current only when necessary.