Содержание
Обзор бесколлекторных моторов для Arduino
Бесколлекторные моторы (рис. 1) появились сравнительно недавно и были созданы с целью оптимизации электродвигателей постоянного тока. Бесколлекторные моторы питаются трехфазным переменным током. Они эффективно работают в более широком диапазоне оборотов и имеют более высокий КПД. При этом конструкция двигателя проще, в ней нет щеточного узла, который постоянно трется с ротором и создает искры. Поэтому они практически не изнашиваются.
Рис. 1.
По конструкции бесколлекторные моторы делятся на две группы: inrunner и outrunner. Двигатели inrunner имеют расположенные по внутренней поверхности корпуса обмотки, и вращающийся внутри магнитный ротор. Двигатели outrunner имеют неподвижные обмотки, внутри двигателя, вокруг которых вращается корпус с помещенными на его внутреннюю стенку постоянными магнитами.
Коммутация в бесколлекторном двигателе (БД) осуществляется и контролируется с помощью электроники.
Рис. 2
Контроллеры бесколлекторных моторов (ESC регуляторы)
Для управления бесколлекторными моторами используют специальные контроллеры - ESC (Electric speed controller — электронный контроллер скорости) регуляторы (рис. 3).
Рис. 3. ESC регуляторы
Задача контроллера состоит в том, что бы передать энергию постоянного тока от аккумулятора к трехфазному бесколлекторному мотору. Для передачи энергии контроллер использует MOSFETы — силовые ключи, которые могут открываться и закрываться за долю секунды. Если мощности одного ключа недостаточно, используется несколько ключей, включенных параллельно. Попеременное включение/выключение фаз поддерживает вращение мотора. За переключением фаз следит микроконтроллер регулятора. Функциональная схема ESC регулятора показана на рис. 4
Рис. 4. Функциональная схема ESC регулятора
Подключение к плате Arduino
Схема подключения бесколлекторного двигателя с ESC-регулятором к плате Arduino показана на рис.5. Для подключения регулятора к плате Arduino используется 2 провода:
- черный – "земля;
- белый – управляющий.
Красный провод регулятора является не входом, выходом с напряжением +5В, который можно использовать для питания платы Arduino.
Показания потенциометра будем использовать для управления скоростью мотора.
Рис. 5. Подключение бесколлекторного двигателя с ESC-регулятором к плате Arduino
Для управления регулятором будем использовать Arduino-библиотеку Servo. Минимальные и максимальные значения управляющего сигнала 800 мксек и 2300 мксек.
Содержимое скетча представлено в листинге 1.
Листинг 1.
// подключение библиотеки #include <Servo.h> // создание объекта Servo motor; //Пин подключения мотора int mot_pin = 9; void setup() { // инициализация мотора motor.attach(mot_pin); } void loop() { // регулирование потенциометром int speed=map(analogRead(A0),1023,0,800,2300); motor.writeMicroseconds(speed); delay(20); }
После загрузки скетча на плату Arduino видим что мотор не запускается и не реагирует на повороты потенциометра. Регулятор необходимо откалибровать, чтобы он знал минимальные и максимальное значения. Для этого перед подачей питания на регулятор, выставляем потенциометр в максимальное значение. Подаем питание. Слышим "пиканье" двигателя. Переводим потенциометр в минимальное значение, слышим 3 "пика". Регулятор откалиброван. Теперь поворотом потенциометра можем регулировать скорость двигателя.
Пример использования
В качестве примера настроим автоматическую калибровку ESC-регулятора при запуске скетча Arduino. Нам потребуются следующие компоненты:
- Плата Arduino Uno – 1;
- Плата прототипирования – 1;
- Мотор бесколлекторный – 1;
- ESC-регулятор – 1;
- Потенциометр 10 кОм – 1;
- Блок питания 12 В – 1;
- Провода.
Для калибровки в процедуре setup() производим эмуляцию перевода потенциометра м максимальное и минимальное положение. Содержимое скетча показано в листинге 2.
Листинг 2.
// подключение библиотеки #include <Servo.h> // создание объекта Servo motor; //Пин подключения мотора int mot_pin = 9; //Максимальное значение ШИМ 2.3 мс int max_pwm = 2300; //Минимальное значени ШИМ 0.8 мс int min_pwm = 800; void setup() { // запуск последовательного порта Serial.begin(9600); // инициализация мотора motor.attach(mot_pin); // калибровка delay(1000); motor.writeMicroseconds(max_pwm); delay(2000); motor.writeMicroseconds(min_pwm); delay(4000); } void loop() { // регулирование потенциометром int speed=map(analogRead(A0),1023,0,800,2300); motor.writeMicroseconds(speed); delay(20); }
После запуска Arduino в процедуре setup() происходит калибровка регулятора, и в процедуре loop() мотор крутится со скоростью, соответствующей положению потенциометра.
Часто задаваемые вопросы
- Проверьте подключение моторов к ESC-регулятору, ESC-регулятора к блоку питания и Arduino.
- Проведите калибровку ESC-регулятора.