Работа с моторшилдом 2.0

Материал из virt2real wiki
Перейти к: навигация, поиск

Содержание

Необходимые скиллы

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


Описание

Плата управления моторами ("моторшилд") предназначена для управления силовой нагрузкой: коллекторными моторами, сервомоторами, лампами накаливания, светодиодами, шаговыми двигателями и т.д. c напряжением питания от 5 до 16 Вольт.

На борту моторшилда имеется свой стабилизатор питания (суммарный ток до 6 Ампер), так что, например, для сервомоторов не требуется отдельный DC-DC преобразователь, сервы можно запитывать сразу от моторшилда.

Имеющийся на борту чип PCA9685 добавляет к штатным четырём каналам PWM Виртурилки ещё 16 каналов, правда, более низкой разрядности (12 бит).

Штатные каналы PWM Виртурилки (EXT_GIO92_PWM0, EXT_GIO91_PWM1, EXT_GIO87_PWM2 и EXT_GIO80_PWM3) управляются драйвером v2r_pins.

Для остальных PWM (PWM0-15), осуществляемых микросхемой PCA9685 пришлось писать свой драйвер, так как имеющийся в ядре не полностью удовлетворял потребностям.


Инициализация моторшилда

Инициализация (первичная настройка) моторшилда сводится к установке необходимых параметров микросхемы PCA9685. Перед любой операцией с моторшилдом, затрагивающей каналы PWM чипа PCA9685, необходимо выполнить нижеуказанные операции.

Если же от моторшилда требуются только штатные каналы PWM Виртурилки, инициализацию моторшилда можно не производить. Главное не забыть джамперы установить (описание разъёмов джамперов есть в разделе Моторшилд 2.0)


Скрипт инициализации в прошивке

В прошивках, начиная с 10_03_2014 (пока ещё не опубликована), в каталоге автозагрузки имеется скрипт S90motorshield, который выполняет все нижеуказанные операции по инициализации моторшилда.


Установка адреса i2c

Так как к одной шине I2C может быть одновременно подключено несколько микросхем PCA9685, для независимого управления ими предусмотрена возможность указания двухбитного адреса. Таким образом, можно подключить до четырёх чипов PWM и не париться.

Установка адреса осуществляется установкой двух битов, за которые отвечают GPIO83 и GPIO84.

GPIO83 GPIO84 Адрес I2C
0 0 0x40
0 1 0x50
1 0 0x60
1 1 0x70

Вручную это можно произвести, выполнив две команды

echo "set gpio 83 output 1" > /dev/v2r_gpio
echo "set gpio 84 output 1" > /dev/v2r_gpio

По-умолчанию, в штатной прошивке используется адрес 0x70 (GPIO83 и GPIO84 установлены в состояние HIGH).

Устройство I2C

Добавление устройства

Теперь необходимо добавить устройство I2C. Делается это как обычно, командой

echo v2r_extpwm 0x70 > /sys/class/i2c-adapter/i2c-1/new_device

При этом в консоле появятся сообщения

v2r_extpwm 1-0070: probe succeeded!
i2c i2c-1: new_device: Instantiated device v2r_extpwm at 0x70


Пожалуйста, будьте внимательны! Если был указан неправильный I2C адрес (например, указали 0x70, а пины установки адреса настроены на адрес, допустим, 0x40) то устройство всё равно будет добавлено, но функционировать не будет!


Управляющие файлы

Теперь можно перейти в каталог /sys/bus/i2c/devices/1-0070 и посмотреть какие там имеются файлики

[root@virt2real ~]# cd /sys/bus/i2c/devices/1-0070
[root@virt2real 1-0070]# ls
all  ch1   ch12  ch15  ch4  ch7  cmdmode  init      mode2  subsystem@
any  ch10  ch13  ch2   ch5  ch8  driver@  modalias  name   uevent
ch0  ch11  ch14  ch3   ch6  ch9  freq     mode1     sleep


Файл Описание
all Одновременное управление всеми 16-ю каналами PWM
any Управление любым каналом PWM (номер канала задаётся в команде)
ch0-ch15 Управление конкретным каналом PWM
cmdmode Установка режима команд
freq Установка частоты генератора PWM
init Инициализация
mode1 Регистр MODE1
mode2 Регистр MODE2
sleep Спящий режим вкл/выкл

Описание управляющих файлов находится в отдельном разделе V2r_extpwm


Установка регистров

Для инициализации достаточно записать "1" в файл "init" и установить делитель частоты генератора PWM (файл "freq").

echo 50 > /sys/bus/i2c/devices/1-0070/freq
echo 1 > /sys/bus/i2c/devices/1-0070/init

Полный скрипт инициализации PWM

Пример из файла /etc/init.d/S90motorshield

# set i2c address
echo "set gpio 83 output 1" > /dev/v2r_gpio
echo "set gpio 84 output 1" > /dev/v2r_gpio
 
# init new i2c device for PWM chip
echo v2r_extpwm 0x70 > /sys/class/i2c-adapter/i2c-1/new_device
 
# set up frequency divider
echo 50 > /sys/bus/i2c/devices/1-0070/freq
 
# set init
echo 1 > /sys/bus/i2c/devices/1-0070/init


Управление периферией

В админке

В админке создан специальный раздел "Макеты" -> "Моторшилд", где есть всё необходимое для первого знакомства с начинкой моторшилда.


Из пользовательских скриптов

Контроль напряжения

На моторшилде имеется встроенный делитель напряжения, позволяющий измерять входное напряжение питания моторшилда.

Делитель подключён к аналоговому входу ADC0.

Для определения напряжения питания необходимо прочитать состояние ADC0, после чего, зная разрядность АЦП, можно высчитать истинное напряжение.

  1. $max_raw = 1 << 10;
  2. $filename = "/dev/v2r_adc";
  3. $handle = fopen($filename, "r");
  4. $contents = fread($handle, 2);
  5. $value = ord($contents[0]) + ord($contents[1]) * 256;
  6. $volts = $value * 20 / $max_raw;
  7. $voltage = round($volts, 3);
  8. echo $voltage;


Управление двунаправленными выходами (J1)

Управление однонаправленными выходами (J16)

Управление сервомоторами (J17)

Подключение до 20 сервомоторов

На моторшилде имеется только 8 родных разъёмов для сервомоторов, но суммарное количество PWM равно 20 (4 на основной плате и 16 на моторшилде). Так как для сервомоторов важен только сигнал управления (PPM), его можно взять с любого пина на любом разъёме, где поддерживается PWM. И тогда можно независимо управлять двадцатью сервами.

Здесь требуется индивидуальный подход, описание пока отложим.

Управление шаговыми моторами

Данная возможность не предусматривалась, но почему бы, собссно, и нет.

Однополярных шаговых моторов (с 4-мя проводами обмоток) можно подключить аж 6 штук (2 к однополярным разъёмам J16 и 4 к двухполярным J1).

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

Но управлять обмотками придётся программно (включать/выключать, так что плавность будет не ахти. Но для каких-то вариантов применения вполне подойдёт.

Видеоиллюстрация управления моторшилдом из админки