I've been trying to build a sensorless brushless speed controller using some mosfets and an arduino, and I've been able to run the motor 'blindly' using a preset delay. My problem is, I don't quite know how to switch over to a closed loop control using the back EMF from the undriven coil of the motor - does anybody have an idea as to how I might go about writing an algorithm for this?
I've been following this guide, but it doesn't have any source code:
When I connect the comparator to the undriven coil and print out its reading to the serial monitor, I get a pattern of alternating 1s and 0s(10101010101010...) - is this the expected signal? How would I use this to decide when to commutate the motor?
what do you mean by "the undriven coil" ?
If you know anything about driving BLDCs with trapezoidal mode this is obvious.
If you don't know such things, why try and contribute to answering this query?
The first thing to say to the OP is "post your code and schematic". You'lll probably
need to set the analog clock to run faster so you can monitor the idle phase rapidly
and spot the cross-over point. If you are using PWM then there will be noise and this
may require some carefully chosen low-pass filtering.
You mentioned a comparator - there needs to be 3 comparators, one for each phase,
or a summing circuit to average the 3 phases (since two are known) and share the
At one time Atmel had several application notes documents available on their web site on interfacing/driving DC brushless motors, both sensored and sensorless. The ATmega8 chip is/was one of the most common uC chips used in this kind of application.