В Arduino Uno можно использовать цифровые контакты с ШИМ для чтения аналоговых данных. Возможно ли это также с Wemos D1 Mini?

Я хочу считать данные с тензодатчика, для этого мне, кажется, нужны 2 аналоговых входа, у Wemos их нет. В Arduino я также смог использовать цифровой вывод с ШИМ, есть также выводы Wemos, у которых он есть. Можно ли использовать их для чтения данных с датчика веса?

, 👍0

Обсуждение

Вам необходимо уточнить, о чем идет речь. Как вам удалось использовать цифровые выводы в Arduino Uno для чтения аналоговых данных? И причем тут ШИМ?, @AnT


3 ответа


1

ШИМ — это квазианалоговый выход, и у них нет симметричной аналоговой функции чтения.

ESP8266, который является сердцем Wemos D1 Mini, имеет только один аналоговый вход.

Если вам нужно прочитать 2 аналоговых сигнала, вы можете использовать аналоговый переключатель/мультиплексор для быстрого чтения одного значения, а затем другого значения. Или вы можете приобрести внешний АЦП с несколькими входами — они часто обмениваются данными с хостом через соединение SPI или I2C, которое поддерживает Wemos.

,

1

Есть один способ мог измерить аналоговое напряжение с помощью ШИМ-выхода: использовать его в качестве ЦАП для создания собственного АЦП последовательного приближения:

  • ШИМ фильтруется через фильтр нижних частот для создания аналогового напряжения.
  • Это сравнивается с входящим напряжением с помощью компаратора.
  • Выходной сигнал компаратора записывается для различных опорных напряжений с использованием метода «разделяй и властвуй».

Подробнее о том, как работает последовательное приближение, можно прочитать здесь.

Однако сделать это было бы слишком сложно и неоправданно дорого. Гораздо лучше просто добавить микросхему АЦП, используя I2C или SPI. Это дешевле, проще, а результаты будут намного лучше.

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

,

1

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

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

Чтобы измерить напряжение, вы переключаете GPIO с OUTPUT/low на INPUT-PULLUP и ждете, пока он перейдет в ВЫСОКИЙ уровень. Измерив время, необходимое до того, как на выводе появится высокий уровень, вы можете рассчитать ожидаемое напряжение, которое заполнит конденсатор до порогового значения срабатывания за это время. Вам нужно будет выполнить некоторые ручные измерения, чтобы откалибровать его заранее, поскольку разные контакты имеют разные значения напряжения и немного разные пороговые значения напряжения триггера Шмитта. После настройки повторяемость может составлять примерно +/- 5%, а при более медленной выборке может быть и больше.

ascii-схема: (vSensor) --- [R1] --- (GPIO) --- [C1] --- GND

,