STM32 und Infrarot Sensor

Gast #5629982
Lesenswert?

Hallo leute,

ich wollte eine Abstandsmessung durch den Infrarot Sensor VL53L1X haben 
dazu nutze ich den STM32.

https://www.st.com/resource/en/datasheet/vl53l1x.pdf

Der Sensor besitzt eine API die ich nutzen wollte um verschiedene 
Funktionen in meinen Code zu kriegen mein Problem dabei ist das bei den 
eingebundenen cpp's steht das einige Headers nicht zu finden seien 
obwohl sie im gleichen Projekt Ordner sind.

zudem ist in der API noch eine README Datei mit diesem Inhalt:

VL53L1X_API_xxx zip file content:
-   "core" directory contains the driver files
-   "platform" directory contains the platform files.
  Note:   The user has to implement the I2C functions prototyped in the 
vl53l1_platform.c file accordingly.
      For the STM32 target the user may download the X-CUBE-53L1A1 code 
on ST.COM and inspire on the implementation of the I2C functions 
developed
      for stm32 ODE in the vl53l1_platform.c file.
-   VL53L1X API user manual (UM2356)
-   Release Notes


Verstehe aber nicht was ich damit machen soll?


Bitte helft mir dabei weiß echt nicht was ich machen soll.
Gast #5630671
Lesenswert?

Warum sollte es einfacher sein mit der API kann ich doch auf fertige 
Funktionen zu greifen oder nicht? Und würde es denn ohne API überhaupt 
programmierbar sein, weil in dem Datenblatt ist extra angegeben das man 
die API benutzen soll?

Und hätte da noch ein paar Fragen hoffentlich könnt ihr mir behilflich 
sein:

1. beim Schaltungsaufbau wie auf dem Bild zu sehen soll I0VDD 1,8V 
betragen und die Versorgung des Sensors 2,8V. Aber die Masse von I0VDD 
wurde gar nicht eingetragen lege ich die Masse auf die Masse des 
Mikrocontroller oder wie funktioniert das?

2. Wozu brauche ich die beiden Pins GPIO1 und XSHUT?

Ich freue mich auf jede Unterstützung Leute
Angehängte Dateien:
Gast #5630708
Lesenswert?

Peter S. schrieb:
> Warum sollte es einfacher sein mit der API kann ich doch auf fertige
> Funktionen zu greifen oder nicht?

Kannst du offensichtlich eben nicht. Je nach dem, wie kompliziert diese 
API ist und wie schlecht sie dokumentiert ist, kann eine 
Eigenentwicklung durchaus schneller klappen.

> Und würde es denn ohne API überhaupt
> programmierbar sein, weil in dem Datenblatt ist extra angegeben das man
> die API benutzen soll?

Die I²C Schnitstelle und ihre Verwendung ist im Datenblatt des Chips auf 
dn ersten Blick klar und deutlich dokumentiert.

Was ich bisher gelernt habe: ST kann Chips bauen, aber Software ist 
nicht deren Stärke.

> 1. beim Schaltungsaufbau wie auf dem Bild zu sehen soll I0VDD 1,8V
> betragen und die Versorgung des Sensors 2,8V. Aber die Masse von I0VDD
> wurde gar nicht eingetragen lege ich die Masse auf die Masse des
> Mikrocontroller oder wie funktioniert das?

Die GND Anschlüsse gehören zusammen gelegt. Bist du sicher, daß du für 
die Kommunikation zwischen dem Sensor und dem Mikrocontroller 1,8V 
verwenden willst? Unterstützt dein Mikrocontroller das überhaupt?

I²C läuft normalerweise auf 5V und häufig auf 3,3V. Aber weniger als 
3,3V habe ich noch nicht gesehen.

> 2. Wozu brauche ich die beiden Pins GPIO1 und XSHUT?

Steht im Datenblatt.
Gast #5630814
Lesenswert?

Stefanus F. schrieb:
> Die GND Anschlüsse gehören zusammen gelegt. Bist du sicher, daß du für
> die Kommunikation zwischen dem Sensor und dem Mikrocontroller 1,8V
> verwenden willst? Unterstützt dein Mikrocontroller das überhaupt?
>
> I²C läuft normalerweise auf 5V und häufig auf 3,3V. Aber weniger als
> 3,3V habe ich noch nicht gesehen.

Nein der Microcontroller unterstützt das nicht ich würde das dann mit 
einem Spannungsregler machen der dann von 5V oder 3,3V runter regelt auf 
1,8V.
Steht im Datenblatt so oder sehe ich da was falsch? im Standard Mode mit 
1,8V

Da ist auch schon das Problem kann ich das dann auf die gleiche Masse 
legen? und wenn nicht wohin dann? :/
Angehängte Dateien:
Gast #5630868
Lesenswert?

Ist denn der nackte Chip vorhanden oder ist der auf einem Breakoutboard? 
Der Chip ist winzig und nicht einfach zu löten, Auf einem BB wie von 
Adafruit sind schon Spannungsregler und Pegelwandler vorhanden.
Gast #5630939
Lesenswert?

ich habe dem Sensor mit dem kleineren Range VL6180 hiermit recht schnell 
Werte entlocken können:
https://os.mbed.com/users/sburg/code/VL6180/

Entweder ist da nur eine einfache Standardconfig drin oder der VL53 ist 
noch komplexer. Für den gibt es bei mbed aber auch eine einfachere Lib:
https://os.mbed.com/users/highroads/code/VL53L0X/

Da fast alle STM32 von mbed unterstützt werden hat mein ein lauffähiges 
Programm damit sehr schnell erstellt.
Gast #5630984
Lesenswert?

Johannes S. schrieb:
> Ist denn der nackte Chip vorhanden oder ist der auf einem
> Breakoutboard?
> Der Chip ist winzig und nicht einfach zu löten, Auf einem BB wie von
> Adafruit sind schon Spannungsregler und Pegelwandler vorhanden.

Ja der ist auf einem Satel Breakboard die Spannungsversorgung dafür ist 
zwischen 2,8-5V aber das ändert ja nicht an der I0VDD die bleibt bei 
1,8V wie man im Datenblatt von dem Breakboard auf seite 4 sieht :/

https://www.st.com/resource/en/data_brief/vl53l1x-satel.pdf

Johannes S. schrieb:
> ich habe dem Sensor mit dem kleineren Range VL6180 hiermit recht schnell
> Werte entlocken können:
> https://os.mbed.com/users/sburg/code/VL6180/
>
> Entweder ist da nur eine einfache Standardconfig drin oder der VL53 ist
> noch komplexer. Für den gibt es bei mbed aber auch eine einfachere Lib:
> https://os.mbed.com/users/highroads/code/VL53L0X/
>
> Da fast alle STM32 von mbed unterstützt werden hat mein ein lauffähiges
> Programm damit sehr schnell erstellt.

Also ich weiß nicht was genau was dieses mBed ist aber habe einen 
fertigen Code auch schon für Arduino gesehen nur muss ich das in C 
schreiben und mein großes Problem ist echt diese API einzubinden :/

ich bekomme bei sehr vielen Dateien diesen Fehler:
fatal error in include chain (vl53l_ll_device.h): 'vl53l1_types.h' file 
not found

Wobei die entsprechenden Header aber in dem richtigen Ordner sich schon 
befinden.
Gast #5631084
Lesenswert?

Das sind die includes aber nicht die Suchpfade zu diesen. Die müssten in 
den Projekteinstellungen festgelegt werden. Der Compiler wird nicht in 
dem Verzeichnis aufgerufen wo die Quellen liegen, deshalb nutzt es 
nichts wenn Source und Header im gleichen Verzeichnis liegen.
Gast #5631108
Lesenswert?

Peter S. schrieb:
> Steht im Datenblatt so oder sehe ich da was falsch? im Standard Mode mit
> 1,8V

Ja steht da so.

> Da ist auch schon das Problem kann ich das dann auf die gleiche Masse
> legen? und wenn nicht wohin dann? :/

Masse ist Masse. Es gibt normalerweise nicht die eine Masse und dann 
irgendwo eine andere Masse mit anderem potential. Alle Spannungsangaben 
beziehen sich normalerweise auf Masse.

Es gibt auch nur eine Erde. Wenn ich dich beauftrage, einen Pfahl in die 
Erde zu rammen, fragst du auch nicht "in welche Erde"?
Gast #5631170
Lesenswert?

Johannes S. schrieb:
> Das sind die includes aber nicht die Suchpfade zu diesen. Die
> müssten in
> den Projekteinstellungen festgelegt werden. Der Compiler wird nicht in
> dem Verzeichnis aufgerufen wo die Quellen liegen, deshalb nutzt es
> nichts wenn Source und Header im gleichen Verzeichnis liegen.

Danke dachte es reicht wenn die im gleichen Verzeichnis sind, habe den 
Pfad eingegeben und das hat schon mal geklappt.

Hast du vielleicht den C Code damit man über I²C Werte vom Sensor 
auslesen kann? Du sagtest ja du hattest von einem ähnlichen Sensor schon 
Werte raus bekommen?

Stefanus F. schrieb:
> Masse ist Masse. Es gibt normalerweise nicht die eine Masse und dann
> irgendwo eine andere Masse mit anderem potential. Alle Spannungsangaben
> beziehen sich normalerweise auf Masse.
>
> Es gibt auch nur eine Erde. Wenn ich dich beauftrage, einen Pfahl in die
> Erde zu rammen, fragst du auch nicht "in welche Erde"?

Ja das stimmt schon das Problem dabei ist, dass ich dadurch eine 
Spannungsdifferenz habe, da ich einmal 5V und einmal 1,8V auf der 
gleichen Masse habe, wäre das wirklich okay?
Gast #5631185
Lesenswert?

Peter S. schrieb:
> Ja das stimmt schon das Problem dabei ist, dass ich dadurch eine
> Spannungsdifferenz habe, da ich einmal 5V und einmal 1,8V auf der
> gleichen Masse habe, wäre das wirklich okay?

Auf Masse (GND) hast du per Definition Null Volt. Die Spannung misst du 
an der anderen Leitung relativ zu Masse.
Gast #5631479
Lesenswert?

dieses Board ist allerdings kein 'mbed enabled' board, ich habe das 
Projekt mal für das Nucleo_F103RB erzeugt.

Das ganze Projekt hat knapp 10MB, die möchte ich hier nicht anhängen, 
habe ich mal in meine DropBox geworfen und sollte hierüber geholt werden 
können:

https://www.dropbox.com/sh/bogy13ykuobionl/AADF-ACg3ZlJfy7eoaDfzCxWa?dl=0
Es ist ein uvision5 Projekt, uvision6 oder alt könnte ich auch 
generieren. Das Ganze sind ein paar Kommandozeilen Befehle, kann man 
auch selbermachen.

Wie die Hardware da angeschlossen ist weiss ich nicht, für D4/D5/D6 
müssen die entsprechenden Pinnamen angegeben werden, einfach im Schema 
Pm_n.
Ein Standard HD44780 TextLCD habe ich auch dazugepackt, auch hier müssen 
die HW Pins angepasst werden.
https://os.mbed.com/components/HD44780-Text-LCD/

Die HW und Keil habe ich nicht, deshalb alles auf gut Glück :-)


Edit:
so müsste das LCD funktionieren, RW muss noch auf 0 gezogen werden.
LED auch noch eingebaut.

1
#include "mbed.h"
2
#include "VL53L1X.h"
3
#include "TextLCD.h"
4

5
//          RS     E      D4    D5    D6    D7
6
TextLCD lcd(PC_12, PC_10, PC_3, PC_2, PC_1, PC_0);
7
DigitalOut lcd_rw(PC_11, 0);
8

9
DigitalOut led1(PB_15);
10

11
Serial pc(USBTX,USBRX, 115200);
12

13
VL53L1X sensor1(D4, D5, D6);  // SDA, SCL, Shutdown. Pinnames can be written as PA_0 etc.
14

15
int main()
16
{  
17
    lcd.printf("Hello World!\n");
18

19
    sensor1.initReading(0x25,50000);
20

21
    while(1)
22
    {
23
        led1 = !led1;
24
    
25
        pc.printf("%d \r\n", sensor1.readFromOneSensor());
26
        lcd.printf("%d \r\n", sensor1.readFromOneSensor());
27
    
28
        wait_ms(50);
29
    }
30
}
Gast #5632661
Lesenswert?

Ja da hast du auch Recht ich werde mal gucken wie weit ich komme. Vielen 
Dank für deine Bemühungen Johannes du hast mir sehr weiter geholfen und 
auch an jeden anderen der mir behilflich war ein riesiges dankeschön.
Gast #5658403
Lesenswert?

Hallo ich melde mich nochmal wegen dem Sensor. Da ich jetzt wieder seit 
längerem nicht weiter komme wollte ich noch mal euren Rat einbeziehen.

Ich habe ein Tutorial gefunden indem der Verfasser auch zufälliger weise 
den gleichen Controller benutzt wie ich den STM32F103RB, aber auf einem 
Nucleo Board.

Der Artikel dazu: 
https://www.digikey.com/eewiki/display/microcontroller/Adding+the+VL53L1X+Driver+to+an+STM32Cube+Project

Ich bin dazu alles Schrittweise durch gegangen und man muss am ende die 
main selbst verfassen wofür der Auto aber eine Vorlage Parat hält. Mein 
Problem allerdings ist das ich glaube dass ich einfach keine Verbindung 
zum Sensor aufnehmen kann. Ich bin mit dem Debugger Schrittweise 
durchgegangen und sobald es in die Initialisierung des Sensors geht (ab 
Zeile 141)springt er in den HardFault_Handler rein was ich auch nicht 
verstehe.

Ich bitte um eure Hilfe denn mir fällt nichts mehr ein was ich machen 
kann es wird mir auch kein Fehler ausgeworfen ich Hänge mal meine 
umgeänderte main an.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren