Управление DC моторчиком с Raspberry Pi.

В этом видео:
– Как подключить DC моторчик к Raspberry Pi;
– Реактивное сопротивление DC моторчика – наглядный пример;
– Как расчитать величину R-резистора подключённого к Базе транзистора.

Сегодня о том как можно контролировать электромотор с помощью raspberry pi.
Я хочу сделать машинку с управлением через raspberry pi и по этому тестирую различные решения которые пригодятся для построения моего проекта.
При тестировании данной схемы я чуть не спалил raspberry pi, об этом чуть дальше.

Собрать и протестировать такую схему я захотел после того как посмотрел ряд видео от других ютуберов.
Мне очень понравилось следующее видео и канал – много полезной информации, канал на английском, но человек говорит очень чётко. Если интересуетесь схемотехникой – обязательно посмотрите.
Gaven MacDonald

Итак. После старта управляющего скрипта мотор начинает крутиться (при подаче сигнала с raspberry pi), на первый взгляд ничего особенного, но суть в том, что многие элементы, такие как электромоторы могут потребрять большие токи или требовать большее напряжение для своей работы, чем может обеспечить raspberry. Например, ряд моторчиков могут питаться от 9 или 12 вольтового источника – raspberry pi может выдать только 5В и порядка 700mA тока максимум(с пина 2, с других пинов меньше).
Для решения подобной проблемы можно использовать транзисторы – подавая маленький управляющий сигнал на Базу транзистора можно управлять-пропускать через Коллектор-Эммитор гораздо большие токи, в схеме могут использоваться большие напряжения.
Моя схема:
it-v41.5 - schema-01
У меня есть NPN транзистор BC 547C. Я подключил к его Базе пин от Raspberry pi, буду им контролировать ток через Коллектор-Эммитор. Эммитор подключен к Земле на Raspberry Pi, а к Коллектору подключен моторчик. Питается моторчик через пин 2, который выдаёт 5 Вольт прямо с блока питания raspberry pi. Параллельно моторчику включён диод – у меня сейчас в наличии только светодиоды и я подключил катодом к плюсу, а анодом к коллектору транзистора.
В электромоторчике есть катушка и она как и любой индукционный элемент сопротивляется изменению тока и поля проходящего через него. Наличие диода позволяет избавиться от ненужных токов в схеме и перенаряжений. Как вы видите на видео светодиод загорается, но колёса ещё не крутятся – в этот момент поступает сигнал с raspberry на Базу и начинает идти ток через Коллектор-Эммитор. Магнитное поле в моторчике сопротивляется и появляется обратный ток – который и проходит через светодиод – в обычном состоянии светодиод не горит, так как он подключен катодом к плюсу. Светодиод продолжает гореть и после того как моторчик начал крутиться, это происходит по тому что я использую Широтно-Импульсную Модуляцию(ШИМ) для изменения скорости вращения двигателя и соответственно колёс у машинки. Скорость возрастает – значит меняется величина тока через моторчик, а раз меняется величина тока – катушка в моторчике продолжает сопротивляться изменению тока. После того как величина тока достигла максимума, raspberry держит максимальную величину 5 секунд. На это время ток через мотор остаётся постоянным и светодиод гаснет. После этого raspberry производит понижение скорости вращения понижая коэффициент заполнения и ток через моторчик падает – индукция начинает сопротивляться снова и диод загорается.
О Широтно-Импульсной Модуляции(ШИМ) я уже рассказывал в одном из предыдущих видео, если интересно узнать как это работает – переходите по ссылке.

Почему я чуть не спалил стой pi?
Дело в том, что я не занимался точным расчётом тока Коллектор-Эммитер. Этот ток зависит от тока через Базу-Эммитер. Величина тока К-Э равняется току через Б-Э помноженный на коэффициент усиления бету или hFE. Значение этой величины можно найти для имеющегося у вас транзистора в Интернете.
Например, для моего BC547C.
У моего транзистора коэффициент усиления=200 в нормальных условиях.
Я поставил резистор в 1КОм между моим пином и базой транзистора. Raspberry Pi выдаёт напряжение в 3,3В при подаче сигнала на пин, что даёт порядка 3,3мА тока. Таким образом через К-Э может пройтитор в 660мА, что очень много для Raspberry. Конечно есть потеря в цепи базы за счёт напряжения Б-Э и тп, но всё равно величина была критичная. По идее я должен был поставить порядка 3-5КОм, чтобы получить 200-150мА тока через мотор.
Будьте аккуратнее. Делать короткое замыкание между пинами raspberry pi не стоит.

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

Я жду когда ко мне придёт микросхема – мотоконтроллер L293d. С ним всё сильно проще. Об этом сниму отдельное видео.

Самое главное в этом видео – управление устройствами требующие бОльшие токи чем может выдать пин Raspberry pi. Максимальный ток через управляющие пины напомню всего 50мА! А в использованной мной схеме можно было подключить батарейку на 9 или 12 вольт.

Мой скпипт:
it-v41.5 - script
pi@raspberrypi:~/my_python_tests $ cat 4_engine_02_PWM.py
import RPi.GPIO as GPIO
import time GPIO.setmode(GPIO.BOARD)

PIN = [12,16]

GPIO.setup(PIN[1], GPIO.OUT)
print (“Ctrl+C exits the program”)

q = GPIO.PWM(PIN[1], 200)
q.start(0)

try:
while True:
for c in range(0, 101, 2):
q.ChangeDutyCycle(c)
time.sleep(0.3)

time.sleep(5)

for c in range(0, 101, 2):
q.ChangeDutyCycle(100-c)
time.sleep(0.3)

time.sleep(5)

except KeyboardInterrupt:
q.stop()
GPIO.cleanup()

На этом всё.
Удачи!