ESC with FOC and sensor - why not

So for a while I was thinking of creating a big ass tilt rotor tricopter with a X8 as a base frame. All good, but which ESC to use? After deciding that I don't really like anything on HobbyKing, I started working on my own. It had to have good quality components, rated for automotive applications (don't want my ESC to fail when flying...), FOC control, CAN/RS232/PWM interface and rotor position sensor input.

So after a couple of months, it is spinning. With a "bit" better micro than an 8 bit Atmel and a 12$ sensor chip we can get instant responses from motor to requests from the control - be it for faster/slower speed, startup from standstill or completely reversing rotational direction. And because it is field oriented control, when motor is decelerated it sends power back to the battery.

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • You can mitigate the effects of PWM switching with one of these tricks:

    - Instead of sampling the back-emf and deciding on the measured sample, you integrate the back-emf signal over time until the integrated value exceeds the threshold. If the noise on your samples is evenly distributed, then the integrator cancels out the impact of that noise and you get a reasonable estimate when the zero-crossing really occurs. 

    - If you take the ADC samples just before the high sides switch, you're also getting ADC samples that aren't polluted much by noise. This requires you to run the ADC and PWM at the same frequency and synchronous with one another.

    - The motor is an inductive load, so when you apply a voltage over it using a PWM signal, the actual current doesn't look like the PWM voltage signal, but is much smoother. So if instead of the voltage, you measure the current through 2 windings plus you have an accurate model of the motor in use, you can derive the back-emf using a much smoother signal.

  • But what makes it tricky in standard ESC's is that the feedback voltage(Which is used for estimating rotor position and hence the next commutation step) is constantly being corrupted because of the PWM switching of the FET's in the H-bridge, this switching is especially high at low RPM's because the ESC has to control the power supplied to the motor to an adequately low level so that you don't fry your ESC if the rotor is blocked but at the same time it is enough to spin the motor which in-turn provides the ESC with a discernible back EMF signal which is then used to detect the Zero-crossing and estimate the next commutation step for the next instant 

  • It could, because for sensorless operation, you need some minimal speed to get feedback for position. After you have reliable position, you can use rotation speed to predict/correct position. So until you have enough speed to get reliable value, your position prediction will be all over the place and this results in stuttering. If you give it more throttle, speed stabilizes and you get good enough prediction for smoother running.

  • "With normal ESC, you have to align the rotor and then start the rotation blindly, until you get enough feedback."

    Fantastic! I did not know that. So does that explain then why some of my motors sometimes stutter when I start them at very low throttle? Blip the throttle and they start and then run just fine at min throttle.

  • It's startup from stand still. With normal ESC, you have to align the rotor and then start the rotation blindly, until you get enough feedback. With sensor, you know rotor position and can immediately start the motor with maximum power.

    Maybe next video will be comparison of sensored FOC with a 85A standard ESC :).

  • I'm following this with interest. While I grasp slightly more than the basics (I think) of what you're doing and why it is an awesome thing there is a lot that has me wondering. Your video for example - what is the significance? It really is not meant to sound sarcastic of facetious. Does a normal ESC not accelerate a motor that quickly? Does it lose sync?

    I'm in awe of how people are creating what on the surface seems like a simple thing (this, ardu* code, precision landing etc) but seems magical to most to grasp the complexities of it yet simple to the people writing it.



    (I'll certainly be in line if you ever do a KS on these).

  • Playing with acceleration. Got up to 5200 RPM.

  • This is cool beans.  The explanation of FOC reminds me of a project someone had that involved a single rotor with a geometrically tricked out rotor.  His code needed to know rotor position to know when to alter PWM.  I wish I had bookmarked it.

  • Get rid of the noise made by motors driven by a standard ESC and I will be another happy customer.

  • Field oriented control, basicaly you have to know exact position of the rotor and then you apply such PWMs to all three phases that you get stator magnetic field that is perpendicular to rotor magnetic field = maximum torque. Also when the motor is rotating, you continuously adjust this vector to keep it perpendicular to rotor = smoother torque. And magnetic position is not what I want, I want to have exact mechanical position of the rotor so I can instruct the ESC to park propeller in horizontal position for landing and to keep it there.

This reply was deleted.