Где можно программировать сервомашинки emax

Где можно программировать сервомашинки emax

Всем привет! Прошу совета у более опытных товарищей.

Прикупил для крыла аналоговые сервомашинки EMAX ES08MA II. В процессе примерки серв в посадочные места на крыле, обнаружил что в некоторых случаях при их обесточивании в положении отличном от центрального, и последующем подаче напряжения, сервы принимают текущее положение за нейтраль и отклоняются дальше на фиксированный угол. И только после этого возвращеются в нейтраль. Таким образом качалка может сделать угол 360 градусов. Понятно, что последствия такого поведения довольно неприятны. Я раньше таких проблем с сервами не имел и поиском смог найти только комментарий человека на Банге, который жалуется, что пришлось покупать новые сервы взамен этим. С полетником также пробовал ситуация такая же.

Можно как-то эту проблему решить? Не совсем понятно, как вообще такие сервы ставить на модели и нафига они такие кому нужны?

Правильно я пониманию, что цифровые сервы таких проблем лишены?

отклоняются дальше на фиксированный угол. И только после этого возвращеются в нейтраль.

Таким образом качалка может сделать угол 360 градусов.

Не совсем понятно, как вообще такие сервы ставить на модели и нафига они такие кому нужны?

Где можно программировать сервомашинки emax

Репутация: 3

Репутация: 3

Репутация: 4

Репутация: 4

если что подправьте

Эскизы прикрепленных изображений

Программирование контроллера сервоприводов MC50. Введение

image

Это продолжение открытого проекта платы контроллера сервоприводов. В предыдущей статье был проведён анализ возможностей и выбор микроконтроллера, изучена и освоена среда разработки. Теперь подошла собранная плата.

Сразу подключаем питание. Дыма нет, ток потребления в норме. Это внушает уверенность. Схема сделана так, чтобы контроллер с пустой прошивкой не вызывал никаких побочных эффектов на плате.

Программируем на языке C. Дело в том что 90% наших исходников неминуемо будут на С. Так уж устроено большинство генераторов исходников и библиотек софта под микроконтроллеры, будь то CubeMX, MCUXpresso, ModusToolbox или в нашем случае Renesas Software Package. Ничего не остаётся, как продолжать традицию.

Шаг 1. Проверяем SWD

Проверяем работу SWD интерфейса и наличие соединения SWD адаптера J-Link с ядром микроконтроллера на максимальной скорости. Работоспособность SWD в нашем проекте критически важна. С его помощью можно находить баги в операциях с периферией и тонко исследовать особенности периферии не отражённые в документации с минимальными потерями времени на модификацию исходников. Через SWD работает движок ITM (ядро ARM Cortex-M4 c Arm® CoreSight™). С использованием ITM трассируются события практически не нагружая ядро процессора вспомогательными драйверами. Важно то что вызовы ITM можно оставлять в релизных версиях и в случае необходимости изучать трассировку событий не меняя прошивку. При настройке трассировки с J-Link нужно знать частоту тактирования CoreSight. Может ввести в заблуждение параметр в отладчике называемый частотой ядра. На самом деле там нужно вводить частоту CoreSight иначе трассировка не заработает.

Шаг 2. Настраиваем IDE

Про IDE e2 studio, входящую в пакет SSP, уже упоминалось.

image

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

Но сначала настроим в e2 studio тулчейн. Устанавливаем использование IAR for ARM 9.30.1 в качестве тулчейна. У IAR есть очень удобный отладчик C-SPY и он может работать внутри IDE на базе Eclipse.

Шаг 3. Конфигурируем тактирование микроконтроллера

Конфигурирование проводим в e2 studio в режиме Eclipse-перспективы под названием Synergy Configuration.

Схема тактирования довольно проста для такого типа микроконтроллеров и выглядит так:

image

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

Main clock oscillator (MOSC) 8 to 24 MHz. С внешним кварцем.

High-speed on-chip oscillator (HOCO) 16, 18, 20 MHz

Low-speed on-chip oscillator (LOCO) 32.768 kHz

Middle-speed on-chip oscillator(MOCO) 8 MHz

Sub-clock oscillator (SOSC) 32.768 kHz. С внешним кварцем

Мы используем только MOSC для тактирования ядра и периферии и SOSC для тактирования часов реального времени. Остальные генераторы могут оставаться выключенными.

От MOSC мы получаем частоту 240 МГц с помощью PLL, которую потом делим на ряд периферийных частот:

System clock (ICLK) 120 МГц. Тактирует CPU, DTC, DMAC, Flash, SRAM

Peripheral module clock A (PCLKA) 120 МГц. Тактирует ETHERC, EDMAC, USBHS, QSPI, SPI, SCI, SCE7, GLCDC, SDHI, CRC, JPEG engine, DRW, IrDA, GPT bus-clock

Peripheral module clock B (PCLKB) 60 МГц. Тактирует IIC, SSIE, SRC, DOC, CAC, CAN, DAC12, POEG, CTSU, AGT, Standby SRAM, ELC, I/O ports, RTC, WDT, IWDT, ADC12, KINT, USBFS, ACMPHS, TSN, PDC

Peripheral module clock C (PCLKC) 60 Мгц. Тактирует АЦП

External bus clock (BCLK) 120 МГц. Тактирует внешнюю шину памяти.

Peripheral module clock D (PCLKD) 120 МГц. Тактирует таймера

USB clock (UCLK) 48 МГц. Тактирует USB

Flash interface clock (FCLK) 60 МГц. Тактирует внутреннюю Flash память

SDCLK pin output (SDCLK) 120 МГц. Тактирует внешний SDIO интерфейс

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

Шаг 3. Конфигурирование HAL (hardware abstraction layer)

Кто программирует микроконтроллеры достаточно регулярно, тот знает про HAL. Это такой компромисс между желанием производителя микроконтроллеров одной кодовой базой покрыть потребности целого семейства микроконтроллеров и при этом сохранить специализацию для каждого отдельного типономинала в семействе. На первых порах учитывая недостаточную полноту и ясность документации без HAL обойтись нельзя. В e2 studio визуально собираются все необходимые элементы HAL. Новичку сразу однозначно понять какие элементы HAL нужны, а какие нет практически невозможно. Поэтому в IDE при первом включении нужно сразу выбрать построение проекта на основе демонстрационного примера Blinky. Мы сразу, чтобы не тратить время, выбираем как базу проект ThreadX Blinky. Тогда проект будет включать RTOS. А RTOS нам однозначно понадобится.

В результате на вкладке Threads будет такая картина:

Здесь создано два потока в операционной системе — HAL/Common и Blinky Thread.

Поток HAL/Common получит управление первым и инициализирует драйвера включенные в него, после чего запустит поток Blinky Thread. Если быть точнее, то HAL/Common не является потоком RTOS. Он выполняется до того как будет инициализирована RTOS. Поток HAL/Common сам инициализирует RTOS и создает поток Blinky Thread, в который передает управление, этим же прекращает свое собственное выполнение. Это не означает что драйвера созданные в HAL/Common станут недоступны. Управляющие структуры этих драйверов вместе со ссылками на API объявлены как глобальные и всегда доступны всем потокам.

Состав драйверов в потоке HAL/Common:

g_elc ELC Driver on r_erc — это драйвер контроллера управления и маршрутизации сигналов событий в микроконтроллере. Сигналы событий исходят от разных периферийных модулей и напоминают прерываний, но отправляются не контроллеру прерываний, а другим периферийным модулям. Этот драйвер нужен всегда поскольку заодно занимается и прерываниями.

g_ioport I/O Port Driver — это драйвер управляющий внешними пинами. Драйвера коммуникационных портов всегда используют этот драйвер для настройки пинов.

g_fmi FMI Driver — нечто секретное и недокументированное. К счастью с этим дело иметь не придется. Из исходников можно узнать что модуль FMI используется для получения информации о составе периферии и адресов периферийных модулей в чипе. Странное решение, учитывая то, что с SSP поставляются хедеры полностью описывающие структуру периферию и адреса. Однако HAL во всех драйверах использует адреса не из хедеров, а от FMI.

g_cgc CGC Driver — это драйвер занимающийся инициализацией системы тактирования на чипе. Он всегда нужен.

Шаг 4. Конфигурирование RTOS

RTOS здесь называется ThreadX. ThreadX входит как составная часть в проект Azure RTOS.

При генерации проекта сначала возникает пустое окно задачи ThreadX Blinky. Но добавив в него компонент ThreadX Source получаем возможность сконфигурировать RTOS по своему желанию. Здесь можно включать и выключать разные дополнительные проверки, статистики, управлять возможностями отладочной трассировки (трассировка выполняется сторонним тулсом), и прочее. Самое важное правильно указать размеры стеков. Для потоков не использующих форматированный ввод-вывод (printf, sprintf, scanf …) обычно устанавливается 1024 байта на стек. Если будет использоваться форматированный ввод-вывод, то устанавливается не менее 2048 байт на стек. Если GuiX, то 4096 байт.

Шаг 5. Реализация мигания светодиода и генерация исходников

Первым делом начнем мигать светодиодом. Это сразу нам даст уверенность, что: программа стартует штатно, пины инициализированы правильно (во всяком случае на светодиоды), частота ядра правильная, такты у RTOS тоже правильные и сама RTOS запускается.

Для этого в файле /MC50/src/blinky_thread_entry.c объявим такие переменные:

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

Остается нажать кнопку в верхнем правом углу Generate Project Content. Контент будет сгенерирован практически мгновенно. Созданное дерево исходников сразу содержит под тысячу файлов. Это базовый минимальный софт. Дальше количество файлов увеличится в несколько раз.

Шаг 6. Загрузка прошивки и настройка отладчика

Eclipse славен тем, что в нем можно поменять что угодно на что угодно. Можно поменять компилятор, можно поменять движок сборки, можно поменять отладчик и т.д. и т.п.

В начале мы успешно подставили в роли компилятора IAR. Для отладки используем адаптер J-Link. С этим адаптером возможны два варианта отладчиков в Eclipse: первый — это через GDB, а второй — через IAR C-SPY. C-SPY удобнее и быстрее работает.

Но настраиваем оба варианта чтобы все же сравнить. Тут ожидало много разочарований. В случае GDB не удалось никак увидеть панель с состояниями внутренностей RTOS. Не работала трассировка, хотя J-Link Ultra ее поддерживает. В случае C-SPY не удалось даже стартовать программу. На первом же такте возникал Hard Fault exception. Но программу все же загрузить удалось через GDB и получили вот такую картину:

Очевидно среда разработки от Renesas не так уж и удобна для разработки.

Шаг 7. Переход на IDE IAR (опционально)

Как было сказано выше, e2 studio тоже как-то работает. Но если хочется меньше проблем, то есть альтернатива — IAR. Поскольку SSP способна генерировать исходники адаптированные к компилятору IAR с использованием его проприетарных возможностей. Теперь о том как перейти на IAR.

Создаем или копируем файлы какой-нибудь предыдущего проекта IAR в корневую директорию нашего целевого проекта. Даем файлам имена MC50.ewp и MC50.eww. И запускаем утилиту Populate_MC50 ewp.py. Эта утилита отредактирует файл MC50.ewp для включения в него нужных файлов и директорий из дерева проекта начиная от корня. Я уже сделал все необходимые манипуляции и в директории проекта уже находится файл рабочего пространства для IAR под названием MC50.eww. Загрузив его в IAR получим точно тот же проект, что и в e2 studio. Но он будет быстрее компилироваться, загружаться и без проблем отлаживаться. Код в репозитории.

Отказ от работы в e2 studio не означает что эту IDE можно сразу же снести. Она будет требоваться в дальнейшем для генерации по необходимости остальных драйверов и промежуточного программного обеспечения.

Сервопривод Ардуино подключение, управление

image

Рассмотрим на этом занятии устройство и принцип работы сервоприводов. Разберем два простых скетча для управления сервоприводом SG90 с помощью потенциометра на Ардуино. Также мы узнаем новые команды в языке программирования C++ — servo.write, servo.read, servo.attach и научимся подключать в скетчах библиотеку для управления сервоприводами и другими устройствами через Ардуино.

Устройство сервомотора (servo) Arduino

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

Что такое сервопривод. Схема устройства сервопривода

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

Управление сервоприводом от микроконтроллера Ардуино

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

Как подключить сервопривод к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • сервопривод SG90, MG995, MG996;
  • потенциометр (переменный резистор);
  • макетная плата;
  • провода «папа-папа» и «папа-мама».

Схема подключения сервопривода к Arduino обычно следующая: черный провод присоединяем к GND, красный провод присоединяем к 5V, оранжевый/желтый провод к цифровому выводу общего назначения. Управление сервоприводом на Ардуино достаточно просто, но по углам поворота сервомоторы делятся на 180° и 360°, что следует учитывать при разработке проектов с применением servo.

Схема подключения сервопривода к Ардуино UNO

Servo Arduino Uno Arduino Nano Arduino Mega
черный провод GND GND GND
красный провод 5V 5V 5V
желтый провод 11 11 11

В первом скетче мы рассмотрим как управлять сервоприводом на Arduino с помощью команды myservo.write(0) . Также мы будем использовать стандартную библиотеку Servo.h . Подключите сервомашинку к плате Ардуино, согласно схеме на фото выше и загрузите готовый скетч. В процедуре void loop() мы будем просто задавать для сервопривода необходимый угол поворота и время ожидания до следующего поворота.

Скетч для управления сервопривода от Ардуино

Пояснения к коду:
  1. переменная Servo необходима, чтобы не запутаться при подключении нескольких сервоприводов к Ардуино. Мы назначаем каждому приводу свое имя;
  2. команда servo1.attach(10) привязывает привод к цифровому выходу 10.
  3. в программе мы вращаем привод на 0-90-180 градусов и возвращаем в начальное положение, поскольку процедура void loop повторяется циклично.

Плавное вращение сервомотора от Ардуино

Схема подключения сервомотора к Ардуино UNO

Управление скоростью вращения сервомотора Ардуино сделать довольно просто, если вы знакомы с циклами for или while в языке программирования Arduino. Рассмотрим, как сделать плавные повороты серво от 0 до 90 градусов, используя циклы. Представленные на этой странице примеры программ позволят вам использовать сервоприводы в различных проектах, где требуется плавный поворот.

Скетч для плавного поворота сервомотора Ардуино

Пояснения к коду:
  1. максимальный угол для плавного поворота микросерво — 180 градусов;
  2. увеличивая задержку delay(20); , можно замедлить скорость поворота.

Также вам будет полезны следующие статьи:

Заключение. Сервомоторы часто используются в различных проектах на Ардуино для различных функций: повороты конструкций, движение частей механизмов. Так как серво Arduino постоянно стремится удерживать заданный угол поворота, то будьте готовы к повышенному расходу электроэнергии. Это будет особенно чувствительно в автономных роботах, питающихся от аккумуляторов или батареек.

Ссылка на основную публикацию
Похожее
Наш адрес
г. Петрозаводск,
ул. Новосулажгорская
Схема проезда
Часы работы
Ежедневно С 8:00 до 22:00:
https://vk.com/
Если у вас есть какие-либо вопросы, не стесняйтесь обращаться к нам на прямую!