Могу ли я использовать GPIO для широтно-импульсной модуляции (PWM)?

Могу ли я использовать GPIO в качестве функции широтно-импульсной модуляции ?

Если да, как мне это сделать и сколько параллельных, отличных выходных сигналов ШИМ можно получить?

90 голосов | спросил berry120 14 J0000006Europe/Moscow 2012, 17:47:43

5 ответов


71

Как было предложено Алексом Чемберленом , Библиотека WiringPi поддерживает как аппаратный выход PWM на одном или двух GPIO-контактах в зависимости от модели, так и программное обеспечение PWM на любом из других контактов GPIO. Между тем библиотека RPIO.PWM выполняет PWM с помощью DMA на любом выводе GPIO. Эффективно это промежуточный дом между аппаратным и программным PWM, обеспечивающим временное разрешение 1Â Âμ по сравнению с 100 Âμs с программным обеспечением WiringPi PWM [1] .

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

Если ваше приложение терпимо к разрешению с низким временем и высоким джиттером , тогда вы можете использовать программное обеспечение или синхронизированный временной цикл DMA. Если вам нужна более высокая точность /нижняя дрожание PWM, вам может понадобиться аппаратная помощь.

Когда может понадобиться программное обеспечение PWM?

Если вы хотите выпустить кучу светодиодов с различными человеческими видимыми каденциями (10 герц) с soft real-time , тогда программный цикл может обрабатывать столько PWM, как у вас есть контакты GPIO.

Когда может быть подходящим оборудование PWM?

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

Устойчивый цикл сервопривода должен читать кодировщики по обычной ставке (низкий джиттер ), выпишите исправленные значения выходного сигнала ШИМ с регулярной скоростью, и латентность между ними должна быть фиксированной (общий джиттер в целом). Если вы не можете этого сделать, вам придется выполнить (мягкую настройку) вашего двигателя, чтобы он не стал неустойчивым под нагрузкой. Это трудно сделать с многозадачной операционной системой без поддержки низкого уровня.

Что делать, если мне нужно больше аппаратных выходов PWM?

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

Один из вариантов - это что-то вроде 16-канальный 12-разрядный драйвер PWM /Servo-адаптера Adafruit - I²²C интерфейс - PCA9685 , который позволит вам управлять 16 выходами PWM с помощью всего нескольких выводов GPIO для шины I²². В качестве примера его использования ознакомьтесь с 16-канальным PWM /Servo Breakout I ²C - Работая на форумах Raspberry Pi.

1. Благодаря dm76 для предложения, однако heather говорит, что RPIO.PWM больше не может работать для новых моделей pi.

ответил Mark Booth 14 J0000006Europe/Moscow 2012, 18:34:05
38

Аппаратное обеспечение PWM

Да, на малиновой Pi имеется один аппаратный выход ШИМ, подключенный к P1-12 (GPIO18). Кроме того, выходы PWM можно было бы добавить с помощью I ²C или интерфейс SPI ; некоторые люди добились успеха с этим ( форум ).

Пример кода

Вы можете использовать библиотеку WiringPi для управления выводом PWM; вы можете посмотреть на код, чтобы избежать включения всей библиотеки.

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

The Raspberry Pi не подходит для любого серьезного программного обеспечения PWM, поскольку Linux не является оперативной системой реального времени.

ответил Alex Chamberlain 14 J0000006Europe/Moscow 2012, 18:40:47
11

Последние Pis имеют два аппаратных ШИМ канала. Кроме того, аппаратные синхронизированные импульсы PWM могут быть независимо созданы на всех GPIO, подключенных к 40-контактному расширительному заголовку.

На практике это означает, что есть два высокоточных канала PWM, и все другие GPIO могут иметь PWM в стиле Arduino (800 Гц, 0 off - 255 полностью включен).

например. servoblaster и мой pigpio и т. д.

ответил joan 6 52015vEurope/Moscow11bEurope/MoscowFri, 06 Nov 2015 01:46:41 +0300 2015, 01:46:41
2

Не совсем оперативная ОС, но RISC OS для малины Pi - это совместная многозадачность, поэтому вы можете легко запустить приложение с 100% процессором, чтобы вы могли лучше управлять своими таймингами. Просто не ожидайте ничего другого, кроме своего собственного кода.

ответил John 14 FriEurope/Moscow2012-12-14T04:43:25+04:00Europe/Moscow12bEurope/MoscowFri, 14 Dec 2012 04:43:25 +0400 2012, 04:43:25
2

Я нашел эту библиотеку ( pi-blaster ), которая утверждает, что является «чрезвычайно эффективной : не использует CPU и дает очень стабильные импульсы. "

Я еще не тестировал его, но обновляюсь, как только я это сделаю (возможно, сегодня)

ответил Glantucan 15 Jpm1000000pmSun, 15 Jan 2017 14:16:23 +030017 2017, 14:16:23

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

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

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