Как я могу управлять RC-сервомеханизмом?

Я хочу управлять небольшим RC-сервомеханизмом (5 В, 500 мА) с контактов GPIO через Python .

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

  • Каковы требуемые электрические соединения?
  • Могу ли я подключить несколько сервомеханизмов к малине Pi?
  • Существуют ли какие-либо ограничения? Нужно ли буферизовать выходной вывод с транзистором?
  • Могу ли я подключить сервопривод непосредственно от малины Pi или использовать внешний источник питания? Нужен ли мне конденсатор, чтобы сгладить искажение мощности сервопривода?

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

  • Какое программное обеспечение /код Python мне нужно? Я знаю, мне нужны импульсы 20 мс, как я могу это достичь?
  • Какую нагрузку на процессор можно ожидать от использования малины Pi таким образом?
25 голосов | спросил Alex L 13 J0000006Europe/Moscow 2012, 00:32:58

9 ответов


9

Требуемые электрические соединения зависят от вашего серво. GPIO обеспечивает 3,3 В и до 16 мА , чего недостаточно для вашего сервопривода, поэтому вам понадобится для его буферизации с помощью транзистора.

8 GPIO-контактов в заголовке расширения , хотя другие контакты могут быть переконфигурированы, чтобы дать до 17 контактов GPIO. Если вам нужно больше, вам придется добавить какой-то мультиплексор.

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

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

ответил David Sykes 13 J0000006Europe/Moscow 2012, 07:59:19
8

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

Если вы используете Xenomai (патч реального времени для Linux), вы можете запустить полностью знакомую систему Linux, но с добавленными возможностями в реальном времени.

Я написал крошечную библиотеку C с целью управления сервомашинами из малины Pi. Я попытался одновременно контролировать 3 сервомашины, но нет причин, по которым он не должен работать больше.

Здесь вы можете найти мою крошечную библиотеку: https://github.com/simonfi/pi-servo Добавление Обертка Python для нее должна быть тривиальной. Xenomai для малины Pi можно найти здесь: http://powet.eu/2012/07/25/малина-пи-Xenomai /

Генерация необходимых сигналов для трех сервоприводов в основном потребляет незначительное количество процессора. Я еще не тестировал более трех.

ответил simonfi 28 +04002012-10-28T02:33:10+04:00312012bEurope/MoscowSun, 28 Oct 2012 02:33:10 +0400 2012, 02:33:10
5

Если вы не против использования драйвера ядра Linux, есть servoblaster, который предоставляет сервоприводы в качестве устройства char.

https://github.com/richardghirst/PiBits

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

https://github.com/jronald/PiBits

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

ответил James Ronald 28 +04002012-10-28T19:18:26+04:00312012bEurope/MoscowSun, 28 Oct 2012 19:18:26 +0400 2012, 19:18:26
3

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

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

ответил Alex Chamberlain 2 J000000Monday12 2012, 22:30:23
3

Существует версия расширения для малины pi, называемая gertboard , которая используется для управления сервомеханизмами и другими нагрузками, которые Pi не может управлять самостоятельно.

ответил Brandon Bailey 28 +04002012-10-28T19:49:49+04:00312012bEurope/MoscowSun, 28 Oct 2012 19:49:49 +0400 2012, 19:49:49
3

Знания о том, как делать вещи на Pi, значительно улучшились за годы, прошедшие после того, как этот вопрос был задан.

Существует не менее четырех способов генерации аппаратных синхронизированных импульсов PWM /Servo на gpios Pi без использования внешнего оборудования.

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

  • Мой собственный pigpio будет генерировать серво и общие импульсы ШИМ независимо от любого из gpios 0-31 (C, Python, сокет, труба).
  • Servoblaster будет генерировать серво и общие импульсы PWM независимо на 21 gpios (pipe) .
  • RPIO будет генерировать серво и общие импульсы PWM независимо от любого из gpios 0-31 (Python).
  • pi-blaster , полученный из Servoblaster (pipe)
ответил joan 26 PM00000010000000331 2014, 13:00:03
2

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

Импульс должен контролироваться в диапазоне 2 миллисекунд. Даже если тикер планировщика имеет разрешение 100US (что его толкает - обычно 10 мс), это всего лишь 20 шагов, которые вы можете решить. И это без учета дрожания, вызванного переключением задач.

Если есть еще один доступный таймер, вы можете написать низкоуровневый драйвер very , который может предугадать даже ОС, чтобы получить точное время. Звучит весело!

ответил Martin Thompson 14 J0000006Europe/Moscow 2012, 00:30:10
2

Я думаю, что попытка запустить сервопривод непосредственно из порта GPIO будет сложной задачей и вызовет много накладных расходов процессора, если это даже возможно. Я использую USB-сервоконтроллер, и он отлично работает и почти не использует процессор, хотя его немного сложно настроить. У меня есть , это 24 канала, но они делают 6-канальную версию. Я также видел 2 и 4-канальные контроллеры от других производителей, которые используют серийный номер, который будет проще и дешевле, чем USB, если вам не нужно контролировать так много сервомашин.

ответил Vic320 13 ThuEurope/Moscow2012-12-13T22:11:15+04:00Europe/Moscow12bEurope/MoscowThu, 13 Dec 2012 22:11:15 +0400 2012, 22:11:15
0

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

https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb

Похоже, что на C # работает Mono на Pi.

ответил user2737646 25 FebruaryEurope/MoscowbSat, 25 Feb 2017 07:02:39 +0300000000amSat, 25 Feb 2017 07:02:39 +030017 2017, 07:02:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132