Вход на сайт

Зарегистрировавшись на сайте Вы сможете добавлять свои материалы






Самодельный сервоконтроллер


Управление сервоприводом SG90 без микроконтроллера / Хабр


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

Кому интересно, прошу под кат.

Идея


Надо управлять сервоприводом, но без микроконтроллера.

Знания


Всем известно, что опыт и знания помогают творить и находить решения. На страницах Гиктаймса немало примеров использования сервопривода с применением контроллеров. В них подробно рассказано про систему управления сервоприводом. Примем этот опыт других разработчиков за знания необходимые нам для решения задачи. Сервопривод SG90 управляется ШИМ сигналом, параметры которого определяют положение ротора. Период ШИМ около 20 мС, длительность сигнала управления от 500 до 2100 мкС.

Задача


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

Реализация


Вот тут и начинаются муки творчества: что взять и где взять? Можно найти готовый лабораторный импульсный генератор, например Г5-54 с ручками, кнопками, выставить нужные параметры, подключить генератор к сервоприводу. Однако это громоздко и не все могут позволить себе такую роскошь. Поэтому разработчики, опираясь на свой опыт и знания, пытаются совместить желание (идею-задачу) и возможности (материальные и творческие) для реализации задачи. Материальные возможности — это та “жаба”“А сколько и чего я хочу потратить на реализацию идеи?” Творческие возможности — это, “посмотрю-ка я, что у меня уже есть”. Это не обязательно какие-то материальные ценности, а опыт и знания предыдущих разработок, которые можно приспособить под реализацию. Также не лишним будет поискать (погуглить), что кто-то уже реализовывал что-то подобное. Для сокращения вариантов решения необходимо самому добавлять дополнительные требования, ограничивающие фантазии реализации. Например, добавим к требованиям еще одно условие, пусть это будет материальное ограничение, реализация должна быть недорогой.

Поиск альтернатив


Воспользовавшись интернетом, поищем варианты, которые предлагает СЕТЬ. Зададим в поиске: “генератор прямоугольных импульсов с переменной скважностью”. Получим очень много вариантов, как с применением интегральных таймеров NE555 (отечественный аналог КР1006ВИ1), так и на логических микросхемах. Из всего разнообразия я выбрал вариант генератора на инверторе с триггером Шмитта на входе. Во-первых, он самый простой, во-вторых, требует минимум деталей и самое интересное использует единственный логический элемент из шести, если, например, использовать микросхему 74HC14.

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


Немного теории


Теория гласит, что частота такого генератора равна f = 1/T = 1/(0.8*R*C). Для получения требуемой частоты требуется выбрать номинал одного из элементов, задающих частоту. Так как логический элемент выполнен по технологии КМОП, то имеет большое входное сопротивление, поэтому можно применять элементы задающие небольшие рабочие токи. Выберем емкость С1 из ряда распространенных номиналов, например 0.47 мкФ. Тогда для получения требуемой частоты (50Гц) резистор должен быть приблизительно 53 кОм, но такого резистора в стандартном ряду нет, поэтому выберем 51 кОм.
На выходе такого генератора формируется сигнал близкий к меандру, поэтому нам необходимо скорректировать схему таким образом, чтобы она удовлетворяла требованиям задания. Для получения регулируемой длительности импульса на выходе необходимо изменить режим перезарядки конденсатора от высокого уровня на выходе, а именно, сократить время перезарядки. Для этого добавим в схему еще два элемента: диод и переменный резистор. Подойдет любой маломощный импульсный диод.

Тогда схема примет следующий вид:


Казалось бы: все, задача решена, но в крайних положениях переменного резистора поведение сервопривода нестабильно. Это связано с тем, что значение длительности импульсов, в крайних положениях переменного резистора, не соответствует требуемым. Лично мне также не по душе применение переменного резистора, поэтому я хочу изменить интерфейс управления, добавив новую “хотелку” в техническое задание, например чтобы скважность менялась в зависимости от освещенности. Для этого есть простое и недорогое решение: применить в качестве регулирующего элемента фоторезистор GL55xx (используют в проектах Arduino), изменение сопротивления которого лежит в широком диапазоне.

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

Итоговая схема принимает следующий вид:


Пояснения к итоговой схеме


Конденсатор С1 номиналом 0.47 мкФ, определяет время перезаряда. Резистор R1 номиналом 51 кОм задает основную частоту повторения импульсов в районе 50 Гц. Комбинация резисторов R2-R4 в сумме будет изменяться в диапазоне от 2.5 кОм до 24 кОм в зависимости от освещенности. Вместе с диодом D1 эти резисторы будут влиять на время перезаряда конденсатора С1 при действии положительного импульса на выходе логического элемента, тем самым определять его длительность.

Результат


Подключив данный генератор к входу управления сервопривода получим возможность управлять им, изменяя освещенность фоторезистора. На видео можно посмотреть, что из этого получилось:

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

Дерзайте и удачи!

DFRobot / Visual-Servo-Controller: программное обеспечение сервоконтроллера для перемещения и создания шаблонов движения для ваших сервоприводов. Отлично подходит для сложных сервосистем

перейти к содержанию Зарегистрироваться
  • Почему именно GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграции
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • мобильный
    • Истории клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
    • Изучить GitHub →
    Учитесь и вносите свой вклад
.

sparkfun / Pi_Servo_Hat: Серво щиток для Raspberry Pi Zero W (и других устройств Pi), который управляет до 16 серводвигателями.

перейти к содержанию Зарегистрироваться
  • Почему именно GitHub? Особенности →
    • Обзор кода
    • Управление проектами
    • Интеграции
    • Действия
    • Пакеты
    • Безопасность
    • Управление командой
    • Хостинг
    • мобильный
    • Истории клиентов →
    • Безопасность →
  • команда
  • предприятие
  • Проводить исследования
.

ELM - Контроллер серводвигателя постоянного тока

ELM - Контроллер серводвигателя постоянного тока

Это эксперимент над системой управления серводвигателем постоянного тока с обратной связью ( SMC ). Его можно будет использовать для практического использования с некоторыми модификациями или без них. Сервомеханизм с замкнутым контуром требует сервоприводов в реальном времени, таких как управление положением, управление скоростью и управление крутящим моментом. Он подойдет для реализации на любых встроенных 32-битных процессорах RISC в качестве промежуточного программного обеспечения. В этом проекте эти операции обрабатываются только дешевым 8-битным микроконтроллером.

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

Оборудование

Рисунок 1. Блок-схема

Рис. 2. Принципиальная схема (закрытая)
Рисунок 3. Встроенная плата сервоконтроллера

На рисунке 1 показана блок-схема SMC.Он построен только с микроконтроллером AVR и усилителем мощности в режиме PWM. Вся работа сервопривода обрабатывается программно реализованным сервопроцессором. Никакие аналоговые компоненты для сервопривода не используются.

На рисунке 2 показана принципиальная схема SMC. AVR обрабатывает большинство функций сервопривода, таких как захват положения, работа сервопривода, вывод ШИМ и команды движения от хост-контроллера. Усилитель мощности представляет собой высокоэффективный драйвер двигателя H-blidge в режиме ШИМ. Он может управлять двигателем мощностью до 50 Вт при напряжении питания 12 В.

JP1 - это разъем ISP для программирования AVR, а также его можно использовать для подключения платы светодиодного дисплея. P2 - это хост-интерфейс, которым может управлять любой хост-контроллер, он может быть напрямую подключен к последовательному порту ПК. P4 - это интерфейс с импульсными командами, как и у большинства сервоконтроллеров.

На рисунке 3 показана встроенная плата сервоконтроллера. Он построен на прототипе платы размером 44 мм на 85 мм.

Программное обеспечение

Рис. 4. Работа сервопривода позиционирования

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

Сервооператор состоит из усилителей ошибок и фильтров ПИД. До 1980-х годов сервопривод реализован с помощью операционных усилителей, преобразователя F-V, дифференциального счетчика, цифро-аналогового преобразователя и многих аналоговых компонентов. После 1990-х годов популярна цифровая обработка сигналов для сервоконтроллеров, и были также разработаны и применены новые алгоритмы сервопривода, такие как управление AI, надежное управление и нечеткое управление.

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


Рисунок 5. Схема работы SMC (каскадное управление)

На рисунке 5 показан сервопривод для SMC. Это конфигурация с множественной обратной связью, которая в настоящее время является наиболее популярным и фундаментальным сервомеханизмом. Сервопривод с множественной обратной связью называется «Каскадное управление».Это своего рода «усовершенствованный сервомеханизм». При каскадном управлении один или несколько элементов управления, реакция которых происходит быстрее, чем выбирается основной контур, и если их поместить в основной контур управления в качестве второстепенного контура управления, общая производительность сервопривода увеличивается.

Теперь эти сервооперации обрабатываются программно реализованным цифровым сервооператором. Для дискретной аппроксимации работы сервопривода требуется период обновления, который полностью превышает механический отклик. Обычно выбирается частота обновления от 1 кГц до нескольких кГц.В настоящее время он может обрабатываться большинством микроконтроллеров без DSP. SMC обрабатывает сервооперацию с частотой обновления 1 кГц, каждая операция обрабатывается в течение 92 секунд, так что AVR может быть легко использован для сервообработки.

SMC может работать в четырех различных серворежимах , режиме позиционирования (отслеживания), режиме постоянной скорости, режиме постоянного крутящего момента и режиме постоянного напряжения. Режимы работы определяются трактом данных серво процесса. Каждой операцией можно управлять с помощью хост-контроллера через последовательный интерфейс SMC.Кроме того, он также может работать как автономный контроллер движения с любым обновлением прошивки.

Mode 0 (режим управления напряжением) управляет двигателем при постоянном напряжении. Режим 1 (режим с управлением по крутящему моменту) приводит двигатель в действие с постоянным крутящим моментом, независимо от скорости вращения. Режим 2 (режим с регулируемой скоростью) приводит двигатель в движение с постоянной скоростью, независимо от момента нагрузки. Mode 3 (режим позиционирования) приводит двигатель в заданное положение и удерживает его.Это называется «сервоприводом слежения», который обычно используется в системе управления движением.

Параметры сервопривода, такие как любые коэффициенты усиления и ограничения, могут быть изменены динамически. Однако SMC не имеет функции автоматической настройки, поэтому вам придется настраивать параметры сервопривода вручную в соответствии со свойствами фактического двигателя и нагрузки. AVR имеет 128 байт энергонезависимой памяти данных, параметры сервопривода могут быть сохранены или загружены в память.

Захват позиции

Рисунок 6. Выходной сигнал энкодера

Для регистрации положения двигателя используется прерывание таймера 52 кГц для выборки квадратурного выходного сигнала инкрементального энкодера и обновления текущего регистра положения.Обычно аппаратный буферный счетчик используется для интерфейса кодировщика, чтобы уменьшить нагрузку на процесс захвата. Однако SMC производит выборку входных сигналов напрямую с помощью только программного процесса, чтобы уменьшить количество внешних компонентов.

Максимальная скорость счета программного метода выборки меньше, чем его частота выборки. Если входная скорость счета превышает частоту выборки, произойдет ошибка счета, и соответствие между фактическим положением двигателя и текущим регистром положения будет потеряно. В SMC для увеличения допуска по скорости к коду ошибки применяется специальный процесс.Он может принимать входную скорость счета до двух раз быстрее, чем его частота дискретизации. Следовательно, максимальная скорость счета на входе составляет до 104 тыс. Импульсов в секунду. При использовании инкрементального энкодера 400 ppr (1600 cpr) максимальная скорость вращения становится:

 2 * 52k [sps] / 1600 [cpr] * 60 = 3900 [об / мин] 

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

Внутренние процессы для SMC

Рисунок 7а.Процесс переднего плана
Рисунок 7b. Фоновый процесс

SMC имеет два внутренних процесса: процесс переднего плана и фоновый процесс. Процесс переднего плана выполняет команды движения от хост-контроллера. Фоновый процесс обрабатывает захват положения и работу сервопривода в реальном времени.

Онлайн-команда

SMC управляется онлайн-командами хост-контроллера через его последовательный интерфейс. Формат последовательных данных - N81, а скорость передачи данных - 38,4 кбит / с. Его можно напрямую подключить к последовательному порту ПК.Ниже приведены подробные сведения об онлайн-командах.

M - Изменить режим работы сервопривода
Режим # Режим работы сервопривода
0 Режим управления напряжением (по умолчанию)
1 Режим управления крутящим моментом
2 Режим управления скоростью
3 Режим управления положением
 M <Режим №> 

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

L - Показать счетчик позиций
 L  

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

E - Изменить режим обратного эха
 E <переключатель>  

Эта команда включает / отключает возврат командных символов с хоста. Ноль отключает обратное эхо, один включает обратное эхо. Начальное значение при включении равно единице.

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

S - Установить значение в регистр подкоманд
 S [<Значение>]  

Счетчик позиций - это 16-битный регистр со знаком, который активен, кроме режима 3.Когда опущено, отображается текущее значение и предлагается ввести новое значение.

В режиме 0 действует диапазон от -255 до 255 и регулирует выходное напряжение от -Vs до + Vs. В режиме 1 действует диапазон от -255 до 255 и регулирует выходное напряжение от -Vs до + Vs. Выходное напряжение компенсируется в соответствии со скоростью вращения для отмены генерации счетчика. В режиме 2 соответствие между значением и контролируемой скоростью следующее:

 Скорость [об / мин] = Подкоманда рег.* 15000 / P1 / Разрешение энкодера [ppr] 
J - Установить значение в регистр команд положения
Рисунок 8. Профиль движения по J-команде
 J <Позиция>  

Эта команда устанавливает значение в регистр команд положения. Регистр команд позиционирования представляет собой 24-битный регистр со знаком, который действует только в режиме 3. Он также может быть изменен вводом step / dir поочередно или одновременно.

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

G - Создать движение
Рис. 9. Профиль движения по команде G
 G0 <Позиция>  G1 <Позиция> <Скорость>  

Эта команда имеет два разных профиля движения, показанных на рисунке 9, каждый из которых эквивалентен командам G0 / G1 инструкции ЧПУ. Команда G0 используется для наиболее быстрого позиционирования, она переходит в заданную позицию с трапециевидным профилем движения.Ускорение и максимальная скорость при движении определяются серво-параметрами P6 и P7. Команда G1 используется для движения резания для подачи заготовки с постоянной скоростью.

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

P - Изменить параметр сервопривода
 P <Параметр №> [<Значение>]  

Эта команда устанавливает <Значение> в регистр параметров сервопривода, указанный в <Параметр №>.Параметры могут быть сохранены / загружены в энергонезависимую память данных с помощью команды R / W.

Параметр # 0: предел скорости

Это беззнаковое значение, которое регулирует скорость движения в режиме позиционирования. Например, движение при длительной поездке по команде J достигнет этого ограничения. Что касается SMC3 / A, значение должно быть меньше скорости холостого хода, иначе может возникнуть ошибка сервопривода.

 P0 = предел скорости [об / мин] * P1 * разрешение энкодера [ppr] / 15000 
Параметр # 1: усиление обратной связи по скорости (K F )
Параметр # 2: Пропорциональное усиление ошибки скорости (K P )
Параметр № 3: Коэффициент интегрирования погрешности скорости (K I )

Это беззнаковые 16-битные значения с фиксированной точкой, десятичная точка которых находится на границе байта.Если вы хотите установить 1,5, установите 1,5 * 256 = 384.

Параметр # 4: предел крутящего момента

Этот параметр ограничивает выходной крутящий момент (выходной ток). Это 16-битное значение без знака. Что касается SMC3 / A, когда крутящий момент ограничен на время, произойдет ошибка сервопривода.

 P4 = Предельный ток [A] / Напряжение питания [В] * Сопротивление катушки якоря [Ом] 
Параметр # 5: усиление компенсации обратной ЭДС

Обычно выходной крутящий момент, создаваемый током обмотки якоря, измеряется и возвращается обратно для создания контура управления крутящим моментом.Однако SMC не использует датчик тока и управляет выходным крутящим моментом с помощью бессенсорного метода управления током. Для подачи заданного тока на двигатель SMC применяет компенсацию противо-ЭДС (E G ). Это неточность по сравнению с обычным управлением с обратной связью по току. Но я выбрал его, потому что на нем легко собрать печатную плату.

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

 P5 =  кг  [мВ / об / мин] / Разрешение энкодера [ppr] / Напряжение питания [В] * 3840 
Параметр # 6: Максимальная скорость для команды G0

Этот параметр определяет максимальную скорость для команды G0.Это 16-битное значение без знака.

 P6 = Скорость [об / мин] * Разрешение энкодера [ppr] / 15000 
Параметр # 7: Ускорение для команды G0

Этот параметр определяет ускорение / замедление по команде G0. Это 16-битное значение без знака.

 P7 = ускорение [об / мин / с] * разрешение энкодера [ppr] * 17 
W - Сохранить параметр сервопривода
 W <банк #>  

Эта команда сохраняет текущее значение параметров сервопривода в энергонезависимую память данных.Память данных разделена на восемь банков. <Банк №> указывает номер банка для сохранения.

R - Загрузить параметр сервопривода
 R <банк #>  

Эта команда загружает параметры сервопривода из энергонезависимой памяти данных. Банк 0 загружается автоматически при инициализации включения питания.

Результат и исследование

Использование процессора
Рисунок 10а. Коэффициент загрузки процессора
Рис. 10б. Использование памяти программы

На рисунке 10a показан коэффициент загрузки процессора для каждого процесса.Поскольку SMC захватывает входные данные кодера с помощью только программного обеспечения, этот процесс занимает больше всего времени из эффективного времени обработки. Захват программным кодировщиком можно использовать в лучшем случае на двух осях. Сервообработка кажется правильной, хотя она обрабатывает много операций.

Таким образом, более 60 процентов мощности процессора находится в режиме ожидания, AVR имеет достаточно возможностей для сервоуправления. Его можно будет использовать для сервоуправления несколькими осями, если добавлен какой-либо внешний буферный счетчик для захвата кодировщика. На самом деле, я разработал очень недорогой шестиосевой сервоконтроллер для развлекательной машины с AVR (8535) и некоторыми CPLD :-)

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

Производительность сервопривода
Рисунок 11. Измеренная переходная характеристика

Двигатель: UGTMEM-A1SA51
(Yasukawa Electric Corp.)
В S = 14,5 В
K F = 4,6
K P = 1,5
K I = 0,13
Без нагрузки

На рисунке 11 показана измеренная характеристика скачка при работе сервопривода слежения (режим 3). Это след скачкообразного движения на 360 градусов с помощью J-команд. Это видно по графику, время настройки меньше 40 мс, и появляется небольшой выброс.

Чтобы использовать SMC для любого управления движением, параметры сервопривода должны быть настроены для фактических свойств нагрузки.Обычно для математического анализа сервосистем, фильтров или ФАПЧ используется передаточная функция. См. Любые другие документы по применению передаточной функции к сервосистеме. Вы сможете найти документы с ключевыми словами «передаточная функция» и «сервопривод».

Технические данные

,

Смотрите также