Forum: Mikrocontroller und Digitale Elektronik PWM IC - feine Kontrolle von duty cycle


von F. V. (coors)


Lesenswert?

Hi,

Ich suche nach einem IC, der mir eine PWM von etwa 15 kHz macht und 
gleichzeitig erlaubt den duty cycle in feinen Schritten zu 
kontrollieren.

In meiner speziellen Anwendung geht es darum, den duty cycle zwischen 
45% und 55% einzustellen.

Das ganze ist fuer ein LC Modul, mit welchem ich die Intensitaet eines 
Laser stabilisieren moechte (siehe "Noise Eater").

Das Problem ist, dass ich bei einem AVR bei 20 MHz maximal eine 10 bit 
PWM machen kann (20 MHz / 1024 -> 20 kHz PWM Frequenz). Damit komme ich 
allerdings "nur" auf etwa 100 Stufen zwischen 45% und 55% (10% von 1024 
Stufen).


Gibt es so einen PWM IC irgendwo zu kaufen oder vielleicht eine andere 
Loesung, die mir bisher entgangen ist? Wichtig ist, dass der duty cycle 
nicht aus dem angegebenen Bereich rausgehen kann, da sonst mein LC 
Schaden nehmen kann.


Vielen Dank,
Felix

von avion23 (Gast)


Lesenswert?

16Bit PWM?


F. V. schrieb:
> ibt es so einen PWM IC irgendwo zu kaufen oder vielleicht eine andere
> Loesung, die mir bisher entgangen ist? Wichtig ist, dass der duty cycle
> nicht aus dem angegebenen Bereich rausgehen kann, da sonst mein LC
> Schaden nehmen kann.

Software?

von F. V. (coors)


Lesenswert?

F. V. schrieb:
> Das Problem ist, dass ich bei einem AVR bei 20 MHz maximal eine 10 bit
> PWM machen kann (20 MHz / 1024 -> 20 kHz PWM Frequenz). Damit komme ich
> allerdings "nur" auf etwa 100 Stufen zwischen 45% und 55% (10% von 1024
> Stufen).

Das war auch mein erster Gedanke, leider geht das so nicht. Die PWM 
Frequenz soll 15-20 kHz betragen, mit normalen AVR und 20 MHz Takt hab 
ich da nur etwa 1000 Taktcyclen Zeit.

Ich frage mich, ob es fuer sowas nen IC gibt (feste Frequenz einstellen 
und dann duty cycle per SPI aendern). Oder ob ich nen ganz falschen 
Ansatz habe und meine PWM nach dem uC Frequenzverdoppeln (oder 
achtfachen) kann.

Felix

von Micha (Gast)


Lesenswert?

F. V. schrieb:
> Das Problem ist, dass ich bei einem AVR bei 20 MHz maximal eine 10 bit
> PWM machen kann (20 MHz / 1024 -> 20 kHz PWM Frequenz).
Wer schreibt dir vor den Prescaler auf 1024 zu stellen?

von Micha (Gast)


Lesenswert?

Wäre ein NE555 eine Option? Damit müsste sich der Duty Cycle doch 
entsprechend eingrenzen lassen.

von Falk B. (falk)


Lesenswert?

@  F. V. (coors)

>Frequenz soll 15-20 kHz betragen, mit normalen AVR und 20 MHz Takt hab
>ich da nur etwa 1000 Taktcyclen Zeit.

Was ja mal rein rechnerisch nunmal so ist. Wieviel Auflösung hättest du 
denn gern?

Sowas kann man mit einem CPLD machen, den kann man problemlos mit 100 
MHz takten. Oder dem Piccolo uC von TI, der kann 150ps (ja, 
Picosekunden) Zeitauflösung für seine PWMs. Oder einen AVR mit interner 
PLL, dort kommt man wenigstens auf 64 MHz, die können zumindest einen 
Timer takten.

MfG
Falk

von F. V. (coors)


Lesenswert?

@Micha

>Wäre ein NE555 eine Option? Damit müsste sich der Duty Cycle doch
>entsprechend eingrenzen lassen.

Das ist ne prima Idee, werde mir mal genauer angucken, ob sich sowas per 
555 machen laesst.

@Falk

>Was ja mal rein rechnerisch nunmal so ist. Wieviel Auflösung hättest du
>denn gern?

10 bit waeren OK, mit 12 bit wuerde ich vollkommen gluecklich sein.

>Sowas kann man mit einem CPLD machen, den kann man problemlos mit 100
>MHz takten. Oder dem Piccolo uC von TI, der kann 150ps (ja,
>Picosekunden) Zeitauflösung für seine PWMs. Oder einen AVR mit interner
>PLL, dort kommt man wenigstens auf 64 MHz, die können zumindest einen
>Timer takten.

Wie schaut das mit der Einarbeitungszeit fuer CPLDs oder Piccolo uCs 
aus? Ich habe nur mit AVRs gespielt bisher und bin mir nicht sicher, ob 
sich das "mal eben" machen laesst. Kommt man da mit einseitigen Layouts 
weiter (privat kann ich nur einseitige Toner-Transfer PCBs herstellen)?

AVR mit interner PLL ist definitiv ne Variante. Wenn ich nen 16 bit 
Timer mit 20 kHz Ueberlauf Frequenz hinkriege habe ich gewonnen.

Danke fuer die Hinweise!

Felix

von Falk B. (falk)


Lesenswert?

@F. V. (coors)

>10 bit waeren OK, mit 12 bit wuerde ich vollkommen gluecklich sein.

10 Bit hast du doch schon. 20 MHz/1024 = 20kHz.
Für 12 Bit brauchst du dann halt 80 MHz.

>AVR mit interner PLL ist definitiv ne Variante. Wenn ich nen 16 bit
>Timer mit 20 kHz Ueberlauf Frequenz hinkriege habe ich gewonnen.

Hmm, hab gerade mal geschaut, die Tiny 25/45/85 haben eine PLL, aber 
leider nur 8-Bit Timer :-0

MFg
Falk

von Anja (Gast)


Lesenswert?

F. V. schrieb:
> Damit komme ich
> allerdings "nur" auf etwa 100 Stufen zwischen 45% und 55% (10% von 1024

Ich kenne mich ja mit dem Thema nicht aus aber mußt du wirklich das 
Gesamtsignal per PWM generieren? oder reicht da ein 50%-DC-Offset dem du 
0-100% PWM im Verhältnis 1:10 dazumischst um auf 45-55% zu kommen?
Damit wäre die Auflösung schlagartig um den Faktor 10 unkritisicher.

Ansonsten: mit einem DSPIC30F4013 kommst du bei 7,5MHz Quarz auf 30MHz 
PWM Grundtakt was bei 15kHz schon mal 11 Bit Auflösung ergibt.

Gruß Anja

von F. V. (coors)


Lesenswert?

@ Falk:

>10 Bit hast du doch schon. 20 MHz/1024 = 20kHz.
>Für 12 Bit brauchst du dann halt 80 MHz.

Sorry, ich meinte 10 bit im Bereich 45% - 55%. In diesem Bereich habe 
ich im moment knapp 7 bit.

Daher brauche ich fuer 10 bit 160 MHz und fuer 12 bit satte 640 MHz. Das 
klingt so, als waere der Ansatz murks.

@ Anja:

>Ich kenne mich ja mit dem Thema nicht aus aber mußt du wirklich das
>Gesamtsignal per PWM generieren? oder reicht da ein 50%-DC-Offset dem du
>0-100% PWM im Verhältnis 1:10 dazumischst um auf 45-55% zu kommen?
>Damit wäre die Auflösung schlagartig um den Faktor 10 unkritisicher.

Leider brauche ich TTL High/Low Signale um mein LC von vertikaler 
Polarisation zu horizontaler Polarisation zu switchen. Waere der Eingang 
Ananlog, wuerde dein Ansatz vermutlich der Beste sein, hier kann ich das 
aber leider nicht so machen.

>Ansonsten: mit einem DSPIC30F4013 kommst du bei 7,5MHz Quarz auf 30MHz
>PWM Grundtakt was bei 15kHz schon mal 11 Bit Auflösung ergibt.

Das Teil kenne ich noch nicht, gucke ich mir aber gleich nach der Arbeit 
mal an und vergleiche es mit dem 555. Vielen Dank fuer die Idee!

Felix

von Falk B. (falk)


Lesenswert?

@  F. V. (coors)

>Daher brauche ich fuer 10 bit 160 MHz und fuer 12 bit satte 640 MHz. Das
>klingt so, als waere der Ansatz murks.

Naja, will das Modul WIRKLICH eine PWM oder tut es auch ein 
Gleichspannungssignal? Warum glaubst du, 20kHz zu brauchen? Datenblatt?

>Leider brauche ich TTL High/Low Signale um mein LC von vertikaler

LC??

>Polarisation zu horizontaler Polarisation zu switchen.

Früher (tm) hieß das schalten.

>Das Teil kenne ich noch nicht, gucke ich mir aber gleich nach der Arbeit
>mal an und vergleiche es mit dem 555. Vielen Dank fuer die Idee!

Der 555 ist ein Dinosaurier, ein ganz einfacher, analoger PWM-IC. Nix 
digital einstellbar.

MfG
Falk

von avr (Gast)


Lesenswert?

PWM früher war ein Sägezahn und eine Spannung am Komperator.

Für dich hier: Sägezahn mit 15 kHz und ein Vergleichsspannung
die den Bereich auf 45-55 % Duty eingrenzt.
Die Vergleichsspannung geht mit Poti manuell oder über einen
DAC.
Evtl. die 45% fix und 0-10% mit 12 Bit DAC dazuaddieren.

Deine 15 kHz kannst du dann auch auf 12 oder 20 kHz setzen.

avr

von Micha2 (Gast)


Lesenswert?

Hallo F.V.
Ich weiss nicht ob dir das weiterhilft:
Beim Stichwort "High Resolutuion PWM" warf Google folgendes "IC" raus:
http://focus.ti.com/lit/ug/spru924e/spru924e.pdf
Schau einfach mal kurz rein.
Viel Erfolg noch.

von Micha (Gast)


Lesenswert?

F. V. schrieb:
> Wie schaut das mit der Einarbeitungszeit fuer CPLDs oder Piccolo uCs
> aus? Ich habe nur mit AVRs gespielt bisher und bin mir nicht sicher, ob
> sich das "mal eben" machen laesst. Kommt man da mit einseitigen Layouts
> weiter (privat kann ich nur einseitige Toner-Transfer PCBs herstellen)?
Piccolo ist machbar. Problem ist, dass man erst mal die Toolchain 
braucht... Einseitiges Layout müsste auch gehen.

Vielleicht wäre auch das hier was für dich.
Beitrag "$4,30 Arduino-Klon mit MSP430 von Texas Instruments"

von Julian (Gast)


Lesenswert?

CPLD ist auch machbar, im Notfall kann man die PWM sogar per Schaltplan 
zusammenklicken wenn man Angst vor VHDL hat. Kleine CPLDs (für die PWM 
völlig ausreichend, zb xc95 Serie von Xilinx) bekommt man noch im PLCC 
Gehäuse, damit ist man Lochrastertauglich. Ein (Paralleles) 
Programmierkabel ist für 5€ selbst gebastelt und die Programmiersoftware 
(Ise webpac) bekommt man bei Xilinx kostenlos

von hans (Gast)


Lesenswert?

Ich werf mal noch den TL494 in die Runde.

Kann als einfacher PWM-Baustein verwendet werden, wird über
Spannung im Duty eingestellt und ist etwas besser als 555
und ohne Programmieraufwand.

hans

von F. V. (coors)


Lesenswert?

Erstmal danke fuer die ganzen hilfreichen Vorschlaege.

Bin im Moment noch erschlagen von der Informationsflut, allerdings denke 
ich hab ich nen Favoriten gefunden.

So wie ich mir das grade denke werde ich mal nen 555 Timer probieren. 
Hier im Datenblatt ( http://www.national.com/ds/LM/LM555.pdf ) auf Seite 
8 / 9 wird genau das gezeigt, was ich vorhab.

Ich werde vermutlich nen MCP4821 12 bit DAC nehmen, der mit 2.048 V mit 
12 bit Aufloesung gibt und da einfach ~1.5 V draufaddieren.

Dann lege ich nen 15 kHz Signal vom AVR auf den Trigger vom 555 und 
moduliere die Pulsweite ueber den Modulationseingang.

Ich denke so sollte ich (evtl. mit Spannungteiler am Modulationseingang) 
meine 12 bit Aufloesung bei 45% - 55% Pulsweite hinkriegen.


Das sieht mir persoenlich nach dem guenstigsten und recht robusten Weg 
aus das Problem zu loesen. Falls es da keine konzeptuellen Einwaende 
gibt werde ich mich da morgen mal direkt ransetzen.

Felix

von Horst H. (horha)


Lesenswert?

Hallo,

Du verlangst eine Genauigkeit von 2048 Teilen auf 10 % oder 20480 auf 
1(00%.)
also 48,8 / 1e6 ~ 50 ppm. Dies entspricht schon der Drift des LM 555 bei 
Änderung der Temperatur um 1 Grad.
50 ppm ist Abweichung auch bei einer Änderung der Spannung um 50 mV == 
0.1%/V
Und das ist ja nicht Dein einziges analoges Signal, Addierer, DAC ...

von F. V. (coors)


Lesenswert?

Horst Hahn schrieb:
> Hallo,
>
> Du verlangst eine Genauigkeit von 2048 Teilen auf 10 % oder 20480 auf
> 1(00%.)
> also 48,8 / 1e6 ~ 50 ppm. Dies entspricht schon der Drift des LM 555 bei
> Änderung der Temperatur um 1 Grad.
> 50 ppm ist Abweichung auch bei einer Änderung der Spannung um 50 mV ==
> 0.1%/V
> Und das ist ja nicht Dein einziges analoges Signal, Addierer, DAC ...

So habe ich das bisher noch nicht gesehen, hoert sich allerdings logisch 
an. Kann ich damit "nur" analoge Loesungen vergessen, oder bedeutet das 
ebenfalls das aus fuer CPLDs?

Ansonsten gucke ich mir den XC9536 mal genauer an, den gibts im TQFP 
Gehause und er kann mit 100 MHz getaktet werden. ( 
http://www.xilinx.com/support/documentation/data_sheets/ds064.pdf )

Ich denke ich sollte mich am Wochenende mal hinsetzen und das Projekt 
genau erklaeren, poste das dann hier.

Felix

von Falk B. (falk)


Lesenswert?

@  F. V. (coors)

>So habe ich das bisher noch nicht gesehen, hoert sich allerdings logisch
>an. Kann ich damit "nur" analoge Loesungen vergessen,

Mehr oder weniger.

> oder bedeutet das ebenfalls das aus fuer CPLDs?

Nein. Den Takt nimmt man von einem Quarzoszillator, der ist recht 
stabil.

>Ansonsten gucke ich mir den XC9536 mal genauer an, den gibts im TQFP

Ist zu klein. Nimm einen XC9572.

MFG
Falk

von Micha (Gast)


Lesenswert?

Ich bin mir nicht sicher, aber ich denke die Attinyx61 haben einen 10bit 
High Speed Timer. Wäre das evtl. was?

von MaWin (Gast)


Lesenswert?

> Kann ich damit "nur" analoge Loesungen vergessen


Nein, aber die Anspüche des Aufbaus sind halt höher.

So hoch, wie bei einem 16 bit Messwerkverstärker.

Analog ist es immerhin einfach, aus einer 0-100%
Steuerspannung für eine PWM durch einen simplen
Spannungsteiler eine 45-55% Steuerspannung zu
machen. Nur ,als PWM tut's da kein NE555, sondern
ein schneller Komparator an rauschfreien Leitungen
muss her.

Mich überrascht halt, daß man einen Flüssigkristallshutter
so bedienen soll, mit einer PWM in solchem
Tastverhältnis und nicht mit einer Rechteck-
Wechselspannung immer grösser werdender (und
in gewisser Form zur Temperaturkompensation
rückgekoppelter) Amplitude.

von F. V. (coors)


Lesenswert?

MaWin schrieb:
>> Kann ich damit "nur" analoge Loesungen vergessen
>
>
> Nein, aber die Anspüche des Aufbaus sind halt höher.
>
> So hoch, wie bei einem 16 bit Messwerkverstärker.
>
> Analog ist es immerhin einfach, aus einer 0-100%
> Steuerspannung für eine PWM durch einen simplen
> Spannungsteiler eine 45-55% Steuerspannung zu
> machen. Nur ,als PWM tut's da kein NE555, sondern
> ein schneller Komparator an rauschfreien Leitungen
> muss her.
>
> Mich überrascht halt, daß man einen Flüssigkristallshutter
> so bedienen soll, mit einer PWM in solchem
> Tastverhältnis und nicht mit einer Rechteck-
> Wechselspannung immer grösser werdender (und
> in gewisser Form zur Temperaturkompensation
> rückgekoppelter) Amplitude.

MaWin,

Das ist alles richtig, was du sagst. Ich habe nen kommerziellen Treiber 
( http://www.displaytech.com/pds_protonics_dr50.html ), dem man ein 
externes Signal fuettern kann.

Das Problem ist nur die Erzeugung des externen Signals mit 45 - 55% duty 
cycle.

Sobald ich von der Arbeit komme, setze ich mich hin und schreibe ne 
ordentliche Dokumentation, so dass du (und alle anderen) genau folgen 
koennen, was ich hier versuche.

Felix

von F. V. (coors)


Angehängte Dateien:

Lesenswert?

Also, hier erstmal das Funktionsprinzip etwas genauer:

a) Der Laserstrahl (im Schema von links kommend) wird mit einem Filter 
(1) linear polarisiert.

b) Von dem linear polarisierten Strahl wird ein Teil (~5%) abgeteilt 
(2).

c) Von den abgeteilten 5% des Strahl wird per Photodiode (3) die 
Intensitaet gemessen. Das ist meine Referenzmessung.

d) Der LC-Polarisationsfilter erlaubt es mir nun die Intensitaet von den 
95% des Strahls zu modulieren und eventuelle Schwankungen auszugleichen.

Die Idee hinter (4) ist, dass die Polarisation des Lichtes welches durch 
(4) nicht abgeschwaecht wird mit ~20 kHz von vertikal auf horizontal 
gedreht wird. Damit bekomme ich bei 50% duty cycle 50% der Intensitaet 
am Ausgang von (4). Wenn ich nun den duty cycle auf 55% einstelle, 
bekomme ich entsprechend 55% Intensitaet usw.

Die LC Einheit (4) kann man hier betrachten: 
http://www.displaytech.com/photonics.html

Unter Rotators findet sich (4), ein Treiber (DR-50) ist ebenfalls 
vorhanden.

Das Problem ist wie gesagt die Erzeugung der 20 kHz PWM mit duty cycle 
zwischen 45% und 55%. Ich haette gern mindestens 1024 Stufen zwischen 
45% und 55%.

Ich hoffe das beantwortet die Frage was ich hier eigentlich mache. Man 
sieht auch, dass es keine Moeglichkeit gibt DC Spannungen oder 
aehnliches zu benutzen.

Im Moment gucke ich mir CPLDs an und versuche rauszufinden, ob ich 
MaWins Ansatz verwirklichen koennte.

Felix

von Falk B. (falk)


Lesenswert?

@  F. V. (coors)

>Das Problem ist wie gesagt die Erzeugung der 20 kHz PWM mit duty cycle
>zwischen 45% und 55%. Ich haette gern mindestens 1024 Stufen zwischen
>45% und 55%.

Das ist eine PWM mit 10240 Stufen, macht für 20kHz satte 200 MHz Takt. 
Hoppla. Kann man mit einem CPLD machen, ich würde aber erstmal den 
Piccolo probieren, der macht das cleverer.

>Ich hoffe das beantwortet die Frage was ich hier eigentlich mache. Man
>sieht auch, dass es keine Moeglichkeit gibt DC Spannungen oder
>aehnliches zu benutzen.

Warum müssen es 20 kHz sein?

MFG
Falk

von F. V. (coors)


Lesenswert?

Die 20 kHz sind vom LC vorgegeben. Das ist die hoechste Frequenz, die 
das Teil machen kann (ist auch die maximale Frequenz von dem Treiber, 
den Displaytech verkauft).

Die Frequenz soll so hoch wie moeglich sein, da der Laser effektiv mit 
dieser Frequenz gechoppt wird. Idealerweise nimmt man fuer meine 
Anwendung nen richtigen EOM (electrooptic modulator), die kosten aber 
nen haufen Geld. Ich habe das LC Modul fuer Lau bekommen und versuche 
mich an der low-cost Variante.

Hier ist z.B. ne Firma, die Noise Eater auf EOM Basis verkauft: 
http://www.quantumtech.com/systems.htm

OK, dann lese ich mich mal etwas in den Piccolo ein und gucke, ob ich 
wohl damit zurecht komme. Leider bin ich Chemiker und kein 
Elektroingenieur, daher brauche ich fuer sowas immer etwas laenger ;)

Felix

von Falk B. (falk)


Lesenswert?


von Horst H. (horha)


Lesenswert?

Hallo,

laut http://focus.ti.com/lit/ug/spruge8d/spruge8d.pdf Seite 10 wird bei 
20 khz
eine Auflösung von PWM-Auflösung von 18 Bit= 1:262144 erreicht, also 
mehr als ausreichend.

von F. V. (coors)


Lesenswert?

Habe mir mal so einen Piccolo bestellt. Ich bin da recht zuversichtlich, 
dass das genau das richtige fuer die Anwendung ist.

Danke nochmal an Falk, die Piccolos sind wirklich super und scheinen 
auch einfach zu programmieren zu sein.

Felix

von F. V. (coors)


Lesenswert?

Hi,

Hier nun nach einiger Zeit mal ein Update.

Die PWM per AVR (niedrige Aufloesung) und Piccolo (hohe Aufloesung) 
klappt schonmal. Die Piccolos sind fuer diese Anwendung wirklich 
perfekt.

Im moment beisse ich mir an einer anderen Ecke die Zaehne aus. Was ich 
letztes mal nicht bedacht habe ist der analoge Messteil des Noise 
Eaters.

In dem Schema vom 26.06.2010 habe ich den Strahlteiler mit Photodiode 
VOR dem LC-Polarisationsfilter. Das stellte sich als murks raus.

Nun habe ich Strahlteiler und Photodiode (2 und 3) hinter dem 
LC-Polarisationsfilter (4) angeordnet. Damit erzeugt mir die Modulation 
durch (4) relativ grosse Stoerungen auf der Photodiode.

Daher probiere ich als naechstes mal aus, ob ich die durch einen guten 
Tiefpass Filter einfach ausgefiltert kriege.

Vielleicht hat ja jemand einen besseren Vorschlag...

Felix

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.