Forum: Analoge Elektronik und Schaltungstechnik Analoge Spannung skalieren


von Tobias S. (x12z34)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich würde mich (mal wieder) über Eure Hilfe freuen...

Erstens: Sorry, einen intelligenteren Tital habe ich nicht finden 
können...
Zweitens: Ich habe zwar gesucht, aber habe ich ein passendes Thema 
übersehen?

Ich bin gerade dabei, die 1001. brushed-DC-Motortreiber-Platine zu 
entwerfen.
Zum größten Teil ist der Schaltplan fertig, doch es gibt eine Sache,
bei der ich gewaltig auf dem Schlauch stehe...

Gegeben sei ein mit 5V laufender Mikrocontroller (in meinem Fall konkret 
ein PIC18F47K42).
Dieser muss mit einer externen Steuerung digitale und analoge Signale 
austauschen.

Dabei soll meine Platine mit 5V und 3V3 Steuerungen zusammenarbeiten 
können.
Somit ist bei 3V3 Steuerungen ein Pegelwandel nötig, bei 5V Steuerungen 
nicht...
Die Pegelwandlung soll dabei automatisch funktionieren,
ohne dass auf meiner Platine ein Schalter umgelegt oder ein Jumper 
gesteckt wird.
Denn das werde ich über kurz oder lang vergessen, ich kenne mich selbst 
zu gut ;-)

Bei den digitalen Signalen funktioniert das bereits (74LVC2T45 und Co. 
lassen grüßen)
Nur bei den analogen Signalen kommt mir meine Lösung etwas umständlich 
und fehleranfällig vor.

Daher wäre meine Bitte, dass Ihr Euch meine Lösung mal zu Gemüte führt.
Sie beruht auf dem folgenden Gedankengang:

Schaut auch bitte in den Anhang, ich habe versucht, den Schaltplan 
bestmöglich zu kommentieren...

- Mit einem Comparator mit open-Drain Ausgang vergleiche ich das 
Spannungslevel der externen
Steuerung mit dem Spannungs-Level meiner Platine
- Ist das externe Level geringer, schaltet der Komparator durch und 
verbindet das untere "Bein"
eines Spannunsgteilers mit Masse, sodass der Spannungsteiler 
"funktioniert" und das Signal passend
skaliert.
- Arbeitet die externe Steuerung mit dem gleichen Level, schaltet der 
open-drain Ausgang des Komparators
nicht durch. Der Spannungsteiler hat keine Funktion mehr, das Signal 
wird nicht skaliert.
Es ist zwar ein zusätzlicher Widerstand im Signalweg, doch der sollte 
nicht stören...

Wie gesagt, schaut bitte in den Anhang, da wird das alles klarer, hoffe 
ich.


Habe ich grobe Schnitzer eingebaut oder besteht die Chance, dass das 
Konstrukt funktionieren wird?
War ich total auf dem Schlauch gestanden, als ich das "entwickelt" habe?

Gibt es vielleicht eine einfachere Variante?
Wie gesagt, die manuelle Auswahl über Jumper oder Schalter, mit welchem 
Pegel der Datenaustausch
stattfinden soll, will ich nur, wenn alle anderen Stricke reißen...

Vielen Dank für Eure Mühen schonmal im Voraus ;-)

Grüße
  x12z34 / Tobias

von Joe F. (easylife)


Lesenswert?

Kann funktionieren, habe ich früher auch so gemacht, bis ich auf den 
Trichter kam: lohnt alles nicht.
Viel einfacher und genauer ist es, die Eingangs- und Ausgangsstufen für 
5V zu designen, und einen DAC/ADC mit einem Bit mehr Auflösung zu nehmen 
(wenn er nicht ohnehin schon genügend Auflösung hat).
Das skalieren passiert dann in der Software.

von Tobias S. (x12z34)


Lesenswert?

Vorab: Danke, dass Du den Schaltplan überflogen hast. Ich gehe, da Du 
nichts Gegenteiliges gesagt hast, davon aus, dass keine "kapitalen 
Böcke" enthalten sind. Es ist schön zu wissen, dass ich beim 
"Entwickeln" nicht völligst versagt habe ;-)
Auch wenn ich es, wie weiter unten beschrieben, dann doch nicht brauchen 
werde, denn:

Joe F. schrieb:
> [...]lohnt alles nicht.

Weißt Du was: Ich denke, Du hast recht.
Ich habe mal eine Nacht über Deine Antwort geschlafen und bin jetzt der 
Meinung, dass ich es wohl wirklich etwas komplizierter gemacht habe als 
nötig...

Ich habe mich jetzt für den folgenden Weg entschieden:
Auf meinem Board messe ich zusätzlich zu dem eigentlichen analogen 
Signal auch noch die Spannung, mit der die externe Logik läuft. Dann 
kann ich - wie Du schon schriebst - in Software korrelieren, was der 
digitale Wert sein soll.
Ein 3V Signal von einer 5V Steuerung entspricht dann einem anderen Wert 
als ein 3V Signal von einer 3V3 Steuerung.
Oder ich schreibe - alternativ - die Software so, dass nur ein 0..3V3 
Bereich ausgewertet wird: Sowohl 5V also auch 3V3 Logik müssten dann ein 
0..3V3 Signal übermitteln. Wäre dann zumindest einheitlich...

Ich habe nun nochmal nachgerechnet und mich entschieden, dass alle 
analogen Signale, die auf dem Board erzeugt werden und nach extern 
geschickt werden sollen, auf 3V3 skaliert werden.
Das macht das Interface mit der externen Logik einfacher, ich brauche 
keine Hardware-Skalierug mehr.
Die 3V3 Logik bekommt jetzt ein "Vollbereichssignal". Die 5V Logik 
bekommt zwar "nur" 60% davon, doch das ist - wie Du schriebst - weniger 
als ein Bit Verlust in der Auflösung. Damit kann ich leben.

Das muss ich jetzt jedoch gut dokumentieren, sonst habe ich das in einem 
Jahr vergessen, und wundere mich dann, warum ich bei einer 5V-Steuerung 
nur ein 3V3 analoges Signal herausbekomme, hehe ;-)

Vielen Dank für Deine Antwort und die Zeit, die Du Dir genommen hast.

Grüße
  x12z34/Tobias

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.