# run bldc motor with arduino and l298 driver

I am trying to learn controlling BLDC motors without using an ESC, but using Arduino and a driver, instead. At home I found an old DVD driver and took out the motor, which was Nidec Slim 24C, http://www.nidec.com/en-NA/product/motor/category/A010/B010/P0000010/ , with 5-wires: u, v, w, COM, fg. I know, normally BLDC motors have three wires (u, v, w). I understand in this one COM is the center point, and fg is the feedback info line.

I had some L298N modules at home and decided to try them. Normally, with 3-wired BLDC one would wire the motor such that u-v, v-w, w-u, are energized. But with L298 it did not look so easy, I wired each pole against the COM, in sequence; and I was able to run the motor. Phases are connected to L298 output lines 1,2,3 and COM is connected to +5V on L298. Although not as fast as rated (6000rpm), but about 1000+ rpm, or so, smooth and quiet, I was able to get a stable (and high) speed by playing with the delay parameter between phases. Here is the simple Arduino code:

int u = 2;
int v = 3;
int w = 4;
int EN1 = 5;
int EN2 = 6;
int f = A0;

int val2 = 6000;

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(u, OUTPUT);
pinMode(v, OUTPUT);
pinMode(w, OUTPUT);
pinMode(EN1, OUTPUT);
pinMode(EN2, OUTPUT);
pinMode(f, INPUT);
digitalWrite(u, LOW);
digitalWrite(v, LOW);
digitalWrite(w, LOW);
digitalWrite(EN1, HIGH);
digitalWrite(EN2, HIGH);
digitalWrite(w, HIGH);
delayMicroseconds(val2);
digitalWrite(u, HIGH);
}

void loop() {
// put your main code here, to run repeatedly:
delayMicroseconds(val2);
digitalWrite(v, HIGH);
digitalWrite(w, LOW);
delayMicroseconds(val2);
digitalWrite(w, HIGH);
digitalWrite(u, LOW);
delayMicroseconds(val2);
digitalWrite(u, HIGH);
digitalWrite(v, LOW);
if (val2 > 2000) {
val2 -= 10;
Serial.println(val2);
}
}


My question is, whether this implementation is a correct one - to be used in the future for any BLDC motor?

• By connecting each phase against the COM, do I loose any speed and/or torque?

• With 3-wire only motor how would I use the same logic. Somwehere I read about "Virtual Center Point", by connecting all three phase leads together, with equal weight resistors in serial. Will that give me the same result as real center point?

EDIT1: Yes, "Virtual Center Point" works. I tested with 6 Ohm resistors connected serial to (secondary/parallel) leads, connected together, instead of COM pin, and it worked OK.

EDIT2: I modiefied the code, such that it slowly accelerates by decreasing the delay time. I could go down to 2000 microseconds, i.e., 2 milliseconds between phases. So, roughly I think one revolution takes about 10 milliseconds, which makes 100 revolutions per second, and 6000 rpm. My resistors had low wattage, so they got very hot (no current limitting or control), so I stop when I see 2000 microseconds.