Расширенное управление электродвигателями

Ответить
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Расширенное управление электродвигателями

Сообщение Oleg »

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

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

Допустим, у нас есть двигатель с двумя выходными контактами: А и Б (рисунок ниже). Когда на контакт А подается положительный потенциал, а на Б - отрицательный, двигатель вращается в одном направлении. Если же поменять полярность соединений, двигатель станет вращаться в противоположном направлении.

Таким образом, если вы хотите управлять направлением вращения электродвигателя, то нужно каким-то образом менять полярность тока, на него поступающего. Этой цели служит специальная электрическая схема, называемая Н-мостом.
Управление направлением вращения двигателя
Управление направлением вращения двигателя
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Н-мосты

Сообщение Oleg »

Принцип работы Н-моста показан на рисунке ниже. В этом его варианте разберемся сначала, как для переключения полярности тока используются переключатели, а уж затем перейдем к работе с транзисторами и интегральными схемами.
Н-мост, в котором используются переключатели
Н-мост, в котором используются переключатели
Н-мост, в котором используются переключатели.jpg (8.86 КБ) 3057 просмотров
Итак, если все четыре переключателя разомкнуты, то на двигатель не подается ни какого тока. Но если переключатели S1 и S4 - замкнуты, а S2 и S3 - разомкнуты, ток пойдет от положительного полюса источника питания через переключатель S1 к контакту А двигателя, далее через сам двигатель и через переключатель S4 к отрицательному полюсу источника питания, и двигатель станет вращаться в одном направлении.

Если переключатели S1 и S4 разомкнуть, а S2 и S3 замкнуть, то на этот раз ток от положительного полюса источника питания будет поступать уже на контакт Б двигателя и далее - через сам двигатель и переключатель S2 к отрицательному полюсу источника питания, обратив направление вращения.

В таблице показано, как будет работать эта схема при различных положениях ее переключателей: 0 означает, что переключатель разомкнут, 1 что замкнут (пропускает ток), а х - что состояние переключателя не имеет значения.

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

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

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

• Иная ситуация когда короткого замыкания нет, но контакты двигателя фактически соединены друг с другом. В результате возникает интересный эффект - торможение двигателя, когда он быстро замедляется, если только что был в движении, или отказывается вращаться, если уже был в состоянии покоя. И если при этом двигатель вращал колеса, например, игрушечного вездехода, то при помощи торможения этому вездеходу можно не дать скатиться со склона.

Таблица 8.1. Комбинации переключателей
Комбинации переключателей
Комбинации переключателей
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Н-мост на интегральной микросхеме L293D

Сообщение Oleg »

Среди конструкторов-любителей популярна содержащая Н-мост интегральная микросхема L293D (ею мы воспользуемся чуть далее В разд. «Эксперимент: управление направлением и скоростью вращения двигателя»). Эта микросхема отлично подходит для работы с небольшими двигателями, рассчитанными на силу тока не более 600 мА и напряжение до 36 В. Полную информацию о ней можно найти в ее спецификации по адресу: http://www.ti.com/lit/ds/symlink/293.pdf.

Микросхема 1293D содержит два Н-моста, а также некоторые дополнительные компоненты, позволяющие автоматически отключить интегральную схему, если она начнет перегреваться. И хоть L293D вполне можно сломать, если неправильно использовать, сделать это все-таки весьма непросто.

Основные параметры этой микросхемы таковы:
•напряжение двигателя варьируется от 4,5 до 36 В;
•длительный ток двигателя 600 MA:
•пиковая сила тока в двигателе - 1,2 А;
•на всех выходах стоят диоды, защищающие от эпизодических всплесков напряжения, производимых двигателем;
•наличие теплозащиты;
•совместимость с 3- и 5-вольтовой логикой (Pi и Arduino).

На рисунке ниже приведена схема внутреннего устройства и контактов этой микросхемы и показано, как с ее помощью управлять двумя двигателями постоянного тока. Как можно видеть, схема содержит четыре Н-полумоста, а не два полноценных Н-моста. Каждый Н-полумост можно считать мощным цифровым выводом, способным подавать и отводить токи силой до 600 мА. Поэтому работа с этой микросхемой отличается большой гибкостью.
Схема внутреннего устройства и контактов микросхемы L293D
Схема внутреннего устройства и контактов микросхемы L293D
Микросхема оснащена отдельными контактами для приема логических (управляющих) сигналов и для питания двигателей. Это дает возможность, скажем, управлять 6-вольтовым двигателем с помощью логических сигналов 3,3 В от Raspberry Pi (в этом мы убедимся в разд. «Эксперимент: управление направлением и скоростью вращения двигателя»).

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

Функции контактов микросхемы L293D:
Функции контактов микросхемы L293D
Функции контактов микросхемы L293D
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Эксперимент: управление направлением и скоростью вращения двигателя

Сообщение Oleg »

В этом эксперименте мы воспользуемся микросхемой L293D, разместив ее на макетной плате. Схема эксперимента в сборе: макетная плата с микросхемой L293D,

Raspberry Pi, двигатель постоянного тока, источник питания - показана на рисунке
Схема эксперимента по управлению скоростью и направлением вращения электродвигателя. с помощью Raspberry Pi в сборе
Схема эксперимента по управлению скоростью и направлением вращения электродвигателя. с помощью Raspberry Pi в сборе
Комплектующие

В этом эксперименте для работы с Arduino и Raspberry Pi понадобятся следующие комплектующие:
IC1 - Микросхема с Н-мостом L293D
С1 - Конденсатор 100 нф
C2 - Конденсатор 16 В 100 мкФ
М1 - Небольшой двигатель постоянного тока с напряжением питания 6 В
Батарейный отсек 4 АА (6 В)
400-точечная беспаечная макетная плата
Перемычки "папа-папа"
Перемычки "мама-папа" (только для Рі)

Схема эксперимента

Схема этого эксперимента показана на рисунке ниже. Raspberry Pi или Arduino подают управляющее напряжение 5 В на логический контакт 16 микросхемы L293D. Питание для двигателя поступает от 6-вольтового комплекта батареек на ее контакт 8.

Практически здесь используется всего один из Н-мостов микросхемы, поэтому ее контакт EN2 подключается к заземлению, чтобы деактивировать неиспользуемую ее часть.

Контакты ENI, INI и IN2 подключаются к цифровым выходным контактам Raspberry Pi или Arduino.
Электрическая схема подключения Н-моста микросхемы L293D
Электрическая схема подключения Н-моста микросхемы L293D
КОНДЕНСАТОРЫ

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

Показанное на схеме, положение конденсаторов весьма типично для интегральной схемы с Н-мостом. Конденсатор С1 называется развязывающим. Его следует располагать максимально близко к микросхеме - между логическим сигналом и заземлением. Емкость конденсатора С1 может не превышать 100 нФ (это очень мало), однако он поможет избавиться от всяческих электрических помех, которые могут по- вредить логике микросхемы.

Конденсатор С2 представляет собой как бы резервуар энергии, которого может хватить на какое-то время, но эта энергия питает именно двигатель, а не тратится на логику переключения. Емкость этого конденсатора обычно гораздо выше, чем у С1, - как правило, 100 мкФ или более.


Компоновка макетной платы

Прежде чем подключать Н-мост к Arduino или Raspberry Pi, можно поэкспериментировать со схемой в автономном режиме: проверить и двигатель, и логику переключения, взяв для них питание от одного и того же 6-вольтового комплекта батареек. Такой вариант отлично подходит, если вы хотите опробовать работу микросхемы без подключения к Arduino или Raspberry Pi, но когда дело доходит до использования Н-моста с Arduino или Raspberry Рі, лучше разграничить питание двигатель должен получать энергию от комплекта батареек, а логика микросхемы обеспечиваться энергией от Arduinо или Raspberry Pi.

На рисунке ниже продемонстрирована компоновка макетной платы для автономного эксперимента. Для работы с Arduino или Raspberry Рі эту компоновку переделывать практически не придется вам потребуется просто переставить некоторые перемычки.
Компоновка макетной платы для автономной проверки Н-моста
Компоновка макетной платы для автономной проверки Н-моста
Размещая на макетной плате компоненты, особое внимание уделите микросхеме. Ее обязательно нужно расположить правильно: маленький вырез с одной ее стороны должен быть направлен к верхней части макетной платы в ряду 10. Левее и выше этого выреза должен располагаться контакт 1.

Теперь можно подключить батарею. Изначально двигатель вращаться не должен.

ПО ЧАСОВОЙ СТРЕЛКЕ И ПРОТИВ ЧАСОВОЙ СТРЕЛКИ
Когда у меня написано, что мой двигатель вращается по часовой стрелке или против часовой стрелки, ваш двигатель может вращаться как раз в противоположном направлении. И если ваш двигатель вращается против часовой стрелки, когда у меня сказа но, что он должен вращаться по часовой, то это не проблема, т. к. он будет вращаться по часовой, когда у меня написано «против часовой».

Если вы хотите, чтобы вращение вашего двигателя совпадало с описываемым, можете поменять местами подводящие провода

Иногда бывает сложно определить, в каком направлении вращается двигатель, - ведь это просто голый металлический вал. Вы можете его просто пощупать если аккуратно зажать вал большим и указательным пальцами, то станет понятно, куда он крутится Можно также отрезать короткую полоску цветной клейкой ленты и приклеить ее на шпиндель, чтобы она послужила своеобразным флажком.


Автономный эксперимент

Независимо от того, в каком направлении должен вращаться двигатель, - по часовой стрелке или против нее, контакт Enable должен быть подключен к +Ѵ. Что- бы двигатель начал вращаться, например, по часовой стрелке, подключите к +Ѵ свободный конец той перемычки, которая уже подсоединена к IN1, а IN2 подключите к ряду GND, расположенному по правому краю макетной платы.
Запускаем двигатель по часовой стрелке
Запускаем двигатель по часовой стрелке
Теперь мы собираемся обратить направление вращения двигателя. Соединение с Enable можно не трогать, но нужно поменять подключение к IN1 и IN2, так, чтобы IN1 теперь соединялся с GND, a IN2 - с +V, как показано на рисунке.

Обратите внимание: на рисунках перемычки IN1 и IN2 показаны более толстыми, чтобы их было проще отличать от других перемычек.

Теперь, когда мы убедились, что Н-мост как таковой работает, можно подключить нашу схему к Arduino (либо, если вы предпочитаете работать с Raspberry Pi, можете сразу перейти к разд. «Экспериментируем с Raspberry Pi»).
Запускаем двигатель против часовой стрелки
Запускаем двигатель против часовой стрелки
Подключение Arduino

На рисунке показано, как следует с помощью перемычек подключать макетную плату к Arduino Uno.
Контакт Arduino под номером 11, используемый в качестве Enable, поддерживает ШИМ, и мы воспользуемся контактом Enable микросхемы L293D, чтобы управлять скоростью двигателя. К IN1 и IN2 можно подключать любые цифровые контакты Arduino контакты 10 и 9 были выбраны по той простой причине, что они расположены рядом с контактом 11, и когда все провода лежат рядом, это выглядит аккуратнее.

Arduino подает напряжение 5 В на логическую часть L293D, но, что важно, при этом мы не запитываем от Arduino двигатель, питание двигателя по-прежнему осуществляется от батареек.

Макетная плата, подключенная к Arduino перемычками "папа-папа", показана на рисунке и готовая к работе.
Подключение макетной платы с микросхемой Н-моста к Arduino
Подключение макетной платы с микросхемой Н-моста к Arduino
Схема управления двигателем с помощью Arduino в сборе
Схема управления двигателем с помощью Arduino в сборе
Программа для Arduino

В той программе для Arduino, которую мы использовали в разд. «Эксперимент: управление скоростью двигателя постоянного тока» (на основе ШИМ), мы пользовались монитором последовательного интерфейса, позволявшим отправлять двигателю команды на изменение скорости. В этом эксперименте та программа дополнена теперь она отправляет команды, регулирующие не только скорость, но и направление вращения.

Скетч Arduino для этого эксперимента:

Код: Выделить всё

const int enablePin = 11;  // (1)
const int in1Pin = 10;
const int in2Pin = 9;

void setup() {                 // (2)
  pinMode(enablePin, OUTPUT);
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  Serial.begin(9600);
  Serial.println("Enter s (stop) or f or r followed by Duty Cycle (0 to 255). E.g. f120");
}

void loop() {                         // (3)
  if (Serial.available()) {
    char direction = Serial.read();   // (4)
    if (direction == 's') {           // (5)
      stop();                         // (6)
      return;
    }
    int pwm = Serial.parseInt();      // (7)
    if (direction == 'f') {           // (8)
      forward(pwm);
    }
    else if (direction == 'r') {
      reverse(pwm);
    }
  }
}

void forward(int pwm)          // (9)
{
  digitalWrite(in1Pin, HIGH);
  digitalWrite(in2Pin, LOW);
  analogWrite(enablePin, pwm);    
  Serial.print("Forward ");
  Serial.println(pwm);
}

void reverse(int pwm)          // (10)
{
  digitalWrite(in1Pin, LOW);
  digitalWrite(in2Pin, HIGH);
  analogWrite(enablePin, pwm);
  Serial.print("Reverse ");
  Serial.println(pwm);
}

void stop()                    // (11)
{
  digitalWrite(in1Pin, LOW);
  digitalWrite(in2Pin, LOW);
  analogWrite(enablePin, 0);
  Serial.println("Stop");
}
Этот скетч относительно длинный, но он хорошо структурирован с помощью функций, на основе которых код удобно видоизменять и заново использовать в собственных проектах. Уточним некоторые моменты скетча по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:

1. Скетч начинается с определения констант для трех управляющих контактов.

2. Функция setup() задает эти контакты в качестве выводов, а затем запускает последовательную передачу со скоростью 9600 бод и посылает сообщение- инструкцию монитору последовательного интерфейса, напоминая вам о форма те сообщений, применяемых для управления двигателем.

3. Функция loop() бездействует, пока Serial.available не «доложит», что поступило новое входящее сообщение от монитора последовательного интерфейса.

4. Первый символ сообщения считывается как буква, обозначающая направление, это может быть s (стоп), f (вперед) или r (обратно).

5. Если первая буква s, то вызывается функция stop, и команда return гарантирует, что никакой последующий код из функции loop() выполняться не будет.

6. Команда s не требует параметра pmw, поэтому и мы не пытаемся прочитать его из сообщения - его там просто не будет.

7. Если код направления f или r (не s), то параметр извлекается из оставшейся части сообщения при помощи parseInt.

8. Затем вызывается одна из функций: forward или reverse, в зависимости от того, каков символ direction.

9. Функция fоrward устанавливает in1Pinв значение HIGH, а in2Pin - в значение том, чтобы указать направление вращения двигателя, а затем использует функцию analogWrite для управления скоростью двигателя при этом задействуется enablePin и параметр pwm, сообщаемый forward. Наконец, сообщение с подтверждением действия отправляется обратно на монитор последовательного интерфейса.

10. Функция reverse практически аналогична fоrward , за исключением того, что in1Pinполучает значение LOW, а in2Pin - HIGH, и поэтому двигатель вращается в противоположном направлении.

11. Функция stop сбрасывает все управляющие контакты в состояние LOW.

Загружаем и выполняем программу

Чтобы проделать эксперимент с Arduino, подключите к Arduino USB-кабель и 23. грузите скетч. Откройте монитор порта, введите команду f100 в верхней части окна и нажмите кнопку Send(Отправить) - двигатель должен начать очень Медленно вращаться в каком-то направлении.
Управление двигателем при помощи команд последовательного интерфейса
Управление двигателем при помощи команд последовательного интерфейса
Затем попробуйте ввести команду f255 - двигатель начнет вращаться на полной скорости. Команда s остановит двигатель, команда r100 медленно запустит его в противоположном направлении, а команда r255 разгонит двигатель в обратном направлении на полную скорость.

Подключение Raspberry Pi

Преимущество использования интегральной микросхемы с Н-мостом такой, как L293D, - в том, что ее управляющим контактам для регулирования работы двигателя требуется очень слабый ток. В ее спецификации указано, что ток неизменно должен оставаться ниже 100 мкА (0,1 мА), а это значит, что можно безо всяких проблем использовать выводы Raspberry Pi, рассчитанные на малые токи.

Если у вас есть и Raspberry Pi, и Arduino, и вы только что закончили часть эксперимента, связанную с Arduino, то, чтобы подготовить макетную плату для работы с Raspberry Pi, потребуется всего лишь заменить перемычки «папа-папа» (ими мы подключали к макетной плате Arduino) на провода «мама-мама» и подключать их к GРІО-колодке Raspberry Pi.

На рисунке показано, как подключить Raspberry Pi к макетной плате, а готовая к работе система управления двигателем с помощью Raspberry Pi была показана выше
Подключение макетной платы с микросхемой Н-моста к Raspberry Pi
Подключение макетной платы с микросхемой Н-моста к Raspberry Pi
Программа для Raspberry Pi

Код: Выделить всё

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

enable_pin = 18    # (1)
in_1_pin = 23
in_2_pin = 24

GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(in_1_pin, GPIO.OUT)
GPIO.setup(in_2_pin, GPIO.OUT)
motor_pwm = GPIO.PWM(enable_pin, 500)
motor_pwm.start(0)

def forward(duty):          # (2)
    GPIO.output(in_1_pin, True) 
    GPIO.output(in_2_pin, False) 
    motor_pwm.ChangeDutyCycle(duty)
    
def reverse(duty):          # (3)
    GPIO.output(in_1_pin, False) 
    GPIO.output(in_2_pin, True) 
    motor_pwm.ChangeDutyCycle(duty)    

def stop():
    GPIO.output(in_1_pin, False) 
    GPIO.output(in_2_pin, False) 
    motor_pwm.ChangeDutyCycle(0)
    
try:         
    while True:        # (4)
        direction = raw_input('Enter direction letter (f - forward, r - reverse, s - stop): ')
        if direction[0] == 's':
            stop()
        else:
            duty = input('Enter Duty Cycle (0 to 100): ')
            if direction[0] == 'f':
                forward(duty)
            elif direction[0] == 'r':
                reverse(duty)
        
finally:  
    print("Cleaning up")
    GPIO.cleanup()
Этот код в значительной мере основан на примерах кода Руthon из других экспериментов. Уточним некоторые моменты программы по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:

1. В верхней части текста программы находится типичный код с установкой GPIO и определениями контактов. Контакт Enable на L293D служит для управления скоростью двигателя, поэтому подключенный к нему контакт 18 конфигурируется как ШИМ-вывод.

2. Функция forward настраивает контакты IN1 и IN2 таким образом, чтобы они контролировали направление движения, а затем устанавливает заполнение для ШИМ-канала.

3. Если сравнить ее с функцией reverse, то заметно, что значения контактов IN1 и 12 поменялись местами. Функция stop останавливает работу направляющих контактов (оба переходят в значение LOW), а коэффициент заполнения становится равен 0.

4. Главный цикл while предлагает пользователю ввести команду, а затем, в зависимости от нее, вызывает функцию stop, forward или reverse.

Загружаем и выполняем программу

Запустите программу в режиме администратора при помощи команды sudo - и сможете убедиться, что она функционирует практически как аналог на Arduino, предлагая вам задавать скорость и направление вращения двигателя.

Код: Выделить всё

$ sudo python full_motor_control.py 
Enter direction letter (f - forward, r - reverse, s - stop) : f
Enter Duty Cycle (0 to 100) : 50
Enter direction letter (f - forward, r - reverse, s - stop) : f
Enter Duty Cycle (0 to 100) : 100
Enter direction letter (f - forward, r - reverse, s - stop) : s
Enter direction letter (f - forward, r - reverse, s - stop) : r
Enter Duty Cycle (0 to 100): 50
Enter direction letter (f - forward, r - reverse, s - stop) : r
Enter Duty Cycle (0 to 100) : 100
Enter direction letter (f - forward, r - reverse, s - stop) : s
Enter direction letter (f - forward, r - reverse, s - stop) :
АККУРАТНО ОБРАЩАЙТЕСЬ С ДВИГАТЕЛЕМ
Представьте себе, что случится, если машина едет на полной скорости, а затем водитель вдруг дает задний ход. В случае с небольшими двигателями, к которым не подключены никакие массивные детали, это обычно проблем не вызывает. Но вы, возможно, обнаружите, что если работать с Arduino или Raspberry Pi, запитанными от того же источника, что и сам двигатель, то Raspberry Pi может аварийно прекратить работу, а Arduino - сброситься. Это происходит потому, что при резкой смене направлений через устройства идет очень сильный ток, из-за чего электропитание резко падает.

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

Это необходимо учитывать при разработке управляющего ПО для сравнительно крупных двигателей. Чтобы бережно обращаться с двигателем, перед каждой сменой на правления его лучше останавливать (делать паузу, в течение которой он действительно успеет остановиться) и лишь затем вновь запускать уже в противоположном направлении. Если в Arduinо вы применяете вспомогательные функции forward и reverse[/i ]из разд."Эксперимент: управление направлением и скоростью вращения двигателя", у вас может получиться примерно такой код:

forward(255);
delay(200);
reverse (255);
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Другие интегральные микросхемы для работы с Н-мостом

Сообщение Oleg »

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

Интегральная микросхема L298N

Рассмотренная нами ранее интегральная микросхема L293D выдерживает максимальный ток силой 600 мА- это весьма немного. Если вам нужно что-то посильнее, то, к счастью, у L293D есть «старший брат» - интегральная микросхема L298N (www.sparkfun.com/datasheets/Components/ ... /L298N.pdf).

Основные достоинства этой микросхемы таковы:

• напряжение двигателя может достигать 50 В;
• на двигатель постоянно подается ток силой 2 А;
• пиковая сила тока, подаваемого на двигатель, 3 А;
• совместимость с 3- и 5-вольтовой логикой (Pi и Arduino).
На рисунке показана схема контактов этой микросхемы. Конфигурация ее очень напоминает L298D, но L298N позволяет, кроме всего прочего, отслеживать силу тока, проходящего через двигатель, если добавить в схему пару маломощных резисторов (см. далее).
Интегральная схема 1298N с двойным Н-мостом
Интегральная схема 1298N с двойным Н-мостом
Как показано на рисунке, интегральная схема заключена в кожух, привинченный к теплоотводу, чтобы можно было переключать более высокие мощности. Контакты микросхемы (таблица) выстроены в два ряда со смещением таким образом, микросхема не встанет на стандартную макетную плату. Чтобы работать с ней, проще всего купить недорогой готовый модуль для Н-моста, в котором эта микросхема как раз установлена.

Большинство контактов микросхемы L298N точно соответствуют аналогичным контактам микросхемы L293D. Точно так же, как и на L293D, полумосты можно активировать попарно, чтобы управлять мощностью двигателя, когда задействован Н-мост, при помощи ШИМ.
Схема контактов микросхемы L298N
Схема контактов микросхемы L298N
схема контактов
схема контактов
Возможность измерять ток, идущий через двигатель, может пригодиться, если, например, вы хотите зафиксировать, что двигатель заклинило (что-то мешает ему крутиться). Когда такое случается, ток, поступающий на двигатель, резко усиливается. Этот феномен имеет название ток при заторможенном роторе. Если вам не требуется измерять ток, идущий через каждый из двух Н-мостов, то контакты 1 и 15 следует подключить к заземлению.

А вот чтобы измерить этот ток, надо подключить между контактом 1 и заземлением, а также между контактом 15 и заземлением резисторы с малым сопротивлением, но рассчитанные на высокую силу тока. Сопротивление резисторов выбирается невысоким, чтобы они не вносили ощутимых помех в работу двигателя. Мощность же резисторов должна быть достаточной, чтобы можно было справиться с той теплотой, которую они будут генерировать. В такой схеме напряжение на резисторе будет пропорционально току, который через него проходит, и это напряжение можно измерить на аналоговом входе Arduino.

Допустим, мы работаем с двигателем на 12 В, который обычно использует ток силой 500 мА, но при заторможенном роторе через него идет ток силой 2 А. Вполне можно пожертвовать напряжением и снизить его до 0,5 В, чтобы иметь возможность отследить затормаживание двигателя.

На рисунке ниже показаны микросхема L298N, резистор и двигатель в схеме замера тока для одного из двух Н-мостов.
Измерение тока двигателя
Измерение тока двигателя
Контакт CURRENT SENSE A микросхемы подключен к аналоговому входу Arduino

(допустим, А0), а два контакта: IN1 и IN2 - к цифровым выходам Arduino D2 и D3 и управляют направлением хода двигателя. Максимальный ток составляет 2 А, а мы стремимся, чтобы напряжение на резисторе составляло 0,5 В. Для этого нам понадобится резистор со значением:

R-V/I 0,5/2=0,25 OM.

Скорректировав эту величину до ближайшего стандартного значения, получим резистор с сопротивлением 0,27 Ом или 270 мОм (миллиом! - только не путайте с МОм, мегаом). Таким образом, при силе тока 2А фактическое напряжение составит:

V=1xR=2 А х 0,27 Ом = 0,54 В.
Чтобы рассчитать класс мощности резистора, умножим напряжение на нем (0,54 В) на ток (2 А) и получим класс мощности чуть выше 1 Вт. Пожалуй, в таком случае стоит работать с резистором 2 Вт, чтобы у нас был некоторый допуск на ошибку.

Контакт CURRENT SENSE А можно подключить непосредственно к аналоговому входу Arduino (у Raspberry Pi нет аналоговых входов), после чего мы сможем измерить напряжение. Поскольку напряжение ниже тех 5В, с которыми может работать аналоговый вход Arduino, приблизительное значение analogInput при силе 2 А (0,5 В) будет около 100, т. е. по-прежнему сохраняется довольно высокая точность. В следующем скетче для Arduino показано, как можно запрограммировать Arduino для автоматического отключения двигателя в случае, если сила тока превысит 1,5 А, и произойдет затормаживание двигателя:

Код: Выделить всё

const float R = 0.27:
const int in1pin = 2;
const int in2pin = 3;
const int sensePin = A0;

void setup() {
    pinMode(in1pin, OUTPUT); 
    pinMode(in2pin, OUTPUT);
    // двигатель будет вращаться вперед
    digitalWrite(in1pin, HIGH); 
    digitalWrite(in2pin, LOW);
}

void loop()
    int raw = analogRead(sensePin);
    float v = raw / 204.6; // 204.6 - 1024 / 5V 
    float i = v / R;
    if (1 > 1.5) {
        // остановить двигатель
        digitalWrite(in1pin, LOW);
        digitalWrite(in2pin, LOW);
    }
}
Функция цикла здесь принимает аналоговое значение. Это значение с аналогового входа имеет максимальную величину 1023 при 5 В, поэтому для преобразования приблизительного аналогового значения в значение напряжения его нужно разделить на 204.6, т. е. на 1033/5. Затем силу тока можно вычислить по закону Ома.

Интегральная микросхема ТВ6612FNG

Интегральные микросхемы L293D и L298N присутствуют на рынке уже много лет, и сегодня они считаются весьма старомодными устройствами, в которых используются биполярные, а не МОП-транзисторы. Поэтому такие микросхемы обычно разогреваются даже при сравнительно слабом токе.

Гораздо более современной интегральной микросхемой, похожей на L293D по классу мощности, является микросхема ТВ6612FNG (www.sparkfun.com/ datasheets/Robotics/TB6612FNG.pdf). Она также оснащена двумя Н-мостами.

Максимальное напряжение двигателя при работе с микросхемой ТВ6612FNG составляет всего 15 В, а общий ток с обоих Н-мостов должен держаться ниже 1,2 А, хотя пиковые значения могут достигать 3,2 А. Микросхема также оснащена встроенным механизмом защитного отключения при перегреве.

Интегральная микросхема ТВ6612FNG доступна только в корпусе для поверхностного монтажа, но можно купить готовые модули, которые используют эту микросхему и при этом легко встают на макетную плату.
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Модули с Н-мостами

Сообщение Oleg »

Можно и не конструировать Н-мост самостоятельно, а просто воспользоваться готовым модулем со встроенным. Н-мостом. Такие модули бывают самых разных форм и размеров и рассчитаны на разные токи двигателя. На ниже показана подборка модулей с Н-мостами для управления двигателями:
Модули с Н-мостами
Модули с Н-мостами
слева изображен самый дешевый модуль. В нем используются две микросхемы L9110S, каждая из которых представляет собой единичный Н-мост. Четыре зажимные клеммы подключаются к двум двигателям постоянного тока, а колодка на шесть контактов это заземление (GND), VSS (слабый ток напряжением 5 В) и четыре контакта, задающие направление движения, точно так же, как и на L293D:

• в центре показан модуль, использующий микросхему TB6612FNG компании Sparkfun. К соединительным контактам модуля можно припаять собственные штыревые контакты, чтобы он обрел возможность устанавливаться на макетную плату, или, как показано здесь, воспользоваться колодками с гнездами и перемычками «папа-папа»;

справа представлен модуль, содержащий микросхему L298N, оснащенную теплоотводом. По обеим сторонам теплоотвода в модуле присутствуют защитные диоды, есть даже регулятор напряжения, позволяющий подавать на Arduino напряжение до 5 В. Правда, для использования на Raspberry Pi силы подаваемого тока может не хватить. Резисторов для считывания величины тока, проходящего через двигатель, в этом модуле нет.

Встречаются и более мощные контроллеры для двигателей. Чем выше допустимая сила тока, тем дороже прибор.

Можно найти не только отдельные модули с Н-мостами, но и полноценные шилды, вставляемые в Arduino, а также платы, подсоединяемые к Raspberry Pi. На рисунке ниже показаны три такие платы:
Шилды с Н-мостами для Arduino и Raspberry Рі
Шилды с Н-мостами для Arduino и Raspberry Рі
• плата слева - это шилд Arduino от Sparkfun для управления двигателем на основе микросхемы L298P (это разновидность микросхемы 1298, но в корпусе для поверхностного монтажа). На этой плате имеется монтажное поле, к которому можно подсоединять другие компоненты;
• в центре изображен мощный шилд с Н-мостом, вас удивит, как легко он управляется с токами до 30 А;
справа показана плата RasPiRobot V3, накладываемая на колодочные контакты Raspberry Pi и использующая микросхему TB6612FNG для управления двумя двигателями постоянного тока.
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Проект: пресс для расплющивания банок из-под газировки на Arduino

Сообщение Oleg »

Пресс для расплющивания банок, работающий на Arduino
Пресс для расплющивания банок, работающий на Arduino
Прототип такого устройства в действии показан в ролике по адресу youtu.be/qbWMEIFnq21

Линейные ИСПОЛНИТЕЛЬНЫЕ МЕХАНИЗМЫ ОЧЕНЬ СИЛЬНЫЕ!
В проекте описан прибор для расплющивания жестяных банок, но этот механизм с тем же успехом раздавит и руку, и что угодно еще, что можно по небрежности сунуть под пресс. Поэтому будьте осторожны, особенно когда только начинаете использовать пресс и хотите что-то в нем подправить.


Комплектующие

Кроме Arduino Uno для сборки этого проекта понадобятся следующие комплектующие:

6-дюймовый линейный исполнительный механизм на 12 В
Модуль 1298 с Н-мостом
4 перемычки папа-папа»
2 перемычки «мама-папа»
Переходник с круглым гнездом и винтовыми зажимами:
Источник питания (12 В и не менее 3 А)
Небольшие дощечки и немного фанеры Шурупы для дерева и столярные инструменты

Приобретая линейный исполнительный механизм, имейте в виду, что стоимость их в зависимости от эксплуатационных характеристик может существенно различаться. Для баночного пресса вам понадобится устройство примерно с 6-дюймовым рабочим ходом. Уточните максимальный ток линейного исполнительного механизма, который берете, а также подберите модуль с Н-мостом, который с таким током справится. Линейный исполнительный механизм, с которым работал я, принимает максимальный ток 3А, поэтому я воспользовался Н-мостом на основе микросхемы L298.

Подключение

Ha рисунках ниже показаны схема подключений для этого проекта и крупный план изображения Arduino и модуля с Н-мостом.

Модуль L293 имеет соединительные контакты, которые по умолчанию оставляют активными оба Н-моста. Таким образом, нам потребуется всего два выхода Arduino, которые будут подключены к контактам IN1 и IN2 модуля.
Схема подключения для баночного пресса
Схема подключения для баночного пресса
Схема управления баночным прессом на основе Arduino и модуля с Н-мостом в сборе
Схема управления баночным прессом на основе Arduino и модуля с Н-мостом в сборе
Удобно, что в модуле с Н-мостом есть и регулятор напряжения, обеспечивающий на выходе 5 В. Его можно подключить к 5-вольтовому контакту Arduino и запитать плату от него.

Механическая конструкция

Как можно видеть, проект представляет собой небольшую деревянную конструкцию. На одном конце конструкции установлен исполнительный механизм (при помощи креплений, которые поставляются вместе с ним). Шток исполнительного механизма крепится к деревянной «давилке», расплющивающей банку при движении до упора. Две боковые ограничивающие фанерные планки нужны, чтобы в процессе расплющивания банка не выскочила из пресса.
Я не даю точных размеров, поскольку, вероятно, ваш исполнительный механизм будет немного отличаться по размеру от моего. Лучше всего установить исполнительный механизм на деревянную платформу, а затем замерить все расстояния. Не забудьте оставить небольшой зазор между полностью выдвинутой «давилкой» и упором - в противном случае пресс может просто высадить этот упор.

Программа для Arduino

Пресс срабатывает после нажатия кнопки сброса - т. е. по команде сброса Arduino автоматически запускает исполнительный механизм. Скетч Arduino для этого проекта:

Код: Выделить всё

const int in1Pin = 10;
const int in2Pin = 9;

const long crushTime = 30000;  // (1)

void setup() {     // (2)
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  
  crush();
  stop();
  delay(1000);
  reverse();
  stop();
}

void loop() {    
}

void crush()      // (3)
{
  digitalWrite(in1Pin, LOW);
  digitalWrite(in2Pin, HIGH);   
  delay(crushTime);
}

void reverse()   // (4)
{
  digitalWrite(in1Pin, HIGH);
  digitalWrite(in2Pin, LOW);
  delay(crushTime);
}

void stop()       // (5)   
{
  digitalWrite(in1Pin, LOW);
  digitalWrite(in2Pin, LOW);
}
Уточним некоторые моменты скетча по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:

1. Хотя линейный исполнительный механизм автоматически останавливается после того, как заканчивает рабочий ход, этот период (в моем двигателе 30 секунд) определяет, как долго двигатель должен оставаться включенным, прежде чем отвести «давилку» обратно и дать возможность положить следующую банку.
2. Функция setup контролирует работу всего проекта. Задав оба управляющих контакта в качестве выводов, программа сразу же запускает процесс. Расплющивание выполняется при помощи функции crush

Ответить