Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

топ 100 блогов alex_avr220.05.2017 Так сложилось, что последние 11 лет меня буквально преследуют проекты, в которых нужно управлять двигателями постоянного тока. Эта задача не такая простая, как может показаться на первый взгляд. Спустя все эти годы, я наконец, пришел к пониманию, как должен быть устроен правильный драйвер и хочу поделиться своими знаниями :)

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока
Предыдущее(2014) и последнее(2017) поколения моих универсальных модулей управления двигателями постоянного тока.


Впервые задача разработать подобный драйвер, в более менее серьезном виде, встала передо мной в 2006 году, когда я был в бауманском роботоклубе. Нужно было сделать устройство для плавного управления мотором с напряжением 12В и током до 3-4А. Тогда я сделал свой первый Н-мост - простейшая схема из четырех транзисторов, которая позволяет по сути подключать каждый из выводов мотора к плюсу либо минусу питания. Но нормально он так и не заработал :)

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

Принцип работы, казалось бы очень простой - открываем, допустим, нижний левый и верхний правый транзисторы - мотор крутится в одну сторону. Открываем другую пару транзисторов - мотор крутится в другую сторону. Но есть один нюанс, а на самом деле нюансов много. За неимением времени и желания писать полноценную статью книгу, тем более такие статьи циклы статей уже написаны и гораздо лучше, чем написал бы я (ссылка внизу поста) - лишь в общих чертах расскажу, о некоторых самых основных подводных камнях.

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

На фотографиях оба модуля имеют очень схожий функционал - оба позволяют плавно и бесшумно управлять двигателями 12В с током до 15-16А в кратковременных режимах и до ~8А в постоянном режиме. При этом нагрев маленького модуля без радиатора меньше, чем большого с радиаторами.

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

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

1)Транзисторы.

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

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

Несколько параметров, которые важны при выборе транзистора:

а)Напряжение на затворе для полного открытия. Некоторые транзисторы можно открыть напряжением 1.5В, а некоторым нужно 5В и более. В целом, чем меньше напряжение - тем лучше. Этот параметр обычно прямо в даташитах не задан, однако обязательно есть график ВАХ транзистора, на котором указана характеристика при разном напряжении на затворе. Из этого графика легко понять, какое напряжение является оптимальным.

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

Например по этому графику мы видим, что при напряжении на затворе 2.3В - максимальный ток через транзистор может быть только 0.04А. Больший ток просто не потечет. При 2.4В ситуация получше - ток уже может достигнуть 0.4А. Но это все равно плохой режим, т.к. при таком токе на транзисторе будет падать большое напряжение. Как видим, начиная примерно с 4.5В на затворе транзистор может уже спокойно пропускать десятки ампер. при этом падение напряжения на нем будет очень маленьким. Это и есть то напряжение, которое нам нужно подавать на затвор (как минимум) для полного открытия транзистора. Нужно отметить, что этот график дан для температуры 25 градусов, а при нагреве характеристики ухудшаются их можно посмотреть на соседнем графике.

б)Емкость затвора. Как известно, полевые транзисторы управляются напряжением и ток через затвор не течет. Однако, в момент переключения затвор, имеющий паразитную емкость нужно зарядить или разрядить. Чем быстрее это будет сделано (об этом ниже) - тем лучше. Соответственно чем ниже емкость, тем лучше. Обычно в даташитах указывают заряд затвора Qg измеряемый в нанокулонах. Чем меньше - тем лучше.

в)Сопротивление канала в открытом состоянии. Rds(on) - собственно название говорит само за себя. В отличие от биполярных транзисторов, канал полевых транзисторов в открытом состоянии ведет себя как сопротивление. Падение напряжения на транзисторе зависит от тока и может быть вычислено по закону ома. Разумеется, выделяемое тепло на транзисторе зависит от этого сопротивления и тока через него протекающего. При этом вы можете найти два очень похожих на первый взгляд транзистора, с примерно одинаковым максимальным током, но с сопротивлением отличающимся на порядок и более. Разумеется, чем меньше сопротивление - тем лучше. Стоит также обратить внимание на максимальное напряжение Сток-Исток транзистора. Как правило, чем меньше напряжение - тем меньше и сопротивление канала. Не стоит брать напряжение с большим запасом - за это придется расплачиваться нагревом транзистора. Например у приведенного выше IRF530 максимальное напряжение - 100В, как следствие, сопротивление открытого канала 0.115 Ом, а это значит, что при токе 10А он будет греться как утюг, отдавая 11.5 Вт тепла, чтобы отвести столько тепла понадобится огромный радиатор.

В то же время - у моего самого любимого транзистора IRF8788 максимальное напряжение всего 30В. При этом эта крошка в корпусе SOIC-8 в открытом состоянии имеет сопротивление 0.003 Ома (да-да, три тысячных Ома). По сути это все-равно что короткий кусок толстой медной проволоки. Не трудно рассчитать, что при токе 10А, выделяемая мощность на транзисторе составит всего 0.3 Вт, что легко может быть рассеяно небольшим полигоном меди на плате. При токе 20А выделяемая мощность составит уже 1.2 Вт, что потребует более серьезного охлаждения и это примерно максимально допустимый постоянный ток для этого транзистора.


2)Драйвер и тип транзисторов.

Если вы наберете в поиске картинок "Н-мост", то одной из первых картинок будет вот эта:

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

Эта вредная и неправильная картинка. Если вы соберете мост по такой схеме, то он у вас 99% не заработает (при определенных условиях можно добиться работы этого моста, но эти условия весьма экзотичны). UPD: Как подсказали в комментариях тут еще и транзисторы нарисованы верх-ногами, так что не заработает 100%.

Почему? Для открытия полевого транзистора N типа (а именно такие транзисторы нарисованы на схеме) нужно подать на его затвор определенное напряжение относительно его Истока (Source). Но к чему у нас подключен исток верхних транзисторов? К мотору (другой вывод которого подключен к земле через нижний транзистор в момент работы). А на моторе у нас какое напряжение? Номинальное, ну скажем стандартные 12В. Т.е. чтобы открыть верхний транзистор, нам на его затвор надо подать 12В+[напряжение открытия], т.е. как правило не менее 17В, а лучше и все 22В(ведь чем больше напряжение - тем меньше сопротивление транзистора), относительно земли. При этом по этой схеме затворы верхних и нижних транзисторов соединены вместе. Но если на затвор нижнего транзистора подать 22В, то он скорее всего просто сгорит, т.к. у большинства полевых транзисторов максимально допустимое напряжение на затворе (относительно истока) - 20В. Кроме того, данная схема может создать иллюзию того, что транзисторами можно управлять с помощью логических уровней, что не верно.

Как же быть? Есть два основных варианта.

а)Чтобы не морочиться с получением напряжения выше напряжения питания - заменить верхние транзисторы на полевики P типа. При такой замене - управление несколько упростится. Для открытия P транзистора его затвор нужно будет подключить к земле, а для закрытия - к питанию. Т.е. получать напряжение выше чем напряжение питания схемы нам уже не нужно. Однако, мы все равно не можем управлять транзисторами с помощью логических уровней (исключая случаи, когда напряжение мотора соответствует напряжению логических уровней). Т.е. нам все равно нужен некий драйвер для управления транзисторами.
Есть и еще одна проблема - P транзисторы обладают более плохими характеристиками чем аналогичные (комплементарные) N транзисторы, кроме того их банально меньше в природе, так что подобрать подходящий транзистор будет сложнее, а греться он будет сильнее.

б)Использовать специальные драйверы, которые умеют подавать на затворы верхних транзисторов напряжение большее, чем напряжение питания, а все транзисторы сделать N типа. Таких драйверов много, но нужно иметь ввиду, что большинство их них используют схему повышения напряжения называемую bootstrap. Она использует переключаемый конденсатор, для повышения напряжения на затворе. Недостаток такой схемы в том, что она не работает если транзистор постоянно включен или выключен. В случае, когда такие схемы используются, например, в импульсных блоках питания - это не страшно, ведь там транзистор никогда не бывает постоянно включен или выключен - на его затвор постоянно подается ШИМ сигнал. В случае же с управлением мотором - такие ситуации не только возможны, а постоянны, т.к. одна из сторон моста обычно не управляется ШИМ сигналом при вращении в одну сторону.

Альтернативой служат драйверы со встроенным источником питания с повышенным напряжением. Обычно это либо импульсный boost преобразователь, либо схема на переключаемых конденсаторах (в отличие от bootstrap - никак не связанная с процессом управления затворами и работающая от собственного генератора).

Но кроме этого есть еще одна очень веская причина использовать специализированный драйвер для управления транзисторами. Дело в том, что как уже было сказано выше - у затвора транзистора есть определенная емкость. Из-за этого нельзя мгновенно перевести транзистор из открытого в закрытое состояние и наоборот - этот процесс неизбежно занимает некоторое время, связанное с зарядкой/разрядкой емкости затвора. В течение этого времени транзистор находится в промежуточном состоянии - не до конца открытом/закрытом. При этом сопротивление транзистора резко возрастает, а значит резко возрастает и нагрев транзистора. Если бы мы не использовали ШИМ, то эта проблема бы вряд ли нас волновала бы, но при использовании ШИМ наш транзистор открывается и закрывается 20000 раз в секунду, соответственно 40000 раз в секунду он находится в промежуточном состоянии и греется.

И вот величина времени переключения очень критична. Представим, что допустим транзистор переключается за 5мкс - вроде не много, но помножим на 40000 и получим 200мс, а это значит, что транзистор 20% времени (0.2с от 1с) находится в промежуточном состоянии и жутко греется. При таком раскладе он очень быстро перегреется и сгорит. Поэтому время переключения нужно делать как можно меньшим и счет идет на десятки и сотни наносекунд!

Для того, чтобы быстро перезарядить затвор и тем самым сократить время, в котором транзистор находится в промежуточном состоянии нам нужен драйвер затвора, который может выдавать большой ток, потому что выходные линии микроконтроллеров, которые, как правило используются для генерации ШИМ и управления моторами большой ток выдать не могут. Типично хорошие драйверы затворов могут выдавать ток 1...5А. Это может звучать несколько парадоксально, что для управления транзистором, который вроде как управляется напряжением и у которого затвор вообще ни к чему не подключен (по сути полностью изолированный микроскопический кусочек металла) нужен драйвер, выдающий несколько ампер (разумеется импульсно). Несколько раз не очень продвинутые электронщики, мне даже не верили, когда я это все рассказывал. Ведь они когда-то приняли за догму "полевой транзистор управляется напряжением", что в общем-то правильно, да вот только с оговорками.

В продаже имеется множество разных драйверов транзисторов для разных задач, с разными характеристиками. Драйвер, на котором в итоге остановился я для управления мостом - MC33883. Простой, в то же время делает все что нужно. В этом драйвере встроена схема повышения напряжения на конденсаторах. У него четыре выхода - два для нижних ключей моста, два для верхних ключей моста и они могут выдавать ток до 1А на затвор. Есть также возможность выключить все ключи с помощью линии ENABLE, что оказалось очень удобно в моем случае.

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

Еще из интересных драйверов, которые я применяю (только для нижних ключей) - MC33152 и LM5110. Первый на напряжения побольше, второй на напряжения поменьше.

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

3)Алгоритм управления.


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

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

Почему так получается и что с этим делать? Двигатель постоянного тока - индуктивная нагрузка. И это сразу же создает много нюансов при управлении. Как известно, ток на индуктивности не может меняться мгновенно. А значит, что ток, который течет через двигатель в момент закрытия нижнего ключа обязательно куда-то потечет. А потечет он по единственно возможному пути (не считая пробоя и прочего экстрeмизмa) - через встроенный в верхний закрытый ключ диод. На картинке: красным - ток через мост при открытом нижнем транзисторе, синим - ток через мост при закрытом нижнем транзисторе.

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

При прохождении тока через диод, напряжение на нем, как известно падает, на ~0.8В (зависит от тока и транзистора). При этом, раз напряжение падает, а ток течет - значит на диоде выделяется тепло. При токе 10А выделяемая мощность составит 8 Вт. При ШИМе 50% это будет 4 Вт средней мощности, от чего впрочем не легче - для транзистора в SOIC-8, это однозначно смертельная мощность. Как быть? Очень просто - на время закрытия нижнего ключа надо открывать верхний. Бытует распространенное заблуждение, что ток через полевой транзистор может течь только в одну сторону. Это не так, ток может течь в любую сторону. И если мы откроем верхний транзистор, то ток через него совершенно спокойно потечет.

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

При этом, как правило, падение напряжение будет в разы меньше, чем на диоде. Ну например в случае с IRF8788, который я упоминал выше, при токе 10А оно составит примерно 0.03В, что в ~26 раз меньше, чем на диоде. А выделяемая мощность составит всего 0.3 Вт, что уже является более чем приемлемым и эквивалентно небольшому нагреву даже для такого маленького транзистора в SOIC-8 без радиатора. Таким образом, верхний ключ с одной стороны моста мы открываем постоянно, а с другой стороны верхний и нижний ключи мы открываем и закрываем в противофазе.

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

Все было бы хорошо, но с применением данного метода управления ключами мы сталкиваемся с еще одной проблемой. Дело в том, что, как было сказано выше, транзисторы открываются и закрываются не мгновенно, переход из одного в другое состояние занимает некоторое время, даже при применении драйвера. Это приводит к тому, что если мы попробуем одновременно закрыть верхний транзистор в одной половине моста и открыть нижней в ней же, то в течение какого-то времени оба транзистора будут одновременно находиться в промежуточном состоянии. А это означает то, что они фактически будут замыкать между собой питание и землю, что разумеется выразится в большом сквозном токе и большом нагреве. В лучшем случае у схемы просто не очень сильно возрастет ток и нагрев, в худшем все сгорит.

Чтобы избежать этой проблемы нужно открывать и закрывать транзисторы с небольшой задержкой, так, чтобы один сначала полностью закрылся и только после этого второй начал открываться. Такие задержки удобно генерировать средствами управляющей микросхемы. В моем случае это замечательный микроконтроллер серии STM32F030. В нем есть таймер TIM1, который позволяет аппаратно генерировать во-первых ШИМ сигналы в противофазе, во-вторых так называемые deadtime-ы - задержки между переключениями сигналов.

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

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

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

Про эволюцию модулестроения или как правильно управлять двигателями постоянного тока

При весьма небольших размерах плата может спокойно крутить весьма мощные двигатели. Чаще всего ей приходится крутить двигатели от автомобильных стеклоподъемников с током заклинивания около 16-18А (средний рабочий ток с нагрузкой 4-10А). При этом плата не требует даже радиатора, нагреваясь при интенсивной работе градусов до 50. При этом большая часть тепла на плате исходит вовсе не от транзисторов, а от дорожек и от клемм, которые кстати не рассчитаны на ток больше 8А и являются по сути главным ограничителем максимального тока на плате.

В заключение - нет какого-то одного простого решения при разработке мощных драйверов моторов. Нельзя поставить только хорошие транзисторы или только реализовать правильный алгоритм управления. Решение - комплексное:
-правильно подбираем транзисторы
-правильно подбираем драйверы для управления транзисторами
-правильно подбираем алгоритм управления драйверами


Обещанная ссылка на потрясающий цикл статей про Н-мосты: http://www.modularcircuits.com/blog/articles/h-bridge-secrets/

P.S. Не смотря на приличный объем текста - в посте покрыты лишь самые базовые данные об управлении двигателями постоянного тока, опущенно множество подробностей и тонкостей и вероятно допущены какие-то неточности - не ругайте сильно :)

Как-то так :)

Оставить комментарий

Michail Mitroschkin 14.01.2020 09:25
Почитал статьи Andras Tantos. В них даже намека нет на сброс напряжения замыканием обмотки двигателя накоротко. Это режим торможения и при управлении ШИМ на малой скорости будет происходить неизвестно что. Все режимы в статье рассчитаны на использование диодов или измерение напряжение на обмотке.
Архив записей в блогах:
По мотивам здесь и многих других там . Были времена, когда я не очень хорошо думал в адрес картофеля на тему стабильности и производительности. Но потом я собрался наконец с духом и: – переустановил Шиндовс, впервые за 5 лет, – накатил Путинки на неё апдейтов, – поставил последние д ...
Россия не будет участвовать в проекте «Южный поток». Проект будет закрыт. Об этом, как сообщает РИА Новости, сообщил глава «Газпрома» Алексей Миллер . Ну вот Европа, наконец, и довыеживалась. Третий энергопакет, монополия, независимость от российского газа. Теперь сосите ногу, дорогие ...
4 уголовные статьи, вина в войне в Южной Осетии, неоднократные обвинения в государственных растратах – все это далеко не окончательный список «достижений» политического деятеля Михаила Николозовича Саакашвили. И все эти, мягко говоря, не самые порядочные поступки вовсе не отворачивают от ...
Надо отдать должное работникам ножа и топора, т.е. СУПа: за относительно небольшое время им удалось почти полностью уничтожить такое уникальное явление, как ЖЖ. Сделали это с помощью СК, который можно увеличить, только попав в Топ. Чем Топ ЖЖ отличается от прежних Топов? Раньше в Топ п ...
Приношу свою искреннюю благодарность профессору, доктору исторических наук Сергею Викторовичу Смирнову (УрФУ, г. Екатеринбург), выступившему рецензентом моей второй монографии. С.В. Смирнов — крупнейший в нашей стране специалист по истории Белой эмиграции на Дальнем Востоке (1922 — ...