Introduction: Arduino CDROM BLDC Motor Driver, Enhanced Performance

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.

/*

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

* http://blog.mshams.ir *

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

*/


Comments

author
Muhin555 made it!(author)2017-05-04

This project can be used in 3D foto.

author
ReconIII made it!(author)2016-10-29

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.

author
ateebhassan000 made it!(author)2017-04-13

I am also working to control HDD motor with Arduino....Will you please help me in this...?

ateebhassan000@gmail.com

author
p7ge made it!(author)2016-06-02

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?

author
m-shams made it!(author)2016-06-04

Thanks a lot for your attention. There was a problem in loop.

I've attached the correct source code: brushless_motor_2ic.ino

author
DavidP227 made it!(author)2015-12-31

Thanks, this is very helpful.

author
m-shams made it!(author)2014-08-26

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.

author
kavish+laxkar made it!(author)2015-07-21

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.?

author
Samiran made it!(author)2015-09-17

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.

author
kavish+laxkar made it!(author)2015-09-27

ok let me try to find it out..and if had prob again i will get back to u.:)

author
snoop911 made it!(author)2015-08-12

What's the maximum voltage these set-top-box motors can take? It'd be nice to use TI"s DRV8301, but the minimum voltage is 6V.. similar with other drivers (BD7959EFV, MC33033 , KA3080, etc)

There is also a nice write up of a custom igbt inverter driver here:

http://pic-projects-for-all.blogspot.com/2014/11/c...

author
kavish+laxkar made it!(author)2015-07-08

great instructable --> i have did the same like schematic even my motor is not working...sir plz help..:(

author
m-shams made it!(author)2015-07-08

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.

author
kavish+laxkar made it!(author)2015-07-10

i think i am using as u..here is the attachment.

IMG_20150710_215536329.jpg
author
m-shams made it!(author)2015-07-10

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.

author
kavish+laxkar made it!(author)2015-07-11

-->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.?

author
kavish+laxkar made it!(author)2015-07-17

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.?

author
m-shams made it!(author)2015-07-21

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.

author
zumpappero made it!(author)2014-08-26

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?

Thanks in advance

author
throbscottle made it!(author)2014-08-22

This is really nice - I wondered what to do with these things!

But that breadboard layout is hard to follow - can you get Fritzing to do a proper schematic as well please?

author
m-shams made it!(author)2014-07-21

I didn't use monitoring. As you can see in the schematic, the forth (bemf) pin left unused.
I will postpone it to the next project, having a better performance via motor feedback.

author
carlos66ba made it!(author)2014-07-21

Very interesting, but can you explain how the monitoring of the motor actually is done? Thanks.

author
m-shams made it!(author)2014-07-20

I've added some details to intro

author
Mojo_JoJo made it!(author)2014-07-20

Just what I needed. I happen to have an HDD spindle motor and was wondering how to drive it. Can you elaborate the signal feedback issue and also provide a circuit diagram if possible of the driver circuit.

About This Instructable

65,345views

243favorites

License:

Bio: Programmer, Arduino Fan
More by m-shams:Arduino Mario ClockArduino, Mini Sonar RobotArduino CDROM BLDC Motor Driver, Enhanced Performance
Add instructable to: