Сервотестер на ардуино своими руками

Arduino.ru

Серво тестер на ардуино

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

Решил разработку простого серво тестера вынести отдельным проектом. (НУ НЕ ПРОПАДАТЬ ЖЕ ДОБРУ)
my very tks ЕвгенийП

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

Следующим постом будет приведен скетч в котом я попробую реализовать серво тестер имеющий канал входа, для измерения параметров входного сигнала PWM и калибровки этого сигнала.
Для подключения планируется реализовать три канала управления.
1. Регулировка потенциометром и переключателями (плавная, ступенчатая, по заранее установленным показателям (1000, 1500, 2000 мксек)
2. Регулировка при помощи энкодера (ступенчатая, шаг регудировки 10)
3. Сигнал повторяет измеренный сигнал по входу тестера.

Последующий пост прошу не комментировать, дабы иметь возможность правки исходника!

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

Код в котором буду производить правки:

ПРОШУ не ЦИТИРОВАТЬ.

измерение от стороннего источника работает, завернул 10 пин на вход (пин 2) — не выходит каменный цветок, надо искать осциллограф. ( смотрел осциллографом, на выходе низкий уровень)
Может конфликт с библиотекой Servo.h.

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

Вместо использования сигнала прерывания, имхо будет значительно точнее использовать сигнал захвата таймера T1, он есть в НАНО и др. мелких камнях — везде где есть 16-и разрядный таймер. Точность измерения входного сигнала станет просто обалденной и без .. «килорублей».

Прерывания также точно измерять не получится: во-первых реакция на него слегка «плавает» и во-вторых, измеряете Вы через «таймер времени», который изначально не лучше чем 4мксек., А ещё может и заблокировать ожидаемое прерывание от входного сигнала .. итого получить точность выше +- 8мксек (ошибка в 16мксек) — будет проблематично.

Тем временем, «мертвая зона» у хорошей сервы может быть меньше 2мсек., а измерять стоит «на порядок» точней — прибор все же..

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

Вместо использования сигнала прерывания, имхо будет значительно точнее использовать сигнал захвата таймера T1, он есть в НАНО и др. мелких камнях — везде где есть 16-и разрядный таймер. Точность измерения входного сигнала станет просто обалденной и без .. «килорублей».

Прерывания также точно измерять не получится: во-первых реакция на него слегка «плавает» и во-вторых, измеряете Вы через «таймер времени», который изначально не лучше чем 4мксек., А ещё может и заблокировать ожидаемое прерывание от входного сигнала .. итого получить точность выше +- 8мксек (ошибка в 16мксек) — будет проблематично.

Тем временем, «мертвая зона» у хорошей сервы может быть меньше 2мсек., а измерять стоит «на порядок» точней — прибор все же..

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

С Вами. НАНО — вполне справится с вашей задачей. Возьмите первый таймер, у него есть вход «захват таймера», который собственно и предназначен для таких измерений «длительностей импульсов». На него в общем-то и надо вешать, в т.ч. и работу ультразвуковых датчиков тоже, а не гонять вхолостую pulseIn().

Там всё предельно просто: устанавливаете режим «захват таймера по входу ICP» и скажем высокий сигнал запускает замер, а низкий его останавливает (посмотрите даташит на этот момент, как там оно вточности) и всё. Получаете прерывание по входу ICP и в регистре ICP — сколько насчитал таймер. Настройка делителя таймера дает как максимальный интервал так и соответственно точность измерений. На минимальном делителе получите предельную точность в 1-2 такта. Если нужна большая точность, и длительность не лезет в 16 бит, то используете прерывание переполнения счета таймера для увеличения разрядности счета .. делов-то.

Деталей даташита не помню, всегда когда надо что-то делать лезу заново и смотрю «как оно на самом деле», только в качестве идеи «как надо решать такие задачи» в части «как решение заточено разработчиками микроконтроллера», а не «как знаю», «как удобно», «как все (неучи) делают» .. оно ТАК ПОЛОЖЕНО, не более. :)

Источник

Многоканальный тестер сервоприводов с индикатором своими руками

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

Для чего это нужно

В хоббийной электронике широко применяются системы с управлением при помощи PWM-сигнала. Это последовательность импульсов с частотой 50Гц. Информация в них кодируется в виде длительности импульсов, которые могут меняться от 0,8 до 2,3мс. Крайние значения этого диапазона могут незначительно отличаться у разных производителей.

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

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

Особенности и характеристики нашего прибора

Схема тестера сервоприводов

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

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

Разъемы тестера предназначены для подключения самих сервоприводов, программирования, подключения к ПК и питания. Я принял решение не устанавливать на плату стабилизатор питания. То есть для ее использования не получится использовать напряжение аккумуляторов напрямую. Необходимо найти источник или стабилизатор на 5В с током, соответствующим току, потребляемому подключаемыми двигателями.
При проверке связки бесколлекторного двигателя с регулятором оборотов (ESC) сам двигатель питается от аккумулятора. Если у ESC есть встроенный регулятор оборотов, то можно питать тестер прямо от него.

Печатная плата подготовлена в формате Sprint Layout. Это двухсторонняя плата, но я рисовал ее так, чтобы можно было изготовить ее в домашних условиях ЛУТом или фоторезистом, а в переходные отверстия легко можно запаять перемычки с одной стороны платы на другую.

Лицевая сторона платы:

Я изготавливал эту плату в ручную и все это мной проверено и работает:

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


Список компонентов

Корпус

Еще я нарисовал и распечатал на 3D-принтере небольщую оправку и ручку на энкодер. Файлы для скачивания чуть позже.


Прошивка

Файлы прошивки будут в конце статьи. Прошить контроллер можно при помощи любого ISP-программатора через стандартный 6ти-пиновый разъем. На плате шесть из восьми контактов слева от энкодера предназначены в первую очередь именно для этого.
Фьюз-биты необходимо установить так, как показано на рисунке:

Работа тестера

Проще, конечно, один раз увидитеть:

Для запуска тестера в ручном режиме управления необходимо, чтобы перемычка «PC/Manual» при включении питания была установлена.

При запуске в ручном режиме на дисплее высветиться приветствие «HI» и тестер перейдет в режим ожидания выбора пользователем начальной длительности сигнала. Грубо говоря, от края или от середины диапазона. При нажатии на левую кнопку управление будет происходить от нуля, при нажатии на правую — от середины. После нажатия на одну из кнопок начнется генерирование сигнала, активным станет первый канал и он перейдет в режим «1».

В рабочем режиме кнопка MODE переключает режимы управления, меняя шаг приращения. Отображение текущего режима происходит при помощи шести светодиодов. Возможны четыре ручных режима (шаг 0,1; 1; 10 и от 0 до 150, то есть между краями диапазонов) и два автоматических (старт/стоп). Длительное нажатие на кнопку MODE переводит канал в режим автоматического управления и двигатель начинает плавно качаться из стороны в сторону. Короткое нажатие кнопки MODE в автоматическом режиме останавливает или возобновляет движения. Длинное нажатие на кнопку MODE возвращает канал в режим управления энкодером.

Кнопка CHANNEL производит переключение между активными каналами. Отображение текущего активного канала происходит на дисплее в двоичном коде при помощи разрядных точек. Длинное нажатие на эту кнопку переводит тестер в режим формирования одинаковых импульсов на всех каналах.

Обратите внимание, что на индикаторе отображаются цифры от 0 до 150. Это примерно соответствует углу сервопривода и может быть пересчитано в длительность импульса. Для пересчета достаточно умножить показания на десять и прибавить 800. Например, если на индикаторе десять, значит длительность импульсов 900мкс.

Подключение к компьютеру

Если вы используете Raspberry Pi, то вы можете просто подключить Rx, Tx и GND в левой нижней части платы. Если у вас нет TTL-совместимого COM-порта в вашем компьютере, то вы можете использовать USB-COM-переходник, которые стоят очень дешево. Также вы можете взять напряжение 5В USB-порта, но помните, что его максимальный ток 500мА! Скорость подключения — 9600.
Для того, чтобы тестер загрузился в режиме управления от ПК необходимо включить его без перемычки. При этом на индикаторе отобразятся буквы «PC» и тестер перейдет в режим ожидания команд от ПК. До прихода первого полного пакета на всех каналах сигнал будет отсутствовать.

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

Пакет данных должен состоять из 16ти байт: сначала два байта 0xFF для обозначения начала пакета, затем 12 байт длительностей импульсов для каждого канал и в конце два байта check-суммы. Check-сумма необходима для проверки корректности пакета и должна быть равна сумме всех длительностей.

1ый байт — 255 (0xFF)
2ой байт — 255 (0xFF)
3ий байт — старший байт первого канала
4ый байт — младший байт первого канала
5ий байт — старший байт второго канала
6ый байт — младший байт второго канала
7ий байт — старший байт третьего канала
8ый байт — младший байт третьего канала
9ий байт — старший байт четвертого канала
10ый байт — младший байт четвертого канала
11ий байт — старший байт пятого канала
12ый байт — младший байт пятого канала
13ий байт — старший байт шестого канала
14ый байт — младший байт шестого канала
15ый байт — старший байт check-суммы
16ый байт — младший байт check-суммы

Примеры корректных пакетов (в десятичной системе):
255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (все двигатели в начальное положение)
255 255 2 238 0 0 0 0 0 0 0 0 0 0 0 240 (первый двигатель в среднее положение)
255 255 2 238 2 238 2 238 2 238 2 238 2 238 17 148 (все двигатели в среднее положение)

Источник

Сервотестер своими руками.

Всем привет!

Решил рассказать о своём cервотестере.

Изготовлен он из простых деталей: tyni2313, 5 кнопок, 4 светодиода, стабилизатор на 5В, зуммер.

Инструкция или, что умеет сервотестер:
1. Калибровка — выставляется максимум и минимум, сохраняется при выключении.
2. Установка начального положения, сохраняется при выключении.
3. Восстановление настроек по умолчанию.
4. Включение / выключение звукового сигнала.
5. Ручное управление с возможностью менять скорость.
6. Автоматическое управление с возможностью менять скорость.
7. Мгновенное перемещение — левое, центральное и правое.

1.Калибровка — выставляется максимум и минимум, сохраняется при выключении.
Режим калибровки позволяет установить конечные углы отклонения сервопривода.

Вход в режим калибровки:
Нажать две кнопки I I затем подключить питание, отпустить кнопки.
Нажимая кнопки I I устанавливается крайнее левое положение, при достижении желаемого угла
нажать >I I устанавливается крайнее правое положение, при достижении желаемого угла
нажать >I I
Для центрального >I I I

4.Выключение / включение звукового сигнала
На включённом сервотестере одновременно нажать
Следующие нажатие выключит звук.

5.Автоматическое управление с возможностью менять скорость.
Включается одновременным нажатием кнопок I I
В этом режиме кнопки (выше) меняют скорость перемещения качалки
соответственно (выше).

Скорость установленная в автоматическом режиме сохраняется для ручного режима.
Если звук включён то перемещение качалки сопровождается мелодичным звуковым сигналом.
Выход из режима происходит при нажатии >I управляют перемещением качалки соответственно (вправо).
Перемещение качалки сопровождается мелодичным звуковым сигналом (если звуковой сигнал не отключён)
и светодиодной индикацией.

При достижении крайних положений соответствующий светодиод мигает и звучит прерывистый звуковой
сигнал (если звуковой сигнал не отключён)

7.Мгновенное перемещение — левое, центральное или правое.
В этом режиме кнопки I I I (правое) управляют “мгновенным” перемещением
качалки до конечных точек установленных при калибровке.
Соответствующий светодиод показывает выбранное положение.

Дальше расскажу, как он устроен.
ATtiny2313 нужно настроить на работу от внешнего или внутреннего кварца 8мгц, на схеме он есть,
но я использовал внутренний генератор ATtiny2313.

Плата двухсторонняя, разведена под резисторы 0,125Вт но в последствии были впаяны SMD, конденсаторы на 0.1мкФ на плате не обозначены и припаяны непосредственно к печатным проводникам. Перемычки обозначены красным цветом. Для подключения программатора выведены контактные площадки.



Cписок деталей:
1. XT60 — 1шт.
2. Кнопки (любые без фиксации) — 6шт.
3. Светодиоды (любые с током потребления до 20мА, желательно разного цвета) — 4шт.
4. L7805 — 1шт.
5. Пьезоизлучатель звуковой (любой без встроенного генератора) — 1шт.
6. Резисторы (подбираются под ваши светодиоды, 300 — 500 Ом)- 3шт.
7. Конденсаторы 0,1мкФ — 3шт., 10мкФ25В и 22мкФ16В — 1шт.
8. ATTiny2313 (корпус SOIC) — 1шт.


Файлы с прошивкой, печатной платой и прочее.
Вот собственно и всё!
Спасибо за внимание!

Источник

Adblock
detector