Базовая схема для экспериментов с BLDC-моторами (на ATtiny2313)
Представленная ниже схема является основой для экспериментов с bldc-моторами. Для тех, кто не в курсе, BLDC — это одна из разновидностей синхронных моторов, которая используется, например, в винчестерах, сидирумах, дисководах и т.п. (типа таких, как на картинке справа).
Теорию работы синхронных движков в общем виде можно почитать здесь, чуть конкретнее про BLDC — вот здесь.
Схема позволяет организовать необходимое для питания BLDC-моторов трёхфазное напряжение из обычного однофазного (с помощью ШИМ-модуляции).
Никаких специальных возможностей управления работой мотора (по датчикам Холла или по обратной ЭДС обмоток) в этой схеме не предусмотрено. Про различные варианты такого управления мы поговорим позже, а здесь я постараюсь подробно описать исходя из каких соображений и как рассчитываются элементы именно базовой схемы.
Как видите, нам понадобятся: 1 контроллер ATtiny2313, 3 микрухи спаренных полевиков FDS4542 (N- и P-channel в одном восьминогом корпусе), 6 биполярных транзисторов (я использовал FMMT2222 — маленькие биполярнички в корпусах SOT23 c маркировкой 1P), 3 диода (я взял LL4148) и некоторое количество всяких резисторов и кондёров. (их номиналы будут указаны ниже).
Суть схемы довольно простая — микроконтроллер управляет тремя абсолютно аналогичными силовыми каналами (поэтому на схеме показан только один), каждый из которых имеет на выходе комплиментарную пару мощных полевиков, образующую полумост с независимым управлением плечами.
То есть каждое из плеч можно включать и выключать независимо от другого, что даёт возможность получить на выходе полумоста три разных состояния: Hi — выход полумоста подключен к питанию (верхний полевик открыт, нижний — закрыт), Lo — выход полумоста подключен к общему проводу (верхний полевик закрыт, нижний — открыт) и Z — выход полумоста отключен и от питания, и общего провода (оба полевика закрыты).
В принципе, можно получить ещё и четвёртое состояние — когда оба полевика открыты, но в этом случае получится КЗ и один из полевиков просто сгорит. Поэтому такое состояние мы будем считать запрещённым и с ним нам как раз придётся всеми способами бороться.
В схеме предусмотрено отдельное питание для схемы управления (+5В) и для силовой части (+12В), поэтому для верхнего плеча пришлось делать развязку на транзисторах T1, T2. Два транзистора были использованы для того, чтобы умощнить эту развязку и сделать её характеристику симметричной, чтобы она могла не только быстро заряжать, но и разряжать затвор верхнего полевика (то есть это ещё и драйвер).
Нижний полевик управляется без всякого драйвера, напрямую от ноги микроконтроллера.
Резисторы R7, R8 — это необязательные подтяжки, назначение которых — предотвратить самопроизвольные открытия полевиков в тот момент, когда ноги микроконтроллера ещё не настроены на выход и находятся в Z-состоянии (при старте). Соответственно, номиналы этих резисторов не очень важны, они просто должны быть намного больше номиналов резисторов R5 и R6, чтобы не мешать нормальной работе схемы после запуска контроллера. Более того, поскольку нам главное, чтобы полевики оба сразу не открылись (если один откроется — шут с ним), можно оставить только R8. Я так и сделал, — взял номинал резистора R8 равным 10 кОм, а резистор R7 вообще выкинул.
Стоит отметить, что помимо функции подтяжки, R7 может выполнять ещё и функцию борьбы с наводками на линию управления транзистором T2. Ток в этой линии очевидно будет гораздо меньше, чем через R5 и в случае, если такие наводки всё же будут, резистор R7 придётся вернуть (это если вы свою разводку платы будете делать).
Ну что, дальше давайте считать. Исходить будем из двух предпосылок: 1) полевиками нужно рулить максимально быстро, но без фанатизма; 2) высшая математика — удовольствие на любителя (особенно когда есть осциллограф и можно всё проверить на практике). В связи с этими, особой точностью и правильностью я увлекаться не буду, но, по крайней мере, рассчёты позволят на что-то ориентироваться.
Начнём с нижнего полевика (N-канальник). Для максимально быстрого управления этим полевиком нам нужно выжать с ноги микроконтроллера максимальный ток и в то же время эту ногу не поджарить.
Пиковый ток на ногу в документации на ATtiny2313 не указан, поэтому будем исходить из значений, указанных в Absolute maximum ratings — 40 мА. При этом максимальный ток у нас будет протекать в самом начале заряда, когда разность потенциалов на затворе и ножке микроконтроллера максимальна. Таким образом, получается R5=5В/40мА=125 Ом. Ближайшее большее значение стандартного номинала — 150 Ом, но мы возьмём 200 Ом, чтобы был небольшой запас. Максимальный ток при этом получится 5/200=25 мА.
Теперь давайте оценим время переключения нашего полевика с резистором 200 Ом в затворе. Оценить это время можно по формуле t=Qg/I, где Qg — total gate charge (берём из документации на FDS4542), I — ток драйвера (мы возьмём максимальный расчётный зарядный ток, чтобы точно не ошибиться в меньшую сторону). Получаем t=28 нК / 25 мА = 1,12 мкс.
Зачем нам нужно время переключения? Очень просто. Когда мы будем писать программу управления — мы должны будем учитывать, что полевики закрываются не мгновенно и вводить задержки между закрытием полевика в одном плече и открытием полевика в другом плече, во избежание возникновения сквозных токов (когда полевики в обоих плечах приоткрыты).
Переходим к P-канальному полевику. Тут ситуация попроще и ногу контроллера нам нагружать не нужно, зато нужно не спалить биполярные транзисторы и диод.
Резисторы R1 и R3 в обвязке p-канальника — это просто высокоомные подтяжки и их номиналы не должны нас особо сильно волновать, поэтому я для начала взял их по 10 кОм (чтобы токи через них можно было не учитывать) и про них забыл.
Затворные токи здесь определяются резисторами R2 и R4, а сама обвязка работает следующим образом: при открытии транзистора T2 потенциал базы транзистора T1 падает ниже потенциала его эмиттера, T1 закрывается, а затвор полевика разряжается через диод и резистор R4; при закрытии транзистора T2 потенциал базы транзистора T1 растёт быстрее, чем на его эмиттере, что приводит к открытию T1 и резкому заряду затвора через R2.
Сначала разберёмся с зарядом. По документации ток через FMMT2222 может быть до 600 мА, а для LL4148 — до 450 мА импульсный и до 150 постоянный, поэтому ориентироваться будем на диод и возьмём для расчётов, скажем 150 мА (чтобы ничего сильно не грелось). Исходя из этого, получим сопротивление резистора R4 = (12-0,5)В/150мА = 76,6 Ом. Далее аналогично, — возьмём ближайший стандартный номинал больше расчётного — 100 Ом. Пересчитываем обратно в ток, получаем I = 115 мА. Ну что ж, пусть будет так. При этом время заряда можно оценить на уровне t = 36 нК / 115 мА = 313 нс.
Чтобы сильно не заморачиваться, возьмём R2 такого же номинала, как и R4, и будем считать, что время закрытия будет примерно такое же, как и время открытия.
Теперь проверим, насколько правильно мы выбрали R1. Чтобы транзистор T1 нормально открывался, ток базы должен быть не более чем в h21 раз меньше тока коллектора. Ток коллектора у нас 100 мА, h21 (из доки) не менее 35, значит ток базы нам нужен не менее 2,86 мА. А он у нас получается 12В/10кОм = 1,2 мА. Ну, тогда возьмём R1 = 3,3 кОм. В этом случае ток базы = 12/3,3 = 3,6 мА. Так и оставим.
Тот же расчёт проделаем для транзистора T2. Ток коллектора у него такой же, как и у T1, значит ток базы тоже должен быть не менее 2,86 мА. Значит R6 должен иметь номинал менее 5/2,86=1,75 кОм. Возьмём с запасом резистор на 1 кОм.
В итоге получилось: R1=3,3 кОм, R2=R4=100 Ом, R3=10 кОм, R5=200 Ом, R6=1 кОм, R7 мы выкинули, R8=10 кОм. При этом время переключения нижнего полевика мы ожидаем на уровне 1,12 мкс, а верхнего — на уровне 313 нс.
Что у нас осталось? Во-первых, конденсаторы. С1=С2=20 пФ, С3=100 мкФ, С4=0,1 мкФ. При проектировании платы C3,C4 нужно расположить как можно ближе к силовым ногам ключей. Во-вторых, на схеме не полностью показана обвязка микроконтроллера. Нужно подтянуть ногу MCLR к питанию через резистор 1 — 10 кОм, а так же поставить конденсатор 0,1 мкФ между питанием и общим проводом поближе к ножкам контроллера.
Что ж, — собираем и тестим.
Для снятия осциллограмм была написана тестовая программа, в которой транзисторы специально переключались с интервалами гораздо больше расчётных (на случай, если расчёты окажутся слишком кривыми).
Как видите, наши рассчёты дали примерно адекватные результаты, по крайней мере корректировать ничего не нужно.
Простейшая программка для контроллера (пуск / стоп / реверс / изменение питающего напряжения и частоты вращения)
Небольшое видео, демонстрирующее работу устройства
Бесколлекторные двигатели. Примеры на C
Эти примеры можно рассматривать, как демонстрацию алгоритмов управления бесколлекторным двигателем, но не как конечный продукт. Для доведения до законченной технической реализации потребуется, как минимум, добавить дополнительные цепи защиты. Эти примеры рассчитаны на управление двигателями с напряжением питания от 12 до 24 Вольт. При более высоком напряжении питания потребуется вносить изменения в схему. В схемах предусмотрена возможность подавать ШИМ сигнал (с помощью перемычек) на верхние и/или нижние ключи. Для управления бездатчиковыми двигателями это может играть важную роль.
Пример управления бесколлекторным двигателем с датчиками Холла |
Пример написан на GCC 3.4.6 для микроконтроллера Atmega168
Содержит: схему, исходный код на C.
Sensorless BLDC (AVR444)
Пример управления бездатчиковым бесколлекторным двигателем |
Пример написан на GCC 3.4.6 для микроконтроллера Atmega168
Адаптированный к GCC пример от Atmel (см. AVR444) Файлы, предлагаемые Atmel можно скачать здесь
Содержит: схему, исходный код на C.
Предполагается, что контроллер будет работать на частоте 8Мгц. Определение положения ротора основано на измерении напряжения на свободной фазе и определении момента перехода напряжения свободной фазы через ноль. Для измерения напряжения используется АЦП микроконтроллера. В этом примере в качестве опорного напряжение АЦП используется питание микроконтроллера, а уровень напряжения перехода фазы через ноль (значение АЦП) задается в константе ADC_ZC_THRESHOLD. Это не совсем корректно, так как при изменении напряжения питания двигателя, определение момента перехода свободной фазы через ноль становиться не точным. Так же этот пример имеет некоторые ограничения по скорости из за использования АЦП.
Sensorless BLDC
Пример управления бездатчиковым бесколлекторным двигателем |
Пример написан на GCC 3.4.6 для микроконтроллера Atmega168.
Содержит: схему, исходный код на C.
Это основательная переработка примера AVR444. Его основная отличительная особенность: для определения момента перехода напряжения свободной фазы через ноль используется внутренний компаратор микроконтроллера. Также увеличена частоты работы микроконтроллера до 16 МГц (тактирование от внешнего кварцевого резонатора). Эти и другие изменения позволили работать с более оборотистыми двигателями.
Управление бесколлекторным двигателем постоянного тока
Автор: AntonChip. Дата публикации: 30 октября 2015 .
Как известно в коллекторных двигателях постоянного тока коммутация обмоток в нужный момент времени осуществляется с помощью коллекторного узла(якоря). В беcколлекторных двигателях коммутацией управляет электроника. Для определения момента коммутации контроллер может использовать или датчики положения(Датчики Холла) или обратную ЭДС, генерируемую неподключенными обмотками. Датчики положения наиболее часто используются в низкооборотистых(тяговых) двигателях, где пусковой момент существенно варьируется или где требуется его высокое значение, а также где двигатель используется для позиционирования. Управление бесколлекторными двигателями без датчиков используется в тех случаях, когда пусковой момент существенно не изменяется и когда отсутствует необходимость в управлении позиционированием, как, например, в вентиляторах.
На каждой ступени коммутации, обмотка одной фазы подключается к положительному напряжению питания, другая — к отрицательному, а третья — остается неподключенной. Обратная ЭДС неподключенной фазы в результате пересекает ноль при пересечении среднего значения положительного и отрицательного напряжений. Пересечение ноля возникает всегда в центре между двумя коммутациями. На постоянной скорости или медленно изменяющейся скорости период времени от одной коммутации до пересечения нуля и время от пересечения нуля до следующей коммутации равны. Это используется в качестве основы в данной реализации устройства управления без использования датчиков.
Для определения сигналов обратной ЭДС будем использовать метод виртуальной средней точки, для этого меряем напряжение на свободной фазе и сравниваем его со средней точкой. При использовании АЦП требуется некоторое время для преобразования, что снижает производительность, поэтому логичнее использовать аналоговые компараторы, нам ведь не нужно знать точное значение АЦП этого сигнала. Компаратор может генерировать прерывание в момент перехода напряжения через среднюю точку, а также выдавать логический сигнал своего состояния, что нам и будет нужно.
Три ШИМ-канала, OC1A, OC2 и OC1B, управляют верхними ключами(P-канальные MOSFET) мостовой схемы. Это дает возможность управления электрическим током с помощью аппаратных возможностей генерации ШИМ-сигналов при минимальном использовании программных ресурсов. В этом случае управление скоростью выполняется за счет изменения скважности ШИМ-сигнала.
Нижние ключи управляются логическими сигналами, и в нужный момент N-канальные MOSFET подключают обмотку к минусу питания или к линии обратной ЭДС. Ниже представлены таблицы состояний сигналов подаваемых на верхние и нижние ключи, с направлением вращения по часовой и против часовой стрелки.
Биты конфигурации микроконтроллера
Код программы с подробными комментариями:
➤ Adblockdetector