PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Sensoren abfragen



LinuxFan
25.04.2005, 08:26
Hi Leute,

eine große Herausforderung :-):

Ich möchte ja meinen Roboter mit einem Mainboard und am Parallelport angeschlossener, selbsterstellter Platine aufbauen.
Nun ergibt sich das folgende Problem: Ich kann schlecht alle Sensoren zusammen am Parallelport anschließen. Somit bräuchte ich eine Art Verteilerstelle, die mir nur bestimmte Sensorendaten an den Parallelport liefert.
Im Endeffekt soll das dann so aussehen:
Der PC gibt aus dem Parallelport z.B. auf den ersten paar Pins folgende Kombination aus: 1011 (= elf). Der Controller auf dem angeschlossenen Board soll dann erkennen, welcher Sensorwert verlangt wird und ihn auf den Eingängen des Parallelports anzeigen.
Ich hoffe, ihr versteht was ich meine. Ich hatte dabei an einen Chip gedacht, in den die Sensoren irgendwie ihre Werte schreiben. Dazu benötige ich nach meiner Auffassung wiederrum einen Taktgeber, der pro Takt von Sensor zu Sensor springt, den Widerstandswert des Sensors in einen A/D-Wandler gibt (pro Sensortyp benötige ich nur einen A/D-Wandler!?) und der A/D-Wandler den Wert mit der Adressierung (z.B. 1011) in den Speicher-IC schickt. Wenn nun der PC die Speicheradresse 1011 des ICs aufruft, sollte dann der Wert an den Parallelport übergeben werden.

Frage: Ist meine Idee so richtig? Wie geht das??

LinuxFan
25.04.2005, 08:49
Das verstehe ich sogar:
http://www.produktinfo.conrad.com/datenblaetter/150000-174999/164925-da-01-en-am28f020.pdf

Auf der 6. Seite sind die Eingänge des Chips beschrieben:
A0-A17 für die Speicheradressierung
DQ0-DQ7 für die Daten
WE für Schreiben/Lesen

Anmerkungen?

Brauche ich nich noch irgendwas wie einen Zähler? Für die Adresseingabe? Der Zähler müsste dann per Taktgeber eins hochzählen und irgendwie zusammen mit dem Wert des aktuelen Sensors in den Speicher-IC geschickt werden...

http://www.ferromel.de/tronic_26e.htm So was?

Zähler: http://www.elektronik-kompendium.de/sites/dig/0212151.htm ?

A/D: http://www.produktinfo.conrad.com/datenblaetter/150000-174999/171026-da-01-en-tlc_548c_tlc_549.pdf

Ich hab mir bereits eine Konzeptschaltung im Deutschunterricht entwickelt :), ich werde sie heute Abend mal hier rein stellen.

Gibt es so etwas wie ein Umschalter-IC? Ich habe ja mehrere Sensoreingänge. Die Sensorleitungen sollten in das IC reingehen und einzeln in eine Ausgangleitung rausgehen. Pro Takt soll dann die nächste Sensorleitung mit der Ausgangsleitung verbunden werden, so dass immer ein Eingang mit dem Ausgang verbunden ist.

Gruß
Victor

LinuxFan
25.04.2005, 19:51
Hi,

so hatte ich mir das vorgestellt (siehe Attachment).
Zur Erläuterung:

Taktgeber gibt Takt (vielleicht so etwas wie 100 Hz).
Zähler zählt bei jedem Takt um eins hoch (binär).
Zusätzlich springt auch dieses imaginäre Umschalter-IC um einen Sesnor nach rechts.
Erläuterung dieses "Umschalt-ICs": Ich suche eine möglichst einfach aufgebaute Schaltung, die es mir ermöglicht, bei jedem Takt einen anderen Eingang mit dem Ausgang zu verbinden, vergleichbar mit einem Lauflicht: Zuerst wird S0 mit dem Ausgang verbunden, beim nächsten Takt ist nur S1 mit dem Ausgang verbunden, dann S2, usw.
Der noch analoge Wert aus dem "Umschalter-IC" (ursprünglich aus den Sensoren wird im A/D-Wandler zu einem 8-Bit-Code umgewandelt und zusammen mit dem Code des Zählers als Adressierung in einem Speicher-IC gespeichert (siehe Datenblatt oben).
Beispiel:
Sensorwert: 10101101 = 173 dezimal = z.B. 30°C vom Temperatursensor (kommt vom Digitalwandler)
Adressierung: 00000010 = 2 dezimal = der 2te abgefragte Sensor (kommt vom Zähler)
Wenn der letzte Eingang des "Umschalt-ICs" erreicht ist, wird der Pin I/O (Lesen/Schreiben) auf "Lesen" gesetzt, damit der PC die Werte aus dem Speicherchip lesen darf. Außerdem wird der Zähler auf Null gesetzt (Reset) und der Takt unterbrochen.
Ich sehe gerade, dass der Transistor für U (Takt zum Unschalter-IC) unsinnig ist, da der Takt ja sowieso unterbrochen wird.
Weiter unten (links) sieht man die 8 Ausgänge des LPT-Ports des PCs (die Leitung, die Dioden und der Transistor (links) bitte wegdenken, auch die sind unsinnig). Wenn man nun auf die Ausgänge die Adresse eines Sensorwerts angibt, wird er auf den I/O - Ports des Speicher-ICs ausgegeben, wenn I (Transistor links) durchschaltet (I/O auf "High" = Lesezugriff). Wenn er nicht durchschaltet, bekommt der Parallelport keine Informationen (nicht auf der Zeichnung enthalten, die Ausgänge des Parallelports bekommen auch noch Transistoren, damit nur Werte nach aussen gegeben werden, wenn Lesezugriff besteht).

Jetzt fragen sich vielleicht einige: Warum Lesebeschränkung? Ganz einfach: Man kann bei dem Speicher-IC nur lesen ODER schreiben, die Ports A0 bis A7 (A/D-Wandler->Speicher) werden sowohl als Eingänge als auch als Ausgänge benutzt, je nach Stand vom Pin "I/O". Bis nun alle Sensorwerte des Roboters im Speicher-IC sind, verstreicht natürlich Zeit (Bei 20 Sensoren und einer Taktfrequenz von 100 Hz sind dies 0,2 Sekunden). In dieser Zeit kann der PC die Speicherwerte des ICs nicht lesen, da - wie gesagt - die Pins des ICs lesen ODER schreiben aufeinmal können. Nach den 0,2 Sekunden wird nun der IC für den Lesezugriff geöffnet und der PC kann die Sensordaten lesen.
Nicht auf meiner Skizze: Nach der Zeit, die zum Schreiben benötigt wird, gibt es eine Taktunterbrechung, die wiederrum nur einige Zeit andauert. In dieser Unterbrechungsphase darf der PC die Daten der Sensoren lesen (geht ja relativ schnell).

Lest es euch ein paar Mal durch, ich hoffe IRGENDJEMAND versteht, was ich will.
Das einzige Problem, was ich habe: Ich brauche so einen "Umschaltschaltkreis", der mir bei jedem neuen Takt einen neuen Eingang auf den Ausgang des Schaltkreises legt.
Oder ihr sagt: Das ist alles schwachsinn, das macht man anders! Dann sagt es mir bitte!!!

Danke im Voraus, euer
Victor

Klaus_0168
25.04.2005, 20:24
Hi Linuxfan,

was Du suchst, ist ein Analog Multiplexer. Die gibt es bis zu 10(?) Kanäle. Ein Beispiel ist der MAX358 als 8-kanaliger Multiplexer. CMOS-IC's der 40'er und 45'er - Serie sowie 74'er (eigentlich Digital-IC's) sind auch erhältlich. Per Digitalsignal wird ein Analogeingang ausgewählt, der auf einen Analogausgang durchgeschaltet wird.

Schau einfach mal bei www.maxim.de oder www.linear.com vorbei.

Gruß Klaus

LinuxFan
25.04.2005, 20:44
Genau das ist es was ich suche! DANKE VIELMALS! :D

Falls jemand Interesse hat, kann ich ja mal mit Eagle ein Schematic machen und ein bisschen Beispielcode zur Ansteuerung posten :)

Danke!

Gruß
Victor

LinuxFan
25.04.2005, 21:14
Ähhm, allgemeine Frage:

Wie geben ...
- Ultraschallsensoren (Abstandssensoren)
- Vibrationssensoren
- Temperatursensoren
... ihre Werte denn aus? Über eine Spannung oder über einen Widerstand? Diese ganzen A/D-Wandler sind nämlich so beschrieben, dass der digitale Wert aus der Spannung berechnet wird. Oder ändert sich mit dem Widerstand auch die Spannung? Doch eigentlich nur, wenn Strom gezogen wird, oder?

Klaus_0168
25.04.2005, 21:58
Hi LinuxFan,

das ist von Sensor zu Sensor unterschiedlich. Es können außer Spannungen und Widerstände auch z.B Kapazitäten oder digitale Signale sein. Sharp-Abstandssensoren geben Spannungen aus, Pt100 (Widerstandsthermometer) Widerstände und einige Gassensoren und Inkliometer Kapazitäten. Die einzige Quelle der Information ist das Datenblatt zum Sensor.

Die Ausgänge von Sensoren und Wandler darf den Messwert nicht verfälschen (sie tun es auch in gewissen Grenzen nicht). Sonst käme es ja zu Fehlmessungen. Bedenke jedoch, das Messsignale nicht zu hoch belastet werden sollten. Messwertaufnehmer (Sensoren) arbeiten am genauesten, wenn sie so gut wie unbelastet betrieben werden. In den Datenblätter stehen die Minimal - und Maximalwerte für Strom, Spannung etc. am Signalein und -ausgang. Maximalwerte sollten jedoch nur im Notfall erreicht werden. Wenn mal mehr Leistung gebraucht wird kann man immer noch Verstärker einsetzen.

Grüße Klaus

LinuxFan
25.04.2005, 22:15
Hi Klaus,

wieso sollte ich die Sensoren denn so stark belasten wollen?
Ihr spezifisches Signal muss ja nur verarbeitet werden.

Kann ich nun einen Sensor, der einen Widerstandswert ausgibt und einen Sensor, der eine Spannung ausgibt zusammen verarbeiten lassen oder muss ich dafür getrennte A/D-Wandler benutzen? Ich habe lediglich A/D-Wandler gefunden, die Spannungswerte umwandeln.
Nach dem Ohmschen Gesetz glaube ich doch, dass wenn ein Sensor seinen Widerstandswert verändert und dies in einem geschlossenen System passiert, in dem natürlich immer ein gewisser Strom fließt, sich auch die Spannung verändert, oder liege ich damit daneben?
Natürlich weiß ich auch, dass A/D-Wandler und diese tollen Multiplexer, über die ich mich immer noch wahnsinnig freue (:D), nur eine bestimmte Spannung an den Eingängen vertragen. Da in diesem System wiederrum ein kleiner Strom fließt, kann man ja dort die Spannung mit Widerständen runtersetzen. Wenn es zu solchen Konflikten kommen würde, in denen die Sensorspannung zu hoch wäre (was ich nicht glaube), würde ich dafür natürlich Widerstände mit kleinstmöglicher Toleranz verwenden, damit das Messergebnis nicht unnötig verfälscht wird.
Ich schätze auch, dass ich bei allen Sensortypen eine Messreihe aufstellen muss, d.h. z.B. bei Abstandssensoren 30 cm Abstand (durch eine Platte o.ä.) und den digitalen Wert aufschreiben, dann 20 cm usw., so dass ich den digitalen Werten auch die entsprechenden Formeln zuweisen kann, die wiederrum den Messwert wiedergeben.

Gruß
Victor

uwegw
25.04.2005, 22:25
Kann ich nun einen Sensor habe, der einen Widerstandswert ausgibt und einen Sensor, der eine Spannung ausgibt zusammen verarbeiten lassen oder muss ich dafür getrennte A/D-Wandler benutzen? Ich habe lediglich A/D-Wandler gefunden, die Spannungswerte umwandeln.
du schaltest den sensor-widerstand mit einem normalen festwiderstand in reihe zwischen plus und minus. am gemeinsamen punkt der beiden widerstände greiftst du dann die messpannung ab, die vom verhältnis der beiden widerstandswerte abhängt...

Klaus_0168
25.04.2005, 23:03
Hi all,
@ LinuxFan :
Mit Deinem letzten Posting liegst Du goldrichtig!! Messreihen geben Dir die Möglichkeit einer Linearisierung per Software. Diese Art der Linearisierung sollte jedoch mit der entsprechenden Hardware verhindert werden.
Wenn Du irgendein Signal umwandeln willst, dann bedenke immer, welches Signal Du hast und was für ein Signal benötigt wird. Versuche dabei immer einen direkten Weg zu gehen.
Um Widerstände in Spannungen umzuformen kannst Du Konstantstromquellen oder Konstantspannungsquellen verwenden. Der Rest ist Ohmschen Gesetz.



du schaltest den sensor-widerstand mit einem normalen festwiderstand in reihe zwischen plus und minus. am gemeinsamen punkt der beiden widerstände greiftst du dann die messpannung ab, die vom verhältnis der beiden widerstandswerte abhängt...

@uwegw :
Mit Deiner Festwiderstands-Methode gibst Du der Linearität den Todesstoss. Es ist besser, wenn Du statt dessen einen nicht invertierenden Verstärker verwendest.

Gruß Klaus