Функция AnalogWrite выдает меньшее напряжение, чем digitalWrite на моей плате.

Я не могу понять, почему выходное напряжение analogWrite(255) меньше напряжения digitalWrite(255). Мой код и изображение моей установки приведены ниже. Другая полезная информация заключается в том, что я использую NodeMCU от HiLetgo, резисторы сопротивлением 3,3 кОм с измерителями, и что измерители используют ток постоянного тока 1 мА в полной шкале. Спасибо за вашу помощь!

int pPressure       = D2;
int pPrecipProb     = D1;
int pWindSpeed      = D0;

int mTemperature;
int mHumidity;
int mPressure;
int mPrecipProb;
int mWindSpeed;
int mAlert;

void setup() {
  Serial.begin(9600);
  pinMode(pPrecipProb,   OUTPUT);
  pinMode(pWindSpeed,    OUTPUT);
  pinMode(pPressure,     OUTPUT);
  pinMode(LED_BUILTIN,   OUTPUT);     // Инициализируем вывод LED_BUILTIN как выход
}

// функция цикла выполняется снова и снова, вечно
void loop() {
    mPressure           = (int) constrain(mPressure + 1, 0, 255);
    mPrecipProb         = (int) constrain(mPrecipProb + 1,     0, 255 );
    mWindSpeed          = (int) constrain(mWindSpeed + 1,     0, 255 );

    if(mPressure == 255)
    {
      mPressure = 0;
      mPrecipProb = 0;
      mWindSpeed = 0;
    }

    digitalWrite(pPressure,      HIGH   );
    analogWrite(pPrecipProb,    255 );
    analogWrite(pWindSpeed,     mWindSpeed  );


    delay(10);                    

}

Left

Слева: AnalogWrite(255)

Средний: DigitalWrite(HIGH)

Справа: второй, который ездит на велосипеде

, 👍-1

Обсуждение

Пробовали ли вы поменять местами измерители/резисторы?, @Ignacio Vazquez-Abrams

Эти аналоговые счетчики могут нагружать (потреблять ток, достаточный для падения напряжения) «аналоговый» выход. Цифровой выход, вероятно, имеет более высокую способность возбуждения. Я не знаю этого наверняка, поэтому не ставлю это в качестве ответа., @slightlynybbled

@slightlynybbled: AnalogWrite() на ESP8266 выполняет (программное) ШИМ на обычном цифровом выходе., @Ignacio Vazquez-Abrams


1 ответ


Лучший ответ:

6

Сначала сделайте что-нибудь попроще и устраните возможные причины.

  1. Вы уверены, что процессор NodeMCU — это 8-битный ШИМ? Если бы это было так, 9 бит, это будет означать около 50% полной шкалы, а 10 бит будет означать около 25% digitalWrite (что, как мне кажется, я вижу на фото).
  2. Поменяйте местами аналоговые счетчики и посмотрите, постоянна ли разница. с помощью контакта или в соответствии с показаниями счетчиков.
  3. Используйте цифровой мультиметр (DMM) для измерения напряжения. Он должен быть небольшая нагрузка. Так что это должно устранить или определить аналог метров в качестве виновника.

Если разница в напряжении все еще есть, выполните эквивалент NodeMCU:

void setup() {
  pinMode(10, OUTPUT);  // вывод, поддерживающий аналоговый и цифровой выход
}

void loop() {
  digitalWrite(10, HIGH);
  analogWrite(9, 255);  // вывод, поддерживающий аналоговый и цифровой выходы

  delay(100);
}

Затем поменяйте местами 9 и 10.

Если цифровой мультиметр показывает, что аналоговый выходной сигнал постоянно ниже, вернитесь и проверьте, что ШИМ составляет 8 бит, а диапазон выходного напряжения устройства для ШИМ совпадает с выходным напряжением digitalWrite на GPIO.

,

Разрешение ШИМ ESP8266 по умолчанию на самом деле составляет [10 бит](https://github.com/esp8266/Arduino/blob/master/doc/reference.md#analog-output), что соответствует выходному сигналу в 25%, показанному на рисунке., @Ignacio Vazquez-Abrams

@IgnacioVazquez-Abrams - Ага! Это было моим главным подозрением, но я не видел надлежащего технического описания для него., @gbulmer

Эх, даташит ESP8266 не особо просветляет. ШИМ нужно делать программно, так что придется смотреть основную документацию., @Ignacio Vazquez-Abrams

@IgnacioVazquez-Abrams - спасибо, это проясняет ситуацию. Я думал, что читал, что все (большинство?) пинов могут обеспечивать ШИМ, но я не знал, что это мягко. Так что я искал не ту информацию., @gbulmer

@user3242816 - Пожалуйста. Если это ответ на ваш вопрос, я был бы признателен, если бы вы приняли мой ответ. Я не только получаю больше очков ;-), это также отмечает в списке вопросов, что ответ был принят, что может помочь некоторым членам сообщества. Я не знаю, но поисковые системы также могут подхватить флаг «отвечено». Однако я надеюсь, что поисковые системы в любом случае хорошо индексируют ee.se. Пока вы это редактировали, вы это сделали. Спасибо!, @gbulmer