Forum: Mikrocontroller und Digitale Elektronik Interface zwischen Photoelectric Sensor und uC


von Wen kiat teh T. (Firma: HS Karlsruhe) (wenkiat84)


Lesenswert?

Hallo,

kann jemand mir helfen, wie man ein Photoelectric an AVR Mikrocontroller 
einzuschließen? Ich habe einen Photoelectric Sensor von Fa. IFM 
Electronic, der als Ausgang SPI LDVS hat.

Zum Thema Auswahl des geeigneten Mikrocontrollers habe ich auch noch 
nicht entschieden, ob ich ein 8 bit oder 16 bit benutzen soll. Die 
Anforderugen sind folgende :

1. Der uC soll die Daten aus Sensor möglichst schnell holen, die Daten 
bearbeiten und das Ergebnis weitergeben.

2. Die aus oben genanten Vorgängen sollen innerhalb 200us passieren.

3. Der uC soll möglichst stromsparend sein.

4. Als uC soll ein uC aus Fa. ATMEL sein.

Wenn den uC schon festgelegt wird, komm dann die Frage : Wie schließe 
ich den Sensor mit dem uC ein? Wie sieht die Kommunikation zwischen den 
uC und den Sensor ?

Ich bin ein Neuling in diesem Bereich und hoffe, dass jemand mir helfen 
kann. Danke.

Mfg
Aaron

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

Hallo Aron,
gib mal den genauen Typ des Sensors an.
Wie lange dauert die Signalübertragung über SPI?
"..... und das Ergebnis weitergeben." Wohin und wie?


Es sollte wahrscheinlich ein 8Bit Atmel reichen.


Axel

von Wen kiat teh T. (Firma: HS Karlsruhe) (wenkiat84)


Lesenswert?

Hallo Axel,

es handelt sich um Efector 200 von Fa. IFM Electronic. Signalübertragung 
dauert laut Datenblatt min. 125us. Ich kann auch die Datenblätter von 
Transmitter und Receiver einscannen und hier aufhängen, falls irgendwas 
unklar ist.

Das Ergebnis soll an Ventile weitergeben. Anhand dieses Ergebnis sollen 
die Ventile ein,-oder ausschalten.

Gruss
Aaron

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was sind "die Daten"? Wieviele Bytes?

von Wen kiat teh T. (Firma: HS Karlsruhe) (wenkiat84)


Lesenswert?

Rufus t. Firefly schrieb:
> Was sind "die Daten"? Wieviele Bytes?

Die Daten sind Word (2 Bytes) von den Lichtschranken. Ein Rahmen hat 6 
Word (12 Byte).

von Wen kiat teh T. (Firma: HS Karlsruhe) (wenkiat84)


Angehängte Dateien:

Lesenswert?

Wen kiat teh Teh schrieb:
> Hallo Axel,
>
> es handelt sich um Efector 200 von Fa. IFM Electronic. Signalübertragung
> dauert laut Datenblatt min. 125us. Ich kann auch die Datenblätter von
> Transmitter und Receiver einscannen und hier aufhängen, falls irgendwas
> unklar ist.
>
> Das Ergebnis soll an Ventile weitergeben. Anhand dieses Ergebnis sollen
> die Ventile ein,-oder ausschalten.
>
> Gruss
> Aaron

Die Datenblätter habe ich eingescannt.

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

Hallo Aaron,
die 200us sind bestimmt nicht nötig, da die Ventile eine wesendlich 
größere Schaltzeit haben.

Zwei Wörter Empfangen ist mit einem Mega 8 @ 8MHz bestimmt kein Problem.


Hast Du zu dieser SPI LVDS Schnittstelle mehr Infos. Sieht ziemlich 
schwierig aus.


Axel

von Axel D. (axel_jeromin) Benutzerseite


Lesenswert?

Das SPI LVDS ist doch so eine Videoschnittstelle oder nicht? Das geht in 
Richtung Bildverarbeitung?
Dann wird es auch mit der Mega 8 eng.

Axel

von Crimson (Gast)


Lesenswert?

Also für mich sieht das ,bis auf die beiden "VOP" Signale, wie eine 
normale SPI Schnittstelle aus. Nur das diese für eine sicherere 
Übertragung als LVDS Signal übertragen wird.

Hatte mir mal aus irgendeinem anderen Thread zu LVDS diesen Link 
kopiert.
http://www.national.com/appinfo/lvds/files/ownersmanual.pdf
Darin ist LVDS sehr gut erklärt.

Für den anschluss an den Sensor wirst du dir ein LVDS zu TTL bzw. CMOS 
Wandler suchen müssen der eine Epfangseinheit LVDS->TTL (MISO P/N) und 
drei Sendeeinheiten TTL->LVDS (MOSI P/N, CLK P/N & SS P/N) hat. An 
diesem kannst  du dann ganz einfach die SPI Schnittstelle des 
Controllers anschließen. Bei einer Maximalfrequenz von 6MHz müsste das 
Beinahe jeder µC hinbekommen, wenn der Wandler möglichst nahe an diesem 
sitzt.

Was ich jedoch nicht verstehe im Datenblatt steht was von 9 Status LEDs 
-> 9 Lichtschranken wieso, dann nur 12 Bytes und wozu benötigt man 2 
Bytes für den Zustand einer Lichtschranke, die entweder offen oder 
geschlossen ist.
Verstehen könnte ich es ja noch wenn alle 72 Pixel übertragen werden, 
allerdings scheint das auch nicht der Fall zu sein.

Ich würde da nochmal zwecks genauerer Informationen nachfragen.

Gruß Crimson

von Wen kiat teh T. (Firma: HS Karlsruhe) (wenkiat84)


Lesenswert?

Crimson schrieb:
> Also für mich sieht das ,bis auf die beiden "VOP" Signale, wie eine
> normale SPI Schnittstelle aus. Nur das diese für eine sicherere
> Übertragung als LVDS Signal übertragen wird.
>
> Hatte mir mal aus irgendeinem anderen Thread zu LVDS diesen Link
> kopiert.
> http://www.national.com/appinfo/lvds/files/ownersmanual.pdf
> Darin ist LVDS sehr gut erklärt.
>
> Für den anschluss an den Sensor wirst du dir ein LVDS zu TTL bzw. CMOS
> Wandler suchen müssen der eine Epfangseinheit LVDS->TTL (MISO P/N) und
> drei Sendeeinheiten TTL->LVDS (MOSI P/N, CLK P/N & SS P/N) hat. An
> diesem kannst  du dann ganz einfach die SPI Schnittstelle des
> Controllers anschließen. Bei einer Maximalfrequenz von 6MHz müsste das
> Beinahe jeder µC hinbekommen, wenn der Wandler möglichst nahe an diesem
> sitzt.
>
> Was ich jedoch nicht verstehe im Datenblatt steht was von 9 Status LEDs
> -> 9 Lichtschranken wieso, dann nur 12 Bytes und wozu benötigt man 2
> Bytes für den Zustand einer Lichtschranke, die entweder offen oder
> geschlossen ist.
> Verstehen könnte ich es ja noch wenn alle 72 Pixel übertragen werden,
> allerdings scheint das auch nicht der Fall zu sein.
>
> Ich würde da nochmal zwecks genauerer Informationen nachfragen.
>
> Gruß Crimson

Hallo,

vorgesehen ist ein ATmega325 mit 16 MHz, mit dem ich arbeiten muss. Zur 
Frage von 9 Status LEDs : Da nur 9 Bytes (entspricht 9 LED's) gebraucht 
werden, sind die andere Bytes mit '0' gefüllt. Meinst du, dass ich 
einfach den Sensor an SPI Schnittstelle des Mikrocontrollers anschließe?

Ich muss eine grobe Laufzeitberechnung machen, indem ich genügend Zeit 
mein Algorithmen auszuführen. Kann jemand mir sagen, wie man das 
berechnet?

Gruss
Aaron

von Crimson (Gast)


Lesenswert?

Hallo Aaron,

du kannst den Sensor nicht direkt an den Mikrocontroller anschließen, da 
dieser TTL Pegel am den Pins erwartet und der Sensor LVDS.
Das bedeutet du must einen "WANDLER" dazwischen setzten!!!

Ich hab mal zwei bei National Semiconductors rausgesucht.
Der erste ist ein Sender und ein Epfänger
(http://www.national.com/ds/DS/DS90LV019.pdf)
und der zweite beinhaltet 4 Sender
(http://www.national.com/ds/DS/DS90C031.pdf)
da ich auf die schnelle keinen passenden gefunden habe.
Gibts aber sicher auch bei anderen Herstellern.

Außerdem wirst du schätzungsweise mit einem 12MHz Quarz an dem ATmega325 
arbeiten müssen da du sonst nicht auf die 6MHz SPI Takt kommst.
Hast du eine Ahnung welchen SPI Modus der Sensor verwendet.
Das berechnen während über die Schnittstelle daten kommen ist beliebig 
kompliziert, da du alle 16 Takte einen SPI Interrupt bekommst. Oder 
zumindest die Daten abholen musst.
Also musst du anschließend dafür Zeit vorsehen, bevor du das nächste mal 
daten vom Sensor holst.

Für eine Laufzeitberechnung braucht man im algemeinen den Asselbler 
code.
Anhand der Asemblerbefehle und zu deren Ausführung nötigen Takte lässt 
sich die Laufzeit berechnen.
Anzahl Takte(der Funktion) * 1/Taktfrequenz = Laufzeit

Gruß Manuel

von Wen kiat teh T. (Firma: HS Karlsruhe) (wenkiat84)


Lesenswert?

Crimson schrieb:
> Hallo Aaron,
>
> du kannst den Sensor nicht direkt an den Mikrocontroller anschließen, da
> dieser TTL Pegel am den Pins erwartet und der Sensor LVDS.
> Das bedeutet du must einen "WANDLER" dazwischen setzten!!!
>
> Ich hab mal zwei bei National Semiconductors rausgesucht.
> Der erste ist ein Sender und ein Epfänger
> (http://www.national.com/ds/DS/DS90LV019.pdf)
> und der zweite beinhaltet 4 Sender
> (http://www.national.com/ds/DS/DS90C031.pdf)
> da ich auf die schnelle keinen passenden gefunden habe.
> Gibts aber sicher auch bei anderen Herstellern.
>
> Außerdem wirst du schätzungsweise mit einem 12MHz Quarz an dem ATmega325
> arbeiten müssen da du sonst nicht auf die 6MHz SPI Takt kommst.
> Hast du eine Ahnung welchen SPI Modus der Sensor verwendet.
> Das berechnen während über die Schnittstelle daten kommen ist beliebig
> kompliziert, da du alle 16 Takte einen SPI Interrupt bekommst. Oder
> zumindest die Daten abholen musst.
> Also musst du anschließend dafür Zeit vorsehen, bevor du das nächste mal
> daten vom Sensor holst.
>
> Für eine Laufzeitberechnung braucht man im algemeinen den Asselbler
> code.
> Anhand der Asemblerbefehle und zu deren Ausführung nötigen Takte lässt
> sich die Laufzeit berechnen.
> Anzahl Takte(der Funktion) * 1/Taktfrequenz = Laufzeit
>
> Gruß Manuel

Hallo Manuel,

d.h Ausgang des 'Wandlers' schließe ich an den ADC des 
Mikrocontrollers,oder? Kann ich nicht direkt an den Mikrocontroller 
anschließen,da auf dem uC bereits schon eine SPI Interface vorhanden?

Mit 16 Mhz kann ich arbeiten,da laut dem Datenblatt kein 6 MHz sein muss 
(nur bis zu max. 6 Mhz). Also,dann kann ich von 16 Mhz auf 4 Mhz 
downscalen.

Über SPI Modus des Sensors habe ich keine Ahnung, da ich nur die 
Datenblätter von Transmitter und Receiver habe.

Für die Laufzeit habe ich eine kleine Berechnung gemacht. Und zwar 
folgendes :

Geschwindigkeit des Förderbandes : 4 m/s
Abstand zwischen den Abtastungen : 5mm
Dann komme ich auf 1250 us für die Zeit bis zur nächste Abtastung.

Wenn ich mit 16 Mhz arbeite, ergibt sich die Anzahl der Befehle 20000 
Befehle. Und das reicht schon für die Implementierung meiner 
Algorithmen, oder?

Ich hoffe, dass ich alles richtig verstanden habe.

Gruss
Aaron

von Crimson (Gast)


Lesenswert?

Hallo Aaron,

langsam frage ich mich ob du dir das LVDS Dokument überhaut angeschaut 
hast.
In den Shemas sehen die zwar aus wie OPVs, sind es jedoch nicht, aus 
einem Reciever(Wandler für Empfägner) kommt ein 
TTL(Transistor-Transistor-Logik) LOGIK Signal heraus das dem 
differenziellen Signal entspricht. Genauso wandelt ein Driver(Wandler 
für Sender) ein TTL Signal in ein LVDS(Low Voltage Differential 
Signaling) Signal heraus.
Die ganze LVDS Sache ist nur dafür gedacht das Signal unempfindlicher 
gegen Störungen zu machen.
Bedeutet aus MISOP und MISON des Sensors wird nach dem Reciever MISO und 
geht an den entsprechenden Pin des Mikrocontrollers.
Aus MOSI der SPI Schnittstelle wird nach dem Driver MOSIP und MOSIN zum 
Sensor.

Ich hab keine Ahnung was für Algorithmen du verwenden willst.  Die 20000 
Takte sollten jedoch ohne Probleme ausreichen. Oben hattest du jedoch 
noch etwas von 200µs geschrieben.
Achtung nicht jeder Assembler Befehl braucht einen Takt manche auch 
mehrere.

Ach ja bevor ichs vergesse die LVDS Signale haben gerne einen 
Wellenwiederstand von 100 Ohm sowohl im Kabel wie auch auf der 
Leiterbahn und die Leitungen von XXXXP und XXXXN sollten möglichst 
gleich lang sein.
Sollte bei deinen Geschwindigkeiten, jedoch nicht so wichtig sein.

Gruß Manuel

von Wen kiat teh T. (Firma: HS Karlsruhe) (wenkiat84)


Lesenswert?

Danke an alle für die Input.

Gruss
Aaron

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.