Forum: Mikrocontroller und Digitale Elektronik Problem mit VL53L0X über P82B96


von Christian M. (christian_m280)


Angehängte Dateien:

Lesenswert?

Hallo Foraner!
Meine Heizungssteuerung läuft nun seit ca. 2 Jahren zuverlässig. Ueber 
einen I2C Bus mit über 10m Länge und mehreren P82B96 laufen daran 
jeweils mehrere LM75B, zum Teil über TCA9548A, und mehrere PCF8574 
erfolgreich. Im Zuge einer Erweiterung zum Messen des Füllstandes im 
Pellet-Bunker habe ich einen VL53L0X ToF-Sensor montiert. Aber dieser 
will nicht funktionieren, und zwar nur nicht über den P82B96!

Soweit konnte ich das Problem eingrenzen und kann nun gemütlich am 
Basteltisch probieren. Also Stand momentan:

VL53L0X-Modul ist: 
https://www.az-delivery.de/products/vl53l0x-time-of-flight-tof-laser-abstandssensor

P82B96-Module selbstgebastelt, siehe Schema Anhang! Im Sender die Jumper 
J1 und J2 gesetzt, im Empfänger J1, J2 und J6 gesetzt.

Setup siehe Anhang "Setup".

Da die Pullups VL53L0X-Modul nur 10k sind habe ich noch 2k2 dran 
gemacht.

Flanken sind im Oszi sauber und steil.

Library ist: https://github.com/pololu/vl53l0x-arduino und zu Testen 
Programm im Anhang.

Im LA sieht man, dass kein ACK gesendet wird, wenn direkt verbunden, 
funktioniert es einwandfrei. Siehe Screenshots im Anhang.

Im TI-Forum habe ich ein ähnliches Problem gefunden: 
https://e2e.ti.com/support/interface-group/interface/f/interface-forum/971849/p82b96-p82b96 
leider kann ich nicht genug englisch, um das zu verstehen. Irgendwie 
dass man halt ohne die P82B96 verbinden soll...?

Gruss Chregu

von Peter D. (peda)


Lesenswert?

Christian M. schrieb:
> VL53L0X-Modul ist:
> 
https://www.az-delivery.de/products/vl53l0x-time-of-flight-tof-laser-abstandssensor

Ja, wenn es zu dem Ding bloß ein Datenblatt geben würde.

von Christian M. (christian_m280)


Angehängte Dateien:

Lesenswert?

Scheint der hier zu sein.

Der Sensor selber ist: 
https://www.st.com/resource/en/datasheet/vl53l0x.pdf

Gruss Chregu

von Peter (pittyj)


Lesenswert?

Ich hatte den VL53L0X vor Jahren mal angeschlossen. Ganz normal I2C, 
keine Probleme. Auch die Nachfolge-Sensoren ..5X ..7X liefen problemlos.
An den STM-Sensoren kann es nicht liegen. Ich hatte die Sensoren an 
einem NXP LPC11U68 als auch an einem STM H743. Alles problemlos.

Zur Messung selber: die neueren 8*8 Sensoren liefern viel weniger 
Störungen in der Messung als der alte L0X.

von Christian M. (christian_m280)


Angehängte Dateien:

Lesenswert?

Ups, ich habe was entdeckt: mit dem P82B96 ist der Low-Level bei über 
1.2V! Und wenn ich das Datenblatt richtig verstehe, ist bei 1.12V schon 
High:
- VIL Low level input voltage -0.5 ... 0.6V
- VIH High level input voltage 1.12 ... 3.5V

Der LM75B scheint da viel gutmütiger zu sein: 1.2V ist zwar im 
"verbotenen" Bereich, High fängt aber erst bei 0.7xVCC (3.5V) an.

Gruss Chregu

von Harald A. (embedded)


Lesenswert?

Zum eigentlichen Problem kann ich nichts zusätzliches beitragen, aber 
vlt. die folgenden Hinweise:
- Die Nachfolger vom VL53L0X sind ERHEBLICH besser und das ohne das man 
groß etwas ändern müsste (wurde ja schon geschrieben)
- Falls der Sensor hinter einem Schutzglas sitzt unbedingt die 
Kalibrierfunktion aus dem Minitreiber ausführen, die einmalig 
ermittelten Werte werden im Sensor selbst gespeichert und verbessern die 
Performance erheblich.

: Bearbeitet durch User
von Christian M. (christian_m280)


Lesenswert?

Harald A. schrieb:
> Nachfolger zum VL53L0X sind ERHEBLICH besser

Danke, werde ich mir merken. Hab mal schnell geschaut: die Level auf dem 
Bus sind die gleichen.

Harald A. schrieb:
> Schutzglas

Ja, habe ich nicht. Wie reagiert der wohl auf Staub?

Zum Problem: Habe jetzt mal eine 1N4148 in den GND reingemacht, so fällt 
der Low-Level aus Sicht des Sensors um etwa 0.6V (gemessen). Hilft aber 
nichts, immer noch der gleiche Effekt. Ach ja, der Effekt ist 
eigentlich: 500ms NAK, so lange ist der Timeout gesetzt...

Gruss Chregu

von Harald A. (embedded)


Lesenswert?

Das Problem ist, dass man die Reichweitenangaben aus dem Datenblatt in 
der Praxis ruhig dritteln oder vierteln kann. Übrigens bringt die 
Kalibrierfunktion fast immer eine Verbesserung. Das sind ja so die 
Dinge, die man gerne weglässt, weil man vlt. keine Genauigkeit braucht. 
Aber hier geht es vorrangig um andere Parameter.

von Christian M. (christian_m280)


Lesenswert?

Christian M. schrieb:
> Habe jetzt mal eine 1N4148 in den GND reingemacht, so fällt
> der Low-Level aus Sicht des Sensors um etwa 0.6V (gemessen).

Mache ich einen Gedankenfehler? Auch mit 2 Dioden bringt es nichts.

Ich habe also 2 Probleme, also eigentlich 3:

1. Warum ist der Low-Pegel vom P82B96 so hoch? Laut Datenblatt sollte 
der bei allerhöchstens 1V sein. Laut I2C-Spezifikationen 
https://www.nxp.com/docs/en/user-guide/UM10204.pdf Abschnitt 3.1.2: 
"Input reference levels are set as 30% and 70% of VDD; VIL is 0.3VDD and 
VIH is 0.7VDD." Also absolut innerhalb!

2. Der VL53L0X (auch alle VL53LnX-Varianten) sind aber mit

Christian M. schrieb:
> - VIL Low level input voltage -0.5 ... 0.6V
> - VIH High level input voltage 1.12 ... 3.5V

völlig daneben.

3. Möchte ich dann doch lieber den VL53L3CX verwenden. Ich würde dann 
gleich einen Print machen lassen mit einem TCA9517, ich hoffe, der würde 
das Problem lösen! 
https://www.lcsc.com/datasheet/lcsc_datasheet_1810181614_Texas-Instruments-TCA9517ADGKR_C201698.pdf 
Sind beide bei JLCPCP-Parts vorhanden.

Gruss Chregu

von Rainer W. (rawi)


Lesenswert?

Christian M. schrieb:
> 3. Möchte ich dann doch lieber den VL53L3CX verwenden. Ich würde dann
> gleich einen Print machen lassen mit einem TCA9517, ich hoffe, der würde
> das Problem lösen!

Normalerweise guckt man erst die Datenblätter durch und lässt dann einen 
"Print" machen.
Wenn du erst die Schaltung aufbaust und dann guckst, ob es funktioniert, 
kannst du nicht abschätzen, ob das Zufall ist, weil du sie zufällig 
gerade bei der richtige Kombination von Umgebungstemperatur und 
Versorgungsspannung betreibst, oder ob die Schaltung innerhalb der 
Spezifikation in jeder Lebenslage funktionieren wird.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Christian M. schrieb:
> Schema.pdf

Pfusch am Bau!

- 820 Ohm Pullups an 5 Volt? Das könnte grenzwertig sein.
Bei so hohen Low-Pegeln würden bei mir die Alarmglocken
schrillen.

- zusätzliche (unbekannte) Kondensatoren am I2C Bus?
  (braucht es wohl damit der Pfusch funktioniert)
   Oh weh, oh weh ....

- 10m Leitung, womöglich noch in einer wilden Stern/Baum Topologie?
   Oh weh, oh weh ....

Christian M. schrieb:
> I2C Bus mit über 10m Länge

Alles in allem eine echte Arduino-Maker show.

von Peter D. (peda)


Lesenswert?

Nun, I2C ist bidirektional. Die Treiber-ICs müssen daher bei einem 
Richtungswechsel den Pin kurz anliften, um zu erkennen, daß Low nun von 
der anderen Seite kommt. Auf dem Oszi kann man diese Spikes gut sehen.
I2C konforme ICs haben daher immer einen Filter implementiert, damit 
diese kurzen Spikes nicht stören. Vermutlich wurde das beim VL53L3CX 
aber nicht eingehalten, so daß er hinter einem Treiber-IC nicht mehr 
funktioniert.

von Peter D. (peda)


Lesenswert?

Wastl schrieb:
> - 820 Ohm Pullups an 5 Volt? Das könnte grenzwertig sein.

Nö, im Datenblatt des P82B96 sind 750 R angegeben, paßt also.

von Wastl (hartundweichware)


Lesenswert?

Peter D. schrieb:
> Nö, im Datenblatt des P82B96 sind 750 R angegeben, paßt also.

Was hilft die Einhaltung des Datenblatt-Wertes wenn der Low-
Pegel nicht (mehr) eingehalten wird oder grenzwertig ist? Es
muss ja nicht (nur) der P82B96 befriedigt werden sondern auch
die angeschlossene Peripherie bzw. der Controller.

von Christian M. (christian_m280)


Lesenswert?

Wastl schrieb:
> Pfusch am Bau!

Kannst Du Dich bitte raushalten! Warum stellst Du Deine Inkompetenz 
dermassen penetrant zur Schau?

Ja, ich habe im Schema nicht alle Werte eingezeichnet, aber ich habe im 
Gegensatz zu Dir das DaBla angeschaut!

Gruss Chregu

von Rainer W. (rawi)


Lesenswert?

Wastl schrieb:
> Christian M. schrieb:
>> Schema.pdf
>
> Pfusch am Bau!

Von dem Wirrwarr muss man erstmal einen Schaltplan zeichnen, bevor das 
vernünftig lesbar ist.
Versorgungsspannungen kann man z.B. gerne über Label darstellen, damit 
die nicht zu einem über den ganzen Schaltplan verteilten Drahtverhau 
führen.

: Bearbeitet durch User
von Christian M. (christian_m280)


Angehängte Dateien:

Lesenswert?

Rainer W. schrieb:
> Normalerweise guckt man erst die Datenblätter durch und lässt dann einen
> "Print" machen.

OT: Jaja, früher machten wir Printe, die Jungster heute machen nur noch 
"PCBs"...

Ja mit dem Studium der Pegel in den DaBlas bin ich mir sicher, das ich 
mit dem richtigen Pegelumsetzer Erfolg habe - denn die Low-Pegel sind ja 
das Problem!

Habe mal den Schaltplan gezeichnet...

Gruss Chregu

von Christian M. (christian_m280)


Lesenswert?

Also die Prototypen sind da! Hab mal 5 Machen lassen. Der Low-Pegel nach 
dem TCA9517 ist bei 95mV. Elektronisch ist also jetzt mal gut. Aber:

- der VL53L3CX ist anscheinend mit einem 8-Bitter nicht mehr machbar 
(kann doch nicht sein, das ein simples I2C-Device 50kB Flash und 10kB 
RAM braucht!), und
- in der Doku fehlt jegliche Low-Level Ansteuerung, also auf I2C-Ebene. 
Es wird gleich auf die Funktionen der API verwiesen. Das habe ich ja so 
noch nie gesehen!

Harald A. schrieb:
> Die Nachfolger vom VL53L0X sind ERHEBLICH besser und das ohne das man
> groß etwas ändern müsste (wurde ja schon geschrieben)

Die sind vielleicht schon besser, aber Softwaremässig völlig anders!

Gruss Chregu

von Peter D. (peda)


Lesenswert?

Christian M. schrieb:
> - der VL53L3CX ist anscheinend mit einem 8-Bitter nicht mehr machbar
> (kann doch nicht sein, das ein simples I2C-Device 50kB Flash und 10kB
> RAM braucht!)

Was man so sehen kann, ist das auch typischer Spaghetticode, d.h. 
riesige Ketten an writeReg().
Ich hätte dafür erstmal eine Funktion geschrieben, die den ganzen 
Schrunz aus einer Tabelle als Schleife ausgibt. Dann entfallen schonmal 
die ganzen Ladeaktionen und Calls.

Um die eigentliche Lib anzusehen, muß man sich ja erstmal registrieren. 
Was daran wohl bloß so super geheim ist, oder ist es einfach nur 
schlecht gemacht.

von Christian M. (christian_m280)


Lesenswert?

Peter D. schrieb:
> Um die eigentliche Lib anzusehen, muß man sich ja erstmal registrieren.

Ja habe ich zuerst auch gedacht. Aber es erscheint auch ganz klein 
"Guest". Man muss zwar auch die E-Mail-Adresse angeben, um den DL-Link 
zu bekommen. Habe ich dann halt gemacht. Keine Ahnung, ob ich das hier 
hochladen darf...?

Gruss Chregu

von Veit D. (devil-elec)


Lesenswert?

Hallo,

weil ich hierher verlinkt wurde. Die Libs liegen auf GitHub.
https://github.com/orgs/stm32duino/repositories?q=sensor+NOT+X-Nucleo

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.