Управляем бесколлекторными двигателями господа

от автора

Привет Хабровчане!
Решил я рассказать «всему свету» о проблеме, с которой столкнулся при постройке своего проекта, и как мне удалось её решить.

А речь сегодня пойдет о бесколлекторных двигателях, о регуляторах хода и как ими управлять.
Что же такое бесколлекторный двигатель, я не буду долго расписывать (сами можете посмотреть Wiki), а скажу в 2х словах, это 3х фазный двигатель постоянного тока.

И приводится в движение сие чудо благодаря специальному регулятору, который последовательно переключает обмотки с определенной частотой.
Управляя частотой переключения обмоток мы управляем скоростью вращения ротора.
Ну что же, надеюсь тут все понято, идем дальше.

Первые проблемы
Были закуплены 2 комплекта двигатель + регулятор, ждал около месяца, пришли.
image

Мною овладел приступ безудержного веселья по этому поводу, но, к сожалению, это было ненадолго….
Рассмотрев эти чудеса техники я решил подключить их к источнику питания, и тут то первое разочарование, тихий хлопок (как от КЗ) и тишина, светодиоды не горят, писка нет (а он должен быть), только крутится кулер на регуле, беда…
Побежал в ближайший Хобби магазин, и добрый консультант вынес вердикт: сгорел!

Со вторым такая же история, в общем ребята, не повезло, оба бракованные…
Ну хоть кошечка порадовалась:

image

Пришлось раскошелиться и купить у них регулятор по цене обоих комплектов (поджимали сроки).
Купил, подключил, все пищит, горит, работает, прям аж душа радуется! (на фото он выделен):

image

Проблема номер два
Теперь настала пора покрутить двигателем.
А покрутить нужно не с сервотестера или аппы радиоуправления, а с микроконтроллера, а точнее вот с такой платки:
image

Перелопатив тонны сайтов, перечитав сотни форумов и ответов на мой вопрос, так как же управлять этим регулятором я слышать только одно: «…чувак да там простой ШИМ…», «… ШИМ тебе в помощь…».
Ну ШИМ, так ШИМ.
Написал простенькую программу:

#include <Servo.h>   Servo motor;  int mot_pin = 7;    //Подключаем левый мотор к пину 7  int js_position = 800; int max_position = 3000;  void setup()  {   motor_teft.attach(mot_pin, js_position, max_position);    //Инициальзация мотора }   void loop()  {   motor.write(1800);     //Записываем положение и отправляем на регулятор } 

Залил, ноль эмоций…

Бился 2 дня, пока не наткнулся на случайный пост, о том, что у регулятора есть защита, и он начинает функционировать только при подаче на его вход ШИМ сигнала 1,5 мс.
Окей, будет сделано.

Дальше я подцепил обыкновенный резистор через АЦП, и опытным путем подобрал крайние значения ШИМ регулятора.
Код получившийся в итоге:

#include <Servo.h>   Servo motor_teft; Servo motor_right;  int mot_pin_left = 7;    //Подключаем левый мотор к пину 7 int mot_pin_right = 8;   //Подключаем правый мотор к пину 8  int js_position = 1500;  //Начальная позиция, всегда 1.5 мс для регуляторов бесколлекторных двигателей int max_position = 2300; //Максимальное значение ШИМ 2.3 мс int min_position = 800;  //Минимальное значени ШИМ 0.8 мс  int start = 1;  //Флаг задержки запуска  void setup()  {   motor_teft.attach(mot_pin_left, js_position, max_position);    //Инициальзация левого мотора (порт, начальная позиция, максимальная позиция)       !!!   motor_right.attach(mot_pin_right, js_position, max_position);  //Инициальзация правого мотора (порт, начальная позиция, максимальная позиция)      !!! }   void loop()  {   //Начальная установка регуляторов в нулевое положение   if(start == 1) {     motor_teft.write(js_position);     motor_right.write(js_position);          delay(700);     start = 0;   }      js_position = analogRead(A0);  //Считывание положения потенциометра      js_position = map(js_position, 0, 1023, 75, 140);  //Преобразование положения потенциометра в угол поворота   motor_left.write(js_position);     //Записываем положение и отправляем на регулятор левого мотора   motor_right.write(js_position);    //Записываем положение и отправляем на регулятор правого мотора      delay(20);  //Задержка цикла 20 мс } 

И все заработало.
Теперь все крутиться, шумит, пищит и просто радует.
P.S. Это код для управления сразу 2мя двигателями.

И последняя проблема, питание…
Здесь расскажу немного, а именно, от регулятора идет 3 провода:
image

Центральная колодка, по порядку Черный — минус, Красный — плюс и Белый — провод управления.

И загвоздка в том, что в отличие от сервоприводов, это не входы под питание, а выходы, т.е. питаемся от них.
К чему я это, да к тому, что подключив регулятор как серву, я чуть не спалил порты на ноутбуке, ибо плата в это время была запитана от USB.
Но к счастью у моего старичка сработала защита и все обошлось перезагрузкой…

Видео работы:

Спасибо большое за внимание.
Надеюсь мой опыт будет полезен для вас.
До скорых встреч.

ссылка на оригинал статьи http://habrahabr.ru/post/219723/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *