Как контролировать скорость двигателя постоянного тока 12 В с помощью Arduino?

Я пытаюсь понять, как контролировать скорость двигателя постоянного тока 12 В с помощью Arduino и батареи 12 В.

Я хочу разделить «силовую» и «управляющую» части схемы, чтобы Arduino и датчики получали только 5 В.

До сих пор это то, что я пробовал:

введите описание изображения здесь

Я могу контролировать скорость двигателя, изменяя ШИМ контакта 3 на Arduino. Это открывает транзистор NPN ( BUF654 ).

Проблема в том, что скорость двигателя меняется недостаточно.

От 0% до 50% ШИМ на контакте 3 двигатель глохнет.

Выше 50% двигатель почти достигает максимальной скорости.

Интересно, смогу ли я иметь линейную вариацию:

0% - 10% : very slow
10% - 20% : slow
20% - 50% : normal speed
50% - 80% : fast
80% - 100% : RELEASE THE KRAKEN!

Вот напряжение и ток, которые потребляет двигатель при использовании только батареи или предыдущей схемы:

+----------------------------+---------+--------+
| Directly on 12V battery    | 12.7 V  | 61 mA  |
+----------------------------+---------+--------+
| Arduino circuit (100% PWM) | 12.47 V | 60 mA  |
+----------------------------+---------+--------+
| Directly on 9V battery     | 9 V     | 54 mA  |
+----------------------------+---------+--------+
| Arduino circuit (60% PWM)  | 9 V     | 52 mA  |
+----------------------------+---------+--------+

Что я сделал не так? Может ли проблема исходить от моего двигателя?

Этот диод подключен к транзистору?
Да, это. Он предотвращает повреждение компонентов при остановке двигателя (обратном токе).
Есть ли конкретное преимущество в использовании этого транзистора вместо классического L293D?
Я совсем новичок в транзисторах и не знаю «классических». Есть ли причина использовать L293D?
Встроенные прижимные диоды, возможность реверса направления. Я не знаю, является ли BUF654 хорошим или плохим выбором для этого. Но в техническом описании L293D специально указаны катушки приводных двигателей в качестве основного приложения, а в техническом описании BUF654 этого нет.
Просто дружеское напоминание. Хотя ваш вопрос был хорошо принят здесь, было бы еще лучше, если бы вы разместили правильную принципиальную схему своей цепи, а не электрическую схему Fritzing. Вот некоторые правила и рекомендации по рисованию хороших схем и хорошие инструменты для рисования схем .

Ответы (3)

Ваш диод находится в неправильном положении - он должен быть на двигателе (блокировка!), а не на транзисторе.

Диод предназначен для того, чтобы ток, протекающий в катушке двигателя, продолжал течь в том же направлении, когда транзистор выключается. Когда транзистор выключится, напряжение на коллекторе транзистора возрастет, поскольку оно вытекало из двигателя. От В С Е ( С А Т ) оно поднимется выше напряжения питания и прекратится только при пробое транзистора (или когда он начнет прозваниваться паразитной емкостью). Подключив диод от коллектора транзистора к шине +12 В, вы предотвратите превышение напряжения на транзисторе 12 В и позволите току двигателя продолжать протекать.

То, как у вас есть диод на вашем рисунке, он будет проводить только в том случае, если напряжение упадет ниже земли. Это могло произойти только в том случае, если кто-то механически очень быстро вращал двигатель в обратном направлении (и в результате ваш диод вызвал бы увеличение напряжения на шине 12 В).

Я не понимаю, почему он должен быть через двигатель, поскольку он должен вращаться в обоих направлениях (используя переключатель DPDT ПОСЛЕ транзистора). Во многих учебниках, которые я читал, диод использовался на транзисторе, чтобы предотвратить повреждение компонентов. Если я что-то пропустил, можете объяснить, пожалуйста?
Ладно, он должен быть там, где СЕЙЧАС стоит мотор. У нас нет возможности узнать, что у вас может быть на уме. Если вы добавите переключатель DPDT, он будет подключен к общим клеммам переключателя (или, проще говоря, от коллектора транзистора к шине +12).
Я понимаю вашу точку зрения, но я не понимаю, почему это что-то меняет. Единственная разница в этом случае заключается в том, что он предотвращает протекание тока через транзистор при реверсировании. Если я поставлю диод на двигатель (или переключатель DPDT в моем случае), может ли это сломать транзистор, если слишком большой ток будет течь обратно?
Спасибо за ваше редактирование, теперь это намного яснее :) Я попробую. Кажется, я неправильно понял назначение этой крошечной штуки.
Нет, это защитит транзистор. Ток, который должен протекать через ваш двигатель (создавая крутящий момент), в основном тратится на нагрев транзистора. Вот почему вы не получаете большого крутящего момента.

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

Эти шипы могут убить ваш транзистор. Другое решение — то, что вы сделали — это защитить сам транзистор.

Обратите внимание, что невозможно заставить двигатель постоянного тока вращаться очень медленно. Это происходит из-за механической конструкции двигателя. Если вы используете двигатель без редуктора, вы увидите, что 30%-100% ШИМ имеют некоторое значение, а 0..30% ничего не делают. С мотор-редуктором (шестерни имеют дополнительную нагрузку) вам может потребоваться довести скорость до 50% только для того, чтобы он запустился.

Вы можете сделать несколько вещей:

  • используйте функцию карты, чтобы сопоставить ваши потребности в мощности 0..100% с 50..80% выхода ШИМ. Обратите внимание, что скорость не всегда линейна по отношению к входу PWM, поэтому вам может понадобиться таблица линеаризации, чтобы исправить это.
  • Если ваша цель — двигатель, который может вращаться очень медленно, рассмотрите возможность использования шагового двигателя. Если вам нужен очень медленный и средний диапазон, это хорошо.
  • Если вам нужно от очень медленного до очень быстрого, вам лучше пойти с двумя двигателями и дифференциальной коробкой передач, если вы хорошо разбираетесь в механике.
  • Другое решение — использовать трехфазный двигатель переменного тока и управлять им с помощью микроконтроллера. Это решение не для новичков, но это де-факто решение для современных электромобилей. Хитрость в том, что обмотки двигателя всегда находятся под напряжением, поэтому у вас есть постоянный крутящий момент. При изменении частоты управляющего сигнала у вас есть очень точный контроль над скоростью.

Может ли это быть статическое трение? Что произойдет, если ваш скетч arduino сначала запустит двигатель (максимальный ШИМ), а затем медленно уменьшит его в течение нескольких секунд?

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

Извините, мой первый вопрос был недостаточно ясен. Я использую шестерни, и очень медленное движение, которое я хочу, выходит из коробки передач.