Raspberry Pi:Примеры/Управление направлением вращения вала электродвигателя постоянного тока с помощью микросхемы L293D: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Myagkij переименовал страницу [[Raspberry Pi:Примеры/Управление направлением вращения вала электродвигателя постоянного тока c помощью микросхем…)
 
Нет описания правки
 
Строка 16: Строка 16:
Драйвер двигателя [[L293D]] позволяет подключить 2 двигателя. Каждый канал оснащается тремя управляющими выводами. Вывод '''EN(Enable)''' - отвечает за включение и выключение канала(им же мы и регулируем скорость вращения двигателя, благодаря подачи [[ШИМ-сигнал]]а), его мы соединяем с 12-мы выводом GPIO(18ый BCM):
Драйвер двигателя [[L293D]] позволяет подключить 2 двигателя. Каждый канал оснащается тремя управляющими выводами. Вывод '''EN(Enable)''' - отвечает за включение и выключение канала(им же мы и регулируем скорость вращения двигателя, благодаря подачи [[ШИМ-сигнал]]а), его мы соединяем с 12-мы выводом GPIO(18ый BCM):


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
enable_pin = 18
enable_pin = 18
</syntaxhighlight>
</syntaxhighlight>
Строка 22: Строка 22:
Выводы 1A и 2A микросхемы [[L293D]] отвечают за направление вращения двигателя, их мы соединяем с 16 и 18 выводом GPIO(23ий и 24ый номер BCM соответсвенно):
Выводы 1A и 2A микросхемы [[L293D]] отвечают за направление вращения двигателя, их мы соединяем с 16 и 18 выводом GPIO(23ий и 24ый номер BCM соответсвенно):


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
in1_pin = 23
in1_pin = 23
in2_pin =24
in2_pin =24
Строка 57: Строка 57:
В программе за изменение направления двигателя отвечают две функции:
В программе за изменение направления двигателя отвечают две функции:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
def clockwise():
def clockwise():
     GPIO.output(in1_pin, True)     
     GPIO.output(in1_pin, True)     
Строка 94: Строка 94:
====Python 2.X====
====Python 2.X====


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
import RPi.GPIO as GPIO
import RPi.GPIO as GPIO
import time
import time
Строка 131: Строка 131:
====Python 3.X====
====Python 3.X====


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
import RPi.GPIO as GPIO
import RPi.GPIO as GPIO
import time
import time

Текущая версия от 18:24, 14 мая 2023

Проверка/Оформление/Редактирование: Мякишев Е.А.


Черновик


Управление направлением вращения вала электродвигателя постоянного тока c помощью микросхемы L293D

Данный пример демонстрирует как изменять не только скорость вращения, но и направление вращения вала электродвигателя постоянного тока, используя мостовую схему управления.

Для примера на рисунке внизу представлена мостовая схема управления двигателем на простых выключателях. Изменяя путь прохождения тока вы меняете полярность выводов драйвера, а значит и направление вращения. Замыкая для примера переключатели S1 и S4 и оставляя разомкнутыми S2 и S3, левая сторона двигателя имеет положительную полярность,а правая отрицательную и вращение двигателя будет в одну сторону. Замыкая переключатели S2 и S3 и оставляя разомкнутыми S1 и S4, правая сторона двигателя имеет положительную полярность,а левая отрицательную и вращение двигателя будет в противоположную сторону.

В этой простой схеме есть недостаток, если замкнуть переключатели S1 и S2 или S3 и S4, плюс источника питания соединится напрямую с минусом, что равнозначно короткому замыканию. Поэтому для данного примера мы будем использовать микросхему драйвера двигателя L293D, которая избавит нас от необходимости собирать сложную схему на транзисторах и не имеющая описаного выше недостатка.

Схематичное изображение принципа работы драйвера моторов:

Драйвер двигателя L293D позволяет подключить 2 двигателя. Каждый канал оснащается тремя управляющими выводами. Вывод EN(Enable) - отвечает за включение и выключение канала(им же мы и регулируем скорость вращения двигателя, благодаря подачи ШИМ-сигнала), его мы соединяем с 12-мы выводом GPIO(18ый BCM):

enable_pin = 18

Выводы 1A и 2A микросхемы L293D отвечают за направление вращения двигателя, их мы соединяем с 16 и 18 выводом GPIO(23ий и 24ый номер BCM соответсвенно):

in1_pin = 23
in2_pin =24

Назначение контактов драйвера моторов L293D(SN754410):

  • GND(4, 5, 12, 13) - выводы для подключения к земле;
  • Vcc2(8) - вывод для подключения напряжения питания нагрузки;
  • Vcc1(16) - вывод для подключения питания микросхемы драйвера моторов;
  • 1Y и 2Y(3, 6) - вывод для подключения первого двигателя;
  • 1A и 2A(2, 7) - выводы для управления первым двигателем;
  • 1,2EN(1) - вывод для включения и отключения первого двигателя;
  • 3Y и 4Y(11, 14) - вывод для подключения второго двигателя;
  • 3A и 4A(10, 15) - выводы для управления первым двигателем;
  • 3,4EN(9) - вывод для включения и отключения второго двигателя;

Таблица состояний входов и выходов драйвера моторов L293D(SN754410)

Вход Выход
A EN Y
H H H
L H L
X L Z

В программе за изменение направления двигателя отвечают две функции:

def clockwise():
    GPIO.output(in1_pin, True)    
    GPIO.output(in2_pin, False)
 
def counter_clockwise():
    GPIO.output(in1_pin, False)
    GPIO.output(in2_pin, True)

Как видно из кода, изменяя комбинацию подаваемых на входы микросхемы драйвера двигателя логических уровней сигналов, мы можем влиять на направление вращения двигателя.

Программа из раздела код после запуска запрашивает у пользователя направление и скорость. При вводе f - вал вращается вперед, а при вводе r - назад. Скорость вращения задается цифрами(от 0 до 9).

Необходимое оборудование

Схема

Будьте осторожны при обращении с портами GPIO вашего Raspberry Pi. Помните входы и выходы GPIO расссчитаны на напряжение +3,3В


Обратите внимание! Микросхема L293D расположена зазубриной слева!


Все манипуляции по подключению производите только при отключенном питании платы Raspberry Pi


Код

Python 2.X

import RPi.GPIO as GPIO
import time

enable_pin = 18
in1_pin = 23
in2_pin =24

GPIO.setmode(GPIO.BCM)
GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(in1_pin, GPIO.OUT)
GPIO.setup(in2_pin, GPIO.OUT)

pwm = GPIO.PWM(enable_pin, 500)
pwm.start(0)

def clockwise():
    GPIO.output(in1_pin, True)    
    GPIO.output(in2_pin, False)
 
def counter_clockwise():
    GPIO.output(in1_pin, False)
    GPIO.output(in2_pin, True)
 
while True:
    cmd = raw_input("Command, f/r 0..9, E.g. f5 :")
    direction = cmd[0]
    if direction == "f":
        clockwise()
    else: 
        counter_clockwise()
    speed = int(cmd[1]) * 10
    pwm.ChangeDutyCycle(speed)

Python 3.X

import RPi.GPIO as GPIO
import time

enable_pin = 18
in1_pin = 23
in2_pin =24

GPIO.setmode(GPIO.BCM)
GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(in1_pin, GPIO.OUT)
GPIO.setup(in2_pin, GPIO.OUT)

pwm = GPIO.PWM(enable_pin, 500)
pwm.start(0)

def clockwise():
    GPIO.output(in1_pin, True)    
    GPIO.output(in2_pin, False)
 
def counter_clockwise():
    GPIO.output(in1_pin, False)
    GPIO.output(in2_pin, True)
 
while True:
    cmd = input("Command, f/r 0..9, E.g. f5 :")
    direction = cmd[0]
    if direction == "f":
        clockwise()
    else: 
        counter_clockwise()
    speed = int(cmd[1]) * 10
    pwm.ChangeDutyCycle(speed)

См.также

Внешние ссылки