Я хотел бы управлять небольшим RC сервоприводом (5 В, 500 мА) с выводов GPIO через Python .
аппаратные средства
- Каковы необходимые электрические соединения?
- Могу ли я подключить несколько сервоприводов к Raspberry Pi?
- Есть ли текущие ограничения? Нужно ли буферизовать выходной контакт с транзистором?
- Могу ли я питать сервопривод напрямую от Raspberry Pi или использовать внешний источник питания? Нужен ли конденсатор, чтобы сгладить резкое энергопотребление сервопривода?
Програмное обеспечение
- Какое программное обеспечение / код Python мне нужен? Я знаю, что мне нужно 20 мс импульсов, как мне этого добиться?
- Какую нагрузку на процессор можно ожидать от использования Raspberry Pi таким образом?
Ответы:
Необходимые электрические соединения зависят от вашего сервопривода. GPIO обеспечивает 3.3 V и до 16 мА , что недостаточно для серво, так что вам нужно будет в буфер с транзистором.
В заголовке расширения имеется 8 выводов GPIO , хотя другие выводы можно перенастроить, чтобы в общей сложности получить до 17 выводов GPIO. Если вам нужно больше, вам придется добавить какой-то мультиплексор.
Получение точно синхронизированных сигналов будет непростым делом на Raspberry Pi или на любой ОС не в реальном времени, поскольку прерывания и переключение задач могут произойти в любое время. Вам, вероятно, понадобится внешняя электроника для обеспечения точно синхронизированных сигналов.
Эндрю указал вам на какое-то программное обеспечение. Загрузка процессора будет зависеть от того, что вы делаете, но сам GPIO не добавляет нагрузки.
источник
Если вы используете операционную систему реального времени на Raspberry Pi, это действительно возможно. Как уже говорили другие, вам потребуется внешний источник питания для сервоприводов, но кроме этого вам не нужно никакого другого дополнительного оборудования.
Если вы используете Xenomai (исправление для Linux в реальном времени), вы можете запустить полностью знакомую систему Linux, но с дополнительными возможностями в реальном времени.
Я написал крошечную C-библиотеку с целью управления сервоприводами от Raspberry Pi. Я пытался управлять 3 сервоприводами одновременно с ним, но на самом деле нет никаких причин, почему он не должен работать с большим количеством.
Вы можете найти мою крошечную библиотеку здесь: https://github.com/simonfi/pi-servo Добавление оболочки Python для нее должно быть тривиальным. Xenomai для Raspberry Pi можно найти здесь: http://powet.eu/2012/07/25/raspberry-pi-xenomai/
Генерация необходимых сигналов для трех сервоприводов в основном потребляет незначительное количество процессора. Я не тестировал больше трех.
источник
Если вы не возражаете против использования драйвера ядра Linux, существует сервобластер, который выставляет сервоприводы как символьное устройство.
https://github.com/richardghirst/PiBits
Я разветвлял новую версию, которая не использует все контакты GPIO для сервоприводов. В настоящее время я использую его на небольшом роботе с сервоприводом, который я построил и продемонстрировал для нашего клуба роботов, используя IPGamePad для управления им.
https://github.com/jronald/PiBits
Кроме того, вы действительно не хотите питания этих сервоприводов через RPI, а вместо этого использовать отдельный источник питания. Конечно, вам нужно связать это основание вместе. Так как RPI выводит на сервопривод, сдвиг напряжения не требуется, но вы должны быть очень осторожны, чтобы не связать вещи неправильно.
источник
Сервоприводы, как правило, управляются с использованием сигналов ШИМ; Вы должны обращаться к GPIO как к ШИМ-выходу .
На чипе есть поддержка ШИМ, поэтому мы сможем использовать ее в будущем. По сути, все программное обеспечение сообщает аппаратному обеспечению, чтобы оно генерировало импульсы с определенной частотой. Некоторые люди имели успех, используя внешние контроллеры ШИМ через I2C.
источник
Для Raspberry Pi имеется плата расширения, называемая Gertboard, которая используется для управления сервоприводами и другими нагрузками, которые Pi не может управлять самостоятельно.
источник
С тех пор, как был задан этот вопрос, знания о том, как делать вещи на Пи, значительно улучшились.
Существует как минимум четыре способа генерирования аппаратно синхронизированных импульсов ШИМ / Серво на чипах Pi без использования внешнего оборудования.
Использование модулей ядра для этого в значительной степени не рекомендуется. Доступны следующие пользовательские решения.
источник
Я был бы удивлен, если бы вы могли достаточно хорошо рассчитать время вывода при использовании Linux для точного управления сервоприводом.
Импульс должен контролироваться в диапазоне 2 миллисекунд. Даже если тик планировщика имеет разрешение 100 мкс (что толкает его - обычно это 10 мс), это всего лишь 20 шагов, которые вы можете решить. И это без учета дрожания, вносимого переключением задач.
Если есть другой доступный таймер, вы могли бы написать драйвер очень низкого уровня, который может опередить даже ОС, чтобы получить точную синхронизацию. Звучит забавно!
источник
Я думаю, что попытка запустить сервопривод напрямую из порта GPIO будет сложной и вызовет большую нагрузку на процессор, если это вообще возможно. Я использую сервоконтроллер USB, он прекрасно работает и практически не использует процессор, хотя его немного сложно настроить. У меня есть 24 канала, но они делают 6-канальную версию. Я также видел 2-х и 4-х канальные контроллеры других производителей, которые используют последовательные порты, которые были бы проще и дешевле, чем USB, если вам не нужно управлять таким количеством сервоприводов.
источник
Существует полнофункциональный веб-сервис GPIO, для которого вы можете написать свои собственные плагины. Похоже, уже есть поддержка для управления любым количеством сервоприводов. Посмотрите их каталог «Содержимое» для множества изображений, а также для макета платы.
https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb
Похоже, в C # работает Mono на Pi.
источник