суббота, 9 февраля 2013 г.

примеры расчета количества импульсов сервопривода

И напоследок фото макета. Видео, к сожалению, выложить не могу.

Обратите внимание на привод в левом нижнем углу движения практически не заметно! Этот привод управляет стрелой крана. Добавлю еще про сами приводы. Мне в руки попало четыре разных привода два аналоговых и два цифровых. Примечательно, что оба аналоговых привода могли работать нормально только пару минут, а потом начинать произвольно дергаться, зажиматься в крайних положениях и т.д., хотя оба привода рабочие проверял сервотестером. Цифровые приводы выполняли все четко и стабильно по несколько часов подряд (а может и суток). Нареканий от заказчика я не слышал. Для стрелы крана я использовал привод Hi-Tech, который изменял свою позицию с минимальным шагом.

Вот видео работы четырех приводов:

Текст всей программы приводить не буду, скажу только что углы в основном цикле могут формироваться любым образом хоть по данным с UART, хоть с ADC. Я же фактически руками забил куда ехать, где и сколько постоять и т.д. Также у меня еще был тумблер. Во включенном положении сервы двигаются по программе, а при выключении возвращаются в свое исходное положение. При необходимости все исходники проекта могу выслать на почту.

Переменные angle1-angle4 это углы в нормированных единицах, меняющиеся в основном цикле программы. Для изменения угла от 0 до 180 градусов они должны меняться от 800 до 2200. Все управление происходит в обработчике прерываний. При первом срабатывании таймера в единицу выставляется нога ответственная за первый привод. Тут же в регистр OCR1A записывается значение угла для этого привода. При следующем срабатывании нога устанавливается в 0 и в регистр OCR1A записывается количество тактов, которое осталось до конца периода управления одним приводом (у меня он выставлен 4500). Затем все то же самое проделывается с ногой, ответственной за второй привод. Таким образом, каждые 4,5мс на одной ноге за другой появляется импульс необходимой длительности, причем с точность до 1мкс! То есть точность установки угла будет меньше 10-ти минут и ограничена характеристиками самого привода. Итак, сам код:

Для реализации такого метода достаточно всего одного таймера. Я настроил таймер на увеличение каждую микросекунду. Весь период сигнала 18000мкс, время на формирование одного импульса 4500мкс. Прерывание по таймеру при управлении четырьмя сервами вызывается восемь раз. Отсюда вытекает ограничение метода: не получится на один таймер повесить больше 8-ми приводов (за 20мс можно сформировать максимум 8 импульсов длительностью 2,3мс).

Принцип управления сервопривода прост: необходимо с периодом 15-20мс отправлять импульсы с длительностью 0,8-2,3мс. Длительность импульса определяет положение сервопривода. Предлагаемый метод предполагает формирование импульсов на ножках МК одного за другим, как показано на рисунке.

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

Метод DI HALT а предполагет формирование по возрастанию, то есть необходимо дополнительно обсчитывать сигналы.

По управлению приводами я нашел две наиболее интересные статьи у и . Но в обоих методах есть определенные недостатки. В первом случае: необходимо слишком часто вызывать прерывание, что труднопредсказуемо замедляет выполнение основного цикла и не позволяет получить высокую точность позиционирования. При его реализации привод достаточно сильно дергается, точность установки около 1 градуса. Собственно, вот видео:

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

В моем случае предполагалось использовать четыре привода. Для этого проекта я изготовил небольшую плату:

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

Управление несколькими сервоприводами с высокой точностью на МК ATmega16

Управление несколькими сервоприводами с высокой точностью на МК ATmega16 / Хабрахабр

Комментариев нет:

Отправить комментарий