Arduino CDROM BLDC Motor Driver, Enhanced Performance
by m-shams in Circuits > Arduino
107500 Views, 288 Favorites, 0 Comments
Arduino CDROM BLDC Motor Driver, Enhanced Performance
![۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg](/proxy/?url=https://content.instructables.com/FTA/8O5U/HXT8N93A/FTA8O5UHXT8N93A.jpg&filename=۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg)
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.
Circuit
![۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg](/proxy/?url=https://content.instructables.com/F4K/SHW2/HXT8N936/F4KSHW2HXT8N936.jpg&filename=۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg)
![۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg](/proxy/?url=https://content.instructables.com/FVX/490D/HXT8N939/FVX490DHXT8N939.jpg&filename=۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg)
![۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg](/proxy/?url=https://content.instructables.com/FOH/ZF6V/HXT8N93B/FOHZF6VHXT8N93B.jpg&filename=۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg)
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.
Code
![۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg](/proxy/?url=https://content.instructables.com/FJT/GDUH/HXT8N93F/FJTGDUHHXT8N93F.jpg&filename=۲۸ ه‍. ش.،‏ ۲۳:۳۱.jpg)
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.
/*
*************************
*************************
*/