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
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.
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
Eine eigene Frage?
Dieser Thread ist über 8 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.