Sehr geehrtes allwissenden Mikrocontroller Forum,
ich habe ein Problem, vielleicht hat jemand hier eine Lösungsidee. Ich
möchte insgesamt acht Honeywell HMC5983
http://www51.honeywell.com/aero/common/documents/myaerospacecatalog-documents/Defense_Brochures-documents/HMC5983_3_Axis_Compass_IC.pdf
mit einem NI MYRIO auslesen. Die Sensoren habe ich auf einem
Breakout-Board gekauft und werden per SPI ausgelesen:
http://www.drotek.fr/ftp/schema/hmc5983.PDF
Das Breakout Board habe ich mit einer RJ45 Buchse verlötet um die
Sensoren schlussendlich mit Ethernet Kabeln an das MYRIO anzuschließen.
Ein Sensor an Kabel an MYRIO funktioniert auch ohne Probleme. Um zwei
Sensoren an den MYRIO anzuschließen habe ich eine zweite RJ45 Buchse mit
dem MYRIO verbunden. Die MOSI/MISO/SCLK und Stromversorgung sind mit
beiden RJ45 Buchsen verbunden, ein Chip Select wird jeweils seperat
verwendet. Verbinde ich jetzt ein zweites Ethernet Kabel mit dem MYRIO
(auch ohne Sensor!) funktioniert die Kommunikation nicht mehr
zuverlässig.
Angehägt sind zwei Scope traces, einmal ohne zweites Kabel, einmal mit.
(D0: SCLK, D1: MOSI, D2: MISO, D3: CS)
Sachen die ich probiert habe:
- Trenne ich die SCLK Leitung von dem zweiten Kabel funktioniert es
wieder ohne Probleme.
- Parallel geschaltete Kondensatoren (zum Beispiel zwischen Clock und
GND Supply und GND) haben das Problem nicht behoben.
Vielen Dank schonmal,
Andreas
Nimm doch mal die analogen Kanäle Deines Oszis und mach damit Bildchen.
Andreas schrieb:> - Parallel geschaltete Kondensatoren (zum Beispiel zwischen Clock und> GND Supply und GND) haben das Problem nicht behoben.
Vielleich ist es genau anders herum. Die Kapazität ist zu groß für die
Ausgangstreiber. Probiers doch mal mit einem langsameren Takt.
Ein SPI Bus ist nicht wirklich fuer Kabel vorgesehen, sondern nur fuer
auf einer Leiterplatte. Ohne Kabel dazwischen.
Bei einem Kabel geht das Signal ja per Signal Leiter weg, und kommt per
GND Leiter wieder zurueck. Dabei kann es Reflexionen geben, GND Bounce
und so. Allenfalls mit 100 Ohm Seriewiderstand auf der anderen Seite
betreiben.
Schau dir die Signale doch mal mit einem Analogkanal auf der anderen
Seite an.
Andreas schrieb:> Angehägt sind zwei Scope traces
Die sind aber arg binär. Wie sehen die Signale in analoger Darstellung
aus?
Insgesamt ist es aber nicht schlimm, die "Störungen" kommen immer an der
fallenden Taktflanke. Offenbar ist da der Treiber ein wenig stärker
und du bekommst Ground-Bouncing. Das wäre alles kein Problem, wenn du
mit der steigenden Flanke die Daten übernehmen würdest. Probier
einfach mal die anderen drei SPI-Modes aus...
Danke für die vielen und schnellen Antworten. Anbei mal zwei Bilder mit
dem MOSI analog Trace, mit und ohne Kabel. Abgegegriffen vom Sensor,
also hinter dem Kabel.
- Langsamere SPI Taktraten habe ich probiert, ändert überhaupt nichts.
Macht ja auch sinn, da die Flanken, wo offensichtlich die Störungen
passieren dadruch nicht weniger steil werden.
- Momentan läuft SPI auf 10 KHz.
- Die Kabel sind 3 m lang.
@lkmiller: Was meinst du mit anderen SPI modi? Clock Polaritiy und ob
der das auf der steigenden oder fallenden Flanke liest? Das ist leider
duch den Sensor vorgegeben.
@jetztnicht: Was meinst du mit 100 Ohm "auf der anderen Seite"?
Jetzt N. schrieb:> Ein SPI Bus ist nicht wirklich fuer Kabel vorgesehen, sondern nur> fuer> auf einer Leiterplatte. Ohne Kabel dazwischen.>> Bei einem Kabel geht das Signal ja per Signal Leiter weg, und kommt per> GND Leiter wieder zurueck. Dabei kann es Reflexionen geben, GND Bounce> und so. Allenfalls mit 100 Ohm Seriewiderstand auf der anderen Seite> betreiben.>> Schau dir die Signale doch mal mit einem Analogkanal auf der anderen> Seite an.
Geht das denn überhaupt? Wenn ja, mit etwa welche Kabellängen? Es wäre
schon sehr gut wenn es so gehen würde, da ich am Ort wo die Sensoren
hinsollen nicht so wirklich viel platz habe. Ansonsgten muss ich an
jeden Sensor noch einen Mikrocontroller dödeln.
Schau dir mal bitte die Flanke vom SPI-Takt an.
In viel größerer Auflösung.
Die Teilnehmer arbeiten mit den Flanken des SPI-Takt.
Wenn die Flanke des Taktes aufgrund von z.B. Reflexionen eine "Delle"
hat, kann sein, dass zweimal die Schaltschwelle des Eingangs des Slave
durchschritten wird und er somit zwei Taktflanken sieht.
Das bringt natürlich die Statemachine des Slave komplett außer Tritt.
Andreas schrieb:> Geht das denn überhaupt?
Nennt sich Serienterminierung. Sieh dir einfach mal den
Beitrag "Re: Signalproblem bei langem Kabel" an...
> Wenn ja, mit etwa welche Kabellängen?
Mit allen.
Aber warum schreibst nicht einfach mal du, wie lange deine Kabel sind?
Schlumpf schrieb:> Schau dir mal bitte die Flanke vom SPI-Takt an.> In viel größerer Auflösung.> Die Teilnehmer arbeiten mit den Flanken des SPI-Takt.> Wenn die Flanke des Taktes aufgrund von z.B. Reflexionen eine "Delle"> hat, kann sein, dass zweimal die Schaltschwelle des Eingangs des Slave> durchschritten wird und er somit zwei Taktflanken sieht.> Das bringt natürlich die Statemachine des Slave komplett außer Tritt.
Das sieht doch sehr danach aus. Auf der fallenden Flanke habe ich
überschwinger bis zu 1.9 Volt. Leider habe ich im Datenblatt den Sensors
garnicht gefunden was für eine Logik der verwendet, aber 1.9 Volt sollte
schon kritisch sein.
Lothar M. schrieb:> Andreas schrieb:>> Geht das denn überhaupt?> Nennt sich Serienterminierung. Sieh dir einfach mal den> Beitrag "Re: Signalproblem bei langem Kabel" an...>>> Wenn ja, mit etwa welche Kabellängen?> Mit allen.> Aber warum schreibst nicht einfach mal du, wie lange deine Kabel sind?
Habe ich oben gemacht, 3 meter.
Schlumpf schrieb:> Die Teilnehmer arbeiten mit den Flanken des SPI-Takt.> Wenn die Flanke des Taktes aufgrund von z.B. Reflexionen eine "Delle"> hat, kann sein, dass zweimal die Schaltschwelle des Eingangs des Slave> durchschritten wird und er somit zwei Taktflanken sieht.
Meist ist das Problem viel einfacher: es wird mit der falschen
Taktflanke eingelesen. Durch diese und jene Gatterlaufzeiten und
Kapazitäten funktioniert das so gerade und wird deswegen niemals
hinterfragt. Dann ändert sich irgenwas, eine geshrinkter, schnellerer
Chip oder halt ein zusätzlicher Slave, und schon fängt der übersehene
Fehler an, seine Wirkung zu zeigen. Oft genug erlebt
MfG Klaus
Andreas schrieb:> Das sieht doch sehr danach aus.
Könnte natürlich auch der "Wer Mist misst, misst Mist!" Effekt sein.
Wie sieht dein Messaufbau aus?
Wo sind die Massekabel wie angeklemmt?
Klaus schrieb:> es wird mit der falschen Taktflanke eingelesen.
Scheint zu passen. Allerdings ist zum Abtastzeitpunkt (steigende Flanke)
das Signal doch eigentlich stabil.
Aber der Slave-Select kommt arg knapp vor dem ersten Takt...
Andreas schrieb:> Verbinde ich jetzt ein zweites Ethernet Kabel mit dem MYRIO (auch ohne> Sensor!) funktioniert die Kommunikation nicht mehr zuverlässig.
Was passiert dann? Und was erwartest du stattdessen?
Ist die Kommunikation nur immer flasch oder ab&zu gestört?
Oder passt eigentlich alles, ist aber um 1 Bit "verschoben"?
Lothar M. schrieb:> Andreas schrieb:>> Das sieht doch sehr danach aus.> Könnte natürlich auch der "Wer Mist misst, misst Mist!" Effekt sein.> Wie sieht dein Messaufbau aus?> Wo sind die Massekabel wie angeklemmt?
Ich habe die Signale direkt beim Sensor mit zwei Hirschmann Klemmen
zwischen SCLK und GND abgegriffen.
> Klaus schrieb:>> es wird mit der falschen Taktflanke eingelesen.> Scheint zu passen. Allerdings ist zum Abtastzeitpunkt (steigende Flanke)> das Signal doch eigentlich stabil.> Aber der Slave-Select kommt arg knapp vor dem ersten Takt...
Hatte ich auch mal einen Delay eingebaut, das hatte nichts geändert. Ist
allerdings schon etwas her. Könnte ich nochmal probieren.
> Andreas schrieb:>> Verbinde ich jetzt ein zweites Ethernet Kabel mit dem MYRIO (auch ohne>> Sensor!) funktioniert die Kommunikation nicht mehr zuverlässig.> Was passiert dann? Und was erwartest du stattdessen?> Ist die Kommunikation nur immer flasch oder ab&zu gestört?> Oder passt eigentlich alles, ist aber um 1 Bit "verschoben"?
Durch diese Spikes die du in dem MISO Signal, soweit ich das sehe, immer
wenn eine fallende Flanke der Clock kommt. Gucke mir das gleich nochmal
genauer an.
Eigentlich würde ich erwarten das erstmal nichts passiert wenn ich den
zweiten Sensor anschließe. Da der CS die ganze Zeit high sein sollte.
Wenn ich nur das Kabel anschließe würde ich auch denken das nichts
passierten sollte.
Andreas schrieb:> Das sieht doch sehr danach aus. Auf der fallenden Flanke habe ich> überschwinger bis zu 1.9 Volt. Leider habe ich im Datenblatt den Sensors> garnicht gefunden was für eine Logik der verwendet, aber 1.9 Volt sollte> schon kritisch sein.
Das ist definitiv kritisch.
Mit diesen Überschwingern bringst du das SPI garantiert aus dem Tritt.
Also die müssen erstmal weg.
Kurze Abhilfe kann sein: Längswiderstand in die Taktleitung, der
zusammen mit der Eingangskapazität des Empfängers einen Filter bildet.
Oder gleich nen kleinen RC-Filter auf die Taktleitung setzen.
Damit bekommst du die Störungen weg.
Besser wäre es aber, du beseitigst gleich die Ursache der Störungen
(z.B. nicht angepasste Leitungen, falls das die Ursache ist)
Aber wenn du die Ursache nicht in den Griff bekommst, dann kannst du nur
filtern. Und wenn das Filter lahm genug eingestellt werden muss, dann
musst du eben entsprechend mit der Datenrate runter.
Andreas schrieb:> Das Breakout Board habe ich mit einer RJ45 Buchse verlötet um die> Sensoren schlussendlich mit Ethernet Kabeln an das MYRIO anzuschließen.
RJ45-Kabel sind paarig verseilt, da kannst Du keine einphasigen Signale
übertragen, sondern nur differentiell.
Nimm RS-485 Treiber/Empfänger, dann geht auch SPI.
Du hast Reflektionen auf den Leitungen, SPI eignet sich nicht für
längere Kabel. Ein paar cm über Flachbandkabel in einem Gerät geht meist
noch ganz gut, dann wird es doof.
Ich würde dir als ordentliche Lösung dringend raten pro Sensor (bzw.
Messort) einen µC zu nehmen und den auf ein geeignetes Bussystem
umsetzen zu lassen, CAN z.B. Da gibt es auch kleine µC die schon einen
CAN-Controller drin haben, da braucht's dann nur noch einen Treiber
(SO8).
Mfg Bimbo385
PS: Selbst die Tastköpfe können deine Messungen hier schon verfälschen.
Reflektionen aufzuzeichnen ist eher schwierig.
Edit: Die Idee von Peter mit den RS485 Treibern ist auch nicht verkehrt.
Funktioniert höchstwahrscheinlich ziemlich gut.
Peter D. schrieb:> RJ45-Kabel sind paarig verseilt
Richtig, da hatte ich auch schon ein ungutes Gefühl...
> da kannst Du keine einphasigen Signale> übertragen, sondern nur differentiell.
Es geht schon, wenn der Partner immer Masse ist. Wenn aber z.B. der MISO
mit dem CLK verseilt ist, dann kann der da prima übersprechen...
Lothar M. schrieb:> Peter D. schrieb:>> RJ45-Kabel sind paarig verseilt> Richtig, da hatte ich auch schon ein ungutes Gefühl...>> da kannst Du keine einphasigen Signale>> übertragen, sondern nur differentiell.> Es geht schon, wenn der Partner immer Masse ist. Wenn aber z.B. der MISO> mit dem CLK verseilt ist, dann kann der da prima übersprechen...
Das war auch schon eine Befürchtung von mir. Ich hatte dann die
Verkabelung um einen Pin verschoben, und damit demnach auch die
Paarungen geändert. Das hatte aber auch nicht geholfen.
RS485 Treiber gucke ich mir nächste Woche mal an wenn ich wieder bei der
Arbeit bin. Vielen Dank für den Tipp!