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

Добавил пользователь Валентин П.
Обновлено: 18.09.2024

Как говорилось в теме "Сервы", сервопривод одна из наиболее важных деталей в роботостроительстве. Рынки предлагают широкий выбор сервоприводов для моделей, однако:
- Далеко не везде (особенно в "глубинках") эти самые рынки есть.
- Очень часто предлагаемые сервоприводы неудобны для использования или обладают недостаточными характеристиками.
- Несмотря на казалось-бы небольшую цену (12-23$ за штуку), цена шасси, построеных на покупных сервоприводах весьма существенна - 3 на ногу, множим на 6 ног, множим на 12-23$, получаем, хо-хо, 216-414$! Далеко не всякий интузиаст (а как правило, именно у интузиастов, напр. у меня , таких денег то и нет ) позволит себе такую "розкошь". По этому, тоже оценив ситуацию, но "со своей колокольни" , принял решение строить сервоприводы самостоятельно. И вот что у меня вырисовалось:

БОльшая часть сервопривода изготавливаеться самостоятельно:
Опорный блок (1) вырезаеться из фторопласта (в принципе, можно вырезать из чего угодно достаточно прочного - полиуретан, гетинакс, ПВХ, бронза, железо)
Ползунок (2) лучше сделать именно из фторопласта (подойдёт и бронза, но тогда работа "насухо" не получиться).
Моторная рама (3) - железо
Опорная пластина (4) - бронза.
Ходовой винт (5) - стальной стержень, перед нарезкой резьбы нужно отжечь, потов снова закалить (напр. на газовой плите). Посадочный диаметр по малый подшибник и резьба нарезаеться на токарно-винторезном станке (резьбу можно нарезать и плашкой - весьма неплохо получаеться)
Направляющие (6) , (4 штуки) - стальные стержни (я брал спицы от горного велосипеда (только гладкие, никелированные, бывают с насечкой), с одной стороны на них уже была нарезана резьба, а с другой просто отрезал загибал и пропаивал).
Зубчатая пара - самый большой "дефицит", берёться от трасовых моделей, ведомая шестерня (7) - углепластиковая, ведущяя (8 ) - бронзовая, передаточное число приблизительно 1:4
Подшипники (9, 10), гайки (11) покупаються - дешёвые, не дефицит даже у нас .
Электродвигатель (12) - 3-х вольтовый, от детских игрушек, их ещё называют "Джонсоны", но тут по потребностям/необходимостям.

Главный плюс конструкции состоит в том, что можно самостоятельно выбрать мощность привода и необходимый расход руля (ΔL, см. рисунок).

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

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

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

Собственно а что такое серво двигатель?
Механика
Это обычный двигатель с редуктором на шестеренках.
Электроника
Переменный резистор, контроллер (который посредством ацп узнает положение движка, и управляет им(мотором))
Такой контроллер в принцыпе легко собрать.
Да и переменник легко приделать

все что пришло в голову по поводу серва.

Именно так и есть - всё в целом просто . механика+схема управления.
Сложности начинаются когда доходит дело до практической реализации

А какие проблемы в реализации.

Пластик или жесть для корпуса есть у многих, шестеренки можно найти., переменник тоже снять со старых магнитофонов, да и контроллер купить.
Скажите если не прав.

P.S В редукторе если поставить 2 ограничителя, то будет настоящий серво . Хотя если крепко прикрепит к переменнику, то он и будет ограничителями

Хочу сделать свой сервопривод на atmega8a-au, накидал программу:

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

ЕвгенийП аватар

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

Про то, что это работать не будет, Вам было сказано и был задан наводящий вопрос, Вы думаете, что от второго поста что-то изменится?

Накидывают дерьмо на вентиллятор.

Что именно "что-нибудь"?

На одну ошибку Вам указали вчера. Исправьте её и опубликуйте код как положено, будем разговаривать дальше.

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

Велимир , пожалуйста не плодите идентичные темы, иначе придётся их удалять.

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

Ну вот. Хотел бы услышать ваши мысли (может что доработать, упростить, уточнить), если можно. Прошу не говорить, что сервы проще в Китае купить. Это программа для управления серво импульсом 900-2100. Извиняюсь за этот инцидент.

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

И ещё один сопутствующий вопрос - как лучше прошивать atmega8a-au в корпусе tqfp.

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

Об управлении сервоприводом без использования готовой библиотеки в Интернете достаточно информации имеется.

Ну и так далее, поиск рулит.

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

ЕвгенийП аватар

Хотел бы услышать ваши мысли

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

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

Да, не понял. Расскажите подробнее

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

Об управлении сервоприводом без использования готовой библиотеки в Интернете достаточно информации имеется.

Ну и так далее, поиск рулит.

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

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

Ааааа, теперь задумка понятна. Но не до конца - два мотора почему, для двух направлений поворота ?

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

ЕвгенийП аватар

Да, не понял. Расскажите подробнее

У нас разговор немого с глухим.

Я с удовольствием расскажу поподробнее, но ответьте же на мой вопрос, который я Вам зала два дня назад! Что по Вашему делает вот такая конструкция (она из Вашего клода)?

Почему Вы не отвечаете? Я просил Вас об ответе уже в нескольких постах и мне порядком поднадоело. Или Вы отвечаете и мы работаем дальше, или Вы сами решаете проблемы.

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

Извиняюсь. В программе которую я сюда выложил нет delay. Этот элемент закрывает транзисторы управления мотором, если переменная D = 0.

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

два мотора почему, для двух направлений поворота ?

Да. Четыре транзистора, по два на сторону поворота. Подается напряжение на одну сторону транзисторов (motor1) едет в одну сторону, на другую (motor2) крутится, соответственно, в другую. И пять (вместо трёх) выходов проводов. Три для МК и два для питания мотора.

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

ЕвгенийП аватар

В программе которую я сюда выложил нет delay.

В первом посте был, цитата оттуда, но это неважно, дело тут не в delay

Этот элемент закрывает транзисторы управления мотором, если переменная D = 0.

Что-то подобное я и предплагал - уверен был, что Вы неправильно понимаете, что он делает.

Теперь читайте внимательно: этот кусок кода присваивает 0 переменной D и больше не делает ничего. Т.е. он полностью эквивалентен вот такому коду:

Испарвляйте ошибку и перевыкладывайте код. Только не забудьте написать что с ним не так - в каком месте он работает неверно.


Современные строительные электроинструменты достигают высокой производительности и эргономичности благодаря использованию мощных бесщеточных электродвигателей и литий-ионных аккумуляторов. Для реализации сложных алгоритмов питания таких двигателей и управления ими компания Infineon предлагает микросхему интеллектуального драйвера управления трехфазным бесщеточным двигателем 6EDL7141, MOSFET BSC007N04LS6 из семейства OptiMOS 6, а также отладочную плату EVAL6EDL7141TRAP1SH.

Компания Mornsun выпустила три серии источников питания с креплением на DIN-рейку в форм-факторе Home Automation на популярные значения выходной мощности 30, 60 и 100 Вт (серии LI30-20/PR2, LI60-20/PR2, LI100-20/PR2). Эти источники питания относятся ко второму поколению продукции (R2) и характеризуются высокой надежностью и хорошей стоимостью.

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

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

Да, и обратите внимание на полярность подключение диода в вашей собранной схеме.

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

Соберем сервопривод используя подручные компоненты.

В качестве системы управления и контроля будем использовать Arduino Nano, думаю её скорости работы и ресурсов будет достаточно.


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


В качестве драйвера мотора я вначале использовал L298N, но конечно данный драйвер не мог справится с той нагрузкой, которая на него легла. И пока я ждал посылки с мощными драйверами спалил пару L298N. На фото ниже можно разглядеть результаты пожара.




В настоящее время и в данном тестировании использован мощный драйвер на MOSFET транзисторах. Фотографии драйвера с описание порядка подключения изображены ниже.

Отличие от L298N в функциях управляющих контактов:

EN – включает драйвер;

DIR – задает направление вращения;

PWM – служит для широтно-импульсного регулирования мощности подаваемой на мотор.

Драйвер позволяет управлять парой мощных коллекторных моторов, может работать с напряжением до 36 вольт и током 16А.


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


Теперь о источнике питания, им будет литий-ионный аккумулятор на 36вольт от гироскутера.


А для питания Arduino и цепей управления я применю связку из понижающего импульсного стабилизатора и линейного 5вольтового стабилизатора. Импульсным стабилизатором снижу напряжение с 36 до 8 вольт, а затем, понижу до 5вольт линейным стабилизатором, заодно уберу колебания, которые как правило присутствуют на выходе импульсных стабилизаторов.




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

Схема довольно проста, 8 и 9 пин считывают показания с энкодера мотора, 2 пин включает/отключает драйвер, 3 пин управляет направлением вращения, 5 пин регулирует подачу мощности драйвером на мотор посредством широтно-импульсной модуляции сигнала (ШИМ) .


Для управления двигателем я буду использовать ПИД регуляцию, т. е. мне потребуется разобраться с составляющими: что из себя представляет пропорциональное, интегральное и дифференциальное звенья регулятора.

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

if (encoder_new_L == 3) encoder_L++;

if (encoder_new_L == 0) encoder_L--;

if (encoder_new_L == 2) encoder_L++;

if (encoder_new_L == 1) encoder_L--;

if (encoder_new_L == 0) encoder_L++;

if (encoder_new_L == 3) encoder_L--;

if (encoder_new_L == 1) encoder_L++;

if (encoder_new_L == 2) encoder_L--;

Один раз в 10 миллисекунд происходит опрос и корректировка работы двигателя

ENC_cel – целевое значение перемещения в тиках энкодера;

ENC_tec - текущее значение положения энкодера.

Otklonenye - отклонение от целевого положения энкодера,

Realspeed — реальная скорость в тиках энкодера в секунду ,

ENC_OLD – значение энкодера в прошлом опросе;

Dt – время, которое прошло с прошлого опроса.

Speed – разница между реальной скоростью и заданной скоростью (с которой нужно двигаться), использование данного параметра в ПИД регуляторе является ключевым и имеет максимальное влияние на результат.

motor_Speed — заданная скорость мотора, та с которой должно происходить перемещение

dSpeed - ускорение с которым изменяется отклонение реальной скорости от заданной, позволяет сгладить толчки.

oldSpeed - разница между реальной скоростью и заданной скоростью рассчитанная в прошлом опросе

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

PWM_motor — ШИМ, который будет подан на мотор;

oldPWM_motor — ШИМ , поданный на мотор в прошлой итерации (по результатам предыдущего опроса);

Читайте также: