Схема регулятора скорости бесколлекторного двигателя (ESC)
Схема условно разделена на две части: левая - микроконтроллер с логикой, правая - силовая часть. Силовую часть можно модифицировать для работы с двигателями другой мощности или с другим питающим напряжением.
Контроллер - ATMEGA168. Гурманы могут сказать, что хватило бы и ATMEGA88, а AT90PWM3 - это было бы "вааще по феншую". Первый регулятор я как раз делал "по феншую". Если у Вас есть возможность применять AT90PWM3 - это будет наиболее подходящий выбор. Но для моих задумок решительно не хватало 8 килобайт памяти. Поэтому я применил микроконтроллер ATMEGA168.
Эта схема задумывалась как испытательный стенд. На котором предполагалось создать универсальный настраиваемый регулятор для работы с различными "калибрами" бесколлекторных двигателей: как с датчиками, так и без датчиков положения. В этой статье я опишу схему и принцип работы прошивки регулятора для управления бесколлекторными двигателями с датчиками Холла и без датчиков.
Схема регулятора
Питание
Питание схемы раздельное. Поскольку драйверы ключей требуют питание от 10В до 20В, используется питание 12В. Питание микроконтроллера осуществляется через DC-DC преобразователь, собранный на микросхеме MC34063. Можете применять линейный стабилизатор с выходным напряжением 5В. Предполагается, что напряжение VD может быть от 12В и выше и ограничивается возможностями драйвера ключей и самими ключами.ШИМ и сигналы для ключей
На выходе OC0B(PD5) микроконтроллера U1 генерируется ШИМ сигнал. Он поступает на переключатели JP2, JP3. Этими переключателями можно выбрать вариант подачи ШИМ на ключи (на верхние, нижние или на все ключи). На схеме переключатель JP2 установлен в положение для подачи ШИМ сигнала на верхние ключи. Переключатель JP3 на схеме установлен в положение для отключения подачи ШИМ сигнала на нижние ключи. Не трудно догадаться, что если отключить ШИМ на верхних и нижних ключах, мы получим на выходе перманентный "полный вперед", что может разорвать двигатель или регулятор в хлам. Поэтому, не забываем включать голову, переключая их. Если Вам не потребуется такие эксперименты - и Вы знаете, на какие ключи Вы будите подавать ШИМ, а на какие нет, просто не делайте переключателей. После переключателей ШИМ сигнал поступает на входы элементы логики "&" (U2, U3). На эту же логику поступают 6 сигналов с выводов микроконтроллера PB0..PB5, которые являются управляющими сигналами для 6 ключей. Таким образом, логические элементы (U2, U3) накладывают ШИМ сигнал на управляющие сигналы. Если Вы уверены, что будете подавать ШИМ, скажем, только на нижние ключи, тогда ненужные элементы (U2) можно исключить из схемы, а соответствующие сигналы с микроконтроллера подавать на драйверы ключей. Т.е. на драйверы верхних ключей сигналы пойдут напрямую с микроконтроллера, а на нижние - через логические элементы.Обратная связь (контроль напряжения фаз двигателя)
Напряжение фаз двигателя W,V,U через резистивные делители W - (R17,R25), V - (R18, R24), U - (R19, R23) поступают на входа контроллера ADC0(PC0), ADC1(PC1), ADC2(PC2). Эти выводы используются как входы компараторов. (В примере описанном в AVR444.pdf от компании Atmel применяют не компараторы, а измерение напряжения с помощью ADC (АЦП). Я отказался от этого метода, поскольку время преобразования ADC не позволяло управлять скоростными двигателями). Резистивные делители выбираются таким образом, чтобы напряжение, подаваемое на вход микроконтроллера, не превышало допустимое. В данном случае, резисторами 10К и 5К делится на 3. Т.е. При питании двигателя 12В. на микроконтроллер будет подаваться 12В*5К/(10К+5К) = 4В. Опорное напряжение для компаратора (вход AIN1) подается от половинного напряжения питания двигателя через делитель (R5, R6, R7, R8). Обратите внимание, резисторы (R5, R6) по номиналу такие же, как и (R17,R25), (R18, R24),(R19, R23). Далее напряжение уменьшается вдвое делителем R7, R8, после чего поступает на ногу AIN1 внутреннего компаратора микроконтроллера. Переключатель JP1 позволяет переключить опорное напряжение на напряжение "средней точки" формируемое резисторами (R20, R21, R22). Это делалось для экспериментов и себя не оправдало. Если нет в необходимости, JP1, R20, R21, R22 можно исключить из схемы.Датчики Холла
Поскольку регулятор универсальный, он должен принимать сигналы от датчиков Холла в том случае, если используется двигатель с датчиками. Предполагается, что датчики Холла дискретные, тип SS41. Допускается применение и других типов датчиков с дискретным выходом. Сигналы от трех датчиков поступают через резисторы R11, R12, R13 на переключатели JP4, JP5, JP6. Резисторы R16, R15, R14 выступают в качестве подтягивающих резисторов. C7, С8, С9 - фильтрующие конденсаторы. Переключателями JP4, JP5, JP6 выбирается тип обратной связи с двигателем. Кроме изменения положения переключателей в программных настройках регулятора следует указать соответствующий тип двигателя (Sensorless или Sensored).Измерения аналоговых сигналов
На вход ADC5(PC5) через делитель R5, R6 подается напряжения питания двигателя. Это напряжение контролируется микроконтроллером.На вход ADC3(PC3) поступает аналоговый сигнал от датчика тока. Датчик тока ACS756SA. Это датчик тока на основе эффекта Холла. Преимущество этого датчика в том, что он не использует шунт, а значит, имеет внутреннее сопротивление близкое к нулю, поэтому на нем не происходит тепловыделения. Кроме того, выход датчика аналоговый в пределах 5В, поэтому без каких-либо преобразований подается на вход АЦП микроконтроллера, что упрощает схему. Если потребуется датчик с большим диапазоном измерения тока, Вы просто заменяете существующий датчик новым, абсолютно не изменяя схему.
Если Вам хочется использовать шунт с последующей схемой усиления, согласования - пожалуйста.
Задающие сигналы
Сигнал, задающий обороты двигателя, с потенциометра RV1 поступает на вход ADC4(PC4). Обратите внимание на резистор R9 - он шунтирует сигнал в случае обрыва провода к потенциометру.Кроме того, есть вход RC сигнала, который повсеместно используется в дистанционно управляемых моделях. Выбор управляющего входа и его калибровка выполняется в программных настройках регулятора.
UART интерфейс
Сигналы TX, RX используются для настройки регулятора и выдачи информации о состоянии регулятора - обороты двигателя, ток, напряжение питания и т.п. Для настройки регулятора его можно подключить к USB порту компьютера, используя FT232 переходник. Настройка выполняется через любую программу терминала. Например: Hyperterminal или Putty.Прочее
Также имеются контакты реверса - вывод микроконтроллера PD3. Если замкнуть эти контакты перед стартом двигателя, двигатель будет вращаться в обратном направлении.Светодиод, сигнализирующий о состоянии регулятора, подключен к выводу PD4.
Силовая часть
Драйвера ключей использовались IR2101. У этого драйвера одно преимущество - низкая цена. Для слаботочных систем подойдет, для мощных ключей IR2101 будет слабоват. Один драйвер управляет двумя "N" канальными MOSFET транзисторами (верхним и нижним). Нам понадобиться три таких микросхемы.Ключи нужно выбирать в зависимости от максимального тока и напряжения питания двигателя (выбору ключей и драйверов будет посвящена отдельная статья). На схеме обозначены IR540, в реальности использовались K3069. K3069 рассчитаны на напряжение 60В и ток 75А. Это явный перебор, но мне они достались даром в большом количестве (желаю и Вам такого счастья).
Конденсатор С19 включается параллельно питающей батареи. Чем больше его емкость - тем лучше. Этот конденсатор защищает батарею от бросков тока и ключи от значительной просадки напряжения. При отсутствии этого конденсатора Вам обеспечены как минимум проблемы с ключами. Если подключать батарею сразу к VD - может проскакивать искра. Искрогасящий резистор R32 используется в момент подключения к питающей батарее. Сразу подключаем "-" батареи, затем подаем "+" на контакт Antispark. Ток течет через резистор и плавно заряжает конденсатор С19. Через несколько секунд, подключаем контакт батареи к VD. При питании 12В можно Antispark не делать.
Возможности прошивки
- возможность управлять двигателями с датчиками и без;
- для бездатчикового двигателя три вида старта: без определения первоначального положения; с определением первоначального положения; комбинированный;
- настройка угла опережения фазы для бездатчикового двигателя с шагом 1 градус;
- возможность использовать один из двух задающих входов: 1-аналоговый, 2-RC;
- калибровка входных сигналов;
- реверс двигателя;
- настройка регулятора по порту UART и получение данных от регулятора во время работы (обороты, ток, напряжение батареи);
- частота ШИМ 16, 32 КГц.
- настройка уровня ШИМ сигнала для старта двигателя;
- контроль напряжения батарей. Два порога: ограничение и отсечка. При снижении напряжения батареи до порога ограничения обороты двигателя понижаются. При снижении ниже порога отсечки происходит полная остановка;
- контроль тока двигателя. Два порога: ограничение и отсечка;
- настраиваемый демпфер задающего сигнала;
- настройка Dead time для ключей
Работа регулятора
Включение
Напряжение питания регулятора и двигателя раздельное, поэтому может возникнуть вопрос: в какой последовательности подавать напряжение. Я рекомендую подавать напряжение на схему регулятора. А затем подключать напряжение питания двигателя. Хотя при другой последовательности проблем не возникало. Соответственно, при одновременной подаче напряжения также проблем не возникало.После включения двигатель издает 1 короткий сигнал (если звук не отключен), включается и постоянно светится светодиод. Регулятор готов к работе.
Для запуска двигателя следует увеличивать величину задающего сигнала. В случае использования задающего потенциометра, запуск двигателя начнется при достижении задающего напряжения уровня примерно 0.14 В. При необходимости можно выполнить калибровку входного сигнала, что позволяет использовать раные диапазоны управляющих напряжений. По умолчанию настроен демпфер задающего сигнала. При резком скачке задающего сигнала обороты двигателя будут расти плавно. Демпфер имеет несимметричную характеристику. Сброс оборотов происходит без задержки. При необходимости демпфер можно настроить или вовсе отключить.
Запуск
Запуск бездатчикового двигателя выполняется с установленным в настройках уровнем стартового напряжения. В момент старта положение ручки газа роли значения не имеет. При неудачной попытке старта попытка запуска повторяется, пока двигатель не начнет нормально вращаться. Если двигатель не может запуститься в течение 2-3 секунд попытки следует прекратить, убрать газ и перейти к настройке регулятора.При опрокидывании двигателя или механическом заклинивании ротора срабатывает защита, и регулятор пытается перезапустить двигатель.
Запуск двигателя с датчиками Холла также выполняется с применением настроек для старта двигателя. Т.е. если для запуска двигателя с датчиками дать полный газ, то регулятор подаст напряжение, которое указано в настройках для старта. И только после того, как двигатель начнет вращаться, будет подано полное напряжение. Это несколько нестандартно для двигателя с датчиками, поскольку такие двигатели в основном применяются как тяговые, а в данном случае достичь максимального крутящего момента на старте, возможно, будет сложно. Тем не менее, в данном регуляторе присутствует такая особенность, которая защищает двигатель и регулятор от выхода со строя при механическом заклинивании двигателя.
Во время работы регулятор выдает данные об оборотах двигателя, токе, напряжении батарей через порт UART в формате:
E:минимальное напряжение батареи: максимальное напряжение батареи: максимальный ток: обороты двигателя (об/мин)
A:текущее напряжение батареи: текущий ток: текущие обороты двигателя (об/мин)
Данные выдаются с периодичностью примерно 1 секунда. Скорость передачи по порту 9600.
Настройка регулятора
Для настройки регулятора его следует подключить к компьютеру с помощью USB-UART переходника. Скорость передачи по порту 9600.Переход регулятора в режим настройки происходит при включении регулятора, когда задающий сигнал потенциометра больше нуля. Т.е. Для перевода регулятора в режим настройки следует повернуть ручку задающего потенциометра, после чего включить регулятор. В терминале появится приглашение в виде символа ">". После чего можно вводить команды.
Регулятор воспринимает следующие команды (в разных версиях прошивки набор настроек и команд может отличаться):
h - вывод списка команд; ? - вывод настроек; c - калибровка задающего сигнала; d - сброс настроек к заводским настройкам.
команда "?" выводит в терминал список всех доступных настроек и их значение. Например:
motor.type=0 motor.magnets=12 motor.angle=7 motor.start.type=0 motor.start.time=10 pwm=32 pwm.start=15 pwm.min=10 voltage.limit=128 voltage.cutoff=120 current.limit=200 current.cutoff=250 system.sound=1 system.input=0 system.damper=10 system.deadtime=1Изменить нужную настройку можно командой следующего формата:
<настройка>=<значение>
Например:
pwm.start=15
Если команда была дана корректно, настройка будет применена и сохранена. Проверить текущие настройки после их изменения можно командой "?".
Измерения аналоговых сигналов (напряжение, ток) выполняются с помощью АЦП микроконтроллера. АЦП работает в 8-ми битном режиме. Точность измерения занижена намеренно для обеспечения приемлемой скорости преобразования аналогового сигнала. Соответственно, все аналоговые величины регулятор выдает в виде 8-ми битного числа, т.е. от 0 до 255.
Назначение настроек:
Список настроек, их описание:
Параметр | Описание | Значение |
---|---|---|
motor.type | Тип мотора | 0-Sensorless; 1-Sensored |
motor.magnets | Кол.во магнитов в роторе двигателя. Изпользуется только для расчета оборотов двигателя. | 0..255, шт. |
motor.angle | Угол опережения фазы. Используется только для Sensorless двигателей. | 0..30, градусов |
motor.start.type | Тип старта. Используется только для Sensorless двигателей. | 0-без определения положения ротора; 1-с определением положения ротора; 2-комбинированный; |
motor.start.time | Время старта. | 0..255, мс |
pwm | Частота PWM | 16, 32, КГц |
pwm.start | Значение PWM (%) для старта двигателя. | 0..50 % |
pwm.min | Значение минимального значения PWM (%), при котором двигатель вращается. | 0..30 % |
voltage.limit | Напряжение батареи, при котором следует ограничивать мощность, подаваемую на двигатель. Указывается в показаниях ADC. | 0..255* |
voltage.cutoff | Напряжение батареи, при котором следует выключать двигатель. Указывается в показаниях ADC. | 0..255* |
current.limit | Ток, при котором следует ограничивать мощность, подаваемую на двигатель. Указывается в показаниях ADC. | 0..255** |
current.cutoff | Ток, при котором следует выключать двигатель. Указывается в показаниях ADC. | 0..255** |
system.sound | Включить/выключить звуковой сигнал, издаваемый двигателем | 0-выключен; 1-включен; |
system.input | Задающий сигнал | 0-потенциометр; 1-RC сигнал; |
system.damper | Демпфирование входного сигнала | 0..255, условные единицы |
system.deadtime | Значение Dead Time для ключей в микросекундах | 0..2, мкс |
** - числовое значение 8-ми битного аналого цифрового преобразователя. Рассчитывается по формуле: ADC = U*255/5 Где: U - напряжение датчика тока в Вольтах, соответствующее требуемому току.
Скачать архив со схемой и прошивкой
Скачать примеры исходного кода на С
Фьюзы микроконтроллера должны быть выставлены на работу с внешним кварцем. Строка для программирования фьюзов с помощью AVRDUDE:
-U lfuse:w:0xFF:m -U hfuse:w:0xDC:m
P.S. Данная схема получила дальнейшее развитие. Был добавлен внешний компаратор, который позволил избавиться от необходимости переключать аналоговую часть микроконтроллера из режима ADC в режим компаратора и обратно (в Atmega одновременно компаратор и ADC работать не могут). Что в свою очередь позволило несколько ускорить измерение аналоговых сигналов. Кроме того, внешний компаратор стал генерировать аварийный сигнал при превышении предельного значения тока. Что существенно увеличило защищенность регулятора в нештатных ситуациях. Вместе с тем осталась универсальность, позволяющая использовать широкий выбор драйверов, в том числе и специальных для 3-х фазных двигателей. О силовой части будет рассказано в одной из следующих статей.
Успехов!
Статті по безколекторним двигунам:
- Бесколлекторный мотор постоянного тока. Что это такое?
- Устройство бесколлекторного мотора
- Управление бесколлекторным мотором с датчиками Холла (Sensored brushless motors)
- Управление бесколлекторными моторами без бездатчиков (Sensorless BLDC)
- Запуск бесколлекторного мотора без бездатчиков (Sensorless BLDC)
- Определение положения ротора бесколлекторного мотора в остановленном состоянии
- Регулятор бесколлекторного мотора. Структура (ESC)
- Схема регулятора бесколлекторного мотора (Схема ESC)
- Силова частина регулятора BLDC двигунів
- Література по безколекторним двигунам.
- Безколекторні двигуни. Приклади програм для мікроконтролера
- Схема регулятора BLDC на STM32
- STM32. Приклад. Керування безколекторним двигуном (BLDC)
- STM32. Приклад. Керування PMSM. Приклади програм
- Видео о бесколлекторных моторах. BLDC, PMSM, векторное управление (російською)
Хотелось бы взглянуть на исходник, если из этого здесь не делают коммерческой тайны.
Исходники, будут опубликованы как только это станет возможным. Исходный код будет несколько упрощен (будут удалены специфические функции) и будут добавлены пояснения.
Надеюсь долго ждать не придется.
Могу подбросить идею как упростить схему и исключить микросхемы U2, U3
Буду рад услышать оригинальные идеи.
Сигнал ШИМ с вывода 9 можно завести в МК и организовать программный мультиплексор вместо U2, U3. У меня реализован такой вариант, но для другого МК.
И у меня есть такой вариант и тоже на другом микроконтроллере. Мало того, в следующем варианте схемы я отказался от внутренних компараторов, и установил еще одну внешнюю микросхему. И сделал это не просто так, а для чего-то ;)
Что за даты? Опубликовано одиннадцатого апреля 2014 года?? А даты комментариев??
А что не так с датами? Опубликовано 11.04.2014, комментарии с 18.04.2014 В чем вопрос?
Правильно ли я понимаю, что если использовать метод определения положения ротора в остановленном состоянии (описанный ранее) то в этом случае поведение двигателя становится абсолютно аналогичным BLDC с датчиками? Или этот метод не позволит получить все преимущества двигателя с датчиками?
Нет. Описанный ранее метод работает только на стадии запуска двигателя. Использовать его во время вращения двигателя нельзя. В природе существуют схемотехнические решения, позволяющее не использовать датчики холла. Идея состоит в том, чтобы подавать в цепь двигателя высокочастотную составляющую. Отфильтровывать ее и далее по алгоритму очень похожему на тот о котором я писал, определять положение двигателя. В этом случае двигатель управляется так же как и BLDC с датчиками. Но я такими вещами еще не занимался.
Спасибо за ответ. Было бы здорово к вашей схеме и системе управления приделать управление синусом, как это сделано в апноуте от Atmel AVR447
Синусоидой, на сколько я знаю, управляют синхронными моторами с постоянными магнитами. Они очень схожи с BLDC, но пока в планах заниматься ими нет.
Спасибо. Тоже пробую разобраться с bldc с датчиками холла -3000 оборотов 60 вольт, правда делаю на pic18, но это не так важно- мотор крутится как по часовой так и против но иногда происходят не понятные сбои( стуки , или резко тормозит и вновь стартует) может работать минуту без сбоев а потом сбойнуть иногда чаще. Из за чего могут происходить подобные сбои?
Сегодня сравнил алгоритм работы ключей от датчиков холла MC33035(для проекта брал из ДШ MC33035) С микрочиповским AN857 разница очевидна. завтра на работе попробую перешить таблицу может быть глюки пропадут .
Приветствую Андрей! Есть ли какой нибудь цветовой стандарт обозначения фазных проводов(A B C) и датчиков холла. Цвета фазных проводов ЗЕЛЕНЫЙ СИНИЙ ЖЕЛТЫЙ , холлов ЗЕЛЕНЫЙ СИНИЙ ЖЕЛТЫЙ - как они соотносятся с ABC ??? Спасибо.
Здравствуйте, какой регулятор скорости использовался?
В статье есть ссылки на схему регулятора. Читайте внимательнее. Регулятор использовался тот про который и написана статья.
Подскажите как работает вход RC-сигнал какой формат, делаю настройку system.input =1 регулятор не воспринимает не чего и попасть в режим программирования не реально резистор отключаеться
Ау есть кто
Ау есть кто
Сделал сей девайс шим подал на верхние ключи, прошивка из архива Brushless_ESC.hex двигатель дергаеться рывками или стоит с мелкими тычками, средняя фаза моментально греется, может поменять шим на нижнее ключи, хотя прошивка Brushless_new.hex работает хорошо только с RC сигналом не могу разобраться что на вход подовать
Всем привет! А я только собрался собрать сей девайс, Хочу сделать лодочный электромотор, 48v. 5kw моторчик, Внимательно изучая и перечитывая описание возникло 2 вопроса:
Какое напряжение должно быть после делителя r5/r6, r7/r8 ? в описании говорится про половину напряжения питания двигателя, но при указанных номиналах резисторов и U=12в получается 3,428 в,
И второе на какую ногу подается это опорное напряжение? в тексте упоминается (вход AIN1) 11пин, а на схеме нарисовано 10 пин (вход AIN0) ? Подскажите друзья что бы я время не тратил на эксперименты, спс )
Не пойму почему в исходнике ШИМ настроен как PWM, phase Correct OCRA , вроде должно быть Fast PWM 0xFF , и зачем в цепи VB два bootstrap capacitor , мне кажется одного на 1 мкф хватит .
Стосовно PWM, не зрозумів про який саме приклад йдеться. Їх було декілька і досить давно, понад 6 років тому. Я вже старенький і забуваю що було на минулому тижні. Дайте посилання про який саме код йде мова і де Ви його звантажити. Стосовно конденсаторів. Якщо здається, що 1 мкф вистачить – ставте 1 мкф. Якщо не вистачить – потім можна додати ;) Я ж не знаю у якому режимі і буде використовуватися плата.
В проэкте GCC 3.4.6 для мікроконтролера Atmega168 BLDC_Sensored_Example думаю таймер лучше настроить Fast PWM 0xFF , (1 << COM0B1)|(1<<WGM01)|(1<<WGM00); И еще вы пишите что ШИМ можно подавать на ключи (на верхние, нижние или на все ключи) , но драйвер верхнего ключа работает исключительно в импульсном режиме , так что ШИМ только на нижние не получится
Недавні записи
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
- DC-DC для IGBT драйверів ізольований 2 W +15 -8 вольт
Tags
battery soldering java-script ngnix adc rs-232 flask esp8266 watchdog web exti solar mongodb rtc sms pwm usart books ethernet smd git websocket meteo css python dc-dc displays led ssd1306 eeprom gpio barometer max1674 mpx4115a brushless motor mpu-6050 timer sensors remap servo bldc atmega pmsm 3d-printer flash encoder examples dma raspberry-pi tim ssd1331 piezo mpu-9250 rfid eb-500 foc bme280 gps nvic dht11 bluetooth hih-4000 stm32 st-link docker uart avr html wifi bmp280 bkp nodemcu options usb lcd programmator i2c capture
Архіви