Як я можу керувати RC сервоприводом?


26

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

Обладнання

  • Які необхідні електричні з'єднання?
  • Чи можу я підключити декілька сервоприводів до Raspberry Pi?
  • Чи існують поточні обмеження? Чи потрібно мені буферний вихідний контакт з транзистором?
  • Чи можу я живити сервопривід безпосередньо з Raspberry Pi, або я повинен використовувати зовнішній блок живлення? Чи потрібен мені конденсатор, щоб згладити ривок потужності сервоприводу?

Програмне забезпечення

  • Яке програмне забезпечення / код Python мені потрібен? Я знаю, що мені потрібні імпульси 20 мс, як це досягти?
  • Яке завантаження процесора я можу очікувати від використання Raspberry Pi таким чином?

Це схоже запитання, яке може допомогти вам розпочати: raspberrypi.stackexchange.com/questions/27/…
Ендрю Ларссон

Відповіді:


9

Необхідні електричні з'єднання залежать від сервоприводу, який ви маєте. GPIO забезпечує 3.3 V і до 16 мА , що недостатньо для серво, так що вам потрібно буде в буфер з транзистором.

На заголовку розширення є 8 штифтів GPIO , хоча інші штифти можуть бути налаштовані так, щоб загалом було розміщено до 17 штифтів GPIO. Якщо вам потрібно більше, вам доведеться додати якийсь мультиплексор.

Отримати точно приурочені сигнали буде складним на Raspberry Pi або будь-якій ОС в режимі реального часу, оскільки переривання та перемикачі завдань можуть статися в будь-який час. Ймовірно, вам знадобиться зовнішня електроніка, щоб подати сигнали з точно встановленим часом.

Ендрю вказав вам на якесь програмне забезпечення. Завантаження процесора буде залежати від того, що ви робите, але сам GPIO не додає ніякого навантаження.


2
З іншого боку - 20 мс - це довгий час, навіть для CPU Raspberry Pi. Я би не надто хвилювався з приводу точності часу для RC сервоприводів.

2
@Tibor: 20 мс - це період сервоімпульсів, а не ширина en.wikipedia.org/wiki/Servo_control#Pulse_duration . А вимога до роздільної здатності набагато гірша, ніж для цього - щоб отримати 8 біт роздільної здатності, вам потрібно 256 кроків протягом 2 мілісекунд, так що ~ 8us.
Мартін Томпсон

8

Якщо ви використовуєте операційну систему в режимі реального часу на вашому Raspberry Pi, це дійсно можливо. Як вже говорили інші, для сервоприводів вам знадобиться зовнішнє джерело живлення, окрім цього, вам не потрібно додаткове обладнання.

Якщо ви використовуєте Xenomai (патч в реальному часі для Linux), ви можете запустити повністю звичну систему Linux, але з додатковими можливостями в реальному часі.

Я написав крихітну бібліотеку С для управління сервоприводами з Raspberry Pi. Я спробував керувати 3 сервоприводами одночасно з ним, але насправді немає причини, чому він не повинен працювати з більшою кількістю.

Ви можете знайти мою крихітну бібліотеку тут: https://github.com/simonfi/pi-servo Додавання обгортки Python для цього має бути тривіальною. Ксеномаї для Raspberry Pi можна знайти тут: http://powet.eu/2012/07/25/raspberry-pi-xenomai/

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


5

Якщо ви не заперечуєте, щоб використовувати драйвер Linux Kernel, є сервобластер, який виставляє сервоприводи як чарівний пристрій.

https://github.com/richardghirst/PiBits

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

https://github.com/jronald/PiBits

Крім того, ви дійсно не хочете живлення, що обслуговує через RPI, але замість цього використовуєте окремий блок живлення. Звичайно, потрібно зв'язати ці підстави разом. Оскільки виходи RPI на сервопривід не потребують перемикання напруги, але ви хочете бути дуже обережними, щоб не з'єднати речі неправильно.


fyi - схоже, що рипортристське репо було збережене, поки вилка jronald здається застарілою і зламаною. Також рекомендую ознайомитись із тим, як ігнорувати всі, крім перших двох сервоприводів, та встановити сервобластер
cwd

3

Сервоприводи, як правило, керуються за допомогою ШІМ-сигналів; вам слід посилатися на GPIO як вихід ШІМ .

На мікросхемі є підтримка PWM, тому ми повинні мати можливість використовувати це в майбутньому. В основному, все це програмне забезпечення - це сказати обладнання, щоб виробляти імпульси з певною частотою. Деякі люди мали успіх, використовуючи зовнішні контролери ШІМ над I2C.


3

Існує розширення плати для малинового пі, що називається заправкою, яка використовується для управління сервоприводами та іншими навантаженнями, які Пі не може проїхати сам.


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

3

Знання про те, як робити речі на Пі, значно поліпшилися за роки, коли це питання було задано.

Існує щонайменше чотири способи генерування апаратних імпульсів PWM / Servo на gpios Pi без використання зовнішнього обладнання.

Використання модулів ядра для цього в значній мірі застаріле. Доступні наступні рішення для користувачів.

  • Мій власний pigpio буде генерувати серво та загальні ШІМ імпульси незалежно на будь-якому з gpios 0-31 (C, Python, socket, pipe).
  • Сервобластер буде генерувати серво і загальні ШІМ імпульси незалежно до 21 гіпіонів (труба).
  • RPIO буде генерувати серво та загальні ШІМ імпульси незалежно на будь-якому з gpios 0-31 (Python).
  • пі-бластер, отриманий з сервобластера (труба)

2

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

Імпульсом потрібно керувати протягом 2 мілісекунд. Навіть якщо галочка планувальника має роздільну здатність 100us (що натискає на неї - зазвичай це 10 мс), це можна вирішити лише за 20 кроків. І це не враховуючи тремтіння, що вводиться при переключенні завдань.

Якщо є інший таймер, ви потенційно можете написати драйвер дуже низького рівня, який може попередньо виправити навіть ОС, щоб встановити точність синхронізації. Звучить весело!


2

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


0

Існує повноцінний веб-сервіс GPIO, для якого ви можете написати свої плагіни. Схоже, у нього вже є підтримка управління будь-якою кількістю сервоприводів. Дивіться їхній каталог "Вміст", щоб отримати купу зображень, а також макет дошки.

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

Схоже, в C # працює Mono на Пі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.