Summary of A simple brushless sensorless motor driver for AVR Atmega
This project presents a simple sensorless brushless DC (BLDC) motor driver for the AVR Atmega microcontroller. It controls motor speed and direction using open loop startup and back electromotive force (BEMF) zero-crossing detection via ADC. Speed adjustments are possible only when the motor is stopped due to ADC usage during operation. The user must configure specific parameters, including BEMF current thresholds, input ports, and timer settings, to suit different motor types. While functional, the provided code can be improved for broader applications.
Parts used in the Simple Brushless Sensorless Motor Driver for AVR Atmega:
- Brushless DC motor (BLDC)
- AVR Atmega microcontroller
- Integrated inverter/switching power supply
- Analog-to-Digital Converter (ADC)
- Timer and prescaler hardware (within AVR Atmega)
- Electrical connections for BEMF current sensing
Brushless electric motor (BLDC motors) are synchronous motors that are powered by a DC electric source via an integrated inverter/switching power supply, which produces an AC electric signal to drive the motor.
For an introduction to BLDC motors, please look at my sensored motor driver post, here: http://davidegironi.blogspot.it/2013/09/a-simple-brushless-sensored-motor.html
For this project, I’ve implemented a simple brushless sensoreless motor driver for AVR Atmega. The code i propose it’s not perfect, and can be improved, but for the needs i had it works.
The motor can be controlled in speed and direction (clockwise and anti-clockwise).
This project use open loop startup and bemf zero crossing detection method with ADC.
Speed change can be done only when motor is not running, ADC is used during spinning phase in zc detection so it can not be used during the motor spinning, but digital speed changing can be implemented.
ZC threshold current should be defined by user depending on the motor type.
User has to setup the port used to read the the bemf current. Also the timer interrupt and prescaler should be setup for different running frequency.
The running step for the motor are defined as default, anyway user can change it to fit any motor.
For more detail: A simple brushless sensorless motor driver for AVR Atmega