Hi
BLDC motors were discussed in many topics. But i think it is incomplete still. I have a problem. BLDC motors are between stepper motors and servo motors. BLDC motors may rotate very rapid (For example 20000 RPM) theoretically, but how? As I know, with rapid coding (applying voltage) to the wires. I've searched for it in my previous topic (https://forum.arduino.cc/t/driving-a-brushless-dc-motor-with-arduino-without-esc/1035741 ).
Two solutions for driving the BLDCs are 1)use driver 2)use chips such as L293
Drivers are controlled by signal width. I can't find any direct formula to convert signal width to RPM. Additionally, PWM in arduino is from 1-255, so you can rotate the BLDC's shaft with a limited range of speed.
I haven't any experience with chips for driving BLDC motors, but i guess it's not easy.
If i want to brief the problem it'll be "I don't know any direct and easy way to control the speed of rotation of BLDC motors over a very extensive range of the RPMs and with known RPM"
BLDC motors depend on external electronics to switch current from one coil to the next. They are synchronous to the rate of this switching. This is not like a brushed dc motor which has a commutator to switch the current. Rotating at 20,000 rpm, and if for example the motor had 3 poles, the rate of current switching would be 3x20,000/60 = ~1kHz.
If you an L293, that's just a driver device, it doesn't do anything clever. It isn't even a very good driver by modern standards. If you were using an L293 to drive a brushed motor you could drive it by PWM and it would control the speed "according to signal width", but not a BLDC.
An ESC does all this switching for you, and controls the motor speed by changing the switching rate. You could do it using code in an Arduino with drivers for each motor coil but it would take quite a lot of the processor's real-time grunt and why bother when you can use an off the shelf chip like this one? (Though it does require 6 external MOSFETs to drive the motor coils.)
So, have you told me that an ESC with arduino code, can do it ( I don't know how), but FOCs with MOSOFTs are the better way?
(I don't know how, again.)
You could use an ESC, which itself will probably use one of this type of chip internally. The ESCs you can easily buy are primarily made to control bldc motors in things like drones or r/c aircraft. They will accept a speed control signal in the same format as a conventional r/c servo, which is a pulse of variable width depending on the speed required - this is so they can operate with standard r/c systems. This type of pulse can easily be generated by an Arduino too.
Yes!
If you wanted to build your own controller, you could do so by using one of the Allegro chips I guess, but it's a lot of work. You would though have something more flexible with other speed control options.
BLDC motors are 3-phase bipolar stepper motors. As with a stepper motor the step rate gives the BLDC motor speed. Using a digital ESC you can both set the desired speed and ask for the actual speed. A difference occurs when switching the speed can not be done at once, see the AccelStepper library.
Hmm. That could be slightly confusing! But certainly they have similarities to stepper motors, and the rate at which the current switches from one pole to the next tells you how fast the motor is going. There seems to be quite a good article on BLDCs on Wikipedia:
And a more detailed series of articles on how they work and how to drive them here:
Sorry, would you send me the PDFs the second web pages? why? Because there is a temporary problem in Internet and I can't access these.
However, I guess that I have (or can access to) a L293D shield (three chips on one shield). I read that the frequency is up to 5KHz (is correct?). May i use it?
Two other options are HG7881 shield (four channels) and l9110 (four channels) which i don't know their maximum working frequencies. Another option is two DRV8833 modules (I read 100 KHz).
I guess this is a rare option. why? Because, you probably control all parameters with a board/processor in a precise system, so you don't need that. Controlling the signal's frequency (I mean the exact and known frequency) with, for example UNO is the most important option.
Before you speculate on solutions, read, learn, and inwardly digest the articles on how BLDCs work and how to drive them. Frankly you are much better off just buying an ESC.
A Drone motor has a KV rating, which is the rpm constant of a motor. It indicates the number of revolutions a motor makes upon the application of 1 Volt current without any load attached to the motor. So, it is the number of revolutions per volt in the free load condition.
The ESC takes regular PWM from the controller to generate control current for the drone motor.