|
Диванный эксперт
|
||
Проект: Контроллер группы сервоприводов MG996R. Выбор МК из доступных. Ограничения этих МК22.06.2026, 05:28. Показов 3459. Ответов 70
Метки нет (Все метки)
Доброго времени суток.
Для DIY-проекта а-ля "робот-паук" есть необходимость управлять группой сервоприводов(12 штук). Предполагается использование MG996RУгол положения у сервопривода задается длительностью импульса(0.5-2.5 мсек, 50 гц). Сейчас используется плата на PCA9685, но с ней не получается достичь плавного движения про траектории - слишком низкое разрешение на нужных длительностях импульсов. Что я бы хотел сделать: получить специализированный контроллер для управления подобными сервоприводами. Нужна помощь в поиске вариантов реализации на имеющихся у меня МК.
Добавлено через 19 минут ШИМ контроллеры в чистом виде задействовать вряд ли получится: - нужно много каналов с раздельным управлением длительностью - длительность импульса намного меньше периода генерации импульсов. Таймеров тоже маловато на 12 каналов Из идей/мыслей: - Генерация импульса в одном "канале" не обязана быть синхронизирована с другими "каналами" - период генерации должен быть 20 мсек при макс длительности импульса в 2.5 мсек То есть получается, что один таймер, работающий с частотой 400 герц, в теории может обслуживать восемь каналов, но понадобится дополнительный OneShot-таймер с частотой около мегагерца. В RP есть интересная вещь - PIO, но количество их тоже ограничено и также нужно делить время между каналами. ESP пока не смотрел особо... Добавлено через 1 час 2 минуты На практике достичь мексимальной длительности импульса в 2.5 мсек не выйдет - будет чуть меньше, так как обработчик запуска ведомого таймера будет отнимать время. Несколько ведомых таймеров по RoundRobbin? - как вариант. "Мысли в слух"....
0
|
||
| 22.06.2026, 05:28 | |
|
Ответы с готовыми решениями:
70
Выбор МК для контроля сервоприводов Безвентиляторные частотные преобразователи для сервоприводов Управление сервоприводом |
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||
| 24.06.2026, 18:40 | ||||
|
12 бит это 4096 отсчетов. 0.1 от 4096 отсчетов это 409.6 отсчетов. 410 положений сервы, дискретность 0,44 градуса. Какое у нее там аппаратное ограничение на разрядность не знаю, но интуиция подсказывает, что у дешевых "игрушечных" серв люфты съедят больше.
1
|
||||
|
Диванный эксперт
|
|||
| 24.06.2026, 18:54 [ТС] | |||
|
Но это навенрно больше от незнания особенностей конкретных МК.
0
|
|||
|
Windows must die
|
|||
| 24.06.2026, 18:58 | |||
Сообщение было отмечено Max Dark как решение
РешениеДобавлено через 1 минуту
1
|
|||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||
| 24.06.2026, 19:22 | ||||
|
Как вариант, мог случиться рассинхрон, если 50 Гц сервы и 50 Гц таймера недостаточно совпадали. Я не знаю какой там допуск. Или, скажем, в из-за бага в коде туда писалось что-то не то или не вовремя. Или, не менее дурацкое предположение, что для угла использовался 8-битный счетчик, который регулярно сбрасывался. Ладно, что-то меня понесло... --- В любом случае, вариант, когда интерполяцией значений занимается отдельный контроллер, все еще имеет смысл. Хотя ради теста можно одну серву расковырять и вывести сигнал с потенциометра на АЦП. Чтобы не на глазок оценивать, как оно там дергается, а отталкиваться от объективных данных. Если на МК, то просто берете камень с достаточным количеством каналов ШИМ - да хоть ту же stm-ку. Или то, что я уже описывал с реализацией ШИМ через DMA. Оно посложнее, зато хватит одного таймера.
0
|
||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 24.06.2026, 19:24 | ||
Сообщение было отмечено Max Dark как решение
Решение
1
|
||
|
Диванный эксперт
|
|||
| 24.06.2026, 19:39 [ТС] | |||
PCA9685 задание длительности импульсов.Перенос части на МК пока только в планах. Это больше проект "jsut for fun" - поиграться со связкой SBC <-> МК, посмотреть как одну задачу можно сделать на разных МК. Добавлено через 8 минут Попробую так сделать.
0
|
|||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|
| 24.06.2026, 19:52 | |
|
0
|
|
|
Windows must die
|
||||
| 24.06.2026, 20:18 | ||||
|
1
|
||||
|
343 / 135 / 10
Регистрация: 19.07.2024
Сообщений: 769
|
||
| 25.06.2026, 15:14 | ||
|
Ещё нужно указывать: С какой дискретностью эти 0.5 мсек нужно формировать? Если не нужно с дискретностью до такта CPU, то всё можно сделать в ISR. И почти на любой из ваших плат.
0
|
||
|
Диванный эксперт
|
||
| 25.06.2026, 19:50 [ТС] | ||
|
Но скорее всего такая точность не нужна. 1 мсек примерно равно 90º угла поворота, то есть 1º ~= 0.011 мсек.Центр диапазона - 1.5 мсек. ±90º == ±1 мсек
0
|
||
|
Диванный эксперт
|
|
| 26.06.2026, 07:40 [ТС] | |
|
С "BluePill" выходит как то так:
Осталось "начать и закончить": - разобаться с рассчетом периода таймеров и длительности импульсов - придумать как данные запихнуть "Мысли в слух" USB - сложновато, но более универсально выйдет(тем более пины под него заняты уже). SPI - не пробовал на стороне Линукса заводить. I2C - говорили про какие то проблемы в самом чипе есть... UART - Если задействовать ModBus RTU то может интересно получиться, но на имеючемся у меня SBC он уже занят под другое - нужно смотреть есть ли еще.
0
|
|
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||||
| 26.06.2026, 10:55 | ||||||||||
|
Добавляем сюда, что сервы, скорее всего, "игрушечные", не рассчитанные под серьезное применение. То есть неизбежно будут люфтить. Собственно, рассчитывать больше чем на градус точности я бы не стал. Когда такое делают на Ардуине - понятно, там других вариантов нет. Но в случае ТС любое использование аппаратных средств будет лучше. Хоть таймеров, хоть DMA. Правда, использование DMA в таком режиме не слишком очевидно, если у ТС недостаточно опыта, это займет время. Да и смысла сейчас нет, раз нашлись нормальные таймеры. Хотя я тут посмотрел распиновку одноплатника. А там всего полтора UART выведено. UART2 (отладочный?) и UART4. Зато вот I2C куча... --- В общем, лично я бы воспользовался USB. Если чего-то будет не хватать, на том же контроллере можно будет реализовать переходник. Но я-то с USB довольно много разбирался. Впрочем, вдруг вы готовы тоже потратить время на изучение USB, мало ли...
1
|
||||||||||
|
343 / 135 / 10
Регистрация: 19.07.2024
Сообщений: 769
|
||
| 26.06.2026, 11:30 | ||
|
Если "нужна": Тогда берём МК, у которого таймеры работают на частоте >=200МГц и выделяем по таймеру на каждый ШИМ. Никакие колхозы на прерываниях или даже DMA+ногодрыге требуемой точности не обеспечат даже близко. Но 200МГц тут даже XMC4xxx не хватит, надо искать что-то серьёзнее. Если "не нужна": Тогда всё решается элементарно на любом МК (из вашего списка я бы разве что ESP в этом случае выкинул, остальные должны справиться легко). Скажем - требуемая дискретность == 100мкс. Тогда запускаем периодическое прерывание с частотой 10кГц и в нём программно рулим всеми ШИМами. Да - джиттер каждого ШИМ будет приличный (может даже сотни тактов), но он будет заведомо кратно ниже дискретности.
1
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 26.06.2026, 13:45 | ||
|
Для наглядности: если привязать к такой серве палку длиной километр и повернуть на один шаг, конец палки сдвинется на 8мм. Вот в 5 мкс поверить еще можно. Это 9 бит точности или пол-градуса. Еще раз говорю: у вас точность определяется не дискретностью мозгов сервы, а механикой. Какие люфты у нее, какие люфты у вас.
1
|
||
|
Диванный эксперт
|
||||
| 26.06.2026, 18:56 [ТС] | ||||
st.com на VPN тоже ругается...Если примерно: - определить на какой частоте работают таймеры( TIM[2..4] вроде бы на APB1 сидят... Нужно уточнять, а с доступом к докам проблемы)- посчитать делители для частоты == 50Hz - сами таймеры имеют счетчики 16 бит - длительность импульса рассчитывается примерно так же как и для PCA9685
0
|
||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 26.06.2026, 20:51 | ||
|
1
|
||
|
Диванный эксперт
|
|
| 26.06.2026, 21:51 [ТС] | |
|
По таймерам нашел документ "AN4776 - General-purpose timer cookbook for STM32 microcontrollers"
Сижу, изучаю... Нашел datasheet на MCU, в нем "Clock tree", но пока что не понял какая же частота у таймера выходит при моих настройках.
0
|
|
| 26.06.2026, 21:51 | |
|
Сервопривод Belimo NV24-MFT Управление множеством сервоприводов По поводу сервоприводов для человекоподобной руки Контроль сервопривода (servo library)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|