Forum: Mikrocontroller und Digitale Elektronik Signal invertieren


von Michael L. (fliegermichl)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte im µC ein serielles Signal mit dem UART einlesen. Da das 
Signal invertiert ankommt, habe ich einen Transistor als Signalinverter 
vorgeschaltet.

Das funktioniert zwar, aber die invertierte Signalform ist nicht so 
exakt rechteckig wie das originale Signal.

Kann mir jemand sagen woran das liegt?

Gruß
 Micha

von Cyblord -. (cyblord)


Lesenswert?

Michael Läßig schrieb:
> Hallo,
>
> ich möchte im µC ein serielles Signal mit dem UART einlesen. Da das
> Signal invertiert ankommt, habe ich einen Transistor als Signalinverter
> vorgeschaltet.
>
> Das funktioniert zwar, aber die invertierte Signalform ist nicht so
> exakt rechteckig wie das originale Signal.
>
> Kann mir jemand sagen woran das liegt?
>
> Gruß
>  Micha

Das untere Signal hat halt ne höhere Spannung. Das sieht doch alles sehr 
gut aus. Wo ist denn dein Problem? Das bisschen abgeschliffene Ecken? 
Mach halt mal den Basiswiderstand kleiner.

von Michael L. (fliegermichl)


Lesenswert?

Hallo,

ja, das Eingangsignal kommt invertiert mit einem Pegel von 3V und der 
Transistor bekommt über den Pullup Widerstand 5V, die dann dem RxD Pin 
des µC zugeführt werden.

Mich stört, daß die steigende Flanke in der Nähe von 5V langsamer 
steigt.

Klar funktioniert die Schaltung. Ich möchte nur gerne verstehen, weshalb 
das invertierte Signal nicht so exakt ist, wie das Eingangssignal.

Beeinflusst der Wert des Basiswiderstandes die Zeit, welche der 
Transistor von "fast gesperrt" bis "ganz gesperrt" braucht?

Die Widerstandswerte für R1 und R2 habe ich aus einer anderen Schaltung 
abgeschaut. Bei den Beispielen und Erklärungen zur Berechnung des 
Basiswiderstandes muß man den zu schaltenden Strom kennen.

Soweit ich weiss, nimmt sich aber ein InputPin gar nicht so viel Strom.
Wie kann man dann den Basiswiderstand berechnen?
Nur den durch R2 und die CE Strecke fließenden Strom annehmen?

Gruß
 Micha

von al3ko (Gast)


Lesenswert?

Hallo,

nicht wirklich hilfreich, aber mir scheint, als dass der Tastkopf nicht 
richtig abgeglichen ist? Oder täuscht das?

von Piefke (Gast)


Lesenswert?

Wenn der eine Weg nicht geht, würde ich mal den anderen probieren, 
nämlich den Basiswiderstand zu erhöhen. Immerhin scheint der Transistor 
schnell genug zu leiten, da die fallenden Flanke des Ausgangssignals 
volle Steilheit hat. Das Problem scheint eher zu sein, dass der 
Transistor beim Sperren langsamer ist. Mein laienhafte Erklärung dafür 
wäre, dass der Transistor nicht so schnell aus der Sättigung heraus 
kommt, was man vielleicht lösen könnte, indem man ihm weniger Basisstrom 
verpasst. (Nur eine Vermutung!)

Ein ganz anderer Ansatz wäre, den Fehler in unerwünschten Kapazitäten in 
der Ausgangsleitung zu suchen. Das entladen selbiger durch den 
Kondensator scheint ja recht flott zu gehen, nur das Aufladen über den 
Kollektor-Widerstand verlangsamt sich bei Näherung an die Zielspannung, 
was einer Ladekurve eines Kondensators ähnelt. Daher würde ich auch mal 
ausprobieren, ob ein geringerer Widerstand am Kollektor die obere linke 
Ecke des Ausgangssignals kantiger werden lässt.

von Michael L. (fliegermichl)


Lesenswert?

Hallo,

doch, die Tastköpfe sind beide richtig eingestellt.

Das mit dem Erhöhen des Basiswiderstandes könnte stimmen.
Kondensator ist hier keiner beteiligt. außer R2 ist am Kollektor nur der 
InputPin des Controllers angeschlossen.

Ich habe jetzt mal einen Verstärkungsfaktor von 20 angenommen.
Wenn man den Strom, der in den Inputpin fließt mal vernachlässigt,
dann fließen durch R2 (10K) bei VCC=5V 0.0005A.

Der benötigte Basisstrom errechnet sich laut Basiswiderstand aus Ic 
/ hFE

= 0.0005 / 20 zu 0.000025.

Der Basiswiderstand errechnet sich aus (Ue - 0.7) / Ib =
(3 - 0.7) / 0.000025 zu ca. 92K

Das werde ich mal ausprobieren.

Gruß
 Micha

von nacht (Gast)


Lesenswert?

Ich hatte vor einiger Zeit das gleiche Problem und habe es einfach in 
Software geloest. Serielles Signal an einen Eingang der auf Flanken des 
Signales einen Interrupt ausloest. Auf einem anderen Pin das invertierte 
Signal ausgegeben. Diesen Pin dann mit dem USART des Controllers 
verbunden.

Laeuft bei mir problemlos und war in meinem Fall die guenstigste 
Loesung. Alles andere haette eine zusaetzliche Platine erfordert, so 
haben ein paar Draehte gereicht die so aehnlich sowieso in das Geraet 
rein mussten.

Bitte steinigt mich nicht fuer diesen Ansatz ... :-)

von Piefke (Gast)


Lesenswert?

al3ko schrieb:
> dass der Tastkopf nicht richtig abgeglichen ist?

Dazu fällt mir noch ein:
Ich würde mal den /10 Vorteiler am Tastkopf einschalten, und schauen, ob 
sich das auf die Signalform auswirkt.

von Piefke (Gast)


Lesenswert?

Piefke schrieb:
> Das entladen selbiger durch den
> Kondensator

Michael Läßig schrieb:
> Kondensator ist hier keiner beteiligt.

Ich meinte auch Transistor. Sorry!

von dolf (Gast)


Lesenswert?

ich würde dafür nen ss216d oder ss218d aus ddr produktion nehmen.
die sind extra da für gemacht worden.
und dann ne schottkydiode von b nach c legen.
katode an collektor..
das verringert die sättigung.
das macht man auch bei 74ls so und nennt sich dann schottkytransistor.
mfg

von Matthias L. (Gast)


Lesenswert?

>Mein laienhafte Erklärung dafür
>wäre, dass der Transistor nicht so schnell aus der Sättigung heraus
>kommt, was man vielleicht lösen könnte, indem man ihm weniger Basisstrom
>verpasst. (Nur eine Vermutung!)

Diese Vermutung ist richtig. Das nennt sich Speicherzeit.

Ist ein Problem bei Emitterschaltungen. Der zu hohe Basisstrom 
(gegenüber dem, der für den Kollektorstrom und der Stromverstärkung 
benötigt wird) sorgt für eine Sättigung der B-E Strecke. Beim Sperren 
müss diese Sättigung erstmal abgebaut werden. Das kostet Zeit.
Um das zu lösen, könntest du, wie schon gesagt,
- den Basisstrom verkleinern, den Kollektrostrom erhöhen,
- ein (Ge)-Diode zwischen B und C bauen, (verhindert Sättigung)
- einen kleinen C parallel zum Vorwiderstand bauen,
- ein Logik-Gatter zur Negation nehmen,
- den Inverter mit einen P und einem N-Fet aufbauen
- ...

von Achim M. (minifloat)


Lesenswert?

Schottkydiode von Basis nach Emitter => Ausräumzeit beim Ausschalten 
kleiner, allerdings Ausgangsseitig um 0,3..0,4V höherer Lowpegel, das 
stört aber i.A. nicht.

Basis über einen Spannungsteiler ansteuern => niederohmigere 
Ansteuerung, "sicheres" Low, wenn der µC noch keine Spannung hat und der 
Portpin noch nicht initialisiert ist

mfg mf

von Michael L. (fliegermichl)


Angehängte Dateien:

Lesenswert?

Hallo,

eher nicht. Ich hatte keinen 92K Widerstand da also hab ich 100K 
versucht.
Da wird es noch schlechter (siehe Bild).

Gruß
 Micha

von dolf (Gast)


Lesenswert?

eventuell hilft es wenn du nen transi nimmst der geringe kapazitäten 
aufweist und ne hohe stromverstärkung hat.
hf typ ?!?
dazu ne schottkydiode von b nach c.
und dann den basisstrom auf das notwendige begrenzen.
mfg

von Julian B. (julinho)


Lesenswert?

Warum simulierst die Schaltung nicht mit z.B. swcad, da kannst Du 
innerhalb kurzer Zeit verschiedene Widerstandskombinationen testen, und 
mußt nicht ewig rumlöten.
Bei einfachen Schaltungen sind die Ergibnisse sehr realitätsnah.

Gruss

von da1l6 (Gast)


Lesenswert?

Hallo

Dein Signal wird passiv über den 10K Widerstand auf 5V gezogen. Weil der 
Widerstrand so groß ist dauert das etwas und die steigende Flanke ist 
nicht mehr eckig. Mach den Pullup kleiner dann sieht es besser aus.

da1l6

von Michael L. (fliegermichl)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich bin doch kein Simulant :-)
Spaß beiseite, wenn es so weitergeht, werde ich das wohl auch machen.

Ich hab jetzt mal noch parallel zu dem Basiswiderstand einen 100p C 
gesetzt.
Da ändert sich nicht viel, außer daß jetzt auch die fallende Flanke 
nicht mehr so steil ist.

Ich denke, ich werde die 4k7 wieder einbauen und damit leben, daß der 
Transistor gut gegessen hat und satt ist.

Es funktioniert ja, der UART liest das Signal einwandfrei ein.
Mich hatte ja auch nur die Ursache interessiert.

von Anja (Gast)


Lesenswert?

Michael Läßig schrieb:
> Kann mir jemand sagen woran das liegt?

Klar: an der Basis-Kollektor Kapazität des Transistors und der daraus 
resultierende Sperrverzögerungszeit.
Um das zu verringern müßtest Du negative Spannungen an deinem Eingang 
erzeugen.
Falls die Eingangsbeschaltung vor dem Inverter eine Push-Pull 
Beschaltung hat geht eventuell auch ein kleiner Kondensator parallel zu 
R1.
Ich würde bei 4K7 mit ca 1 - 2,2nF anfangen und dann optimieren.

Gruß Anja

von Michael L. (fliegermichl)


Angehängte Dateien:

Lesenswert?

Hallo,

so, ich hab den Pullup jetzt mal auf 4k7 reduziert. Aus der Berechnung 
ergibt sich ein Basisvorwiderstand von 46k. Hab ich nicht, also 47K 
eingebaut.

Im Anhang das Ergebnis. Mir scheint, daß das Problem mit kleiner 
werdendem Basiswiderstand geringer wird und das obwohl es eigentlich 
andersherum sein müsste.

von Stampede (Gast)


Lesenswert?

Mach mal den Pullup noch kleiner, zB 1k.
Allerdings verstehe ich das Problem nicht. Außer dass es vielleicht auf 
dem Oszi "schöner" aussehen könnte funktioniert die Schaltung gut und 
die Signale sind auch nicht zu beanstanden.

von Stampede (Gast)


Lesenswert?

Vielleicht könntest du die Rise / Fall Times auch mal messen?

von Piefke (Gast)


Lesenswert?

100 K sind jetzt ein bisschen viel.
Hast Du noch irgendwo ein Poti herumliegen, das Du als Basiswiderstand 
einsetzen kannst? Dann kannst Du auf dem Oszi beobachten, wie sich zur 
Drehung des Potis die Kurvenform ändert.
Das gleiche gilt natürlich für den Kollektor-Widerstand.
Das interessiert mich jetzt auch. Wenn ich wieder beweglich genug bin, 
werde ich das mal ausprobieren.

von Frank K. (fchk)


Lesenswert?

Warum nimmst Du nicht das hier?

http://www.nxp.com/documents/data_sheet/74HC_HCT1G04.pdf

Diese Logik-Bausteine haben Push-Pull-Treiber, d.h. hier wird das 
Ausgangssignal von komplementären Transistoren entweder nach unten oder 
nach oben gezogen. Bei Deiner Schaltung kann der Transistor nur hart 
nach Ground durchschalten. In Richtung Vcc gibts nur einen 
Pullup-Widerstand, und der zieht eben nicht so stark wie ein 
durchgeschalteter PNP bzw PMOS-Transistor eines normalen 
Logik-Pin-Treibers.

fchk

von Wolfgang (Gast)


Lesenswert?

Stampede schrieb:
> Allerdings verstehe ich das Problem nicht. Außer dass es vielleicht auf
> dem Oszi "schöner" aussehen könnte funktioniert die Schaltung gut und
> die Signale sind auch nicht zu beanstanden.

Die Verkürzung der High-Pegel wird erst dann zum Problem, wenn die 
Baudraten von Sender- und Empfänger-UART nicht übereinstimmen oder sich 
die Erkennung der Flanke des Startbits (z.B. auf Grund einer längeren 
Leitung) verzögert. Dann liegt der Abtastzeitpunkt beim Empfänger nicht 
mehr in der Bitmitte und es können vermehrt Übertragungsfehler 
auftreten.

von spess53 (Gast)


Lesenswert?

Hi

Wo kommt den dieses 'invertierte' Signal mit 3V her?

MfG Spess

von Michael L. (fliegermichl)


Lesenswert?

Hallo,

Das Signal kommt von einem Futaba S.Bus Empfänger (R6308SBT).

Mir ist eben nur aufgefallen, daß der Empfänger ein astreines 
Rechtecksignal liefert, daß durch meine Invertierung nicht mehr ganz so 
astrein ist.

Im hier vorliegenden Fall ist das sicher nicht problematisch. Das Signal 
kommt mit 100 KBd. Mein Prozessor ist mit 8 Mhz Quarz getaktet. So kann 
ich das Baudratenregister mittels UBRRL = (F_CPU / (16 * 100000)) - 1; 
ziemlich exakt auf 100 KBd einstellen.

Im Datenblatt sind Beispiele aufgeführt, wo die Baudrate teilweise über 
8,5% vom Soll abweicht und die Übertragung wahrscheinlich trotzdem noch 
funktioniert. Die Bits sind immerhin 10 Mikrosekunden breit, was bei 8 
Mhz 80 Takten entspricht.

Gruß
 Micha

von HildeK (Gast)


Lesenswert?

Zusammenfassung der für dieses Problem wichtigen Statements aus den o.g. 
Antworten:

Der beste Weg ist die Verwendung eines HCT04, der mit 5V betrieben wird.
Wenn du unbedingt den Transistor verwenden willst, dann:
- Arbeitswiderstand am Kollektor deutlich kleiner, 1k oder sogar weniger
- Basiswiderstand auch klein, 1k ... 5k, ev. mit 100pF parallel
- Schottkydiode von B nach C. Die verhindert ein zusätzliches Delay bei 
der negativen Eingangsflanke, weil sie den Transistor vor der Sättigung 
bewahrt. Nachteil: Der LOW-Pegel am Ausgang wird etwas ansteigen. Man 
könnte mit 20Ω...100Ω (mit Poti testen) den optimalen Wert zwischen 
kleinem Delay und kleinem LOW-Pegel finden.

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.