Arduino CDROM BLDC Motor Driver, Enhanced Performance





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.



* *





    • Microcontroller Contest

      Microcontroller Contest
    • Science of Cooking

      Science of Cooking
    • Pocket-Sized Contest

      Pocket-Sized Contest

    We have a be nice policy.
    Please be positive and constructive.




    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.

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


    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?

    Thanks, this is very helpful.

    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.

    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.

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