TIP120 + Arduino: управляем мощной нагрузкой через транзистор
TIP120 это биполярный NPN-транзистор Дарлингтона на 60 В и 5 А в корпусе TO-220. Он нужен, когда нагрузка потребляет больше, чем может дать пин Arduino: лампа, обмотка реле, двигатель, нагреватель. Транзистор сам по себе ничего не «усиливает» по напряжению, он управляет током нагрузки маленьким током базы.
Подключение выглядит просто: три провода транзистора, резистор между базой и пином, обратный диод на индуктивной нагрузке. Больше всего ошибок связано не с распиновкой, а с двумя вещами: отсутствием обратного диода и перегревом.
В симуляторе транзистор не моделируется, но скетч с analogWrite на пин 9 проверяется на мотор-виджете: скорость на выходе видна прямо в браузере.
Грабль номер один: индуктивная нагрузка
Пин Arduino даёт 5 В и ток до 40 мА, для постоянной нагрузки рекомендуется не больше 20 мА. TIP120 решает эту задачу: минимальный коэффициент усиления по току у Дарлингтона 1000, то есть ток базы 1 мА даёт до 1 А в коллекторе. Резистор между базой и пином Arduino ставится обязательно, он ограничивает ток базы и защищает пин.
Грабль с индуктивной нагрузкой: мотор, реле, соленоид. В момент отключения обмотка генерирует выброс обратной ЭДС, и по величине он доходит до десятков вольт для реле и до сотен вольт для мотора. Это напряжение идёт на коллектор транзистора и пробивает его. Спасает обратный диод, который ставят параллельно обмотке: катод (полоска на корпусе) к плюсу питания, анод к минусу обмотки. В момент отключения ток обмотки начинает течь через диод, и напряжение на транзисторе не выходит за пределы питания.
Подключение мотора 12 В
#define MOTOR_PIN 9void setup() { pinMode(MOTOR_PIN, OUTPUT); }void loop() { for (int s = 0; s <= 255; s += 5) { analogWrite(MOTOR_PIN, s); delay(50); } delay(1000); for (int s = 255; s >= 0; s -= 5) { analogWrite(MOTOR_PIN, s); delay(50); } delay(1000);}Схема целиком: плюс 12 В на плюс мотора, минус мотора на коллектор TIP120, эмиттер на общий GND. База транзистора через резистор 1 кОм на пин 9 Arduino. Обратный диод параллельно мотору, катодом к плюсу 12 В. Земля Arduino и земля блока питания должны быть общей, иначе транзистор не будет открываться.
Распиновка TO-220 читается так: смотрите на лицевую сторону, то есть ту, где напечатан номер, и ноги вниз. Слева Base, в центре Collector, справа Emitter. Если транзистор впаян в плату и смотреть на него неудобно, ориентируйтесь на то, что корпус у Base плоский с вырезом, а у Collector и Emitter скошены по-разному.
Грабль с ШИМ: analogWrite на пин 9 даёт на базе прямоугольные импульсы, и транзистор работает в режиме переключения. Но Дарлингтон медленный: в нём есть накопленный заряд, и при высокой частоте он не успевает полностью насытиться. Практический потолок для TIP120 находится в диапазоне 1-5 кГц, а родная частота ШИМ Arduino на пине 9 равна 980 Гц. Для быстрых переключений, например для регулятора скорости коллекторного мотора, берите MOSFET.
| Параметр | TIP120 (Darlington) | IRF530 (MOSFET) |
|---|---|---|
| Тип | NPN биполярный | N-channel MOSFET |
| Ток | 5 А (с радиатором) | 14 А |
| Падение | ~1.5-2 В | ~0.1-0.3 В |
| Напряжение управления | 5 В через 1 кОм | 5-10 В на затворе |
| Частота ШИМ | до 1-5 кГц | до 100 кГц |
| Тепловыделение | Высокое | Низкое |
Что сначала не получилось
Первый мотор я подключил без обратного диода, потому что в схеме из интернета его не было. Плата работала минуты две, потом транзистор пробило, и при следующем включении Arduino перестала видеть компьютер. Диод 1N5408, поставленный параллельно обмотке, решил вопрос за пять минут вместе с новым транзистором.
Вторая ошибка была в резисторе базы. Я подключил базу напрямую к пину Arduino, без резистора. Мотор крутился, но ток базы упирался в ограничение пина, транзистор не доходил до насыщения, и вместо нормального вращения я получил запах горелой изоляции и очень слабый момент. Резистор 1 кОм в базу вернул всё на место.
Третий случай показал, почему нельзя ориентироваться на ощущения. На 12 В и токе 3 А падение напряжения на насыщенном Дарлингтоне даёт рассеивание около 4.5 Вт, и это в режиме постоянного тока. Мотор крутился нормально, но транзистор без радиатора нагревался так, что пахло. Радиатор решил вопрос, и с тех пор я не включаю силовой транзистор без него.
Личный опыт: управление вентилятором
Первое, что я собрал на TIP120, это вентилятор 12 В с ШИМ-регулировкой. Проверял я это не на глаз, а по току: при полной мощности потребление мотора было около 0.35 А, и это значение повторялось от запуска к запуску. На средней скорости ток падал примерно вдвое, и это подтвердило, что analogWrite действительно регулирует мощность, а не просто включает и выключает.
Дальше я посчитал тепло. При падении напряжения на насыщении около 1.5-2 В и токе 0.35 А на транзисторе рассеивается примерно 0.5-0.7 Вт, и на маленьком радиаторе это почти не греет. А вот на 5 А тот же транзистор должен был рассеять около 10 Вт, и там радиатор становится обязательным. С этой цифрой и стоит начинать: посчитайте ток нагрузки, умножьте на падение, и сразу поймёте, нужен ли радиатор.
Авторская позиция: что взять новичку
TIP120 хорош тем, что его сложно сжечь: ток базы ограничен резистором, а транзистор не перегревается от ошибки в скетче. Для первого проекта с мотором или реле это правильный выбор. Но если задача упирается в скорость, в нагрев или в потребление, сразу берите MOSFET: у IRF530 падение в десятки раз меньше, и греться приходится заметно меньше. Практичное правило: до 1 А можно спокойно брать TIP120, дальше уже стоит считать тепло и думать про радиатор. И никогда не забывайте про обратный диод, это самая частая причина смерти транзистора.