Функция 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);
}
Слева: AnalogWrite(255)
Средний: DigitalWrite(HIGH)
Справа: второй, который ездит на велосипеде
@user3242816, 👍-1
Обсуждение1 ответ
Лучший ответ:
Сначала сделайте что-нибудь попроще и устраните возможные причины.
- Вы уверены, что процессор NodeMCU — это 8-битный ШИМ? Если бы это было так, 9 бит, это будет означать около 50% полной шкалы, а 10 бит будет означать около 25% digitalWrite (что, как мне кажется, я вижу на фото).
- Поменяйте местами аналоговые счетчики и посмотрите, постоянна ли разница. с помощью булавки или в соответствии с показаниями счетчиков.
- Используйте цифровой мультиметр (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
- Случайная ошибка "Compilation error: Error: 13 INTERNAL: exit status 1". Как устранить или что вызывает эту ошибку
- установка выходного аналогового/цифрового контакта на землю
- Опасно ли соединять два выходных контакта вместе?
- Attiny85 простая проблема с аналоговым и цифровым выходом
- Аналоговая запись (PIN, 1023) <>Цифровая запись (PIN, HIGH)
- Копировать выходной сигнал ШИМ на другой выходной контакт?
- Как одновременно управлять ШИМ и цифровыми контактами через Ethernet в Arduino
- Проверить возможности PIN во время компиляции
Пробовали ли вы поменять местами измерители/резисторы?, @Ignacio Vazquez-Abrams
Эти аналоговые счетчики могут нагружать (потреблять ток, достаточный для падения напряжения) «аналоговый» выход. Цифровой выход, вероятно, имеет более высокую способность возбуждения. Я не знаю этого наверняка, поэтому не ставлю это в качестве ответа., @slightlynybbled
@slightlynybbled: AnalogWrite() на ESP8266 выполняет (программное) ШИМ на обычном цифровом выходе., @Ignacio Vazquez-Abrams