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