Электронный компонент:Моторный кейп v1.0 для Raspberry Pi

Материал из Онлайн справочника
Версия от 20:59, 3 ноября 2017; Myagkij (обсуждение | вклад) (→‎Программа)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

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


Моторный кейп v1.0 для Raspberry Pi [1]

Моторный кейп v1.0 для Raspberry Pi (в оригинале – «Raspberry Pi Motor Driver Board v1.0») основан на чипе Freescale MC33932 (это драйвер моторов, выполненный в виде двойного Н-моста), который может управлять индуктивной нагрузкой с максимальной силой тока 0,5 ампер на один мост. Это позволяет управлять двумя DC-моторами при помощи Raspberry Pi Model B/B+/A+ или Raspberry Pi 2 Model B, причем скоростью и направлением движения каждого мотора можно управлять отдельно.

Моторный кейп v1.0 для Raspberry Pi поддерживает широкий диапазон входного напряжения – между 6 и 28 вольтами. Кроме того, плата оснащена встроенным DC/DC преобразователем, который трансформирует это напряжение и в результате выдает для Raspberry Pi 5-вольтовое питание с максимальной силой тока 1 ампер. Следовательно, для питания Raspberry Pi и двух моторов требуется всего один источник питания.

Купить моторный кейп v1.0 для Raspberry Pi можно по этой ссылке.

Особенности

  • Защита от внешнего короткого замыкания (на контактах VPWR и GND)
  • Ограничение сверхтоков (при помощи ШИМ-регулирования с фиксированным интервалом выключенного состояния)
  • Снижение ограничения тока, зависящее от температуры
  • Совместимость с Raspberry Pi

Характеристики

Параметр Минимальное значение Стандартное значение Максимальное значение Единица измерения
Входное напряжение 6 - 28 Вольты (постоянный ток)
Выходной ток (DC/DC) - 5 вольт и 1 ампер - -
Выходной ток (для каждого канала) - 2 (непрерывная работа) 5 (максимум) Амперы
Частота ШИМ - - 11 кГц
Коэффициент заполнения ШИМ 0 - 100 %
Логические уровни входного напряжения -0.3 - 7 Вольты
Рабочая температура -40 - 120
Размеры 91.2 х 56.15 х 32 Миллиметры

Описание и расположение компонентов

  • J1 – Входной коннектор для постоянного тока. Используется для питания кейпа. Входное напряжение варьируется между 6 и 28 вольтами (постоянный ток). Встроенный преобразователь DC/DC может трансформировать это входное напряжение в 5 вольт постоянного тока, с помощью которых и будет питаться цепь кейпа. Кроме того, этот преобразователь можно использовать для питания микроконтроллерной платы (Arduino/Seeeduino) от контакта 5V (максимальная сила тока – 100 мА)
  • J2 – Выходной коннектор для управления моторами. Контакты Out 1 и Out 2 – для первого мотора, а Out 3 и Out 4 – для второго
  • EN, FT – Перемычки для управления сигналом EN (от «enable», что значит «включение») и обнаружения флага FT (от «fault», что значит «неисправность»). Если замкнуть перемычку EN, сигнал EN будет привязан к контакту D4, а вы сможете с его помощью управлять выключением Н-моста или сбрасывать флаг FT. Если замкнуть перемычку FT, сигнал FT будет привязан к контакту D3, и в результате сигнал FT можно будет считывать при помощи контакта D3
  • GPIO – входные/выходные контакты общего пользования

Внимание! Запустив проект, не касайтесь моторного чипа (имеется в виду Freescale MC33932) и платы кейпа. При полной нагрузке их температура может достигать 100 градусов.

Пример использования

Эта глава расскажет о том, как использовать Raspberry Pi Model B и моторный кейп v1.0 для управления электродвигателями постоянного тока, двигая их вперед и назад.

Подключение компонентов

  1. Подключите Raspberry Pi и моторный кейп v1.0 друг к другу
  2. Подключите получившуюся сборку к сети и питанию

Программа

1. Скопируйте код ниже:

#!/usr/bin/python
    import RPi.GPIO as GPIO
    import time
    import signal   

    from PiSoftPwm import *

    #print 'Go_1...'
    #frequency = 1.0 / self.sc_1.GetValue()
    #speed = self.sc_2.GetValue()

    class Motor():
        def __init__(self):
        # MC33932 pins
        self.PWMA = 25  
        self.PWMB = 22
        self._IN1 = 23  
        self._IN2 = 24 
        self._IN3 = 17
        self._IN4 = 27

        # Инициализируем PWMA и PWMB.
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.PWMA, GPIO.OUT)
        GPIO.setup(self.PWMB, GPIO.OUT)
        GPIO.output(self.PWMA, True)
        GPIO.output(self.PWMB, True)

        # Инициализируем выходные каналы ШИМ.
        self.OUT_1  = PiSoftPwm(0.1, 100, self._IN1, GPIO.BCM)
        self.OUT_2  = PiSoftPwm(0.1, 100, self._IN2, GPIO.BCM)
        self.OUT_3  = PiSoftPwm(0.1, 100, self._IN3, GPIO.BCM)
        self.OUT_4  = PiSoftPwm(0.1, 100, self._IN4, GPIO.BCM)

            # Закрываем выходные каналы ШИМ.
        self.OUT_1.start(0)
        self.OUT_2.start(0)
        self.OUT_3.start(0)
        self.OUT_4.start(0)

            self.frequency = 0.01
            self.duty = 60

        def Setting(self, frequency, duty):
            self.frequency = frequency
            self.duty = duty

        def Go_1(self):
        self.OUT_1.changeBaseTime(self.frequency)
        self.OUT_2.changeBaseTime(self.frequency)
        self.OUT_1.changeNbSlicesOn(self.duty)
        self.OUT_2.changeNbSlicesOn(0)

        def Back_1(self):
        self.OUT_1.changeBaseTime(self.frequency)
        self.OUT_2.changeBaseTime(self.frequency)
        self.OUT_1.changeNbSlicesOn(0)
        self.OUT_2.changeNbSlicesOn(self.duty)

        def Go_2(self):
        self.OUT_3.changeBaseTime(self.frequency)
        self.OUT_4.changeBaseTime(self.frequency)
        self.OUT_3.changeNbSlicesOn(0)
        self.OUT_4.changeNbSlicesOn(self.duty)

        def Back_2(self):
        self.OUT_3.changeBaseTime(self.frequency)
        self.OUT_4.changeBaseTime(self.frequency)
        self.OUT_3.changeNbSlicesOn(self.duty)
        self.OUT_4.changeNbSlicesOn(0)

        def Stop():
        self.OUT_1.changeNbSlicesOn(0)
        self.OUT_2.changeNbSlicesOn(0)
        self.OUT_3.changeNbSlicesOn(0)
        self.OUT_4.changeNbSlicesOn(0)

    if __name__=="__main__":
        motor=Motor()
        # Прерывание процесса. 
        # Выставляет все контакты в режим «Input».
        def endProcess(signalnum = None, handler = None):
            motor.OUT_1.stop()
            motor.OUT_2.stop()
            motor.OUT_3.stop()
            motor.OUT_4.stop()
            motor.GPIO.cleanup()
            exit(0)

        # Подготавливаем обработчики к обработке выхода.
        signal.signal(signal.SIGTERM, endProcess)
        signal.signal(signal.SIGINT, endProcess)
        signal.signal(signal.SIGHUP, endProcess)
        signal.signal (signal.SIGQUIT, endProcess)

        motor.Setting(0.01, 60)
        print 'motor start...'
           #  'Запуск мотора...'
        while True:
            print 'turning direction...'
               #  'Смена направления...'
            motor.Go_1()
            time.sleep(1)
            motor.Back_1()
            time.sleep(1)
            motor.Go_2()
            time.sleep(1)
            motor.Back_2()
            time.sleep(1)

2. Сохраните программу в нужную папку на Raspberry Pi

3. Запустите программу. На кейпе начнут поочередно зажигаться светодиоды LED1 и LED2, а также LED3 и LED4. Это значит, что моторы A и B поочередно движутся то вперед, то назад

Консоль начнет показывать примерно следующее:

Поочередно загорающиеся синий и зеленый светодиоды на моторном кейпе v1.0:

Полезные ссылки

См.также

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