• ap1225

Собираем сервопривод на BLDC под Mach 3. (Assembling a servo on BLDC for Mach 3)

Ссылка на видео на YouTube https://www.youtube.com/watch?v=gRGOAKG3-xc


Материалы для скачивания https://drive.google.com/open?id=1vDNe7v3wYZje3EMbLtHv24kfpGZmkDoN


Сегодня запускаем двигатель BLDC (Brush Less Direct Current). Переводится аббревиатура, как «Без щеток, постоянного тока». Поскольку BLDC не способен сам по себе работать в шаговом режиме, а просто покрутить вал не так интересно, мы сделаем простой, но полноценный сервопривод. Данный сервопривод протестируем в режиме контура скорости, также запустим его в режиме контура положения, посмотрим на режим удержание положения, а также подключим наш сервопривод к Mach 3 и посмотрим, как он будет работать Mach 3.

В качестве контроллера возьмем Arduino DUE. Предвижу шквал критики в свой адрес по поводу контроллера, но цель данного видео не сделать промышленный вариант сервопривода, а показать принцип работы двигателя BLDC и принцип построения сервопривода. Для этих целей, на наш взгляд нужно использовать наиболее простое наглядное решение. Поэтому DUE. Также для критиков сразу отмечу, что мы не делаем сервоприводов на arduino. В данном видео мы сделаем анализ почему обычные контролеры не подходят для построения промышленных приводов и каким требованиям должен удовлетворять контроллер, для построения промышленного привода.

Прототип промышленного сервопривода мы разберем в третьем видео, в котором будет запускать двигатель PMSM. Как учили в учебном заведении, прежде чем что-то сделать, нужно провести обзор литературы. Мы поступим примерно таким же способом. Вскроем сервопривод Leadshine, сервопривод Hiwin и частотник Delta и посмотрим какие контроллеры установлены в промышленных приводах. Забегая вперед, скажу, что это будут не Atmel не PIC и не STM. PMSM мы будем запускать на таком же контроллере, который установлен в сервоприводах Hiwin серии D2.

Итак поехали.

Что нам потребуется для сборки серводрайвера и его тестирования:

1. Сам двигатель. Это будет двигатель от сервопривода Leadshine – ACM 604. Мощностью 400 Вт. Благодаря наличию датчиков холла, мы сможем его запустить в режиме BLDC. Также данный двигатель содержит инкрементный энкодер с количество рисок 2500. Выход инкрементного энкодера – это квадратурный дифференциальный сигнал A B и индексной меткой Z в соответствии со стандартом RS-422. Сигналы с датчиков Холла – U V W также дифференциальные. Дифференциальные сигналы являются более помехозащищенными по сравнению с обычными TTL и передаются по витым парам. Силовая часть запитывается на три фазы. По энкодеру мы будем отслеживать положение вала двигателя, по датчикам холла будет определяться положение постоянных магнитов относительно обмоток статора.

2. Драйвер бесколлекторных двигателей. Будем использовать DRV8323 от Texas Instruments. Этот драйвер с обвязкой распаян вот на такой платке. Цена платы в магазине TI 79$. Тянет эта платка 15 ампер в длительном режиме на напряжении до 54В, а это целых 810 Вт, так, что на наш двигатель с двукратным запасом хватит. Mosfet-ы от TI поражают, вот эти чипы тянут 15 ампер без каких-либо радиаторов. Конфигурируется драйвер по шине SPI. Драйвер имеет встроенный управляемый преобразователь напряжения и сконфигурирован на данной плате на 3,3В с током до 650 mA. Питается этот преобразователь от напряжения питания двигателя. Силовое питание драйвера и двигателя подключается вот к этим клеммам, к этим клеммам подключаются силовые обмотки двигателя. Особенностью данного драйвера, является, то, что он может работать в режиме PWMx1. Это как раз тот режим, что нам нужен, плюс ко всему драйвер имеет встроенную логическую таблицу на переключение Mosfet-ов в зависимости от положения ротора двигателя, т.е. от сигналов с датчиков холла. Причем делает это на аппаратном уровне, а не на уровне контроллера в цикле, съедая и без того драгоценные вычислительные ресурсы контроллера.

3. Далее нам потребуется Arduino DUE. Один из самых быстрых контроллеров в семействе ардуино. Одной из самых важных характеристик сервопривода – это время серво цикла, т.е. время за которое контроллер получил данные обработал их и выдал управляющее воздействие. Чем меньше данное время, тем лучше регулирование и тем более качественным считается сервопривод. Поэтому берем контроллер побыстрее.

4. Для подсчета импульсов квадратурного энкодера нам нужен счетчик. Имея максимальную скорость двигателя по каталогу 4500 об/мин и разрешение энкодера в 2500 рисок нам нужно считать импульсы с частотой 4500/60*2500*4 = 750 кГц. (а если бы количество рисок было 5000, то мы бы получили все 1,5 МГц.). Понятно, что обычный контроллер не сможет считать импульсы с такой скоростью. Для этих целей возьмём аппаратный счетчик для квадратурных сигналов. Микросхемка называется IC-MD. Имеет разрядность счетчика до 48 бит и может считать импульсы с частотой до 40 МГц. Данная микросхема на вход может принимать сразу дифференциальный сигнал, чем мы и воспользуемся. Получать данные с квадратурного счетчика наша Arduino будет по SPI.

5. Далее нам потребуется высокоскоростной квадратурный дифференциальный линейный ресивер AM26LV32. Работает на частоте 32 МГц, напряжение питания 3,3 В. Дело в том, что драйвер DRV8323 принимает на вход датчиков холла сигналы TTL, а как мы помним с двигателя у нас идут дифференциальные сигналы RS-422. Квадратурный ресивер будет принимать на вход дифференциальный сигнал, а выдавать TTL, по сути, выполнять функцию преобразования сигналов.

6. Поскольку мы задались целью также подключить наш сервопривод к Mach 3 и поуправлять приводом с его помощью, нам потребуется любой контроллер для Mach 3. Я буду использовать самый простой USB контроллер, который на выходе эмулирует обычный 25 пиновый LPT порт. С данного порта мы заберем два сигнала. Первый сигнал – это Step. Он у нас будет на втором пине. И второй сигнал – это DIR он у нас будет на 6-м пине. И не забываем землю. Максимальная частота импульсов Step с данного контроллера 100 кГц. Не очень много, но для теста нам хватит. Для того чтобы раскрутить наш двигатель на максимальные обороты, нам необходимо 750 кГц. При коэффициенте делителя 1 к 1. Например в своих станках мы используем, в том, числе контроллер SmoothStepper, который способен выдавать сигнал Step с частотой до 4 МГц.

7. Далее нам потребуется еще один счетчик, который будет считать импульсы Step/Dir. Для этих целей возьмем микросхемку LS7366 – это 32 битный квадратурный счетчик, способный считать импульсы с частотами до 20 или 40 МГц, в зависимости от питающего напряжения. Данная микросхема в отличии от IC-MD требует некоторой обвязки, поэтому воспользуемся готовым модулем от SuperDroidRobotics. Данная микросхема умеет сразу считать Step/Dir, хотя если немного подумать, то эту же функцию можно осуществить и на микросхеме IC-MD. Наш контролер также будет получает значение счетчика по SPI.

8. Из необходимого нам еще потребуется три светодиода, кнопка, два сопротивления 1,2 кОм, три сопротивления 500 ом. Два сопротивления 4,7 кОм.

Теперь изобразим блочную схему нашего серводрайвера.

(Схема доступна по ссылке ниже)

Электрическая схема серводрайвера, а также схемы на все модули и даташиты будут доступны по ссылке под видео.

Переходим к сборке нашего серводрайвера

Собирать будем по этапам.

На первом этапе

Подключим дифференциальный приемник к датчикам холла и включим светодиоды через сопротивления 500 Ом на выходы дифф. приемника, чтобы видеть визуально, как будут срабатывать датчики холла.

Для подключения энкодера двигателя к макетной плате я сделал вот такую распайку. Здесь, две группы. Первая группа это квадратурный энкодер, вторая группа, это датчики холла.

Питать цифровую часть нашего серводрайвера будет 3,3 вольтами от преобразователя, который встроен в драйвер DRV8232.

Сам драйвер будем питать от лабораторного блока питания напряжением 42В.

Включаем питание. Медленно проворачивая вручную вал двигателя, можно видеть, как срабатывают датчики холла. Три датчика имеют всего 6-ть логических положения, положения в котором все датчики включены или выключены логически исключены. Можно видеть, что за один полный оборот вала двигателя датчики проходят 4-е полных цикла, что свидетельствует о том, что в двигателе 4-е пары полюсов.

На втором этапе

Подключим наш квадратурный счетчик и Arduino. Терминальные резисторы устанавливать не будем ввиду того, что длина дифференциальной линии мала. Сконфигурируем счетчик энкодера по SPI на разрядность счета в 32 бит. Исходный код для Arduino я также выложу под видео. Будем в бесконечном цикле с периодичностью в 1 секунду считывать показания счетчика и выводить их в консоль. Посмотрим, как это работает. Можно видеть, что примерно один полный оборот вала двигателя соответствует 10000 импульсов. У данного счётчика есть особенность, первые два импульса индексной метки он сбрасывается, таким образом он калибрует количество импульсов между Z метсками.

На третьем этапе

Подключим драйвер мотора. Датчики холла подключим к контактам на боковых пинах. У драйвера есть отдельные пины для подключения датчиков холла, но они не подключены на самой плате. Посмотрим на схему. Если есть желание подключить датчики холла именно к этим пинам нужно будет вооружившись паяльником впаять сюда перемычки. Сигнал ШИМ будем брать с 9 пина Arduino. Также нужно не забыть про Enable. В отличии от драйвера шагового мотора DRV8711, который мы запускали в первом видео, у нашего драйвера DRV8323 SPI не будет работать, если не подан сигнал Enable. Также подключим кнопку, она будет задавать направление.

Конфигурируем драйвер на режим PWMx1. Зададим некоторое значение ШИМ. ШИМ будем задавать с разрядностью 12 бит. С периодичностью в 1 секунду будем выводить значение счетчика энкодера в консоль. Прошиваем ардуино и видим, как двигатель начал вращаться. Кнопка меняет направление вращения мотора.

Важным моментом при запуске BLDC мотора, является соблюдение правильного подключения фаз двигателя и чередования датчиков холла. Правильное подключение также можно найти опытным путем. Подключаем фазы двигателя произвольным образом, а конфигурацию датчиков холла подбираем опытным путем. Ток при этом, который задается ШИМ сигналом, желательно установить как можно меньше, ну это так, чтобы двигатель не скакал как сумасшедший. Всего конфигураций подключения датчиков холла 6 их можно просто перебрать. Положение, в котором двигатель вращается с самым минимальным заданным током и не имеет мертвых зон (т.е. положений ротора в которых мотор останавливается) и является правильным.

Одним из недостатков режима BLDC от PMSM, является, то, что поле статора изменяет направление дискретно, что вызывает скачкообразное изменение момента двигателя, а также сопровождается незначительной вибрацией при работе двигателя. Да этот эффект несколько нивелирован увеличением количества пар полюсов двигателя, но он все равно присутствует. Попробуем увидеть этот эффект. Для этого заставим вращаться мотор максимально медленно. Можно видеть, как при переключении датчиков холла происходит скачкообразное изменение скорости вращения двигателя.

Мотор запустили

Теперь немного теории, что такое сервопривод и почему его основная настройка – это коэффициенты ПИД регулятора.

(рисуем схему)

Возможно, Вы знаете, что сервопривод может работать в трех режимах:

1. Режим поддержания заданного момента на валу.

2. Режим поддержания заданной скорости.

3. Режим следования заданного положения.

Давайте разберемся как это достигается. Каждый из этих режимов реализуется так называемым контуром регулирования, контур регулирования момента, скорости и положения.

Рассмотрим на примере контура регулирования скорости. Мы задали некоторое значение скорости, которое хотим достигнуть, сервопривод это значение сравнивает с текущим значением и посредством ПИД регулятора осуществляет регулирование. Далее опять сравнивает заданное значение (причем это значение могло уже измениться, мы уже могли задать новое) с текущим значением и опять осуществляет регулирование посредством ПИД регулятора. Таким образом сервопривод циклично сравнивает текущее значение скорости с заданным и осуществляет регулирование посредством ПИД регулятора. Именно время на такую итерацию и называется временем сервоцикла. Логично, что чем меньше время сервоцикла, тем лучше мы осуществляем регулирование и быстрее достигаем заданного значения. Величина обратная времени называется частотой сервоцикла. Эта частота разная для разных контуров регулирования, как правило, выше всего для момента (или что тоже самое – тока), у контура положения меньше и у контура скорости медленнее всего. Для применения в ЧПУ наибольший интерес представляет частота сервоцикла контура положения. В китайских сервоприводах частота сервоцикла составляет 500 Гц, в сервоприводах среднего класса Delta Hiwin 1-1,5 кГц. В Yaskawa и Panasonic – это 5-6 кГц. В Специализированных контроллерах 20-25 кГц.

Поскольку регулирование в сервоприводе осуществляется посредством ПИД регулятора, рассмотрим кратко, что такое ПИД регулятор.

(Схема доступна по ссылке ниже)

ПИД регулятор — это, по сути, математический алгоритм, который рассчитывает корректирующее воздействие, т.е. например на сколько нам нужно увеличить текущую скорость, чтобы достигнуть заданную. Величина корректирующего воздействия состоит из трех составляющих, пропорциональной, интегральной и дифференциальной. Данные составляющие входят в регулирование с некоторыми коэффициентами Kp, Ki, Kd (пропорциональный коэффициент, интегральный и дифференциальный). Чем больше коэффициенты, тем быстрее регулирование и жёстче система, но тем больше вибраций и ее неустойчивость. Именно подбор этих коэффициентов и является основной настройкой сервопривода. Эти коэффициенты разные для разных контуров регулирования.

Контур скорости

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

Давайте запустим наш двигатель в режиме контура скорости. Зададим скорость в 40000 импульсов в /секунду (это 4 оборота в секунду).

Если я пытаюсь остановить двигатель рукой, то драйвер начинает увеличить ток, но при этом скорость остается неизменной в пределах погрешности регулирования.

Контур положения / режим удержания

Аналогично контуру скорости мы можем сделать контур положения. Для этого будем считывать текущее положение с энкодера, рассчитывать ПИД регулятором корректирующее воздействие, задавать его и будем делать это в бесконечном цикле. Если заданное положение будет равно 0, то соответственно при попытке провернуть вал двигателя, серво драйвер будет пытаться вернуть вал мотора в исходное положение. Оценим также время серво цикла в этом режиме.

Управление от Mach 3

Добавим в нашу схему контроллер для Mach 3 и счетчик импульсов Step/Dir. Значение с данного счетчика будем читать в Arduino по SPI. Таким образом будем задавать значение для ПИД регулятора. Оценим также время серво цикла в этом режиме. В Mach 3 зададим количество импульсов на 1 мм = 2000, ускорение 500 мм/с2, скорость максимальную 2250 мм/мин. Данная величина скорости ограничена максимальной частотой импульсов step используемого контроллера.

Контур тока

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

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

1. Аппаратные счетчики энкодера и Step/Dir. (быстродействие от 20 МГц)

2. Быстродействующие АЦП. (разрядность не менее 16 bit, скорость не менее 40 ksps).

3. Высокоскоростной 6х канальный ШИМ, разрядность не менее 16 bit и частота не менее 50 кГц.

4. Аппаратный ПИД.

5. Аппаратный FOC (Field Orientation Control).

6. Частота сервоцикла по положению 5 кГц.

Просмотров: 139
  • YouTube СделайСтанок
  • Facebook СделайСтанок
  • Instagram СделайСтанок
  • СделайСтанок мы здесь

Адрес производственной площадки: 

Россия, г. Москва, Касимовская ул., вл. 26, этаж 4, офис 405.

© 2019 ООО "Сделай станок"