Forum: Mikrocontroller und Digitale Elektronik Arduino 1MHz PWM Schalter


von Manuel B. (manuwestern)


Lesenswert?

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
von Georg M. (g_m)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Falk B. (falk)


Lesenswert?

@ 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 ;-)

von Peter D. (peda)


Lesenswert?

Manuel B. schrieb:
> um dieses über
> eine industrielle DI-Karte auszuwerten.

Was willst Du denn daran auswerten?

von Manuel B. (manuwestern)


Lesenswert?

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
von Falk B. (falk)


Lesenswert?

@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.

von Manuel B. (manuwestern)


Lesenswert?

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
von Falk B. (falk)


Lesenswert?

@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 ;-)

von Peter D. (peda)


Lesenswert?

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.

von Manuel B. (manuwestern)


Lesenswert?

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 :-)

von Falk B. (falk)


Lesenswert?

@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
Noch kein Account? Hier anmelden.