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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.