Forum: Mikrocontroller und Digitale Elektronik SSI Interface ???


von Peter Maier (Gast)


Lesenswert?

Hallo,

ich verwende spezielle Hardware basierend auf der ARM Architektur. Mir
stehen nur Analoge uind Digitale IO's zur Verfügung, darüber hinaus
gibt es noch einen PWM-Ausgang. Es gibt KEINE Rs232/485, Parallell oder
SSI Schnittstelle.

Folgende Frage:
Ich muß mit dieser Hardware einen Sensor mit SSI Schnittstelle
auslesen. ich denke den notwendgen Takt könnte ich mit PWM generieren.

Benötigt SSI zwingend den invertierten Clock-Kanal - dies wäre nicht
ohne weitere Hardware möglich, oder wie genriert man zwei PWM, wobei
ein PWM das invertierte vom anderern ist?
Wie kann ich aber die Datenleitungen (sind wohl in RS485 Standard) mit
einem AD-Wandler auslesen synchron zum Takt, ohne entsprechende
RS485-INterface-Bausteine?

Vielen Dank im voraus für Anregregungen oder Hinweise of mögliche
Denkfehler.

Peter

von Philipp Sªsse (Gast)


Lesenswert?

Habe ich das richtig verstanden: Du hast einen Sensor, dessen SSI (das
ist für mich in erster Näherung eine I2C mit getrennter Hin- und
Rückleitung, oder?) CLK und /CLK braucht? Seltsam, was ist das für ein
Bauteil, warum hat es den Inverter nicht selbst eingebaut?

Sparst Du soviel mit PWM? Mach den Takt doch selbst auf einem O-Pin
(und ggf. den invertierten Takt auf einem zweiten). Dann kannst Du Dir
die Clock per Interrupt machen; immer das Clock-Bit toggeln und auf
fallende Clock die Datenbits auf den Ausgangsport setzen bzw. auf
steigende Flanke Datenbits lesen.

Oder reden wir aneinander vorbei?

von Peter Maier (Gast)


Lesenswert?

Hallo,

mit der getrennten Hin-Und Rückleitung bin ich mir nicht sicher. Ich
denke das Data / Data -, unc Clock / Clock - nur aus Redundanz-Gründen
existieren.
Ich hab eben mit dem Oszi getestet. D.h. der Sensor liefert auch Daten
ohne Clock -. Ich muß also nur einen Takt erzeugen.
Ablauf: Sende 26 Takte in 100 kHz, und bekomme jeweils zur steigenden
Flanke die 25 Bit der Position. Dann beliebige Pause, und wiederholen.

Du denkst DA-Wandler wäre sinnvoller als PWM?

Der 2. Teil meiner Frage ist mir immer noch nicht gan klar:
Ich muß irgendwie die RS485 Daten synchroniziert zum Takt einlesen. Bin
mir nicht sicher, ob ich einen Dig IN verwenden kann.

von Philipp Sªsse (Gast)


Lesenswert?

DA-Wandler statt PWM? Du willst doch nur einen Takt erzeugen, das ist
doch ein einfaches Digitalsignal. Reden wie noch aneinander vorbei?

Zum anderen wird mir langsam klar, daß es sich offenbar um eine
differentiell übertragene SSI handelt, vermutlich lange Leitung? Dann
ist es freilich besser, CLK + und CLK - zu setzen, damit die
Störungsunterdrückung auch funktioniert. Und den RS485-Pegel kannst Du
(wenn galvanischer Bezug gegeben ist und Deine differentiellen
Potentiale nicht außerhalb des Toleranzbereichs vom µC liegen, auf
einen differentiellen Eingang legen, den bieten viele µC nicht zuletzt
für solche Fälle. Falls er keinen hat (wirklich gut im Datenblatt
geschaut? Was ist es denn?), wirklich zwei Analogwerte messen und
schauen, welcher größer ist.

von Peter Mahler (Gast)


Lesenswert?

Hi Peter,


soweit ich weiss, handelt es sich bei dem SSI-Signalen um
differentielle Signale, du hast damit je ein positives un negatives
Bezugspotential.

Hast du das SSI Signal schon mal versucht über die SSI-Schnittstelle zu
lesen ? Dies sollte eigentlich gehen wenn du mehrere Bytes
hintereinander einliest. Der Zeit-Abstand darf zwischen den Bytes max
25uS sein. Eine Pause von 35 uS oder grösser bewirkt am Geber ein
Neubeginn des Datenframes.


Gruss,
Peter

von PeterL (Gast)


Lesenswert?

hallo

als Interfacebaustein reicht ein LS75176, Signale am besten mit
Optokoppler (6N137) von deiner Hardware trennen
SSI (für alle Unwissenden) = synchrones serielles Interface
wird oft bei Längenmesssystemen in der Industrie verwendet,

wenn der Sensor Gray Code liefert, kannst du Ihn mit (lächerlich)
einfacher Zusatzhardware umwandeln (müsste ich aber erst ausgraben)

Peter

von Peter D. (peda)


Lesenswert?

@PeterL

"wenn der Sensor Gray Code liefert, kannst du Ihn mit (lächerlich)
einfacher Zusatzhardware umwandeln"


lächerlich ist daran nur, noch extra überflüssige Hardware zu
verschwenden.

Graycode läßt sich prima in Software in Binär umwandeln.
Entweder mit Tabelle oder mit Logik.

Jedes Bit invertiert alle niederwertigeren, z.B. für 4 Bit:

if( i & (1<<1) ) i ^= 1<<0;
if( i & (1<<2) ) i ^= 1<<1^1<<0;
if( i & (1<<3) ) i ^= 1<<2^1<<1^1<<0;



Peter

von Peter Maier (Gast)


Lesenswert?

Danke für die Hinweise.
Ich denke mit dem Takt bin ich mir jetz klar - dachte nur das PWM
sinnvoll sein könnte, da durch einen FPGA unterstützt -->
Ressourcen-Schonung vom µC.

Die Umrechnung binär-Gray geht auch dirket im µC - ist mir lieber als
Extra-HArdware.

Aber: Rs-485, differential Signal?, sorry - ich steh immer noch auf dem
Schlauch:
Ich habe 2 Datenleitungen, die eine enthält das invertierte Signal des
anderen. D.h. eigentlich habe ich nur eine Datenleitung --> Wie soll
ich  da die Difffernez zwischen zwei Analog-Signalen messen?
Leider habe ich keinen Differenzeingang, und auch keine SSI, RS-485,
etc.

von Philipp Sªsse (Gast)


Lesenswert?

Du verrätst ja leider immer noch nicht, welchen µC Du verwendest und ob
Du durch die Leitungslänge überhaupt auf den differentiellen Eingang
angewiesen bist.

Im Prinzip hast Du ja wirklich eine Leitung mit 5 V aktiv und 0 V
inaktiv und eine zweite, wo es umgekehrt ist. Wenn der Sender direkt
nebenan liegt, reicht vermutlich eine Datenleitung auf einem
Digitaleingang und fertig.

Wenn aber ein paar Kilometer Leitung dazwischen liegen, bringt ein
Aktivpegel mit etwas Glück noch einen rundlichen Peak von 2,51 V auf
der einen Leitung und 2,49 V auf der anderen Leitung zustande, beim
Low-Pegel andersherum. Wenn noch irgendwo eine ordentliche induktive
Störung zuschlägt, vielleicht 4,55 V gegen 4,57 V. Irgendwas. Dem
Differenzeingang ist es egal, solange da noch ein paar Millivolt
dazwischen sind, weiß er, was gemeint ist. Der RS-485-Treiberbaustein
auch.

Mangels Differenzialeingang mußt Du also zwei Analogeingänge nehmen.
Wenn A größer B, hast Du ein High-Signal, sonst low.

Natürlich mußt Du Deine Clock entsprechend langsam machen, damit der
ADC mit der Konversion fertig wird.

von Peter Maier (Gast)


Lesenswert?

Ahh, so langsam wird mir die Sache klarer.
Ich verwende einen 166MHz ARM922T µC, und die Leitungslänge ist < 50
cm, und alles unter Laborbedingungen.
Ich werde also momentan keine Differenz benötigen, insbesondere da ein
Einlesen von negativen Spannungen von meinem AD-Wandler nicht
unterstützt wird.
Also entsprechen die Pegel des Signals high,high,low, etc. direkt dem
Bitmuster des Sensorwertes (in Gray-code)- richtig?

von Peter D. (peda)


Lesenswert?

Auch bei kurzer Leitung würde ich einen standard RS-485 Pegelkonverter
nehmen, z.B. LTC490.
Der macht Dir dann auch die 3V/5V-Anpassung und schützt den ARM gegen
ESD.


Peter

von Philipp Sªsse (Gast)


Lesenswert?

Negative Spannungen wirst Du auch nicht haben, da bleibt eigentlichen
alles zwischen 0 und 5 V, das macht die Sache ja auch so sympatisch
gegenüber RS-232.

Richtig. Nur ob Gray-Code oder nicht, wissen wir nicht, aber das wird
das Datenblatt Deines Sensors wissen.

Peter Mahler muß ich widersprechen, SSI ist m.W. nicht zwangsläufig
differentiell, läßt sich aber differentiell übertragen, wie in diesem
Fall hier offenbar. µC mit Hardware-SSI haben üblicherweise keine
differentielle SSI.

Den Unterschied zwischen SSI, SPI, SCP, Microwire, I2C, TWI und wie sie
alle heißen, habe ich nie verstanden, außer daß SSI getrennte Sende- und
Empfangsleitung für Full-Duplex unterstützt (aber natürlich durch
Brücken des SI und SO auch mit TWI usw. kommunizieren kann).

von Peter Maier (Gast)


Lesenswert?

OK, alles klar. Jetzt gehts ans Auspropieren.

by the way: Das Forum ist klasse!

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.