WS2812B работает только пока измеряю напряжение
Я схожу с ума, мне явно чего-то не хватает. У меня NodeMCU V3.0 и светодиодная лента WS2812B на 5 В с 10 диодами. Сначала я проверил это с источником питания 5 В, 0,3 А, питающим только 3 диода, все работало нормально.
Затем я поменял питание на 5В 2А (измерено до 5,2В) и теперь цвета сильно сбились, они даже меняются при каждом обновлении, хотя ничего не меняется. Я подключил вольтметр к «D3» и «GND», и внезапно светодиоды стали идеальными и стабильными.
Если я его снова уберу, светодиоды снова поменяют случайный цвет, я пробовал заземлять "D3" резистором 10 кОм, но это ничего не меняет.
Что здесь происходит, почему не работает и почему с вольтметром работает?
Код:
#include <ESP8266WiFi.h>
#include <FastLED.h>
#define LED_PIN 3
#define NUM_LEDS 10
CRGB leds[NUM_LEDS];
int R = 255;
int G = 90;
int B = 10;
//Настраиваем клиенты MQTT и WiFi
WiFiClient client;
void setup()
{
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
Serial.begin(9600);
//Подключаемся к Wi-Fi
Serial.print("\n\nConnecting Wifi... ");
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
Serial.println("OK!");
pinMode(D4, OUTPUT);
digitalWrite(D4, HIGH);
}
void loop()
{
leds[0] = CRGB(255, 0, 0);
leds[1] = CRGB(0, 255, 0);
leds[2] = CRGB(0, 0, 255);
FastLED.show();
delay(5000);
}
@Yoshidk, 👍0
Обсуждение1 ответ
Лучший ответ:
Светодиоды WS2812B представляют собой устройства с напряжением 5 В. NodeMCU имеет напряжение 3 В. Ваше первое питание 5 В, вероятно, будет несколько ниже 5 В, поскольку NodeMCU принял большую часть тока (см. Спад напряжения) ). Это будет означать, что Верхний логический порог будет в пределах допустимых значений. выходного напряжения 3,3 В NodeMCU.
Однако с вашим новым источником питания высокой мощности это падение напряжения будет менее распространенным (добавлено тот факт, что он измеряет 5,2 В), и поэтому верхний логический порог будет выше. На уровне 3,3 В, выдаваемом NodeMCU, или очень близко к нему. Это делает его довольно нестабильным при обмене данными, поскольку логический уровень HIGH не всегда может быть выше требуемого порога HIGH.
Добавление вольтметра, очевидно, меняет этот логический сигнал, так что он стабилизируется выше требуемого порога (вход вольтметра имеет емкость. Это поможет удерживать линию на более высоком уровне дольше).
Чтобы управлять устройствами с напряжением 5 В от микроконтроллера с напряжением 3,3 В, вам действительно необходимо добавить переключатель логического уровня или убедиться, что напряжение питания не слишком высокое.
У WS2812B высокий логический уровень 0,7 × Vdd. При 5 В это (0,7*5=) 3,5 В. Это близко, но не совсем там. Ваш оригинальный блок питания, вероятно, выдавал под нагрузкой напряжение около 4,75 В. Это будет 3,325 В для высокого логического уровня, что практически поддается управлению NodeMCU.
Однако при напряжении 5,2 В логический уровень HIGH будет равен 3,675 В, что намного выше 3,3 В, которые выдает NodeMCU.
Итак, вам необходимо:
- Добавьте переключатель логического уровня от 3,3 В до 5 В или
- Уменьшите входное напряжение питания светодиодов до уровня ниже 4,75 В.
Последнее можно сделать, добавив к соединению VDD один последовательный диод с подходящей токовой способностью. Оно (в зависимости от диода) упадет примерно на 0,7 В, что приведет к напряжению примерно до 4,5 В (фактическое падение обычно в определенной степени зависит от тока). WS2812B успешно работает при напряжении от 3,5 В до 5,3 В.
Кажется, я понял, спасибо Этот диод, может быть такой: 1N4001? И приведет ли это к потере мощности?, @Yoshidk
Я бы, наверное, взял 1N5402. 1N4001 имеет номинал только 1А. 1N5402 имеет номинал 3А. Да, он потеряет часть мощности. Но потерять немного энергии — это то, чего вам хочется — на данный момент у вас ее слишком много ;), @Majenko
@Yoshidk Я думаю, ты можешь снизить напряжение только для первого чипа. Его выходная мощность будет соответствовать напряжению питания., @KIIV
@Yoshidk Или, может быть, добавление диода между заземлением питания и заземлением NodeMCU может обеспечить ту же услугу без разрезания светодиодной ленты., @KIIV
Я добавил последовательно диод, чтобы понизить напряжение до 4,6В, и теперь все работает, спасибо, @Yoshidk
- Код NodeMCU, который отображает OLED и управляет светодиодным кольцом WS2812.
- Как определить размер Flash?
- WebSocketsServer.h: No such file or directory
- Улучшенное циклическое переключение цветов RGB.
- В ESP-12E NodeMCU, какой выход PIN A0?
- Преобразование byte* в int в Arduino
- Каково использование зарезервированных контактов и контактов SDD2, SDD3 NodeMCU?
- Было найдено несколько библиотек для «WiFiClient.h» с помощью nodemcu.
Вы пробовали другой пин?, @Matej
Снимите резистор. Существует также способ использовать один WS2812 в качестве усилителя для остальных WS2812, см. http://www.elec-tron.org/wp-content/uploads/2015/10/ws2812bconverter.jpg., @MatsK
Если резистор в вашем цифровом мультиметре (вероятно, 10 м) понижает сигнал и заставляет его работать, то понятно, что вы можете просто добавить свой собственный понижающий резистор, чтобы он работал так же., @dandavis
Это тоже была моя первая мысль, но добавление сопротивления 10 кОм для вывода вывода данных (то же самое место, которое я измерял) ничего не дало, поэтому я все еще озадачен, почему измерение ничего не дало., @Yoshidk