Управление двигателем постоянного тока без сердечника с помощью ШИМ и MOSFET

Я использую 4 МОП-транзистора логического уровня Si2302 для управления 4 двигателями постоянного тока без сердечника. Скорость двигателей управляется сигналом PWM от Arduino Pro Mini. Блок питания для плат — 3,7 В (4,2 В при полной зарядке) 500 мАч 50C Lipo.

Схема устроена следующим образом:

  • Источник на землю
  • Затвор к выводу ШИМ с резистором 10 кОм на землю.
  • Слив на клемму двигателя 1
  • Клемма двигателя 2 к Vcc
  • Диод на клеммах двигателя

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Двигатель получает значение RPM через джойстик, который подключен к аналоговому входу на Arduiuno. Затем оно преобразуется в значение 0-255 и выводится на выходе ШИМ.

Столкнулся со следующими проблемами в схеме:

  1. Как только я подаю питание на схему, двигатели работают на полных оборотах, пока Arduino не начнет получать данные с джойстика. Затем он устанавливается на число оборотов в минуту, соответствующее положению джойстика. Есть ли способ противостоять этому, чтобы двигатели оставались выключенными до тех пор, пока Arduino не начнет получать значения от джойстика? (Насколько я понимаю, об этом позаботится резистор Rgs 10 кОм.)

  2. Вторая проблема заключается в том, что мосфет никогда полностью не выключается. Это происходит, даже когда джойстик находится в положении 0. Я также пробовал переключать контакты HIGH и LOW, однако двигатель все еще движется. Есть ли средство от этой проблемы?

  3. Когда я измеряю сопротивление между затвором и истоком, полевой транзистор показывает около 6 кОм. Разве это не должно быть около 10 кОм, поскольку резистор Rgs равен 10 кОм? Является ли это признаком того, что мосфет поврежден?

Ответы (3)

Уменьшите резистор 10K до 3,3K или даже 1K.

Устройство Si2302, которое вы используете, имеет пороговое напряжение около 0,65 В, это намного ниже, чем у многих МОП-транзисторов, которые обычно имеют пороговое значение 2–4,5 В.

Все эффекты, которые вы видите, вероятно, связаны с подтягивающим резистором в Arduino (при условии, что он использует процессор AVR). Это может быть где-то между 20K и 100K, и будет отводиться от процессора достаточный ток, чтобы создать напряжение смещения, которое слегка включает MOSFET.

Когда вы измерили сопротивление затвора, он все еще был подключен к Arduino?

Подтягивание можно отключить программно, но, конечно, пока не заработает ПО.

Кевин

Я удалил резистор 10 кОм и припаял резистор 3,3 кОм, но двигатель все еще включен, даже когда ШИМ равен 0. Я даже подключил затвор напрямую к земле (чтобы имитировать НИЗКИЙ уровень на выводе Arduino), и падение напряжения все еще составляет 0,5 В. через клеммы двигателя. Я попробовал это с одним из функционирующих фетров и успешно выключил мотор. Только 1 из 4 мосфетов демонстрирует такое странное поведение. Теперь я почти уверен, что этот мосфет неисправен, и я заменю его и снова проверю схему. Спасибо за ваш ответ.
Подтяжки не активны при загрузке; только один раз включается программным обеспечением.

На Arduino Pro Mini все цифровые контакты (кроме контакта 13, светодиодного индикатора) являются плавающими, пока не будет запрограммировано иное, поэтому, если вы намеренно не активируете внутреннюю подтяжку, ваш подтягивающий резистор должен предотвращать включение полевого транзистора при запуске.

Когда я измеряю сопротивление между затвором и истоком, полевой транзистор показывает около 6 кОм.

Чтение только 6k подозрительно. Однако, чтобы исключить влияние других компонентов, вы должны вынуть полевой транзистор из схемы, а затем измерить сопротивления затвор-сток и затвор-исток с помощью цифрового мультиметра. Наконец, замкните Ворота на Исток и измерьте от Слива (выход +ve метра) до Источника (выход -ve метра). Все показания должны быть выше мегаом. Если соединение затвор-сток или исток-сток повреждено, полевой транзистор может оставаться частично включенным даже при нулевом ШИМ.

Это чтение 6K тоже показалось мне странным. Мое первое предположение заключалось в том, что мосфет был неисправен, но остальные 3 мосфета работали нормально. Сейчас поменяю этот мосфет на новый. Есть ли решение для отключения двигателей при запуске? Разве резистор 10K не должен отключать их, пока Arduino не начнет выдавать значения PWM? Спасибо за ваш ответ.
10к должно хватить. Следите за контактами при запуске, чтобы убедиться, что они не находятся на высоком уровне (если это так, возможно, проблема в вашем коде установки).

Ваша первая проблема возникает после того, как вы включите свою систему, без какого-либо движения джойстика, верно? Может быть, глупо, но вы пытались сделать следующее :):

int motorSpeed1 = 0;
int motorSpeed2 = 0;
int motorSpeed3 = 0;
int motorSpeed4 = 0;

Удачи, С уважением,