Я возился с щеточным двигателем постоянного тока, 2N2222 и ШИМ Arduino, чтобы получить разные скорости от моего двигателя. Теперь, основываясь на видео-уроке, который я смотрел на YouTube, было рекомендовано поставить резистор 1 кОм между выводом ШИМ и базой, по-видимому, для защиты ардуино в случае, если транзистор сломается. Я сделал то, что мне сказали, следуя этой схеме (мой источник питания 1,5 В, а R1 1K, а не 220)
Но двигатель не будет вращаться, когда вывод микроконтроллера выдаст 5 В (полная нагрузка). Итак, я подумал, ладно, позвольте мне не возиться с моим ардуино на случай, если проблема в нем, поэтому я подключил базу через резистор 1 кОм к тому же 1,5 В, питающему двигатель ... все еще ничего ... поставил новый резистор на 1 кОм... все еще ничего... поэтому я снял резистор на 1 кОм и подключил базу прямо к источнику 1,5 В, и двигатель начал вращаться.
Может кто-нибудь объяснить мне, почему это так? Из того, что я читал, разве напряжение на базе не определяет ток, протекающий от коллектора к эмиттеру? -_- <-- растерянное лицо
Для вращения двигателю требуется определенное количество тока. То, сколько тока может проходить через транзистор от коллектора к эмиттеру и, следовательно, через двигатель, контролируется током, проходящим через транзистор от базы к эмиттеру, умноженным на усиление тока транзистора, известное как «h fe ». Базовый резистор уменьшил этот ток до слишком низкого значения, чтобы позволить двигателю вращаться даже при усилении транзистором. Используйте то, что вы знаете о требуемом токе двигателя, напряжении на транзисторе от базы к эмиттеру во время насыщения, напряжении от вывода микроконтроллера к эмиттеру и h fe транзистора, чтобы вычислить правильное максимальное значение резистора для использования. Например:
300 мА ( двигатель I ) / 70 А/А (h fe ) = 4,2 мА
(5 В (V MCU ) - 0,7 В (V BE(SAT) ) /4,2 мА = 1,024 кОм
Обратите внимание, что напряжение питания двигателя не участвует в этих расчетах, но оно все равно должно быть достаточно высоким после вычитания напряжения от коллектора к эмиттеру в соответствии со спецификациями двигателя.
Как и в случае любого NPN-транзистора, вы должны ограничить ток на базе вашего 2N2222, поэтому требуется R1, потому что NPN-транзисторы являются частями, управляемыми током (например, светодиоды).
При использовании NPN-транзистора в качестве переключателя желательно использовать его в режиме насыщения, поскольку это минимизирует падение напряжения на коллекторе (см V_CE(sat)
. ). Для этого вы должны ограничить ток на базе до 1/10 от I_C
, то есть тока, с которым вы хотите управлять своим двигателем.
В противном случае, без насыщения, ваш транзистор может перегреться/выдать слишком большое падение напряжения.
Обратите внимание, что контакт GPIO на вашем Arduino (ATmega328p) может подавать только до 20 мА. Таким образом, вы ограничены 200 мА для вашего двигателя. Которого может быть недостаточно.
При вычислении значения R1 вы должны учитывать падение напряжения на базе (т.е. V_BE(sat)
) и падение напряжения на выводе GPIO (при 20 мА, сравните V_OH
с выходным током в таблице данных ATmega328p).
См. также, скажем , техническое описание Onsemi 2N2222A для фигур V_CE(sat) и V_BE(sat).
Альтернативой использованию NPN-транзистора для переключения двигателя является использование полевого МОП-транзистора с логическим уровнем. В отличие от транзистора NPN, он управляется напряжением, поэтому он более энергоэффективен. Кроме того, с помощью полевого МОП-транзистора вы можете переключать гораздо более высокие нагрузки с небольшим током, доступным на выводе GPIO.
Я рискну и предположу, что когда вы подключили базу транзистора к источнику питания 1,5 В, вы фактически подключили его к двигателю. Это объяснило бы, почему поведение было таким, как вы описали.
Предполагая, что ваша реализация схемы была правильной, а транзистор не задом наперед (это меня постоянно достает; стоит перепроверить), проблема с этой схемой почти наверняка связана с напряжением вашего источника питания. Транзистор отключит около 0,6 В в переходе база-эмиттер и, вероятно, ближе к 0,8 В между коллектором и эмиттером, в зависимости от того, насколько он насыщен. 5 В через 1 кОм даст 5 мА, что при h fe около 100 (довольно стандартно) дает максимальный ток 500 мА через коллектор.
Этого должно быть достаточно для небольшого игрушечного мотора, но вы не получите 500 мА через мотор с питанием 1,5-0,8В = 0,7В, особенно если это всего лишь батарейка или две. Как и в комментариях, предложенных в комментариях, вам следует рассмотреть источник питания, больше похожий на вашу схему, 9 В. Я бы сказал, что 5 В будет минимум, или, может быть, 3 В.
Резистор 1K важен не потому, что он защищает Arduino от обратной связи (хотя она тоже есть), а потому, что он предотвращает короткое замыкание своих 5 В через транзистор, что может сжечь то одно, то другое (хотя ток, подаваемый от Arduino ограничен, я думаю, менее 100 мА). Вы обязательно должны использовать его всегда .
Наконец, в зависимости от того, как вы питаете Arduino, вы можете разделить его источник питания с двигателем. Если вы питаете его от разъема для бочек, я на 80% уверен, что вы можете подключиться напрямую к этому источнику питания, используя разъем V in , который находится рядом с 5 В и 3,3 В, и все они (я представляю Uno ). Эта линия не будет подвергаться никакому регулированию (опять же, на 80% уверена), поэтому вам не придется беспокоиться о перегрузке компонентов Arduino. И наоборот, вы можете получить приличный источник питания и запитать от него двигатель и Arduino, выполнив обратную операцию и подключив контакт V in Arduino к напряжению источника питания, как это и предполагалось...
Удачи; надеюсь, это поможет.
пометки
пометки
Курт Э. Клотье
Ро