====== Драйвер сервоприводов Multiservo Shield v1 ====== Используйте драйвер сервомоторов [[amp>product/arduino-multiservo-shield-v1?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Multiservo Shield v1]] для управления до 18 сервомашинками одновременно, на базе которых вы можете создавать гексаподов, роботов манипуляторов и других моторизованных устройств. {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1.1.jpg?nolink |}} ===== Версии модуля ===== ==== Вторая ревизия модуля ==== {{:products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v2.1.jpg?nolink&100 |}}[[amp>product/arduino-multiservo-shield?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Multiservo Shield v2]]. Отличие v1 и v2: * В версии v2 присутствует защита от переполюсовки по питанию через силовой клеммник. * В версии v2 распаяна электронная обвязка для считывания показаний силового питания и потребляемого тока. ===== Примеры работы для Arduino ===== В качестве мозга для работы с Multiservo Shield v1 рассмотрим платформы из семейства [[amp>collection/arduino?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Arduino]], например [[amp>product/arduino-uno?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Uno]]. [[articles:arduino-ide-install|Как начать работу с Arduino?]] ==== Подключение и настройка ==== Для старта необходимо [[#аппаратная_часть|подключить железо]] и [[#программная_часть|выполнить программную настройку]]. === Аппаратная часть === На низком уровне драйвер сервоприводов общается с управляющей электроникой по интерфейсу I²C. Подробнее про I²C в Arduino - Установите Multiservo Shield сверху на Arduino Uno методом бутерброда.{{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-arduino.1.png?nolink |}} - Соедините плату Arduino с компьютером по USB.{{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-arduino.2.png?nolink |}} - Подключите силовое питание к драйверу сервоприводов через силовой клеммник. Диапазон входного напряжение должен соответствовать рабочему напряжению будущих сервоприводов, т.е. сколько приложили на силовой клеммник, столько и поступит на линию питания сервоприводов. В качестве источника питания рекомендуем взять: - [[amp>product/battery-aa-duracell?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Сборку из батареек AA]]: {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-arduino.4.png?nolink |}} - [[amp>product/power-supply-adapter-robiton-tn2000s?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Стационарный блок питания]]: {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-arduino.3.png?nolink |}} === Программная часть === - [[articles:arduino-ide-install|Заведите Arduino]]. - [[https://github.com/amperka/Multiservo|Установите библиотеку Multiservo]]. - [[https://playground.arduino.cc/Main/I2cScanner/|Протестируйте устройство I²C-сканером.]] Адрес устройства по умолчанию: 0x47. На этом установка закончена, теперь смело переходите к экспериментам. ==== Управление одним сервоприводом ==== Рассмотрим базовый пример — подключим один сервопривод к 7 пину Multiservo Shield и заставим его плавно вращаться от 0 до 180 градусов. === Схема устройства === {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-servo.1.png?nolink |}} === Код для Arduino IDE === // Библиотека для работы с Multiservo Shield // https://github.com/amperka/Multiservo #include // Создаём объект для работы с сервомоторами Multiservo multiservo; // Задаём имя пина к которому подключён сервопривод constexpr uint8_t MULTI_SERVO_PIN = 7; // Переменная для хранения текущей позиции сервомотора int pos = 0; void setup() { // Подключаем сервомотор multiservo.attach(MULTI_SERVO_PIN); } void loop() { // Перебираем значения счётчика от 0 до 180 for (pos = 0; pos <= 180; pos++) { // Отправляем текущий угол на серво multiservo.write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 180 до 0 for (pos = 180; pos >= 0; pos--) { // Отправляем текущий угол на серво multiservo.write(pos); // Ждём 15 мс delay(15); } } После прошивки устройства вал мотора будет плавно перемещаться от 0 до 180 градусов и так по кругу. ==== Управление 18 сервоприводами ==== Выжмем максимум из драйвера — подключим 18 сервоприводов к пинам ''0–17'' Multiservo Shield и заставим их плавно по очереди вращаться от 0 до 180 градусов. === Схема устройства === {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-servo.2.png?nolink |}} === Код для Arduino IDE === // Библиотека для работы с Multiservo Shield // https://github.com/amperka/Multiservo #include // Задаём количество сервоприводов constexpr uint8_t MULTI_SERVO_COUNT = 18; // Создаём массив объектов для работы с сервомоторами Multiservo multiservo[MULTI_SERVO_COUNT]; // Переменная для хранения текущей позиции сервомотора int pos = 0; void setup() { // Перебираем значения моторов от 0 до 17 for (int count = 0; count < MULTI_SERVO_COUNT; count++) { // Подключаем сервомотор multiservo[count].attach(count); } } void loop() { // Перебираем значения моторов от 0 до 17 for (int count = 0; count < MULTI_SERVO_COUNT; count++) { // Перебираем значения счётчика от 0 до 180 for (pos = 0; pos <= 180; pos++) { // Отправляем текущий угол на серво multiservo[count].write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 180 до 0 for (pos = 180; pos >= 0; pos--) { // Отправляем текущий угол на серво multiservo[count].write(pos); // Ждём 15 мс delay(15); } } } После прошивки устройства вал каждого мотора будет плавно по очереди перемещаться от 0 до 180 градусов и так по кругу. ==== Servo и Multiservo ==== А теперь рассмотрим симбиоз — подключим один сервопривод к ''7'' пину Multiservo Shield, а второй к ''7'' пину платформы Aeduino Uno. А затем заставим их плавно вращаться от 0 до 180 градусов. Если запутались в подключении, смотрите подробности в распиновке платы. === Схема устройства === {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-servo.3.png?nolink |}} === Код для Arduino IDE === // Библиотека для работы с Servo #include // Библиотека для работы с Multiservo Shield // https://github.com/amperka/Multiservo #include // Создаём объект для работы с сервомоторами на Arduino Servo servo; // Создаём объект для работы с сервомоторами на Multiservo Shield Multiservo multiservo; // Задаём имена пинов к которым подключены сервоприводы constexpr uint8_t SERVO_PIN = 7; constexpr uint8_t MULTI_SERVO_PIN = 7; // Переменная для хранения текущей позиции сервомотора int pos = 0; void setup() { // Подключаем сервомотор на Arduino servo.attach(SERVO_PIN); // Подключаем сервомотор на Multiservo Shield multiservo.attach(MULTI_SERVO_PIN); } void loop() { // Перебираем значения счётчика от 0 до 180 for (pos = 0; pos <= 180; pos++) { // Отправляем текущий угол на серво servo.write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 180 до 0 for (pos = 180; pos >= 0; pos--) { // Отправляем текущий угол на серво servo.write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 0 до 180 for (pos = 0; pos <= 180; pos++) { // Отправляем текущий угол на серво multiservo.write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 180 до 0 for (pos = 180; pos >= 0; pos--) { // Отправляем текущий угол на серво multiservo.write(pos); // Ждём 15 мс delay(15); } } После прошивки устройства сначала вал одного мотора будет плавно перемещаться от 0 до 180 градусов, а затем вал другого мотора от 0 до 180 градусов и так по кругу. ===== Примеры работы для Espruino ===== В качестве мозга для работы с Multiservo Shield v1 рассмотрим платформы из семейства [[amp>collection/espruino?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Espruino]], например [[amp>product/iskra-js?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Iskra JS]]. [[js:start|Как начать работу с Iskra JS?]] ==== Подключение и настройка ==== Для старта необходимо [[#аппаратная_часть1|подключить железо]] и [[#программная_часть1|выполнить программную настройку]]. === Аппаратная часть === На низком уровне драйвер сервоприводов общается с управляющей электроникой по интерфейсу I²C. Подробнее про I²C в Espruino - Установите Multiservo Shield сверху на Iskra JS методом бутерброда.{{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-espruino.1.png?nolink |}} - Соедините плату Iskra JS с компьютером по USB.{{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-espruino.2.png?nolink |}} - Подключите силовое питание к драйверу сервоприводов через силовой клеммник. Диапазон входного напряжение должен соответствовать рабочему напряжению будущих сервоприводов, т.е. сколько приложили на силовой клеммник, столько и поступит на линию питания сервоприводов. В качестве источника питания рекомендуем взять: - [[amp>product/battery-aa-duracell?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Сборку из батареек AA]]: {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-espruino.4.png?nolink |}} - [[amp>product/power-supply-adapter-robiton-tn2000s?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Стационарный блок питания]]: {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-espruino.3.png?nolink |}} === Программная часть === - [[js:start|Заведите Iskra JS]]. - [[http://wiki.amperka.ru/js:multiservo|Протестируйте библиотеку Multiservo]]. На этом установка закончена, теперь смело переходите к экспериментам. ==== Управление одним сервоприводом ==== Рассмотрим базовый пример — подключим один сервопривод к 7 пину Multiservo Shield и заставим его плавно вращаться от 0 до 180 градусов. === Схема устройства === {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-servo.1.png?nolink |}} === Код для Iska JS === // Настраиваем шину I2C PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000}); // Создаем новый объект Multiservo var multiservo = require('@amperka/multiservo').connect(PrimaryI2C); // Создаем новый объект сервопривода // подключенны к контакту 7 var servo = multiservo.connect(7); // Создаём объект анимация // для плавного изменения параметров вращения мотора var animServo = require('@amperka/animation').create({ // Начальное значение в градусах from: 0, // Конечное значение в градусах to: 180, // Продолжительность полного перехода // за 5 секунд мотор пройдёт диапазон значений от 0 до 180 duration: 5, // Шаг обновления: каждые 20 мс updateInterval: 0.02 }).queue({ // Начальное значение в градусах from: 180, // Конечное значение в градусах to: 0, // продолжительность полного перехода // за 5 секунд мотор пройдёт диапазон значений от 180 до 0 duration: 5 }); // Обработчик анимации animServo.on('update', function(val) { servo.write(val); }); // Запускаем анимацию setInterval(() => { animServo.play(); }, 1000); После прошивки устройства вал мотора будет плавно перемещаться от 0 до 180 градусов и так по кругу. ===== Элементы платы ===== {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-annotation.png?nolink |}} ==== Микроконтроллер ATmega48PA ==== Плата Multiservo Shield выполнена на микроконтроллере {{ :products:arduino-multiservo-shield-v1:atmega48pa-datasheet.pdf |ATmega48PA}} с прошивкой управления сервоприводами от Амперки. Чип принимает команды по I²C интерфейсу от внешней управляющей платы, например [[amp>product/arduino-uno?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Arduino Uno]] или [[amp>product/iskra-jsutm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Iskra JS]], и рулит до 18 сервоприводами в одно время. ==== Силовой клеммник питания ==== Для питания сервомоторов используйте клеммник под винт PWR IN. ^ Силовой клеммник ^ Подключение ^ | PWR + | Силовое питание | | PWR − | Земля | Диапазон входного напряжение должен соответствовать рабочему напряжению подключаемых сервоприводов, т.е. сколько приложили на силовой клеммник, столько и поступит на линию питания моторов. Номинальное напряжения большинства хобби сервоприводов не выходит за рамки диапазона от 5 до 12 вольт. В качестве источника питания рекомендуем взять: * Сборку из [[amp>product/battery-aa-duracell?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|батареек AA]]: {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-power-supply-batteries.png?nolink |}} * [[amp>product/power-supply-adapter-robiton-tn2000s?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|стационарный блок питания]]: {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-wiring-power-supply.png?nolink |}} * И другие источники напряжения. ==== Контуры питания ==== На плате расширения MultiServo Shield присутствует два контура питания. * **Силовой контур Vs**. Напряжение питания сервомоторов, которое поступает от [[#силовой_клеммник_питания|силового клеммника]]. Диапазон входного напряжение должен соответствовать номинальному питанию моторов, а суммарный максимальный ток потребления не должен превышать 10 А. * **Цифровой контур Vss**. Напряжение питания микроконтроллера и другой вспомогательной логики. Цифровое питание поступает через пин 5V от внешней управляющей платы, например от USB. Входное напряжение соответственно равно 5 вольт, а максимальный ток потребления не более 50 мА. Если отсутствует хотя бы один из контуров питания Vs или Vss — Multiservo Shield работать не будет. Для информации о текущем состоянии каждого контура [[#светодиодная_индикация|используйте светодиодную индикацию]]. ==== Джаммер объединения питания ==== На плате расширения MultiServo Shield [[#контуры_питания|присутствует два контура напряжения]], т.е. для работы схемы необходимо два источника напряжения.{{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-pwrjoin-off.png?nolink |}} При установки джампера в положение PWR JOIN, происходит объединение положительного контакта + силового клеммника PWR IN с пином Vin управляющей платформы. Режим объединённого питания позволяет запитывать всё устройство от одного источника напряжения. {{ :products:arduino-multiservo-shield-v1:arduino-multiservo-shield-v1-pwrjoin-on.png?nolink |}} === Выбор питания === При объединённом режиме PWR JOIN, напряжение на устройство может быть подано двумя способами: * На драйвер сервомоторов через клеммник PWR IN. * На управляющую плату через внешний DC-разъём. === Правила === При объединённом режиме PWR JOIN, важно знать: * При работе двигателей по цепи питания может проходить большой ток, на который цепь Vin управляющей платформы может быть не рассчитана. Поэтому выбор питания через силовой клеммник PWR IN предпочтительнее. * Источник питания должен быть способен обеспечить стабильное напряжение при резких скачках нагрузки. Даже кратковременная просадка напряжения может привести к перезагрузке управляющей платформы. В итоге программа начнётся сначала и поведения двигателей будет неадекватным. ==== Светодиодная индикация ==== ^ Имя светодиода ^ Назначение ^ | Vs / PON | Индикатор подачи силового питания. Горит — напряжение есть, не горит — напряжение нет.| | Vss / ųON | Индикатор подачи цифрового питания. Горит — напряжение есть, не горит — напряжение нет.| ==== Troyka-контакты подключения сервоприводов ==== Сервоприводы подключаются к плата Multiservo Shield через контактные штыри S-V-G, где: * S — сигнал с номером от 0 до 18. * V — питание сервомоторов. Берется от силового клеммника. * G — земля. На линии V будет присутствовать не логическое питание платформы 3,3 / 5 В, а напряжение Vs приложенное к [[#силовой_клеммник_питания|силовому клеммнику]]. ==== Troyka-контакты ввода-вывода общего назначения ==== На плате доступны шесть Troyka-контактов ввода-вывода внешнего контролера, которые можно задействовать в дополнение к основным. Контакты пронумерована S-V-G, где: * S — сигнал с номером: D2, D3, D5, D6, D7 и D8. * V — питание от силового клеммника. * G — земля. На линии V будет присутствовать не логическое питание платформы 3,3 / 5 В, а напряжение Vs приложенное к [[#силовой_клеммник_питания|силовому клеммнику]]. ==== ICSP-разъём ATmega48PA ==== На плате расположен ICSP-разъём, который предназначен для загрузки прошивки в микроконтроллер ATmega48PA через внешний программатор. В нашем случае — это мост, который получает команды по I²C и рулит 18 сервоприводами. ==== Контакты Arduino Shiled R3 ==== Плата Multiservo Shield выполнена в форм-факторе Arduino Shield R3. а это значит расширение просто одевается сверху на управляющую платформу форм-фактора Arduino R3 методом бутерброда без дополнительных проводов и пайки. В итоге вам остаются доступны все физические контакты вашего контроллера для дальнейшего использования. ===== Характеристики ===== * Модель: Драйвер сервоприводов Multiservo Shield v1 AMP-B023 * Драйвер: микроконтроллер ATmega48PA * Аппаратный интерфейс: контактные штыри * Программный интерфейс: I²C * I²C-адрес: 0x47 * Контактов подключения сервоприводов: 18 * Контактов ввода-вывода общего назначения от внешнего контроллера: 6 * Напряжение питания силовой части: 5–12 В * Потребляемый ток силовой части: до 10 А * Напряжение питания цифровой части: 5 В * Потребляемый ток цифровой части: до 50 мА * Напряжение логических уровней: 3,3–5 В * Размеры модуля: 68,6×53,4×20,1 мм ===== Ресурсы ===== * [[amp>product/arduino-multiservo-shield-v1?utm_source=man&utm_campaign=arduino-multiservo-shield-v2&utm_medium=wiki|Multiservo Shield v1]] в магазине. * [[https://github.com/amperka/hardware-drawings/blob/master/arduino-multiservo-shield-v1.svg|Векторное изображение Multiservo Shield v1]] * [[https://github.com/amperka/Multiservo|Библиотека для Arduino]] * [[js:multiservo|Библиотека для Espruino]]