- Схема регулятора скорости бесколлекторного двигателя (ESC)
- Схема регулятора
- Питание
- ШИМ и сигналы для ключей
- Обратная связь (контроль напряжения фаз двигателя)
- Датчики Холла
- Измерения аналоговых сигналов
- Задающие сигналы
- UART интерфейс
- Прочее
- Силовая часть
- Возможности прошивки
- Работа регулятора
- Включение
- Запуск
- Настройка регулятора
- Электробайк. Контроллер двигателя своими руками
- Применение
- Устройство двигателя
- Цикл работы
- Транзисторы и Н-мост
- Прототип на Ардуино
- Мостовые драйверы
- Аппаратное прерывание
- Прототип на базе микросхемы MC33035
- Планы на будущее контроллера
Схема регулятора скорости бесколлекторного двигателя (ESC)
Схема условно разделена на две части: левая — микроконтроллер с логикой, правая — силовая часть. Силовую часть можно модифицировать для работы с двигателями другой мощности или с другим питающим напряжением.
Контроллер — ATMEGA168. Гурманы могут сказать, что хватило бы и ATMEGA88, а AT90PWM3 — это было бы «вааще по феншую». Первый регулятор я как раз делал «по феншую». Если у Вас есть возможность применять AT90PWM3 — это будет наиболее подходящий выбор. Но для моих задумок решительно не хватало 8 килобайт памяти. Поэтому я применил микроконтроллер ATMEGA168.
Эта схема задумывалась как испытательный стенд. На котором предполагалось создать универсальный настраиваемый регулятор для работы с различными «калибрами» бесколлекторных двигателей: как с датчиками, так и без датчиков положения. В этой статье я опишу схему и принцип работы прошивки регулятора для управления бесколлекторными двигателями с датчиками Холла и без датчиков.
Схема регулятора
Питание
ШИМ и сигналы для ключей
Обратная связь (контроль напряжения фаз двигателя)
Датчики Холла
Измерения аналоговых сигналов
На вход ADC3(PC3) поступает аналоговый сигнал от датчика тока. Датчик тока ACS756SA. Это датчик тока на основе эффекта Холла. Преимущество этого датчика в том, что он не использует шунт, а значит, имеет внутреннее сопротивление близкое к нулю, поэтому на нем не происходит тепловыделения. Кроме того, выход датчика аналоговый в пределах 5В, поэтому без каких-либо преобразований подается на вход АЦП микроконтроллера, что упрощает схему. Если потребуется датчик с большим диапазоном измерения тока, Вы просто заменяете существующий датчик новым, абсолютно не изменяя схему.
Если Вам хочется использовать шунт с последующей схемой усиления, согласования — пожалуйста.
Задающие сигналы
Кроме того, есть вход RC сигнала, который повсеместно используется в дистанционно управляемых моделях. Выбор управляющего входа и его калибровка выполняется в программных настройках регулятора.
UART интерфейс
Прочее
Светодиод, сигнализирующий о состоянии регулятора, подключен к выводу PD4.
Силовая часть
Ключи нужно выбирать в зависимости от максимального тока и напряжения питания двигателя (выбору ключей и драйверов будет посвящена отдельная статья). На схеме обозначены 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 В. При необходимости можно выполнить калибровку входного сигнала, что позволяет использовать раные диапазоны управляющих напряжений. По умолчанию настроен демпфер задающего сигнала. При резком скачке задающего сигнала обороты двигателя будут расти плавно. Демпфер имеет несимметричную характеристику. Сброс оборотов происходит без задержки. При необходимости демпфер можно настроить или вовсе отключить.
Запуск
При опрокидывании двигателя или механическом заклинивании ротора срабатывает защита, и регулятор пытается перезапустить двигатель.
Запуск двигателя с датчиками Холла также выполняется с применением настроек для старта двигателя. Т.е. если для запуска двигателя с датчиками дать полный газ, то регулятор подаст напряжение, которое указано в настройках для старта. И только после того, как двигатель начнет вращаться, будет подано полное напряжение. Это несколько нестандартно для двигателя с датчиками, поскольку такие двигатели в основном применяются как тяговые, а в данном случае достичь максимального крутящего момента на старте, возможно, будет сложно. Тем не менее, в данном регуляторе присутствует такая особенность, которая защищает двигатель и регулятор от выхода со строя при механическом заклинивании двигателя.
Во время работы регулятор выдает данные об оборотах двигателя, токе, напряжении батарей через порт UART в формате:
Данные выдаются с периодичностью примерно 1 секунда. Скорость передачи по порту 9600.
Настройка регулятора
Переход регулятора в режим настройки происходит при включении регулятора, когда задающий сигнал потенциометра больше нуля. Т.е. Для перевода регулятора в режим настройки следует повернуть ручку задающего потенциометра, после чего включить регулятор. В терминале появится приглашение в виде символа «>«. После чего можно вводить команды.
Регулятор воспринимает следующие команды (в разных версиях прошивки набор настроек и команд может отличаться):
h — вывод списка команд; ? — вывод настроек; c — калибровка задающего сигнала; d — сброс настроек к заводским настройкам.
команда «?» выводит в терминал список всех доступных настроек и их значение. Например: Изменить нужную настройку можно командой следующего формата:
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*R6/(R5+R6))*255/5 Где: U — напряжение в Вольтах; R5, R6 — сопротивление резисторов делителя в Омах.
** — числовое значение 8-ми битного аналого цифрового преобразователя. Рассчитывается по формуле: ADC = U*255/5 Где: U — напряжение датчика тока в Вольтах, соответствующее требуемому току.
Фьюзы микроконтроллера должны быть выставлены на работу с внешним кварцем. Строка для программирования фьюзов с помощью AVRDUDE:
-U lfuse:w:0xFF:m -U hfuse:w:0xDC:m
Источник
Электробайк. Контроллер двигателя своими руками
Как вы уже знаете из прошлых постов, у нас в компании есть DIY-движение. В свободное от работы время коллеги занимаются фрезеровкой печатных плат в домашних условиях, делают тепловизор на FLIR Lepton, а также решают семейные разногласия с помощью 4 контроллеров и 2 умных часов. Продолжим серию увлекательный историй! Сегодня я расскажу, как сделать контроллер к трехфазному двигателю электровелосипеда своими руками. Целью создания такого контроллера было:
- Изучение работы трехфазного мотора под управлением контроллера.
- Большинство контроллеров для электровелосипедов, представленных на рынке, — китайские. Они хоть и относительно дешевые (около 2.000 руб в зависимости от мощности), но являются неведомой коробкой, в которой неизвестно что происходит. И сразу к ней возникает очень много вопросов — экономично ли она потребляет и распределяет ток, какой у нее запас мощности, почему так сильно перегревается, преждевременно срабатывает защита по току и т.д.
В тоже время на рынке представлены европейские качественные контроллеры для электробайков. Они оснащаются расширенными функциями, работают на разных напряжениях и токах и их можно программировать. Устанавливаются они на сверхмощные электровелосипеды. Но цена у них кусается — 10-20 тыс. рублей.
В итоге я решил пойти своим путем: разобраться в устройстве контроллера, сделать его прототип, а затем попытаться сделать контроллер качественнее китайского контроллера. На текущий момент проект у меня в разработке только и на уровне прототипа, готового варианта пока нет. Буду рад услышать ваши комментарии и советы.
Применение
В электровелосипедах используются трёхфазные бесщёточные электродвигатели с датчиками Холла. Стоит отметить, что применение подобных трёхфазных двигателей достаточно обширно:
- Бытовая техника
- Оргтехника
- Электротранспорт
- Промышленность
Устройство двигателя
Для разработки контроллера необходимо разобраться с принципом работы самого электродвигателя.
Электродвигатель состоит из фазных обмоток, магнитов и датчиков Холла, отслеживающих положение вала двигателя.
Конструктивно электродвигатели делятся на два типа: инраннеры и аутраннеры.
У инраннеров магнитные пластины крепятся на вал, а обмотки располагаются на барабане (статоре), в этом случае в движение приводится вал. В случае аутраннера всё наоборот: на валу — фазные обмотки, а в барабане — магнитные пластины. Это приводит в движение барабан.
Так как у велосипеда колесо крепится валом на раму, то здесь применителен тип аутраннера.
На этой картинке условно представлены три фазы с обмотками, соединёнными между собой. В реальности обмоток намного больше, они располагаются равномерно с чередованием по фазам по окружности двигателя. Чем больше обмоток — тем плавнее, чётче, эластичнее работает двигатель.
В двигатель устанавливаются три датчика Холла. Датчики реагируют на магнитное поле, тем самым определяя положение ротора относительно статора двигателя. Устанавливаются с интервалами в 60 или 120 электрических градусов. Эти градусы относятся к электрическому фазному обороту двигателя. Необходимо учитывать, что чем больше в двигателе обмоток на каждую фазу, тем больше происходит электрических оборотов за один физический оборот мотор-колеса.
Обмотки трёх фаз в большинстве случаев соединяются между собой по двум схемам: звезда и треугольник. В первом случае ток проходит от одной из фаз к другой, во втором — по всем трём фазам в разной степени. Иногда эти две схемы подключения комбинируют в одном двигателе, например в электромобилях. При старте и наборе скорости идёт соединение фаз по звезде: она даёт больший момент при относительно низких оборотах; далее, после набора скорости, происходит переключение на треугольник, в результате количество оборотов увеличивается, когда уже не нужен большой крутящий момент. По сути, получается условно автоматическая коробка передач электродвигателя.
Цикл работы
Чтобы привести в движение трёхфазный двигатель, нужно рассмотреть цикл его работы за электрический оборот. Итак, имеем три фазы — A, B, C. Каждая из фаз получает положительную и отрицательную полярности в определённый момент времени. Поочерёдно по шагам пропускается ток от «плюса» одной фазы к «минусу» другой фазы. В итоге получается шесть шагов = три фазы × две полярности.
Рассмотрим эти шесть шагов цикла. Предположим, что положение ротора установлено в точке первого шага, тогда с датчиков Холла мы получим код вида 101, где 1 — фаза А, 0 — фаза B, 1 — фаза С. Определив по коду положение вала, нужно подать ток на соответствующие фазы с заданными полярностями. В результате вал проворачивается, датчики считывают код нового положения вала — и т. д.
В таблице указаны коды датчиков и смена комбинаций фаз для большинства электродвигателей. Для обратного хода колеса (реверса) достаточно перевернуть знаки полярности фаз наоборот. Принцип работы двигателя довольно прост.
Цикл двигателя представлен в gif-анимации.
Транзисторы и Н-мост
Но чтобы поочерёдно подавать ток на каждую из фаз и менять их полярность, необходимы транзисторы. Ещё нам нужна передача больших токов, высокая скорость переключения и чёткость открытия/закрытия затворов. В данном случае удобнее управлять затворами по напряжению, а не по току. Поэтому оптимальны полевые (MOSFET) транзисторы. Чаще всего их используют в контроллерах. Очень редко можно встретить комбинированный вариант транзисторов.
Для переключения фаз со сменой их полярностей используют классическую схему Н-моста (H-Bridge) из полевых транзисторов.
Он состоит из трёх пар транзисторов. Каждая из пар подключается к соответствующей фазе обмотки двигателя и обеспечивает подачу тока со значением (+ или –). Транзисторы, отвечающие за включение фазы с положительным значением, называют верхними ключами. С отрицательным — нижними. Для каждого шага открывается пара ключей: верхний одной фазы и нижний соседней фазы. В результате ток проходит от одной фазы к другой и приводит электродвигатель в движение.
Из схемы видно, что мы не можем включить одновременно верхний и нижний ключ у одной и той же фазы: произойдёт короткое замыкание. Поэтому очень важно быстрое переключение верхних и нижних ключей, чтобы в переходных процессах не появилось замыкание. И чем качественнее и быстрее мы обеспечим переключения, тем меньше у нас будет потерь и нагрева/перегрева транзисторов H-моста.
Для запуска остаётся обеспечить управление затворами ключей H-моста. Для управления H-мостом нужно:
- Считать показания датчиков Холла.
- Определить, в каком положении какую пару ключей включать.
- Передать сигналы на соответствующие затворы транзисторов.
Прототип на Ардуино
Под рукой у меня была Arduino UNO, и я решил собрать контроллер на её основе.
Первым делом я подал на датчики Холла питание 5 вольт от Ардуино (его достаточно для датчиков). Сигнальные провода от датчиков подключил на цифровые пины Ардуино, написав простейшую программу для считывания и обработки сигналов с датчиков.
Затем собрал Н-мост из полевых NPN-транзисторов. Подвёл к мосту независимое питание на 12 вольт. Но при отладке, чтоб убедиться в работоспособности, я подключил напрямую шесть пинов 5V из Ардуино на затворы H-моста. У большинства полевых транзисторов затвор работает на 20 вольт. Так делать нельзя, потому что Н-мост будет плохо работать и перегреваться. Но для кратковременных тестов это пойдёт. Кое-как, с сильными перегревами и страшными звуками, вибрациями и толчками колесо медленно закрутилось. Начало положено.
Мостовые драйверы
Далее предстояла работа над напряжением 20 вольт на управление затворами. Для этого существуют мостовые драйверы транзисторов, они обеспечивают стабильные импульсы в 20 вольт на затвор и высокую скорость отклика. Сначала у меня были популярные драйверы для маломощных моторов L293D.
Для управления затворами его достаточно, к тому же их очень просто использовать. Один такой драйвер может обеспечить питанием две пары ключей. Поэтому я взял две штуки L293D. Собрал контроллер с этими драйверами, и колесо начало крутиться существенно плавнее, посторонних звуков стало меньше, нагрев транзисторов уменьшился. Но при увеличении оборотов синхронизация с контроллером пропадала, появлялся посторонний звук, колесо дёргалось, вибрировало и полностью останавливалось.
В это же время я наткнулся на два варианта мостовых драйверов:
- HIP4086
- IR2101
Что касается HIP4086, то это полноценный мостовой драйвер, предназначенный для трёхфазного электродвигателя. Мне он показался несколько замороченным, и мои попытки использовать его в контроллере не увенчались успехом: он у меня так и не заработал. Углублённо разбираться в причинах не стал.
А взял я IR2101 — полумостовой драйвер, обеспечивающий работу нижнего и верхнего ключей для одной фазы. Несложно догадаться, что таких драйверов нужно три. К слову, драйвер очень прост в использовании, его подключение происходит безболезненно и легко. Получилась такая схема:
И готовый результат
Собрал контроллер с этим драйвером и запустил двигатель. Ситуация с работой электродвигателя кардинально не поменялась, симптомы остались те же, как и в случае с драйвером L293D.
Аппаратное прерывание
И тут я понял, в чём дело: Ардуино не успевает обрабатывать показания датчиков Холла! Поэтому необходимо было использовать пины Ардуино с аппаратным прерыванием. Так как у Ардуино УНО таких пинов всего два, а под датчики нужно три пина, надо взять Ардуино Леонардо или Искра Нео, где таких пинов — четыре штуки.
Переписав программу под прерывания и подключив Искру Нео вместо УНО, я повторил испытания.
Колесо наконец-то заработало чётко, без вибраций, шумов, отлично стало набирать обороты без рассинхронизации. Прототип оказался жизнеспособным. Но это ещё не полноценный контроллер, поскольку в нём не было обвязки с защитами и обеспечением качественного ШИМ-сигнала.
Прототип на базе микросхемы MC33035
Параллельно с разработкой контроллера на Ардуино я рассматривал альтернативные варианты логической части контроллера. И это привело меня к микросхеме MC33035. Это старая разработка от Motorola, сейчас её выпускает ON Semiconductor. Создана специально для мощных трёхфазных двигателей.
- Отвечает за всю логическую часть контроллера
- Считывает показания с датчиков Холла
- Определяет положения вала
- Выдаёт сигналы для затворов Н-моста на их драйверы
- Имеет возможность подключения индикатора ошибок, перегрева
- Обрабатывает и передает ШИМ-сигнал (PWM)
- Осуществляет реверс (обратный ход колеса)
Одним словом, микросхема содержит всё необходимое для управления электродвигателем. Её стоимость очень низкая: на Алиэкспрессе — около 50 рублей. Для сборки полноценного контроллера на её основе потребуется микросхема MC33035, полумостовые драйверы и Н-мост из полевых транзисторов. Я также собрал контроллер на этой микросхеме. Работает отлично, стабильно, колесо крутится как надо на различных оборотах. Но функционал микросхемы ограничен, если необходимо наворотить различные функции, вывод на дисплей скорости, одометр, расход батареи, то опять же возникает необходимость дополнительно подключить Ардуино или что-то аналогичное.
Схема с MC33035
Главное преимущество контроллера на базе MC33035 — это простота в использовании. Просто покупаете микросхему, собираете Н-мост, спаиваете всё на плату с небольшой обвязкой — и контроллер готов. Если нужно просто запустить двигатель с ШИМ-сигналом и управлять им — оптимальный вариант.
Контроллер на базе Ардуино — вариант сложнее, понадобится писать логику, обеспечивать дополнительные защиты контроллера. Но для экспериментов, прототипов, дополнительного функционала, использования различных режимов работы двигателя — подходящий вариант. Поэтому я решил пока отложить MC33035 и продолжить работу с Ардуино.
Планы на будущее контроллера
Продолжая работу над контроллером, планирую сделать следующее:
- IGBT-транзисторы для H-моста вместо полевых транзисторов.
- Обвязку с защитами по току, перегреву и т. п.
- Полноценный круиз-контроль с возможностью выставлять необходимую скорость движения.
- Расходомер. Когда задаётся необходимое расстояние, а контроллер, исходя из этого значения и заряда аккумулятора, дозирует разряд аккумулятора на всём протяжении маршрута так, чтобы зарядки хватило.
Источник