For an upcoming project I’ll be needing a brushless dc motor controller so I had to choose between purchasing one (more than 4 actually) and adapt my system around those or design&build one that would best fit my system. Obviously I went with the second option for 2 reasons : I like making stuff & it’s cheaper to make than to buy. After I finish it , this project will be open-source and I hope people will contribute by making it better.
Brushless DC motors (BLDC motors, also known as electronically commutated motors) are electric motors powered by DC electricity that have electronic commutation systems. Usually the electronic commutation system is external and this is our case also. A BLDC motor is constructed with a permanent magnet rotor and wire wound stator; This type of construction offers many advantages including more efficiency and torque per weight, reduced noise, reliability, longer lifetime (no brush erosion), elimination of ionizing sparks from the commutator, more power, and overall reduction of electromagnetic interference (EMI).
There are 2 main methods for controlling a BLDC motor one is with the use of hall sensors for sensing the position of the rotor and the other one also called sensorless driving involves sensing the rotor position by measuring the back EMF (electromotive force) feedback from the motor instead of external sensors. I’m gonna focus my project on the sensorless method, the advantage being the ability to use any motor no matter if it has the sensors fitted or not.
I’m gonna post updates as I make progress on the project, but first here is the documentation that I’ve read so far:
Here is a good project for those who want to start with robotics. Fairly simple and if you are using a breadboard there is no soldering involved. It is a vehicle that follows a light source using two LDRs, two servo motors, two wheels and an Arduino as its brain. The two LDRs are placed one on the left and one on the right side of the vehicle and each one controls the motor from the opposite side.
Although this project can be done using discrete components alone, using an Arduino allows you to further develop the project. Light is detected by the two LDRs. Each LDR is connected in series with a resistor between Vcc and ground forming a voltage divider. The joint point between the LDR and the resistor is connected to one of the Arduino’s analog inputs.
You will need to play a little bit with the values of the resistor so that you get the right sensitivity for light detection. A variable resistor could be very handy. The motors who spin the wheels are two hacked servo motors. Since servo motors don’t spin 360 degrees there is a way explained in the project to transform them into gear motors.
Servo motors are however pretty easy to control with the microcontroller. You have a center value which will make the motor stand still and if you add or subtract from that value it will make it go forward or reverse. You will need to run a few tests to determine these values and to adjust the light sensors.
A teams of students from Colorado State University have designed and built a PIC-based circuit to control the flight of a blimp. You can control it manually by remote or let the zeppelin find it’s own path to a specific destination that is designated by an infrared beacon.
The remote control has a 20×4 LCD display which shows the commands and a 12 key keypad from which you can control take off, land, forward, reverse and steering commands. The zeppelin also has an altitude controller with ultrasonic sensors. This makes it go higher if it detects the ground too close or go lower if it’s altitude increases too much.
The thrust is given by two motors, each set at the end of a horizontal bar. A servo motor controls the angle of this bar and thus the direction of the thrust. There are four IR sensors each placed in the four cardinal points. These sensors serve the autonomous flight mode. The IR sensors output a low pulse when it “sees” the beacon so the zeppelin will follow the direction of the sensor which gives out the most pulses. The beacon is made with 16 IR LEDs driven by two 555 circuits.
The altitude control is been taking care of by a PIC16F84 designated IC2 in the schematics, steering is done by a PIC16F88, IC3, and all communicate with the control center a PIC16F874, IC4. Thrust motors are driven by SN754410, IC5 in the schematics. In the remote control you will find a PIC16F877P who takes care of all the RC functions, reading the keypad, displaying characters on the LCD, sending audio message to speaker and sending serial commands to the zeppelin.
This article was submited by morgoth and is part of the PCB giveaway program, so for submitting he’s work morgoth will receive a free PCB. Also in the future we’ll see more of he’s projects.
Of-course there are other projects based on this idea around the web, but what makes this one special, it’s he’s features. There are 3 stepper motors controlled by a single ATmega8 that runs at 8 MHz, and a motor driver for each motor. The motors and their drivers were recovered from an old printer.
Although the motors are controlled by the same microcontroller each one can move independent. The board can receive commands to drive the motors trough serial interface from a computer. There is also a PC software that enables you to send commands from a nice graphical interface.
As you can see this is a very practical application, for example it can be easily developed into a CNC machine. I personally like morgoth’s coding skils and i think he has some more great projects to show.
And in the ending here is a movie with the motors in action.
NOTE: youritronics reader Radu pointed out that the schematic is wrong. According to the datasheet the Atmega8 has GND on pin 3 and 5 and VCC on pin 4 and 6. The schematic has the VCC and GND the other way around, you need to correct that for the system to work.
And here are the downloads for unipolar stepper motors:
NOTE:youritronics reader Radu pointed out that the schematic is wrong. According to the datasheet the Atmega8 has GND on pin 3 and 5 and VCC on pin 4 and 6. The schematic has the VCC and GND the other way around, you need to correct that for the system to work.
The PWM frequency is about 10 kHz and does not make a noise in the motor. The 5 K Ohm potentiometer is connected to ADC input channel 0 and is converted to 1024 (10 bit) value, this value is applied to the PWM control and produces very smooth speed control. The HEXFET type IRL1004 has extremely low on resistance (0.009 Ohm) and requires only logic level drive, in this application it does not get warm even when controlling 1 Amp motor current. according the IRL1004 data sheet it can handle much higher motor current.