Как управлять бесколлекторным двигателем
Перейти к содержимому

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

  • автор:

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

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

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

image

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

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

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

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

image

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

image

image

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

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

#include 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 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мя двигателями.

image

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

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

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

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

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

Данная статья сфокусирована на применении микроконтроллера с минимальными ресурсами для управления вентильным двигателем и скорости его вращения.

Как микроконтроллер может управлять трехфазным БДПТ двигателем? Для того, чтобы ответить на этот вопрос требуется, чтобы были определены ресурсы микросхемы, которые в данном приложении будут взаимодействовать с внешней топологией и функциями управления двигателя БДПТ. Существуют сенсорные и безсенсорные конфигурации двигателей (для определения положения ротора), которые имеют свои за и против. В данной статье мы рассмотрим управление двигателем с одним датчиком Холла.

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

Структурная схема управления БДПТ двигателем

Рис. 1. Структурная схема управления БДПТ двигателем

Структурная схема на рис.1. иллюстрирует систему, использующую единичный датчик Холла для возврата положения ротора (многие системы используют три датчика для этой цели), потенциометр для установки скорости, выключатель «старт-стоп», защиту от токовой перегрузки и трехфазный силовой каскад для запуска двигателя. Результирующее количество независимых соединений с микроконтроллером, показанное между субкомпонентами системы равно 11 (5 входов и 6 выходов). Однако, минимизация может быть получена в случае, если микроконтроллер поддерживает многофункциональность выводов и повсеместно встречающуюся периферию.

Техника оптимизации ресурсов

Учитывая, что выходные сигналы микроконтроллера подсоединены к трехфазному силовому мосту, и при условии, что применен шестиступенчатый алгоритм управления БДПТ задействован, получаем, что только два транзистора включены в любое время в течение нормальной работы. То есть, включенными являются один транзистор верхнего плеча и один транзистор нижнего плеча. Таким образом, нижние и верхние ключи находятся в разных половинах моста и включены в так называемом диагональном режиме. Это является преимуществом с точки зрения минимизации, потому что, когда два из трех устройств верхнего плеча выключены, третий должен быть включен. Однако, третий сигнал верхнего плеча может быть восстановлен из других двух посредством нескольких резисторов и транзисторного инвертора, который подсоединяется ко входу третьего верхнего плеча силового моста (см. рис 4 — Принципиальная схема). Это приводит к сокращению количества выводов микроконтроллера. Таким образом, мы перешли от системы требующей 6 выводов к системе требующей 5.

Что касается пяти системных входов, т.е. входов для датчика Холла, потенциометра, защиты от токовых перегрузок, и переключателей «старт-стоп» существуют различные возможности. Чаще всего датчик Холла встроен в корпус двигателя и обычно имеет схему согласования с логическим выходом. Т.к. в данном применении требуется один датчик Холла, а контроллеры семейства PIC12F имеют один цифровой вход, то он может быть использован для этой цели.

Для запуска двигателя и выполнения функции установки скорости, при включении питания один из выводов верхнего драйвера трех фазного силового моста может быть сконфигурирован как аналоговый вход. Этот вывод подсоединяется к делителю напряжения или потенциометру. Следовательно, еще до того, как мотор придет в движение скорость может быть установлена и считана. Дополнительно, может быть использован стартовый включатель, который может уменьшить скорость ниже минимума, а также в состоянии запустить мотор. В этом аналоговом режиме ввода, хотя подсоединенный транзистор верхнего драйвера и включен, это не дает результата в активизации мотора т.к. все транзисторы нижнего драйвера в это время выключены. Впоследствии, в рабочем режиме вывод конфигурируется как выход для перемещения транзистора верхнего драйвера, и затем цепь делителя напряжения эффективно начинает выполнять функцию подтяжки вверх/вниз.

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

Защита от токовой перегрузки не использует какие-либо порты микроконтроллера; вместо этого, она использует схему источника питания PIC12 для того, чтобы перезагрузить устройство при возникновении токовой перегрузки. Этот тип PIC имеет внутренний шунтовый регулятор, который подсоединен к источнику питания схемы посредством резистора. Резистор выбирается в соответствии с требованиями приложения. Следовательно, питание может быть отключено от PIC посредством цепи защиты от токовых перегрузок, которая фактически подсоединена параллельно с внутренним регулятором питания.

Таким образом, теперь мы имеем систему, которая требует микроконтроллер со следующими функциями входов/выходов: один выделенный цифровой вход, один цифро-аналоговый выход и четыре цифровых выхода. Однако, мы проигнорировали тот факт, что, для управления скоростью нам будет необходимо модулировать приложенное к БДПТ двигателю напряжение и для этого нам потребуются применить ШИМ сигналы, в данном случае, к транзисторам нижнего драйвера. На самом деле, ввиду того, что, выполняется шестиступенчатое управление, достаточно иметь любой один из трех нижних драйверов, запитанный ШИМ сигналом в любой момент времени в течение цикла переключения двигателя. Некоторые микроконтроллеры имеют специальную периферию ШИМ для этой цели, в то время как другие имеют возможность управления ШИМ сигналами от одного до n выходов, и в основном достигают того же самого посредством, например, ECCP (усовершенствованный модуль захвата, сравнения, ШИМ). В PIC12F мы имеем в наличии комбинацию как управления ШИМ сигналом в режиме ECCP, так и альтернативные режимы конфигурации выводов (APCFG). Это крайне удобно, ввиду того, что управление ШИМ может быть сделано всего на двух выводах посредством ECCP, а приложение требует три (посредством APCFG режима). В настоящее время, только PIC12F615 и PIC12HV615 имеют такую возможность.

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

Рис. 2. Установка для тестирования системы

В программном обеспечении реализовано управление скоростью с обратной связью используя PI регулирование. Для организации обратной связи используется один датчик Холла. Данное PI регулирования загружаются в регистр CCPR1 (скважность ШИМ), старшие 8 бит. Выход ШИМ подается на один из трех транзисторов нижнего плеча силового моста для того, чтобы коммутировать двигатель и управлять скоростью.

Структура программного обеспечения

Рис. 3. Структура программного обеспечения

Три внутренних таймера PIC12 используются для измерения скорости двигателя, полученной из сигнала датчика Холла (TMR1), установки ШИМ периода (TMR2) и генерирования коммутационных прерываний (TMR0). При включении питания установленная скорость считывается и когда стартовый переключатель нажат — рабочий режим начинается.

Когда рабочий режим двигателя стартовал, положение ротора предварительно оценено и обратная связь коммутационной последовательности разорвана до обнаружения следующего сигнала от датчика Холла, во время которого время последовательности коммутаций синхронизировано с позицией ротора. После определения двух успешных переходов сигналов датчика Холла прошивка приложения переходит в режим замкнутой петли контроля скорости.

Схема защиты от токовых перегрузок вызывает сброс по включению питания устройства.

Этот набросок дизайна контроллера двигателя продемонстрировал как можно работать с вентильным двигателем, источником питания и PIC12HV615, собранных на стартовой плате. Как видно, данная форма управления двигателем может быть осуществлена с использованием микроконтроллера с малым количеством выводов. Гибкая периферия PIC12HV615 и внутренний регулятор позволяют построить комплексные решения, пример показан на рис.4. Этот пример может быть основой для дешевых дизайнов некоторых применений управления двигателем, где в действительности не требуется высокой производительности.

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

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

Как известно в коллекторных двигателях постоянного тока коммутация обмоток в нужный момент времени осуществляется с помощью коллекторного узла(якоря). В беcколлекторных двигателях коммутацией управляет электроника. Для определения момента коммутации контроллер может использовать или датчики положения(Датчики Холла) или обратную ЭДС, генерируемую неподключенными обмотками. Датчики положения наиболее часто используются в низкооборотистых(тяговых) двигателях, где пусковой момент существенно варьируется или где требуется его высокое значение, а также где двигатель используется для позиционирования. Управление бесколлекторными двигателями без датчиков используется в тех случаях, когда пусковой момент существенно не изменяется и когда отсутствует необходимость в управлении позиционированием, как, например, в вентиляторах.

На каждой ступени коммутации, обмотка одной фазы подключается к положительному напряжению питания, другая — к отрицательному, а третья — остается неподключенной. Обратная ЭДС неподключенной фазы в результате пересекает ноль при пересечении среднего значения положительного и отрицательного напряжений. Пересечение ноля возникает всегда в центре между двумя коммутациями. На постоянной скорости или медленно изменяющейся скорости период времени от одной коммутации до пересечения нуля и время от пересечения нуля до следующей коммутации равны. Это используется в качестве основы в данной реализации устройства управления без использования датчиков.

Для определения сигналов обратной ЭДС будем использовать метод виртуальной средней точки, для этого меряем напряжение на свободной фазе и сравниваем его со средней точкой. При использовании АЦП требуется некоторое время для преобразования, что снижает производительность, поэтому логичнее использовать аналоговые компараторы, нам ведь не нужно знать точное значение АЦП этого сигнала. Компаратор может генерировать прерывание в момент перехода напряжения через среднюю точку, а также выдавать логический сигнал своего состояния, что нам и будет нужно.

Три ШИМ-канала, OC1A, OC2 и OC1B, управляют верхними ключами(P-канальные MOSFET) мостовой схемы. Это дает возможность управления электрическим током с помощью аппаратных возможностей генерации ШИМ-сигналов при минимальном использовании программных ресурсов. В этом случае управление скоростью выполняется за счет изменения скважности ШИМ-сигнала.

Нижние ключи управляются логическими сигналами, и в нужный момент N-канальные MOSFET подключают обмотку к минусу питания или к линии обратной ЭДС. Ниже представлены таблицы состояний сигналов подаваемых на верхние и нижние ключи, с направлением вращения по часовой и против часовой стрелки.

Биты конфигурации микроконтроллера

Код программы с подробными комментариями:

// Подключение бесколлекторного двигателя к AVR(ATmega8, без датчиков) #include #include #include // Фаза U(Верхнее плечо) #define UH_ON TCCR1A |= (1 break; case (1): if(SENSE_UVW || startup) < VL_OFF; // На фазе V - лог. 0 WL_ON; // На Фазе W - лог. 1 SENSE_V; // Активируем вход фазы V commutation_step = 2; TCNT0 = 0; // Обнуляем счетчик T0 >break; case (2): if(!SENSE_UVW || startup) < UH_OFF; // Фаза U отключена VH_ON; // На фазе V - ШИМ SENSE_U; // Активируем вход фазы U commutation_step = 3; TCNT0 = 0; // Обнуляем счетчик T0 >break; case (3): if(SENSE_UVW || startup) < WL_OFF; // На Фаза W - лог. 0 UL_ON; // На фазе U - лог. 1 SENSE_W; // Активируем вход фазы W commutation_step = 4; TCNT0 = 0; // Обнуляем счетчик T0 >break; case (4): if(!SENSE_UVW || startup) < VH_OFF; // Фаза V отключена WH_ON; // На фазе W - ШИМ SENSE_V; // Активируем вход фазы V commutation_step = 5; TCNT0 = 0; // Обнуляем счетчик T0 >break; case (5): if(SENSE_UVW || startup) < UL_OFF; // На фазе U - лог. 0 VL_ON; // На Фазе V - лог. 1 SENSE_U; // Активируем вход фазы U commutation_step = 0; TCNT0 = 0; // Обнуляем счетчик T0 >break; > > // Обработчик прерывания по компаратору. Детектор обратной ЭДС ISR(ANA_COMP_vect) < rotor_run++; // инкрементируем импульсы if(rotor_run >200) rotor_run = 200; if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, крутим наполную commutation(0); > // Обработчик прерывания по переполнению Т0. Работа двигателя без сигналов обратной ЭДС ISR(TIMER0_OVF_vect) < commutation(1); // Если сработало прерывание, есть пропуски импульсов обратной ЭДС rotor_run = 0; // Сбрасываем счетчик импульсов OCR1A = START_PWM; // ШИМ минимум OCR1B = START_PWM; OCR2 = START_PWM; >// Обработчик внешнего прерывания INT0. Энкодер ISR(INT0_vect) < _delay_us(100); if ((PIND & ( 1 // Крутим по часовой стрелке else < if(motor_pwm != 255) motor_pwm += 5; // Увеличиваем ШИМ >> GIFR = (1 int main (void) < // Порты ввода/вывода DDRB = 0xFF; PORTB = 0x00; DDRD &= ~(1 > if(start_stop) < ACSR |= (1 > else < PHASE_ALL_OFF; // Все фазы выключены ACSR &= ~(1 > >

Проект AVRStudio4 для ATmega8, ATmega48, макет печатной платы Diptrace

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

Страница, которую вы запрашиваете, не существует. Возможно, она была удалена, или был введен неверный адрес. Попробуйте вернуться на главную страницу или воспользуйтесь навигацией.

Меню

Продукция
  • Шаговые ­двигатели
  • Блоки управления шаговыми двигателями
  • Программируемые устройства
    для управления электроприводами
  • Бесколлекторные двигатели
    и мотор‑редукторы
  • Блоки управления бесколлекторными двигателями
  • Асинхронные мотор‑редукторы
  • Коллекторные двигатели
    и мотор‑редукторы
  • Блоки управления коллекторными двигателями
  • Сервоприводы
  • HMI панели
  • Прецизионные редукторы
  • Линейные модули
  • Соединительные муфты
  • Источники питания
Контакты

по России звонок бесплатный

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

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