Как превратить любой двигатель постоянного тока в серводвигатель с помощью Atmega328p


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

Двигатель постоянного тока, превращенный в серводвигатель

Это довольно удобно, я думаю, и вдобавок ко всему, мы можем даже настроить центральную точку сервопривода. Таким образом, мы можем настроить и центральную точку, и диапазон вращения одновременно.

Демонстрация работы самодельного серводвигателя

Кратко весь процесс сборки подобного самодельного серводвигателя вы можете посмотреть в следующем видео:

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

У нашего серводвигателя можно настраивать чувствительность

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

Управление нашим серводвигателем через последовательный монитор на ноутбуке

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

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

Все это возможно благодаря 12-битному энкодеру, используемому в этом серводвигателе, магнитному датчику положения вращения AS5600 и внедренному ПИД-регулятору для управления двигателем постоянного тока.

Магнитный датчик положения вращения AS5600 является ключевым компонентом нашей схемы

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

Самодельная плата для превращения любого двигателя постоянного тока в автономный серводвигатель

Нам просто нужно расположить плату в центре выходного вала (включая специальный магнит на валу), подключить двигатель постоянного тока любого размера с номинальным током до 3,5 А, запитать всю систему напряжением 12 В и все, мы получаем серводвигатель из обычного двигателя постоянного тока со всеми этими функциями.

Установка платы в центре выходного вала двигателя

Теперь я проведу вас через весь процесс изготовления этого серводвигателя, изготовленного на заказ, чтобы вы также могли сделать его самостоятельно. Я объясню принцип работы серводвигателя, контроллера замкнутого контура, ПИД-регулятора, как я разработал для него специальную печатную плату и коробку передач, а также объясню код, лежащий в его основе.

Принцип работы серводвигателя

Чтобы объяснить принцип работы серводвигателя, давайте разберем типичный RC-серводвигатель и посмотрим, что у него внутри.

Как устроен обычный серводвигатель изнутри

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

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

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

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

Как сделать собственный серводвигатель

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

Компоненты для создания замкнутой системы управления двигателем

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

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

Инкрементальный энкодер будет управлять вращением нашего серводвигателя

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

Энкодер AS5600 – магнитный датчик положения вращения

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

Энкодер AS5600 крупным планом

Он имеет встроенный датчик Холла, который может определять изменения направления магнитного поля. Поэтому нам просто нужно прикрепить магнит к выходному валу двигателя и расположить его рядом с микросхемой на расстоянии от 0,5 до 3 мм.

Расстояние, на котором нужно расположить энкодер AS5600 от вала двигателя

Теперь, когда вал двигателя и магнит будут вращаться, датчик Холла будет фиксировать эти изменения в направлении магнитного поля. С помощью встроенного 12-битного АЦП датчик AS5600 может выводить 4096 положений за один оборот или вращение на 360 градусов.

Принцип работы энкодера AS5600

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

Хорошо, что еще нам нужно, это микроконтроллер и драйвер для двигателя постоянного тока. Я выбрал драйвер двигателя постоянного тока DRV8871, который может работать с током до 3,5 ампер, и микроконтроллер Atmega328.

Основные электронные компоненты, необходимые для нашей системы управления двигателем

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

Схема серводвигателя

Ниже представлена ​​полная принципиальная схема этого самодельного серводвигателя.

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

Итак, у нас есть микроконтроллер Atmega328 вместе с его рекомендуемой минимальной схемой, которая включает в себя генератор 16 МГц, несколько конденсаторов и резистор.

Компоненты схемы, обеспечивающие нормальную работу микроконтроллера Atmega328

Для питания микроконтроллера и других компонентов, которым требуется 5 В, мы используем регулятор напряжения AMS1117, который понижает входное напряжение 12 В до 5 В.

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

Компоненты схемы, необходимые для нормальной работы датчика положения AS5600

Драйверу двигателя постоянного тока DRV8871 требуется всего один резистор для ограничения тока и два развязывающих конденсатора. Затем у нас есть два потенциометра, подключенных к аналоговым входам микроконтроллера, один для регулировки диапазона вращения, а другой для регулировки чувствительности сервопривода. Кнопка используется для установки центральной точки сервопривода, а двухпозиционный DIP-переключатель — для выбора режимов работы сервопривода. Есть разъем для входов сервопривода, либо аналоговый вход напряжения, либо цифровой вход ШИМ от RC-приемника, а также 5 В и заземляющий контакт. Есть также разъем для программирования микроконтроллера через протокол SPI и последовательный порт.

Вот краткое изложение этой схемы и ее рабочего процесса. Входной сигнал или желаемое угловое положение принимается через эти два контакта, и это может быть либо аналоговое напряжение, поступающее от потенциометра, либо цифровой ШИМ-сигнал, поступающий от RC-приемника. Входной сигнал поступает в микроконтроллер, где он сравнивается с фактическим угловым положением, которое обнаруживается энкодером/датчиком положения AS5600. Этот датчик взаимодействует с микроконтроллером через протокол I2C.

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

Затем микроконтроллер выполняет вычисления, вычисляет ошибку и в соответствии с ней посылает ШИМ-сигнал на драйвер DRV8871, который управляет двигателем постоянного тока до тех пор, пока он не достигнет желаемого положения.

Вся схема питается от напряжения 12 В, а регулятор напряжения AMS1117 обеспечивает напряжение 5 В для микроконтроллера и других компонентов.

Необходимые компоненты

  1. Микроконтроллер Atmega328p-AU (купить на AliExpress).
  2. Драйвер двигателя постоянного тока DRV8871 (купить на AliExpress).
  3. Магнитный энкодер AS5600 (купить на AliExpress).
  4. Кварцевый генератор 16 МГц (купить на AliExpress).
  5. Регулятор напряжения AMS1117 5 В (купить на AliExpress).
  6. Квадратный потенциометр 3386P.
  7. Конденсаторы 0805 комплект.
  8. Двигатель постоянного тока 12 В – ~ 50 об/мин.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Проектирование печатной платы

Согласно принципиальной схеме, я старался сделать печатную плату как можно меньше, и она получилась размером 40х40 мм.

Макет печатной платы для нашего серводвигателя

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

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

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

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

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

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

Изготовленная печатная плата для нашего проекта серводвигателя

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

Припаивание светодиодного индикатора на нашу печатную плату

На самом деле, это мой первый опыт пайки небольших SMD-компонентов, и у меня это получилось очень, очень плохо.

Самым сложным оказалось припаять микроконтроллер Atmega328, так как контакты очень маленькие и расположены очень близко друг к другу, но мне как-то удалось это сделать.

Припаивание микроконтроллера Atmega328 на нашу печатную плату

Микросхему энкодера AS5600 было легко припаять на обратной стороне печатной платы, как и более крупные компоненты со сквозными отверстиями, такие как DIP-переключатель, потенциометры, клеммные колодки и штыревые разъемы.

Припаивание микросхемы энкодера AS5600 с обратной стороны печатной платы

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

Внешний вид печатной платы для нашего серводвигателя

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

Пользовательская 3D-модель сервопривода

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

3D-модель сервопривода

Здесь я использую двигатель постоянного тока диаметром 37 мм и встроенный редуктор, который выдает 50 об/мин. 50 об/мин — хорошая скорость для серводвигателя, но я хотел немного снизить ее, чтобы получить лучший крутящий момент, поэтому я сделал редуктор с 3-кратным уменьшением. Для этой цели я использовал шевронные шестерни, поскольку они эффективны и просты в изготовлении на 3D-принтере.

3D-модель редуктора для сервопривода

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

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

Размещение платы контроллера на задней стороне редуктора серводвигателя

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

Конечно, вы также можете скачать 3D-модель, а также файлы STL, необходимые для 3D-печати деталей, по следующим ссылкам:

Сборка серводвигателя

Напечатанные на 3D-принтере детали, необходимые для сборки серводвигателя, показаны на следующем рисунке.

Напечатанные на 3D-принтере детали, необходимые для сборки серводвигателя

Вместе с ними нам понадобятся болты М3 и резьбовые вставки, а также подшипники.

Сначала я закрепил двигатель постоянного тока на базовой пластине с помощью нескольких болтов М3 длиной 8 мм.

Закрепление двигателя постоянного тока на базовой пластине

Затем мы можем установить две шестерни на место. Меньшая шестерня идет прямо на вал двигателя постоянного тока, а большая шестерня будет выходом сервопривода. Хотя выходной вал сервопривода состоит из двух частей.

Шестерни для нашего серводвигателя

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

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

Установка шестерней на их места

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

Завершим сборку редуктора, установив боковую панель, шарикоподшипник выходного вала и верхнюю крышку.

Завершение сборки редуктора серводвигателя

Я установил несколько резьбовых вставок M3 на задней пластине, чтобы мы могли закрепить всю сборку с помощью нескольких болтов M3 длиной 20 мм. Я снова протестировал коробку передач, она работает отлично. Мы можем заметить, как выходной вал вращается на задней стороне, и здесь нам нужно вставить магнит, который будет отслеживать энкодер AS5600.

Подготовка к установке платы контроллера серводвигателя

Мы прикрепляем плату контроллера к коробке передач с помощью нескольких болтов и гаек M2. Датчик положения AS5600 теперь идеально выровнен с магнитом, и поэтому при вращении выходного вала он будет правильно измерять изменение магнитного поля.

Установленная плата контроллера серводвигателя

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

Правильная ориентация магнита для нашего серводвигателя

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

Изменение направления магнита

Далее я припаял два провода к двигателю постоянного тока и подключил двигатель к контроллеру с помощью клеммной колодки. Что касается питания, я подключил два провода к клеммной колодке питания, которая с другой стороны имеет разъем питания постоянного тока для подключения источника питания 12 В. И все, наш серводвигатель готов.

Завершение сборки самодельного серводвигателя

Программирование микроконтроллера

Осталось дать жизнь этому сервоприводу, то есть запрограммировать микроконтроллер. Для этого сначала нужно записать загрузчик в микроконтроллер ATmega328p. Без загрузчика микроконтроллер не сможет понять код, который мы ему отправим.

Прошивка загрузчика

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

Использование платы Arduino Nano для записи загрузчика на ATmega328p

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

Схема соединения контактов интерфейса SPI на плате Arduino и плате микроконтроллера

Теперь, используя Arduino IDE, нам нужно открыть пример скетча ArduinoISP и загрузить его на плату Arduino Nano. С этим кодом Arduino Nano теперь может записать загрузчик на микроконтроллер ATmega328.

Далее в меню Tools («Инструменты») в качестве программиста нам нужно выбрать Arduino в качестве ISP, а затем нажать Burn Bootloader («Записать загрузчик»).

Выбор Arduino в качестве ISP

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

Код загрузки

Закончив с этим, мы можем загрузить код на плату микроконтроллера с помощью модуля интерфейса USB-UART.

Использование платы FTDI для записи программы в микроконтроллер

Плата микроконтроллера имеет специальные контакты для простого подключения, как показано на этой принципиальной схеме.

Контакты микроконтроллера для подключения платы FTDI

Теперь мы можем открыть код для этого сервопривода и загрузить его в микроконтроллер. Но прежде чем мы это сделаем, нам нужно установить библиотеки для датчика AS5600 и ПИД-регулятора. Это можно легко сделать из менеджера библиотек Arduino IDE. Как только мы нажмем кнопку загрузки, код будет записан в наш микроконтроллер ATmega328 через модуль интерфейса USB-UART.

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

Проверка подключения контактов серводвигателя

При проектировании печатной платы я неправильно подключил эти два контакта к ATmega328. Затем мы можем выбрать режим аналогового входа через DIP-переключатель и запитать сервопривод.

Выбор режим аналогового входа через DIP-переключатель

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

Управление нашим серводвигателем с помощью потенциометра

Исходный код программы

Теперь давайте взглянем на код нашего серводвигателя.

Описание работы кода

Итак, мы начинаем цикл, считывая значение энкодера/текущее положение вала.

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

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

Мы выполняем ту же коррекцию значения, если входом является RC-приемник.

Здесь мы преобразуем значения RAW-энкодера в значения угла, и с помощью этих операторов if мы отслеживаем, в каком квадранте находится текущее положение вала.

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

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

Если режимом входа является потенциометр, мы используем его значение в качестве установленного значения для ПИД-регулятора.

Если режимом входа является RC-приемник, мы считываем входящее значение ШИМ с приемника и используем это значение в качестве установленной точки (setpoint).

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

Согласно ему, нам нужно скорректировать фактические показания энкодера и сместить их на разницу углов между новой и старой центральной точкой. Мы используем это значение как входное значение для ПИД-регулятора.

Используя аналоговый вход от другого потенциометра, мы регулируем пропорциональный коэффициент усиления ПИД-регулятора и, наконец, запускаем ПИД-процесс для получения выходного значения.

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

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

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

Испорченные при пайке платы серводвигателя

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

Источник статьи

(Проголосуй первым!)
Загрузка...
161 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *