Контроллер BLDC

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

Надо бы рассказать, что такое BLDC, чем отличается от PMSM, но я этого делать не буду, название тут ни о чем не говорит, некоторые аппноты утверждают, что последний имеет Sinusouidal Back-EMF вместо Trapezoidal у первого и управляется более эффективно с помощью FOC тогда как для BLDC и метод шести шагов дает хорошую эффективность.

Inrunner и Outrunner думаю все понятно, что такое, ротор внутри статора и ротор вокруг статора, второе дает больший момент при тех же размерах и массе.

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

Это все не слишком важно, с электрической стороны все варианты одинаковы. Хорошо объяснено во множестве аппнотов и на rcgroups, человека с avrfreaks заспамили вопросами и он недавно ответил вот этим.
www.youtube.com/watch?v=4XXB_7kJwbI&context=C32e523cADOEgsToPDskIcc1eAUm5ZgHCW-3sn75GC

Статьи здесь, как перематывать и переклеивать магниты на моторы от cdrom.
www.southernsoaringclub.org.za/

Аппнотов так много, что проще самому найти, самый известный похоже AVR444, где предлагают использовать ADC синхронизированный с PWM.

Схемы управления рассматриваются в том видео. Хотя схема всегда одна, шесть транзисторов, более интересны схемы ШИМ-ления ими, это может влиять на измрение Back-EMF, простой способ ШИМ-ить три верхних или три нижных транзистора. Шести-шаговый цикл тоже везде расписан, две обмотки работают третья свободна, что позволяет измерять ЭДС (EMF) в ней и определять положение ротора.

Управление начинается с либо выравнивания (align) либо определения каким-то образом положения ротора, повторю, что буду говорить только о бездатчиковых вариантах, на rcgroups в крупной и большой теме про BLDC предлагался способ
связанный с измерением `inductive kick`, как и что не знаю, ниже будет ссылка, мне пока хватает простого выравнивания, суть его в том, что на двигатель подается одна из шести фаз на некоторое достаточно длительное время, за которое ротор успевает повернутся и стабилизироваться в известном положении, что позволяет далее начать вращение в нужную сторону.

Следующий шаг разгон (ramp up) без обратной связи (open loop), может быть достаточно одного переключения, может несколько десятков, зависит от мотора и его нагрузки. Здесь увеличивается частота переключения. Примерные числа, конечная скорость 300 RPM и 5% duty cycle.

Ну и целевой замкнутый (closed-loop) режим это подстройка частоты переключения под поведение двигателя, а управление моментом/скоростью производится изменением скважности ШИМ.

Одна из простых для AVR схем измерения Back-EMF. Точнее определения перехода через ноль (Zero Crossing), используется виртуальный ноль, точка соединения сигналов с трех фаз, как замена настоящей точки соединения обмоток, и компараторы для ловли момента ZC.
www.rcgroups.com/forums/attachment.php?attachmentid=1634110

Похоже такая схема пошла вот от сюда и сейчас всякие ESC от HobbyKing используют эту схему и этот код.
http://home.versanet.de/~b-konze/blc_18a/blc_18a.htm

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

Другой способ это прямое измерение без виртуальной нулевой точки и работа синхронно с PWM, хорошо объяснено вот здесь.
scholar.lib.vt.edu/theses/available/etd-09152003-171904/unrestricted/T.pdf

Можно использовать и компаратор и АЦП, но т.к. выборки делаются синхронно с ШИМ а это редко, то компаратор не даст нужной точности, значения АЦП можно интерполировать и вычислить точное время ZC. Основное преимущество, отсутствие шумов от ШИМ, измерение происходит когда транзисторы открыты PWM ON или когда верхний закрыт PWM OFF. Комплементарный вариант называют active freewheeling когда речь идет об эффективности, это уменьшает потери во время PWM OFF при прохождении тока через диод нижнего транзистора.

Один раз по такой синхронной схеме удалось получить, что-то похожее на нормальный BEMF сигнал.


Но небольшое изменение схемы старта, больше/меньше скважность ШИМ или частота переключений, способ её наращивания, и получается мусор, ротор не синхронизирован с полем статора, хотя вращается при этом хорошо, или выглядит, что хорошо. Следующая картинка немного более зашумлена, но проблема не в этом, наклон не в ту сторону и нет почти-линейного изменения напряжения как должно быть.


А прямо сейчас получается ещё хуже чем на последней картинке, пока нет смысла показывать cвой код, схему, плату и детально рассказывать метод.

Вот самая полезная ссылка.
www.rcgroups.com/forums/showthread.php?t=200567

Может кто-то знает причины подобных проблем со стартом.

Update_1:

Только начал читать, но кажется это лучшее, что я видел по теме bld.

«Design and Prototyping Methods for Brushless Motors and Motor Control»
web.mit.edu/scolton/www/SCThG.pdf
  • +5
  • 22 февраля 2012, 00:31
  • amaora

Комментарии (57)

RSS свернуть / развернуть
не пойму какой понт городить грабли, если проще и дешевле купить готовые регули
0
И коптер тоже проще купить готовый, и многое из того, что здесь делают остальные.
0
Коптер лучше собрать, а вот регули дешевле и надежнее купить. Тем более 25А стоят скромные 6 баксов + доставка с HK. Ну а если так хочется собрать, почему бы не взять проверенные? Там где-то и схема была.
0
И кстати, бездатчиковое управление синхронным двигателем — на сегодняшний день серьезнейшая задача, на которую не грех написать докторскую диссертацию мирового уровня.
0
Хочется не собрать, а управлять возможностями, разрешением выходной ШИМ, параметрами фильтров если они есть, получать обратно значение скорости, с той частотой какая мне покажется подходящей, и по подходящему интерфейсу, а не PPM/PWM.
0
Присоединяюсь. PPM и PWM очень неудобны. Есть i2c, который широко используют например немцы на mikrokopter. Но это тоже не универсал во всех отношениях. Роднее бы встроить промышленный интерфейс, который будет дешевле при гальванической развязке. Например RS-485.
И потом, в поддержку самодельного ESC хочется отметить еще ненужную на мой взгляд вещь — BEC, ака стабилизатор на 5 вольт. Мне он не пригодится в 100% случаях.
0
Я сам сторонник самоделок, но тут можно убить ну уж слишком много времени на всевозможных граблях. Первый аппарат я думаю лучше строить не «с нуля», а дальше — как пойдет. А если ограничиться только контроллером BLDC (а не постройкой коптера), то это уже совсем другая история :)

Если речь о деньгах, то можно при оочень большом желании уложиться в 6к деревянных (все покупное). Я лично загорелся идеей самодельного радиоуправления! А там как пойдет, м.б. следующий летательный аппарат будет полностью хэнд-мейд.
0
i2c нихера не фонтан для этой цели, по сабжу курить форум аиркама, они уже набили шишек
0
курить авиамодельные форумы при поиске истины в узком месте — то еще удовольствие. чувствую себя золушкой, когда захожу на форумы rc-xxx.xx. горы шелухи и эпичные подписи с аватарками). пришел с конём — ушёл с испорченным настроением.
0
аиркам в данном смысле немного другого профиля, они какбэ саппортят свой стафф, который «немного напоминает» немцев а не растекаются. к слову рсдезиг(если я правильно понял по шифровке) я сам не люблю, изза наводнивших его фуфелов
0
По моему мнению, ценник конский. Мой первый и правда пока единственный ESC выиграл немцев по стоимости производства с нуля (включая фотошаблон для 4-слойной платы) и по эффективности. Мои ключи (я применил не пары P- и N- канальных, а пары Т- канальных IRLS3034) совсем не грелись при полной нагрузке на их же 350-ваттный двигатель, но их же контроллер грелся очень сильно и требовал разместить себя под потоком воздуха от винтов. И еще момент, который совсем не порадовал — нестабильный прием управления у них по i2c — много неверно принятых пакетов, что дает кратковременный сбой тяги. Правда мой ESC тяжелее кажется на 20 грамм.
0
сорри, N-канальных
0
А поделиться наработками в виде статьи? Может это убережет кучу народу от повторения чужих граблей или подкинет новые идеи по оптимизации… Или все засекречено?
0
сорри, не увидел комментов дальше.
В любом случае почитать будет интересно. Сам пока коптер нестрою, но тема интересует.
0
По быстрому я не вник, почему они (http://www.southernsoaringclub.org.za/) использовали моторы от CD-ROM, на тот момент не могли найти китайские недорогие (2005), или есть какие то преимущества у них?
0
  • avatar
  • STAR
  • 22 февраля 2012, 01:39
на аутранеры можно прилкпить атчик хола по аналогии с компьютерным куллером.
Как на одном из роликов, где показывали коптера для пожарных.
0
Это не спортивно, вносится дополнительное звено, способное убить вертолет.
Бездатчиковое управление при правильной реализации выглядит надежнее.
0
Тоже срою коптер. Послежу за темой. Движки идут, счас сижу за выбором ESC.
0
Вот человек сам делает ESC.
Может найдете что-то полезное
0
  • avatar
  • vvmk
  • 22 февраля 2012, 10:34
Сам пробовал сотворить ESC на AtTiny861, которая имеет аппаратный 6-канальный PWM в режиме как для BLDC. Результатом очень доволен, но хотелось бы упрощения.
Добавлю в избранное, буду следить.
0
Думаю, публикация на эту тему многим была бы интересна.

А вообще здорово, что тут много людей, которые копаются в этой теме. У меня есть большой интерес к очень сходной (но, все-же, заметно отличающейся) проблеме — позиционирование линейного двигателя, есть шанс, что кто-то сможет помочь. Одна из особенностей — мне нужно точно контролировать положение, а не скорость. Датчик по положению предполагается, но датчик будет инкрементальный, а не абсолютный.
0
Начинал делать публикацию, но в процессе вдруг выяснились неприятные моменты. То, что я хотел преподать за достоинство, оказалось мертвечиной. Будет время — вывалю в стиле «Фееричная расстановка...»
0
Ну, это как-бы совсем из другой оперы.)))
А в чём у вас проблема-то?
ПИД по положению и, если нужен контроль скорости, момента, то плюс ещё контур регулятора скорости, тока. Структура их взаимодействия зависит от требований задачи.
Инкрементальный кодер — не проблема, лишь бы была возможность калибровки абсолютного положения(если требуется абсолютное позицирование).
0
Ну, это как-бы совсем из другой оперы.)))
Не совсем. Тот тип линейного двигателя, который меня интересует, по сути представляет собой развернутый в линию BLDC, так что проблемы, вобщем, схожие.

А в чём у вас проблема-то?
ПИД по положению и, если нужен контроль скорости, момента, то плюс ещё контур регулятора скорости, тока. Структура их взаимодействия зависит от требований задачи.
На пальцах все понятно, но пока опыта мало, каждая мелочь превращается в проблему. Контроль скорости и момента в чистом виде (в смысле доступности снаружи контроллера) не нужны. Нужно только максимально бытро перейти по указанным координатам и вцепиться зубами в заданное положение. Достижение этого, видимо, потребует контроля и скорости и момента.
Инкрементальный кодер — не проблема, лишь бы была возможность калибровки абсолютного положения(если требуется абсолютное позицирование).
Да, я, вобщем, пришел к такому же выводу. То есть сначала стартуем без учета датчика, сползаем в одну сторону пока не срабатывает концевик (этот этап можно делать по ZC, хотя не уверен, что на небольшой скорости это удастся сделать), а затем уже работаем по абсолютным координатам прибавляя или отнимая инкремент датчика.
0
То есть сначала стартуем без учета датчика, сползаем в одну сторону пока не срабатывает концевик (этот этап можно делать по ZC, хотя не уверен, что на небольшой скорости это удастся сделать), а затем уже работаем по абсолютным координатам прибавляя или отнимая инкремент датчика.
Примерно так работают принтеры и сканеры, кстати. У них хорошо заметен момент калибровки начального положения головки/каретки.
Некоторые из них впечатляют. Epson C42 например, который обеспечивает хорошую точность позиционирования с одним лишь датчиком начального положения и шаговиком.
0
А там точно шаговик? Я почему-то думал, что там стоит обычный двигатель и оптический энкодер…
0
Разные бывают. В Epson C42 — шаговый двигатель и зубчато-ременная передача. В hp dj646c, Epson R200, Epson CX8300 — коллекторный двигатель и энкодер. При этом C42 поточнее работает, чем hp dj646 (впрочем, он и поновее), зато R200 — точнее чем C42. C42 вообще впечатляет лаконичностью механической части. Два шаговика и одна оптопара (выполняющая одновременно функции датчика начальной позиции головки, начальной позиции и наличия листа и еще несколько).
0
О, коллеги, я вижу многие из членов сообщества работают над строительством квадрокопрера. Давайте объединятся и обмениваться опытом :)

Мне коптер интересен, в первую очередь, в контексте разработки собственной платы управления. ESC я купил готовые (но статью почитать все равно интересно). Сейчас ожидаю доставки чипы LSM330DL (трехосевой гироскоп + трехосевой акселерометр). Как только придет – начну эксперименты с софтом (фильтрами Калмана, Альфа-Вета, DCM ). На первом этапе, хочу добиться устойчивой стабилизации по крену и тангажу.
+2
  • avatar
  • e_mc2
  • 22 февраля 2012, 13:32
Не заметил, что у ST есть гироскоп и аксел. в одном корпусе, это хороший способ избежать калибровки коллинеарности осей, хотя возможно все таки это понадобится, не проверишь не узнаешь, и это первое о чем бы я думал, в даташите не вижу величин отклонений.
0
Еще у ST есть интересная открытая либа под STM32F103. Либа интрестна тем, что содержит реализацию фильтра Калмана заточенную под ST-шные MEMS чипы.
0
У них ещё скоро появится вот такая интересная плата INEMO-M1 (6-axis geomagnetic module, a 3-axis gyroscope and an ARM® Cortex™ M3 32-bit MCU)
0
Спасибо за подсказку.
Там много свободного пространства, можно еще GPS повесить, пачку датчиков, и вообще…
И пусть выдает какуюнибудь пачку где всё будет чистое оцифрованное с нужным усреднением на головной контроллер.
Остается такую же рулилку двигателями и питанием сделать.
0
Давайте создатим коллективный блог. Информации на множестве специализированных сайтах очень много, но почти везде применяются общие решения, сводящиеся к покупке и интеграции готовых решений. Здесь же мы можем обсудить частные вопросы.
0
Насчет отдельного блога — не уверен, все-таки тематика достаточно специфическая. Можно просто писать в личный блог – поиск по тегам рулит.
0
amaora, проблемы только со стартом? Как на счёт максимальной скорости?

я делал схему управление BLDC до первого положительного результата и оценивал именно по максимальной скорости — если что-то не так с обратной связью, то двигатель на какой-то скорости выпадает из синхронизма, затем снова втягивается и таким образом не может преодолеть этот предел
0
КМК, если есть проблемы со стартом, то проблем с синхронизмом не избежать. Да, это два разных по сути алгоритма (запуск и кручение). Но реализация и того и другого завязана с, как бы сказать точнее, пониманием природы процессов в управлении BLDC. А если не понимаешь, то ни старт, ни синхронизм в критических режимах работать не будут.
0
Какая может быть максимальная скорость если нет синхронизации?

Да и много мне не надо, судя по тому, что я читал на rcdesign, достаточно будет 5K RPM с большим винтом (11x47), то есть контроллеру достаточно уметь ~8K RPM, 8K / 60 * 4 пары полюсов * 6 шагов = 3200 Гц частота переключений, если использовать АЦП то надо измерять BEMF в несколько раз быстрее, 3200 * 8 = ~25 кГц, AVR может осилить такую частоту ШИМ и АЦП с небольшим понижением точности, хотя есть некоторые сложности, и я пока использую ~8 кГц и софтовый ШИМ.
0
Да, Мега должна осилить эту задачу!

раз проблемы с синхронизацией — расскажи как само время переключения на новый вектор корректируешь? Может чем-то помогу

и ещё вопрос, я так понял — у тебя вариант со всегда включёнными двумя фазами и 3я отключена?
0
Никак не корректирую, т.к. нет надежного сигнала, вот свежая картинка, напряжение с одной из фаз, где тут ZC?


Да 6 шагов, на каждом две фазы подключены одна нет, ну и подключены они через ШИМ, на данным момент ШИМ-ит только верхний ключ а АЦП делает измерение пока оба ключа открыты.

Кстати амплитуда и смещение поменялись, после того как я переделывал схему под компаратор и возвращал обратно, что-то странно.
0
между чем и чем это напряжение?

я использовал компаратор МК и на опору подавал напряжение которое равно примерно половине питания («примерно» потому, что сопротивление мосфетов верхнего и нижнего плеч отличалось).

p.s. пиши лучше в личку
0
Вот интересная ссылка по теме open-bldc.org/wiki/Open-BLDC
0
  • avatar
  • m0xf
  • 23 февраля 2012, 09:22
поделитесь, пожалуйста, мыслями в алгоритмах управления бесколлекторным мотором используя схему на комплементарных парах транзисторов и на однотипных транзисторах
сколько каналов ШИМ нобходимо? вроде в руководстве AVR443 написано о 3х каналах
0
  • avatar
  • joy
  • 27 февраля 2012, 11:19
P-канальные имеют большее сопротивление, возможность обойтись без драйвера, в итоге меньше цена но хуже кпд. Даже не думал их использовать для BLDC, один экземпляр лучше сделать хорошо чем дешевле на `два рубля`.

С ШИМ варианты такие:

1. Обойтись одним каналом ШИМ и добавить внешнюю AND логику, при этом есть шесть сигналов от МК к инвертору (шесть ключей) формирующих drive pattern на каждом шаге,
а) три AND элемента на верхние ключи
б) три AND на нижние ключи
в) шесть AND на все ключи (тут есть некоторые вопросы, о которых ниже)

2) Три канала ШИМ с комплиментарными выходами и установкой dead time, лучший вариант.

3) Тоже что и 2 но реализовано вручную на одном таймере, плохоя точность, дергание фронтов.


---------+--------+--------+--- +
         |        |        |
    AH -||   BH -||   CH -||
         + A      + B      + C
    AL -||   BL -||   CL -||
         |        |        |
---------+--------+--------+--- GND


Первый способ, вариант а, первый шаг drive pattern = {AH,BL}, тогда,

PWM ON: {AH,BL}
PWM OFF: {BL}

то есть ШИМ подвержен только верхний транзитор, либо только нижный, вариант б,

PWM ON: {AH,BL}
PWM OFF: {AH}

или оба, вариант в,

PWM ON: {AH,BL}
PWM OFF: {}

В варианте а или б в период выключения ШИМ ток продолжает идти через оставшийся открытый транзистор и через диод комплиментароного транзистора.


PWM OFF:
---------+--------+--------+--- +
         |        |        |
    AH - X   BH - X   CH - X
         +--->--- + B      + C
    AL - X   BL -||   CL - X
         |        |        |
---------+---<----+--------+--- GND


В варианте в этого не произойдет, и это приведет к плохому кпд, нагреванию двигателя и сильным перепадам тока, мне только не понятно почему в AVR444 рекоммендуют именно такую схему ШИМ.

Вариант 2/3 позволяет ещё и открывать комплиментарный транзистор на время закрытия основного (обычно верхнего, как на картинке) для уменьшения падения напряжения на диоде и как следствие тепловых потерь.
0
Есть еще неучтенные варианты. Например, так:
PWM_ON: {AH, BL}
PWM_OFF: {AH, BH} (или {AL,BL}).

Можно открывать второй транзистор не сразу, а через какое-то время (или наоборот, открыть сразу, а через какое-то время выключить). Это, насколько я понимаю, в документации описывается как decay mode (режим затухания). Вариант, который я описал называется fast decay, вариант (в) в вашем описании — slow decay. Ну а включение/выключение второго транзистора через какое-то время — mixed decay.
0
Есть еще неучтенные варианты. Например, так:
PWM_ON: {AH, BL}
PWM_OFF: {AH, BH} (или {AL,BL}).

Можно открывать второй транзистор не сразу, а через какое-то время (или наоборот, открыть сразу, а через какое-то время выключить). Это, насколько я понимаю, в документации описывается как decay mode (режим затухания). Вариант, который я описал называется fast decay, вариант (в) в вашем описании — slow decay. Ну а включение/выключение второго транзистора через какое-то время — mixed decay. Все эти режимы можно встретить, например, в контроллерах шаговиков. У некоторых режим прошит «искаропки», а некоторые позволяют его задавать.
0
Здесь другое определение ebldc.com/?p=86, fast decay это вот так,

PWM_ON: {AH, BL}
PWM_OFF: {AL, BH}

в шаговых не копался не знаю, но для BLDC это будет активное торможение, разве нет?
0
AL,BH это не PWM_OFF, поскольку ток через обмотку течет. Впрочем, если внимательно посмотреть на диаграмму в той ссылке, то сначала отключается AH, потом включается AL (как в моем описании), затем отключается BL, а за ним включается BH (это начало следующего цикла). Иначе говоря, мы оба описываем один и тот же процесс, только на разных стадиях.
0
Для комплементарных транзисторов требуется логика с выходом открытый коллектор, в противном случае уровни питания МК и движка доджны совпадать
0
С открытым коллектором есть одна засада: время открытия-закрытия будет сильно отличаться у верхнего и нижнего плеча. Для верхнего транзистора емкость затвора может разряжаться только через резистор в коллекторе управляющего транзистора (что довольно медленно), а для нижнего наоборот, она может только заряжаться через аналогичный резистор. Получается, что верхний будет медленно закрываться, а нижний — медленно открываться. Сквозной ток в таком варианте превращается в серьезную проблему, да и во время переходных процессов транзисторы будут неслабо греться.
0
открытый коллектор потребуется только для верхнего, для нижнего и драйвер прекрасно будет работать. Для верхнего емкость будет заряжаться через резистор, разряжаться может через диод, так что потери в основном будут при включении.
0
Как по мне, то овчинка не стоит выделки, проще поставить дравер на оба плеча и не морочить себе голову.
0
Вы правы это плохой тон, но голову поломать с бутстрепным конденсатором немного придется)
В последнее время применяю управление через трансформатор, решается множество проблем меньше становится, но трансы очень нежная вещь как оказыввается((((
0
спасибо, про ШИМ+логика хорошо описано в AVR444
0
  • avatar
  • joy
  • 27 февраля 2012, 19:49
У всех этих контроллеров есть неприятная особенность (( ни у одного нет обратной связи, момент на валу не держат. А мне прям сильно это необходимо.
0
Тогда вам, наверное, нужно перемотать движки и приспособить другой контроллер, типа вот такого
0
Некоторое время работаю над контроллером bldc. Основная проблема, как ни банально это звучит, точное определение зеро-крос. На больших скоростях это нужно делать в течение одного импульса(с помехами при переходе), а при средне-низких — на протяжении до 10-15 импульсов шима(bemf прыгает больше-меньше середины пока не определиться). На обычной меге на С эти вопросы не решить. Если взять AVR444 то метод не плохо работает для мотора средней скорости и изменении ее в пределах 50 — 90%. Если мотор быстрее(ну скажем от 10000об) метод нужно улучшать по описанным выше причинам.
0
  • avatar
  • psv
  • 03 марта 2014, 13:22
А я давно отказался от определение перехода ЭДС через ноль. Пытаюсь работать по датчикам тока, здесь не нужно ловить событие, каждое новое измерение уточняет оценку положения ротора.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.