Hallo zusammen, ich generiere auf meinem Arduino ein 1MHz PWM (50%) und möchte das Signal von den gelieferten 5V auf 12V oder 24V bekommen, um dieses über eine industrielle DI-Karte auszuwerten. Ich habe eine einfache Emitter-Schaltung mit einem gängigen NPN-Transistor probiert, aber der scheint mit der hohen Frequenz nicht klarzukommen, zumindest das Ausgangssignal ist alles andere als ein PWM Signal. Ich habe auch einen kleinen Kondensator parallel zum Basiswiderstand gesetzt um die Basis schneller freiräumen zu können, hat aber auch nichts gebracht... Welche Methode eignet sich am besten? Ich wäre über eure Vorschläge sehr dankbar. Viele Grüße Manuel
:
Bearbeitet durch User
Manuel B. schrieb: > Ich habe eine einfache Emitter-Schaltung mit einem gängigen > NPN-Transistor probiert Nein, es gibt fertige Bausteine dafür. Z.B. MOSFET Drivers.
Manuel B. schrieb: > Ich habe eine einfache Emitter-Schaltung mit einem gängigen > NPN-Transistor probiert, aber der scheint mit der hohen Frequenz nicht > klarzukommen, zumindest das Ausgangssignal ist alles andere als ein PWM > Signal. 1Mhz ist für heutige Transistoren überhaupt kein Problem, es scheint, das du viel zu hochohmige Basis- und Kollektorwiderstände benutzt. Um den Transistor nicht allzusehr in die Sättigung zu treiben, solltest du per Basisspannungsteiler auf etwa 1V an der Basis begrenzen, also z.B. 390 Ohm zu 100 Ohm an der Basis und 1k - 2,2k als Arbeitswiderstand, dann sollte es klappen. An der Basis kannst du versuchsweise auch einen 500 Ohm Trimmer einsetzen (Schleifer zur Basis) um gute Werte auszuprobieren.
:
Bearbeitet durch User
@ Manuel Bayer (manuwestern) >Welche Methode eignet sich am besten? Nimm einen fertigen Pegelwandler. Bis 15V gehen MOSFET-Treiber und HEF4104, darüber muss man etwas suchen. 1 MHz und 24V ist eher ein Widerspruch, es sei denn, man will einen MW-Sender bauen ;-)
Manuel B. schrieb: > um dieses über > eine industrielle DI-Karte auszuwerten. Was willst Du denn daran auswerten?
Ich versuche mit einem Arduino einen Drehwinkelgebersimulator zu bauen, also es sollen zwei PWM - Signale (A,B), die gegeneinander 90° phasenverschoben sind, an jeweils einem DO ausgegeben werden und zusätzlich soll eine weitere kurze HIGH-Flanke (Z) an einem dritten DO ausgegeben werden, sobald eine bestimmte Anzahl an PWM-Flanken gezählt wurden. Die Signalerzeugung habe ich soweit hinbekommen, ich muss nur die 5V auf ca.12V bringen um dieses dann an die DI-Eingänge einer Messkarte legen zu können. Die DOs müssen also keine Leistung liefern. Ein weiteres Problem ist für mich die Erzeugung des Z-Signals, während ich auf dem Timer1 des ATMEGA328 die PWM-Signale erzeuge, möchte ich diese mitzählen um dann, wie erwähnt, eine kurze HIGH-Flanke an einem DO auszugeben.. Wobei die Dauer der HIGH-Flanke nicht fix sein soll, sondern die gleiche Länge haben soll, wie die HIGH-Flanke des PWM-Signals. Vielleicht kann ich über eine ISR die PWM-Flanken mitzählen und kurzzeitig einen weiteren Timer (Timer0 oder Timer2) bei Erreichen aktivieren, welcher mir dann ein HIGH-Signal am entsprechenden DO ausgibt und dann über die dazugehörige ISR diesen Timer wieder deaktivieren? Aber das passt jetzt nicht zum Threadtitel... Danke für die Hilfestellungen. Grüße
:
Bearbeitet durch User
@Manuel Bayer (manuwestern) >Ich versuche mit einem Arduino einen Drehwinkelgebersimulator zu bauen, >also es sollen zwei PWM - Signale (A,B), die gegeneinander 90° Das sind keine PWM-Signale sondern phasenverschobene Signale. Bei PWM ändert sich das Tastbverhältnis, beim Drehgeber eher nicht. >Die Signalerzeugung habe ich soweit hinbekommen, ich muss nur die 5V auf >ca.12V bringen um dieses dann an die DI-Eingänge einer Messkarte legen >zu können. Die DOs müssen also keine Leistung liefern. Um du bist sicher, daß dort bis zu 1 MHz anliegen? BEi 12V? Oder gar bei 24V? >auszugeben.. Wobei die Dauer der HIGH-Flanke nicht fix sein soll, >sondern die gleiche Länge haben soll, wie die HIGH-Flanke des >PWM-Signals. Kriegt man hin, aber bei 1 Mhz wird das etwas kniffelig. >Vielleicht kann ich über eine ISR die PWM-Flanken mitzählen und Bei 1 MHz? Eher bei 100kHz.
Falk B. schrieb: > Das sind keine PWM-Signale sondern phasenverschobene Signale. Bei PWM > ändert sich das Tastbverhältnis, beim Drehgeber eher nicht. Stimmt, die Formulierung ist nicht richtig. Ich arbeite ausschließlich mit einem konstanten Tastverhältnis von 50%, ich nutze aber die PWM-Signalerzeugung der Timer, daher die Begrifflichkeit. Falk B. schrieb: > Um du bist sicher, daß dort bis zu 1 MHz anliegen? BEi 12V? Oder gar bei > 24V? 24V ist zu viel, aber 10-12V sind realistisch, denn viele Drehwinkelgeber sind einstellbar bis zu ca. 8000 Pulse/Umdrehung, bei einem E-Motor beispielsweise, der sich mit bis 10.000 U/min bzw. 166,66 U/sek bewegt kommen schnell Signalfrequenzen von über 1MHz zustande. Die DI-Karte von National Instruments erfasst 10V-Logik-Signale, diese werden wiederrum über einen FPGA erfasst und ausgewertet. Letztlich soll der Drehwinkelgebersimulator dazu dienen, diese HighSpeed-Datenerfassung des FPGAs zu testen, ohne gleich eine große HIL-Umgebung zu benötigen. Grüße
:
Bearbeitet durch User
@Manuel Bayer (manuwestern) >24V ist zu viel, aber 10-12V sind realistisch, denn viele >Drehwinkelgeber sind einstellbar bis zu ca. 8000 Pulse/Umdrehung, bei >einem E-Motor beispielsweise, der sich mit bis 10.000 U/min bzw. 166,66 >U/sek bewegt kommen schnell Signalfrequenzen von über 1MHz zustande. Die Mathematisch alles richtig, praktisch eher nicht. Die hochdrehenden Drehgeber haben eher RS422 Ausgänge, die arbeiten differentiell mit 5V. 10V und mehr sind eher "langsame" mit ein paar Dutzend kHz. Das solltest du berücksichtigen und dementsprechenende Treiber wählen. Siehe oben. >DI-Karte von National Instruments erfasst 10V-Logik-Signale, diese >werden wiederrum über einen FPGA erfasst und ausgewertet. D.h. hinter dem 10V Eingang sitzt wieder ein Pegelwandler, welche die Signale in 3,3V oder weniger für den FPGA umwandelt ;-) >der Drehwinkelgebersimulator dazu dienen, diese HighSpeed-Datenerfassung >des FPGAs zu testen, ohne gleich eine große HIL-Umgebung zu benötigen. Schon klar. Wenn es WIRKLICH bis 1 MHz gehen soll, muss man es in ASM ohne Interrupts machen, dann geht das gerade noch so. Über eine passende Statemachine kriegt man dann auch das Z Signal hin. Allerdings bleibt dann von der Arduino-Software nicht mehr viel übrig ;-)
Manuel B. schrieb: > Vielleicht kann ich über eine ISR die PWM-Flanken mitzählen Du träumst. 1MHz bei F_CPU = 16MHz sind nur 16 Zyklen Zeit, das ist rein gar nichts. Eine leere ISR kostet schonmal 10 Zyklen. Code ausführen benötigt Zeit. Du wirst mit Deinem poplichen AVR dem FPGA nicht das Wasser reichen können. Sicher, daß die Encoder wirklich 10V-Ausgänge haben? Ich kenne Encoder nur mit RS-485 Ausgängen.
Hintergrund: Grundsätzlich handelt es sich um einen kleinen E-Motorenprüfstand, der Prüfling wird über einen Drehmomentsensor (inkl. Drehwinkelgeber) ausgewertet. Die Drehwinkelsignale (A,B,Z) werden an eine DI-Karte (NI 9411) angeschlossen, die Karte wiederum sitzt in einem cRIO, welcher über einen FPGA verfügt. Letztlich lassen sich somit z.B. Drehmomente drehwinkelaufgelöst auswerten also f(Winkel) = Drehmoment. Falk B. schrieb: > Schon klar. Wenn es WIRKLICH bis 1 MHz gehen soll, muss man es in ASM > ohne Interrupts machen, dann geht das gerade noch so. Über eine passende > Statemachine kriegt man dann auch das Z Signal hin. Allerdings > bleibt dann von der Arduino-Software nicht mehr viel übrig ;-) Ok, da fehlt mir das Fachwissen, zumal ich kein ASM kann (nur unbrauchbare Uni-Grundlagen). Wenn ich mit der Frequenz runtergehe (500kHz), welche Möglichkeit bestünde dann mein Vorhaben umzusetzen :-)
@Manuel Bayer (manuwestern) >unbrauchbare Uni-Grundlagen). Wenn ich mit der Frequenz runtergehe >(500kHz), welche Möglichkeit bestünde dann mein Vorhaben umzusetzen :-) Ist immer noch reichlich flott. Mit den Arduino-Funktionen wie digitalWrite() kannst du das vergessen, die brauchen ca. 6-7us pro Aufruf. OK, man kann die Register direkt in C ansprechen, das ist einfach und schnell, dauert 2-3 Takte. Ich sag mal so. Bis 100 kHz schafft man es vielleicht noch in C mit einer Statemachine und direkten Portzugriffen. Mach erstmal das, dann sehen wir weiter. Bei 100 kHz reicht auch ein HEF4104 als Pegelwandler auf 12V.
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.