Создавая своего первого робота (Робот для настольного хоккея), а именно механическую часть, я узнал для себя много интересного, чем хочу поделиться.
Примерно половину знаний я нагуглил или посмотрел на Youtube, а вторую половину получил на практике, методом проб и ошибок в многочисленных экспериментах.
Расскажу о 4 пунктах, которые, на мой взгляд, заслуживают особого внимания:
- Разогнать шаговый двигатель до максимальной скорости.
- Одновременная работа массива шаговых двигателей через один контроллер.
- Охлаждение шаговых двигателей и драйверов.
- Как избавиться от скрипа шаговых двигателей.
Мой робот для настольного хоккея имеет 6 роботизированных рук в зависимости от количества игроков, по одной руке на каждого игрока, и каждая рука приводится в движение двумя двигателями.
Первый мотор перемещает игрока вперед и назад, а второй мотор вращает клюшку.
Всего используется 12 шаговых двигателей.
Почему шаговые двигатели? Мне нужна была точность и аккуратность, а шаговый двигатель имеет возможность вращать вал строго на заданное количество градусов/шагов.
Но, кроме точности, нужна была скорость, и тут начались проблемы и поиск решения.
1. Разогнать шаговый двигатель до максимальной скорости.
При поиске в Интернете можно найти много информации о 3D-принтерах, ЧПУ, роботизированных манипуляторах с 6 степенями свободы и подобных устройствах.
Но мне нужно за долю секунды переместить игрока на ~40 см или ударить клюшкой по шайбе, чтобы она влетела в ворота через все игровое поле.
И что же мне делать? — проводите эксперименты и выжимайте все соки из двигателей! Вал шагового двигателя вращается импульсно, а двигатели, которые я использовал для робота (размер Nema 17), делают 1 полный оборот за 200 шагов по 1,8 градуса на шаг.
Я как новичок приобрел самые распространенные драйвера для шаговых двигателей А4988, купил контроллер Arduino Mega с наибольшим количеством входов/выходов, CNC Shield v3 для удобного размещения сразу 4-х драйверов, блок питания 12 В, все подключил.
проводами по инструкциям с многочисленных сайтов.
Я придумал, как написать программу-скетч для Arduino, и запустил ее.
Моторы начали вращаться, но мне нужна была скорость.
Если подать 1000 импульсов в секунду от контроллера к драйверу двигателя, двигатель будет вращаться со скоростью 5 оборотов в секунду.
Отлично, но этого было недостаточно.
Увеличил количество импульсов и двигатель перестал двигаться - скрипит и не крутится, сил не хватает сразу начать движение на таких скоростях.
Это все равно, что на машине с механической коробкой передач сразу включить 5-ю передачу.
Пришлось доработать скетч контроллера для плавного, но, по возможности, быстрого старта.
Есть конечно готовые классы AccelStepper, но как-то я воспринял его с недоверием, ограничения как всегда будут, я подумал и сделал свой класс для плавного старта, в котором использовал формулу кубической параболы с некоторыми вспомогательными коэффициенты.
Сначала интервалы между импульсами нужно сделать больше, чтобы мотор начал двигаться, а затем постепенно уменьшать интервалы между импульсами.
Двигатель будет плавно ускоряться благодаря этому программному вариатору.
У разных моторов могут быть свои условия максимального ускорения; нужно экспериментировать, чтобы понять, где находится потолок возможностей двигателя по напряжению и току.
При таком разгоне обязательно будут пропуски шагов, но для тех целей, которые я преследовал, потеря нескольких шагов не важна; это не 3D печать.
Подводя итог, для достижения максимальных оборотов необходимо обеспечить плавный разгон.
2. Одновременная работа массива шаговых двигателей через один контроллер.
Как уже говорилось выше, в роботе используются 12 шаговых двигателей.
Управление данным массивом двигателей осуществляется через 1 контроллер Arduino Mega, который был выбран из-за наличия большого количества пинов (входов/выходов).
Для управления 12 моторами мне понадобилось:
- 12 контактов контроллера для передачи шагов драйверам двигателей.
- 12 контактов для настройки направления вращения
- 12 пинов для управления включением/отключением драйверов моторов (необязательно, но желательно, так как для охлаждения оказалось важно)
- 12 контактов для получения данных от оптических концевиков (нужны для безопасности механики, ограничивающей зону движения приводов игроков, можно ли полностью доверять программе? Датчики установлены по одному в начале и конце на каждом приводе а еще есть пружины плавной остановки, можно ли полностью доверять датчикам?)
- 12 контактов для RGB светодиодов, указывающих режимы работы (зеленый горит при подаче питания, синий добавляется при движении вперед/назад и красный добавляется при вращении клюшки, в общем зеленый для пользы, а синий и красный для красоты )
Компьютер передает команды управления через USB-порт на контроллер Arduino, и здесь нам нужна возможность управлять всеми 12 моторами одновременно.
На практике во время игры я не видел одновременной работы всех 12 моторов, может быть 4, но технически это предусмотрено.
В скетче для Arduino я создал класс Player для управления 2 моторами (перемещением и вращением клюшки) и при запуске создается 6 экземпляров этого класса.
При инициализации классов передаются номера пинов, к которым будет привязан каждый из «игроков», т.е.
каждый из 6 игроков привязан к своим драйверам/моторам, датчикам и светодиодам.
В циклическом цикле скетча USB-порт проверяется на наличие команды от компьютера и методы Move и Rotate по очереди вызываются на 6 объектах игрока для выполнения движений или остановок.
Подводя итог, контроллер Arduino Mega оснащен очень большим количеством входов/выходов > 70. Если вам нужно решить определенную задачу, вы можете подключить десятки шаговых двигателей.
3. Охлаждение шаговых двигателей и драйверов.
Если на драйвер ШД подать питание на вывод VMOT и драйвер включен (по умолчанию ENABLE=0 - включен), двигатель может начать немного пищать (зависит от драйвера), а обмотки двигателя и водитель начнет нагреваться.
Можно потрогать радиатор драйвера и убедиться в этом.
Я начал использовать мощность двигателя 12В и быстро почувствовал нагрев, но при 36В этот эффект мне очень не понравился.
Я не стал ждать, пока сгорят обмотки двигателя или драйвер, и начал разбираться, в чем дело.
Вывод ENABLE помог все решить.
Если вращение двигателя не требуется, следует отключить драйвер ENABLE=1, а когда вращение необходимо, достаточно просто включить драйвер ENABLE=0. Поскольку в роботе используется 12 двигателей, и они не так часто вращаются одновременно, это означает, что им можно дать остыть, когда в этом нет необходимости.
Я взял под свой контроль контакт включения каждого драйвера двигателя через Arduino. Пришлось дополнительно использовать 12 пинов контроллера, но драйверы стали холодными и моторы перестали шуметь, хотя использовалось напряжение 36В.
4. Как избавиться от скрипа шаговых двигателей
Сначала я приобрел драйвера для шаговых двигателей А4988; Мне нужно было 12 штук.Они популярны, надежны, просты и понятны, а также очень дешевы и идеально подходят для новичков.
Все работало почти хорошо, шаги четкие, 1 импульс – 1 шаг, 200 импульсов по 1,8 градуса на 1 шаг – 1 оборот мотора.
Но было 2 неприятных момента.
На малых скоростях, особенно когда нужно медленно повернуть клюшку игрока, моторы начинали дрожать.
И еще, этот писк! Когда работало 12 моторов, я чувствовал, что R2D2 разговаривает со мной.
Я начал искать решение проблемы и узнал о тихих драйверах с немецкими чипами Trinamic TMC 2100, 2130, 2208 и других серий.
Они стоят в несколько раз дороже, но если вам нужна тишина и плавность хода, они того стоят. TMC имеет режим StelthChop с интерполяцией 4 или 16 входных импульсов за 256 микрошагов.
После тестирования я выбрал режим 4-> 256 микрошагов.
Скетч для Arduino нуждался в небольшой доработке, потому что.
Теперь для полного оборота мотора требовалось не 200 шагов, а в 4 раза больше (800 на 1 полный оборот) за счет использования режима StelthChop 4-> 256. .
Больше шагов означает более плавный и тихий ход. Теперь вращение плавное, тихое и без скрипов.
Видео того, что произошло в итоге: Надеюсь, мой опыт поможет кому-то в других проектах.
Теги: #роботы #Разработка робототехники #Робототехника #arduino #шаговый двигатель #водитель двигателя #настольный хоккей #бесшумный водитель #a4988 #nema17
-
Интернет-Эквайринг «Для Чайников»
19 Oct, 24 -
Хотите Узнать Рейтинг Поста?
19 Oct, 24 -
Трансляция Онлайн-Видео С Помощью Nginx
19 Oct, 24 -
Выпущен Vim 7.4
19 Oct, 24