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 *



<p>This project can be used in 3D foto.</p>
<p>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.</p>
<p>I am also working to control HDD motor with Arduino....Will you please help me in this...?</p><p>ateebhassan000@gmail.com</p>
<p>Hello m-shams,</p><p>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.</p><p>To reach all states the first loop has to be constraint by sigcycle and the second one by phases. Is it right?</p>
<p>Thanks a lot for your attention. There was a problem in loop.</p><p>I've attached the correct source code: <a href="https://www.instructables.com/files/orig/FE4/H6AL/IP1H11LZ/FE4H6ALIP1H11LZ.ino" rel="nofollow">brushless_motor_2ic.ino</a></p>
<p>Thanks, this is very helpful.</p>
3 tips:<br>1. Change the motor pin order to find the correct state.<br>2. Change the wait value to find if it's enough.<br>3. Increase the voltage as by your motor type maybe needed.
<p>plz sir rply...i stucked at one.:( :( made 3 times but still not working.plz answer.</p><p>--&gt;how can i find the correct pin order.?</p><p>-&gt;how can i connect the motor directly using power supply...there r three pins...but d power supply has only two.?</p>
<p>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.</p>
<p>ok let me try to find it out..and if had prob again i will get back to u.:)</p>
<p>What's the maximum voltage these set-top-box motors can take? It'd be nice to use TI&quot;s DRV8301, but the minimum voltage is 6V.. similar with other drivers (BD7959EFV, MC33033 , KA3080, etc)</p><p>There is also a nice write up of a custom igbt inverter driver here:</p><p><a href="http://pic-projects-for-all.blogspot.com/2014/11/cd-rom-3-phase-bldc-motor-arduino.html" rel="nofollow">http://pic-projects-for-all.blogspot.com/2014/11/c...</a></p>
<p>great instructable --&gt; i have did the same like schematic even my motor is not working...sir plz help..:(</p>
<p>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.</p><p>Attach a closeup photo of your motor.</p>
<p>i think i am using as u..here is the attachment.</p>
<p>Are you sure you use a correct pinout? <br>Use a power supply and connect the voltage directly to your motor pins, <br>for correct 3 pins it should be a sudden movement.</p><p>I suggest you to remove the ribbon cable and use a better cable because it may have a lose connection to your breadboard.</p>
<p>--&gt;how can i find the correct pin order.?</p><p>-&gt;how can i connect the motor directly using power supply...there r three pins...but d power supply has only two.?</p>
<p>plz sir rply...i stucked at one.:( :( made 3 times but still not working.plz answer.<br>--&gt;how can i find the correct pin order.?</p><p>-&gt;how can i connect the motor directly using power supply...there r three pins...but d power supply has only two.?</p>
<p>If your motor has just 3 pins, you dont need to find correct pins by direct power supply.</p><p>Change pin order to find the correct pinout.</p><p>Increase external voltage.</p>
<p>Hi,</p><p>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? </p><p>Thanks in advance</p>
<p>This is really nice - I wondered what to do with these things! </p><p>But that breadboard layout is hard to follow - can you get Fritzing to do a proper schematic as well please?</p>
I didn't use monitoring. As you can see in the schematic, the forth (bemf) pin left unused. <br>I will postpone it to the next project, having a better performance via motor feedback.
Very interesting, but can you explain how the monitoring of the motor actually is done? Thanks.
I've added some details to intro
<p>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.</p>

About This Instructable




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