Не удалось загрузить VL53L0X: Ошибка VL53L0X: -6

Я использую датчик VL53L0X в своем проекте. Он работал нормально, когда внезапно начал показывать ошибку "Не удалось загрузиться". Я попытался отладить, но безрезультатно. Я запустил скетч сканера I2C, и он обнаружил датчик на 0x29.

Я получаю следующую ошибку -

23:38:27.797 -> Adafruit VL53L0X test
23:38:27.830 -> VL53L0X Info:
23:38:27.830 -> Device Name: VL53L0X ES1 or later, Type: VL53L0X, ID: VL53L0CBV0DH/1$1
23:38:27.830 -> Rev Major: 1, Minor: 1
23:38:27.864 -> VL53L0X: StaticInit
23:38:27.932 -> VL53L0X: PerformRefSpadManagement
23:38:27.932 -> refSpadCount = 2226323456, isApertureSpads = 92
23:38:27.932 -> VL53L0X Error: -6
23:38:27.932 -> Failed to boot VL53L0X

Это код, который я использовал (это пример кода, в котором только 0x29 и true передаются в функции begin для подробного вывода):

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

void setup() {
  Serial.begin(115200);

  // подождать, пока откроется последовательный порт для собственных USB-устройств
  while (! Serial) {
    delay(1);
  }
  
  Serial.println("Adafruit VL53L0X test");
  if (!lox.begin(0x29,true)) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  // мощность 
  Serial.println(F("VL53L0X API Simple Ranging example\n\n")); 
}


void loop() {
  VL53L0X_RangingMeasurementData_t measure;
    
  Serial.print("Reading a measurement... ");
  lox.rangingTest(&measure, false); // введите "true", чтобы получить распечатку отладочных данных!

  if (measure.RangeStatus != 4) {  // Сбои фазы имеют неверные данные
    Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
  } else {
    Serial.println(" out of range ");
  }
    
  delay(100);
}

Я использую Arduino nano - ниже приведены соединения

ARDUINO->VL53L0X
3v3->Vin
GND->GND
A4->ПДД>
A5->SCL

Я перепроверил подключение и напряжения, которые датчик принимает 3 в3 и gnd.

Мне нужна помощь с этим как можно скорее.

Заранее спасибо :)

, 👍1

Обсуждение

каково фактическое описание ошибки? ... Serial.println(F("Не удалось загрузить VL53L0X")); с таким же успехом может быть Serial.println(F("небо голубое"));, @jsotola

Это все сообщение об ошибке, не могли бы вы сообщить мне, что вы ищете?, @Vineet Tambe


4 ответа


0

Из документации по API VL53L0X Ошибка отображается как

#define VL53L0X_ERROR_RANGE_ERROR   ((VL53L0X_Error) -6)

Не очень полезно, но, может быть, у вас все еще установлена заводская защитная крышка?

Кроме того, ИМХО библиотека Adafruit немного глючит. Теперь я использую библиотеку Pololu (помимо прочего, библиотека Pololu позволяет использовать аппаратные шины I2C WIRE1, WIRE2 и WIRE3.

Обновление от 27 сентября 2020 года: На форуме технической поддержки Adafruit я провел поиск "ОШИБКА VL53L0X". В нескольких потоках упоминались проблемы с ОШИБКОЙ -6, но большинство из них были вызваны плохим или отсутствующим припоем на выводах заголовка VL53L0X. Может быть, это ваша проблема?

,

Я снял заводскую защитную крышку. Я понимаю, что сообщение об ошибке не очень полезно, я не знаю, что еще я могу из него сделать. Я постараюсь использовать библиотеку Pololu, как было предложено., @Vineet Tambe


0

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

,

Я попробовал тот же код с другим датчиком, без каких-либо подтягиваний, он отлично работает с ним. Однако именно этот конкретный датчик выдает ошибку, которую я не могу устранить., @Vineet Tambe

IIRC, модули VL53L0X уже имеют 10K подтягиваний на SDA/SCL - нет необходимости добавлять, @user3765883


1

Я столкнулся с той же проблемой, теперь моя проблема решена здесь.

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

Если вы посмотрите на технические характеристики микроконтроллеров, вы увидите, что большинство микроконтроллеров могут работать при напряжении от 1,8 В до 5,5 В. Здесь повышение напряжения происходит медленно; микроконтроллер начинает работать при 1,8 В и посылает сигналы на VL53L0x, но датчик не работает при 1,8 В.

Итак, что вам нужно сделать, это добавить некоторую задержку (сначала источник питания стабилизируется, а затем начнется связь с датчиком) в свой код, чтобы избежать этой проблемы. Не добавляйте задержку в цикл; это повлияет на работу микроконтроллера, где именно вам нужно добавить задержку. Изменения кода приведены в видео ниже:

https://youtu.be/QEiNbTB8nNE

или вы просто можете поискать на Youtube: Как исправить ошибку VL53L0X

,

0

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

Вот краткое изложение решений:

  1. Проблема с питанием 1: добавьте задержку в 50 мс в функцию настройки (очевидно, до ввода датчика). Таким образом, у Vin будет достаточно времени, чтобы достичь уровня, необходимого датчику, как описано в предыдущем сообщении (ocrdu).
  2. Проблема питания 2: Этот датчик требует больше, чем другие, обычно вывод 5 В на вашей плате делает это лучше, чем 3 В 3. Если одновременно подключено много датчиков, отключите их все, чтобы проверить, используют ли они питание, необходимое для vl53l0x.
  3. Проблема питания 3: Если вы питаете его от внешнего источника, объедините его с платой, не забывайте об этом
  4. Слабые сигналы SCL - SDA: добавьте подтяжку (2k2 - 4k7 от каждого канала до vin), таким образом, сигналы будут работать лучше, это может быть проблемой
  5. Проблема пайки: Убедитесь, что каждый вывод заголовка хорошо припаян. Я обнаружил много случаев плохой пайки. Крошечные подушечки не помогают. Рекомендуется проверить непрерывность с помощью мультиметра между коллекторами и колодками, к которым они должны быть подключены
  6. XSHUT не поднялся: моя проблема заключалась в том, что плата доставки AZDelivery говорит, что в XSHUT есть подтягивание (которое работает как включение). Но это может быть либо ложным, либо плохо реализованным. Xshut должен быть высоким, 3 в3/5В, иначе датчик не будет работать. Соедините XSHUT с Vin или выполните подтягивание, и проблема будет решена.
  • Я использую библиотеку adafruit 1.1.2, и она работает с подтягиваниями, без подтягиваний, подключена к 5 В, а также подключена к 3 В3, с задержка 50 мс и подключение XSHUT к high (3V3 / Vin)
  • Моя плата vl53l0x от AZDelivery (5€ amazon)
  • Я протестировал датчик с помощью arduino nano и ESP32, оба работают нормально

Надеюсь, вы, ребята, найдете это полезным <3

[esp32] [датчик] [i2c] [загрузка] [ошибка]

,