# Arduino CDROM BLDC Motor Driver, Enhanced Performance

83,045

264

24

In the last BLDC project "Run-A-CDROM-Brushless-Motor-With-Arduino" I've used a L293 to drive a brushless DC motor. There were two important problems in that project as follow:

- Low speed and torque of the motor due to minimal signaling.
- IC overheating due to signal feedback.

In this project I solve these problems via additional L293 and corresponding hi impedance state. According to grand Wikipedia, Hi-Z (or High-Z or high impedance) refers to an output signal state in which the signal is not being driven. The signal is left open, so that another output pin (e.g. elsewhere on a bus) can drive the signal or the signal level can be determined by a passive device.

As I mentioned before, each BLDC complete turn, needs 36 steps that each 6 steps are similar as next 6 steps. So you have a sequence of 6 which repeated 6 times.

Due to having just one IC, I've used the (110, 100, 101, 001, 011, 010) signals with two states 1=high, 0=low in last project. But the correct signaling for each step is to drive two of three phases and leave the third one open (hi-z).

With three phase A, B and C:
A: 1 1 - 0 0 -
B: - 0 0 - 1 1
C: 0 - 1 1 - 0

In this table the "-" state means hi-z. So there one low and one high signal in each step. Having multiple low or high in each step will lead to wrong signal feedback and IC overheat.

## Step 1: Circuit

In this project I used the chip enable pin to make hi-z state. According to l293 schematic, there is two enable pins, each one for each side. So we can make four hi-z pins via two l293 (three of them are enough).

So this circuit is a little bit different from the last one. The pins 2, 3, 4 are enable signals and 5, 6, 7 are motor input signals. Whenever the enable pin be low, the signals will be hi-z.

## Step 2: Code

As the code has written optimized, some hints maybe helpful.

- In signals array, first index is the number of hi-z pin. Remaining 3 values are signal values.
- Wait value is used to make a delay after each step.
- Serial monitor window is used to get "+" or "-" to increase or decrease wait value and it will changes the motor speed.

/*

*************************

*************************

*/

## Recommendations

• ### Raspberry Pi Class

42,094 Enrolled

## 24 Discussions

This project can be used in 3D foto.

I have a HDD motor powered using this, is there any way increase the RPM more? I am only getting 500rpm, it would be great to get 3,000 or so. I have a small hdd controller board that with the same amount of power can easily get several thousand rpm.

ateebhassan000@gmail.com

Hello m-shams,

thank you very much for this, but I think there is a mistake in the arduino code, which cause not reaching all signalstates. The double for-loop in the loop() function are constraint by phases and pinmodes which reaches at least only the third signalstate of six states.

To reach all states the first loop has to be constraint by sigcycle and the second one by phases. Is it right?

3 tips:
1. Change the motor pin order to find the correct state.
2. Change the wait value to find if it's enough.
3. Increase the voltage as by your motor type maybe needed.

3 replies

plz sir rply...i stucked at one.:( :( made 3 times but still not working.plz answer.

-->how can i find the correct pin order.?

->how can i connect the motor directly using power supply...there r three pins...but d power supply has only two.?

Dear Kavish, I think you have a star connecyion of 4 wires with RYBN sequence. use a multimeter to see resistance between them . The pin with which all other pins will have the lowest resistance is the neutral or ground pin. I will get back with the correct operating sequence. hope fully use the eairlier instructable of M-shams and keep the neutral pin grounded.

Actually it depends on your motor type. You may need more external power to drive the motor or maybe you have used a wrong pinout on motor.

Attach a closeup photo of your motor.

Are you sure you use a correct pinout?
Use a power supply and connect the voltage directly to your motor pins,
for correct 3 pins it should be a sudden movement.

I suggest you to remove the ribbon cable and use a better cable because it may have a lose connection to your breadboard.

-->how can i find the correct pin order.?

->how can i connect the motor directly using power supply...there r three pins...but d power supply has only two.?

plz sir rply...i stucked at one.:( :( made 3 times but still not working.plz answer.
-->how can i find the correct pin order.?

->how can i connect the motor directly using power supply...there r three pins...but d power supply has only two.?

If your motor has just 3 pins, you dont need to find correct pins by direct power supply.

Change pin order to find the correct pinout.

Increase external voltage.

Hi,

i've tried to follow your instructions but my cd rom motor doesn't work. It only vibrates a little bit without rotation. what could be the problem?