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.