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.
/*
*************************
*************************
*/
26 Comments
3 years ago
Nice instructable.
I made it with a 18 years old CD reader brushless motor.
Using delayMicroseconds() and decreasing the delay by 50µs or 100µs it can run faster.
(I replaced the manual speed selection by an automatic step by step acceleration & deceleration).
3 years ago
I want to know.. How can I know the pins of HALL sensors.. +ve, - ve and the outputs
6 years ago
This project can be used in 3D foto.
6 years ago
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.
Reply 6 years ago
I am also working to control HDD motor with Arduino....Will you please help me in this...?
ateebhassan000@gmail.com
7 years ago
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?
Reply 7 years ago
Thanks a lot for your attention. There was a problem in loop.
I've attached the correct source code: brushless_motor_2ic.ino
7 years ago
Thanks, this is very helpful.
9 years ago
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.
Reply 8 years ago on Introduction
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.?
Reply 8 years ago on Introduction
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.
Reply 8 years ago on Introduction
ok let me try to find it out..and if had prob again i will get back to u.:)
8 years ago on Introduction
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...
8 years ago on Introduction
great instructable --> i have did the same like schematic even my motor is not working...sir plz help..:(
Reply 8 years ago on Introduction
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.
Reply 8 years ago on Introduction
i think i am using as u..here is the attachment.
Reply 8 years ago on Introduction
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.
Reply 8 years ago on Introduction
-->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.?
Reply 8 years ago on Introduction
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.?
Reply 8 years ago on Introduction
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.