Вход PWM в малине Pi

Есть ли способ прочитать сигнал PWM от контактов на малине Pi?

Я попытался выполнить поиск в Google, но я нашел только вывод PWM , а не input .

7 голосов | спросил Caio Keto 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 26 Sep 2013 16:44:42 +0400 2013, 16:44:42

8 ответов


3

Короткий ответ: вы НЕ МОЖЕТЕ надежно читать PWM на малине Pi.

Чтение PWM требует микросекундной точности (если вы не читаете очень-очень медленную PWM), и это недоступно в Raspberry Pi для программного обеспечения пользователя без использования модулей ядра.

Самый простой способ захватить PWM - получить любой дешевый (<$ 0,5) микроконтроллер с последовательным или I 2 C и подключите его к малине Pi и прочитайте фактические значения с микроконтроллера. Это будет работать очень надежно и довольно точно.

ответил lenik 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 27 Sep 2013 03:31:13 +0400 2013, 03:31:13
2

Это интересный вопрос, и вы правильно говорите, что Google Search не дает очевидного решения! (Я скучаю по дням, когда Google может ответить на все, что я хотел знать для моего обучения /заданий в течение нескольких секунд.)

Я предполагаю, что вы понимаете принципы PWM . Поэтому я не буду вникать в это. Однако я полагаю, что теоретически можно было бы узнать значение ШИМ на обычном цифровом входном штыре с некоторым умным кодированием.

Я признаю, что я не пробовал это сам, но вы должны быть способны измерить время, в течение которого контактный сигнал высок, и время, в течение которого оно низкое (дает вам ваше чтение PWM), а затем использовать любую математическую формулу поставщик датчика, предназначенный для преобразования этого значения в фактическое показание.

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

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

Я начал копировать код, но по какой-то причине веб-сайт позволяет мне копировать его небольшую секцию за раз (и мне слишком ленив, чтобы вытащить пи-бай из гаража), поэтому вот ссылка на него. игнорируйте большинство функций внизу, поскольку они связаны с использованием модуля в качестве датчика приближения. http://pibot.webnode.com/products/ultrasonic-range-sensor/

ответил D Mason 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 26 Sep 2013 18:14:39 +0400 2013, 18:14:39
1

Я могу сделать довольно точное измерение ширины импульса с помощью библиотеки piGpio C: http://abyz.co.uk/rpi/pigpio/index.html

Эта библиотека позволяет вам установить функцию обратного вызова, которая будет срабатывать при любом переходе по краю на выводе gpio и дает отметку времени микросекундного уровня для каждого перехода. Не думайте, что вы можете рассчитывать на это с точностью до микросекунды, но мое тестирование показывает, что точность не менее +/- 10us, может быть, лучше.

Лот лучше, чем запустить цикл занятости, опросив gpio для изменения уровня самостоятельно.

ответил stevec 3 FebruaryEurope/MoscowbFri, 03 Feb 2017 18:31:56 +0300000000pmFri, 03 Feb 2017 18:31:56 +030017 2017, 18:31:56
0

Если вы довольны медленным ответом, вы можете быстро прочитать PWM с помощью дискретизации. Просто прочитайте GPIO в цикле и примените фильтр нижних частот. Вероятность считывания 1 каждого цикла пропорциональна ширине импульса. Простой в использовании фильтр низких частот IIR:

---- +: = 0 = + ----

При уменьшении k разрешение улучшается, но ширина полосы пропускания уменьшается.

ответил wdg 24 72013vEurope/Moscow11bEurope/MoscowSun, 24 Nov 2013 22:12:20 +0400 2013, 22:12:20
0

Длинный ответ: вы на самом деле можете! (ну с небольшой помощью от наших друзей резистор и конденсатор)

Вы можете преобразовать выход ШИМ в аналоговый уровень напряжения (ЦАП) и прочитать его с помощью выводов АЦП на вашем малиновом пике.

Вам нужен резистор 4 к7 и конденсатор 0.1 мкФ:

schematic

имитировать эту схему - схема, созданная с использованием CircuitLab

Простой RC низкочастотный фильтр выше преобразует сигнал PWM в напряжение, пропорциональное циклу заполнения, которое может быть прочитано вашим малиновым пи в качестве аналогового значения.

ответил Quest 9 PM000000120000003031 2016, 12:48:30
0

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

Люди уже много лет используют звуковые карты на настольных ПК для создания осциллографов. Похоже, что с современной внутренней звуковой картой вы можете получить полезные результаты до 10 кГц. С подключенной звуковой картой, подключенной к малине Pi USB, ваша максимальная частота может быть ниже.

Вот пример одного проекта осциллографа звуковой карты для Linux: http://www.yann.com/en/diy-turn-your-gnulinux-computer-into-a-free-oscilloscope-29/09/2010. HTML

ответил pierce.jason 9 PM000000110000005831 2016, 23:49:58
0

Этот скрипт python, который я написал, отлично работает для чтения PWM-сигналов RC-ресивера. Высокочастотные PWM-сигналы, очевидно, не будут работать, как уже указывалось.

Я напрямую подключил десять сигнальных выводов RC-приемника к контактам GPIB Raspberry. Приемник питается контактами + 5V и GND от RPI.

Я упростил скрипт, так как он много других вещей, если вы обнаружите какие-либо ошибки или остатки, сообщите мне

---- +: = 0 = + ----
ответил user2707001 22 J0000006Europe/Moscow 2017, 12:09:32
-3

Простое решение с высокой точностью:

Использование Arduino как подчиненного устройства iIC или устройства UART, похоже, отлично работает. Микроконтроллер способен считывать информацию с помощью метода pulseIn.

Дополнительная подробная информация: https://www.youtube.com/watch?v=ncBDvcbY1l4

ответил user2707001 22 J0000006Europe/Moscow 2017, 12:09:32

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

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

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