www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16 x PWM erzeugen


Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann ich auf einfachste Weise 16x eine PWM erzeugen im
Frequenzbereich von vielleicht 50 Hz bis 1000 Hz? Meine Idee bisher war
die, das mit einem uC zu machen (Timer & CCU). Die Steuerung der PWM
geht dabei folgendermassen

1. PWM-Kanal adressieren
2. PWM-Kanal aktivieren, wenn nicht aktiv
3. Frequenz einstellen
4. PWM-Verhaeltnis einstellen (15 bis 99%, 1% genau)

Diese 4 Schritte kommen daher, dass die Anbindung an den Steuerrechner
per paralleler Leitung geschieht. Die Datenbreite betraegt 12 Bit und
zusaetzlich 2 Bit fuer die 4 Einstellungsschritte von oben. 4 Bit sind
noch als Reserve vorhanden.

Der worst-case ist dann, wenn alle 16 Kanaele aktiv sind mit
unterschiedlichen Frequenzen. Dazu kommt noch, dass fuer die HW nur ca.
etwas weniger als eine halbe Eurokarte zu Verfuegung steht.

Wie kann man sowas am besten aufbauen?

- Martin

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So richtig verstehen, was Du konkret brauchst, kann ich nicht.

Als 1. Möglichkeit wäre ein Blick in die Codesammlung und die
Überlegung, ob nicht ein einziger AVR per Software die PWM erzeugen
kann. Das wäre eine einfache Möglichkeit.

Wenn ich Dich dahingehend verstehe, daß alles offen und variabel sein
soll, könnte ich mir folgendes denken: Ein µP nimmt die parallelen
Daten entgegen (ATmega8 / 16) und gibt sie in serieller Form an 16 x µP
wie Tiny13/Tiny15 aus, die dann je einen Kanal bedienen. Deine
Platzeinschränkungen könnten damit erfüllt werden.

Ob das dann in Deinem Sinne noch 'einfach' ist, mußt Du selbst
entscheiden.

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich denke das 1 kHz Rate für den AVR doch locker zu schaffen sein
sollte...
und bei 16x 1khz bleibt noch locker zeit für die parrallele Auswertung
der Daten (wegen Portmangels lassen sich diese sicher via Shiftregister
einlesen)

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
16 Software-PWMs per 1 Controller sind möglich, wir haben hier z.B 9
PWMs für Modellbahn-Signale in einem einzigen ATTiny 2313 geparkt, der
bei 8MHz läuft und noch dazu die Bussignale annimmt. Für 16 PWMs wird
aber aufgrund der Pinknappheit wenigstens ein ATMega8 in Frage kommen.
Bei 16MHz Takt hat man dann auch noch ein "wenig" Rechenkapazität
übrig ;-).

Autor: Steffen L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

was spricht gegen 16 Zähler deren vergleichswert dann einfach per AVR
in ein Latch gehämmert wird? Ok hardwarelastig aber simpel.

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwischenzeitlich habe ich schonmal rumgekukkt. Bei einem uC (C505
glaubich, ATMEGA640) waere sowas fast moeglich. Der hat 4 Timer, d.h.
ich kann nur mit 4 verschiedenen Frequenzen arbeiten. Insgesamt habe
ich aber 29 PWMs zur Vefuegung. Ideal waeren aber 16 PWMs mit
verschiedenen Frequenzen und verschiedenen Verhaeltnissen, natuerlich
einzeln einstellbar, ohne dass die sich gegenseitig beeinflussen.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wozu braucht man sowas?

Um Motoren oder Licht zu steuern, reicht es, wenn alle PWM-Kanäle
gleiche Frequenz und Phasenlage haben. Da genügt für eine Software-PWM
mit 16 Kanälen ein Mega8, Mega8515 oder Mega8535.

...

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<<Also ich denke das 1 kHz Rate für den AVR doch locker zu schaffen sein
sollte...>>

Fragt sich nur, welche 1kHz man möchte: 1kHz Zyklus oder Taktfrequenz ?
Sollen der Zyklus 1kHz und die Auflösung 1% betragen, so benötigt man
100kHz PWM-Takt. Abhängig davon, wie fein diese 1kHz variiert werden
sollen, braucht man eine entsprechend 'feine' Änderungsmöglichkeit
der Taktfrequenz.

Die Vorgaben sind zu vage, als daß man konkret antworten könnte.

Autor: Hauke Sattler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze halte ich für recht einfach.
Als Controler würde ich einen ATmega16 nehmen.
Der hat ausreichend IO Pins um das ganze ohne zusätzliche externe
Bauteile zu schaffen. Ich weiß mit Shiftregistern, Latches usw. kann
man alles in einem kleineren Tiny AVR tun. Aber mit geht es um eine,
einfachen Aufbau, und da es den Mega16 auf in DIP40 Bauform gibt, kann
den jeder der mit seinem Brateisen halbwegs umgehen kann verbauen.
Die PWMs sind auch harmlos in Software zu proggen.
Selbst wenn mit 1000 Hz die Auflösung gemeint ist, wäre (wie Michael
schon bemerkt hat) der PWM-Takt 100kHz.
Damit würden einem für jeden PWM-Zyklus 80 CPU-Takte bleiben (mehr als
genug).
Was man jetzt nur brauchen würde wäre das genaue Busprotokoll mit dem
du die oben genannten vier Schritte steuern willst.

bis dann
Hauke

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wofuer man sowas braucht: Zur Simulation von Sensoren. Die Sensoren
arbeiten i.d.R. mit Frequenzen bis 1khz. Ist nur eine Vermutung, zwei
Sensoren arbeiten bei 100Hz und 244Hz. Das eigentliche Sensorsignal
(z.B. Luftgüte, Druck) wird dann eben mit der PWM uebertragen. Die
Zykluszeit liegt dann bei 1% und 1khz bei 10 ms, wobei man hier
sicherlich noch verfeinern koennte (0.x% Aufloesung). ist recht langsam
fuer einen uP. Nur sollte das wenns eben geht nicht rechenintensiv sein,
weil der uP noch genuegend Ressourcen frei hat um andere Taetigkeiten zu
uebernehmen.

@Hauke
Zum Protokoll kannn ich nur sagen, wie breit der Bus ist. Wie
letztendlich die Daten da reingescghaufelt werden steht noch nicht
fest. Wie waers z.B. mit BCD-Codierung? Ist aber derzeit nicht soooo
das Thema. Darum mache ich mir gerade keinen Kopp.

Autor: Lumpi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mal kurz simuliert (ATmega 8). Lösung:
16 Software-Timer incr. im Timer1 Interrupt.16 Vorteiler für diese
Timer.
Man kann also die PWM Frequenz mit den Vorteilern einstellen und das
Tastverhältnis mit 16 duty cyclen Registern. Bin gerade in einer
Vorlesung...deshalb die Kürze

Lumpi

Autor: Hauke Sattler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK.
Dann hatte ich dich etwas falsch verstanden.
Das mit den unterschiedlichen PWM Frequenzen hatte ich überlesen.
Da muß man dann doch schon etwas mehr in die Trickkiste greifen.

Wie meinst du das mit dem "Nur sollte das wenns eben geht nicht
rechenintensiv sein, weil der uP noch genuegend Ressourcen frei hat um
andere Taetigkeiten zu uebernehmen"? Meinst du das der µC welcher die
PWM Kanäle simuliert noch Resorcen frei hat oder da? die Ansteuerung
dieses Bausteins einfach sein soll, damit dein Master µC noch genug
Zeit hat?

cu
Hauke

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Neuester Stand: Statt der 16 PWMs brauchen es nur 8 zu sein, aber nach
wie vor variable Frequenz blabla.

@Hauke
Der Controller sollte evtl. noch in der Lage sein, evtl. Rueckmeldungen
in Form von gemessenes Spannungen (DA-Wandlung nach Muxer) oder anderer
Kommandos, die per RS232/485 reingeduest kommen, zu verarbeiten, ohne
dass dadurch die PWM verzogen wird. Ist nur eine Idee, was da noch
zukommen koennte.

Angenommen, mehr als 8 PWM mit variabler Frequenz und variablen
Tastverhaeltnis (alle voellig unabhaengig voneinander) werden nicht
gebraucht, "wieviel" uP wuerde reichen? Also das minimum an Haduar.
(Haduar (arab.) = Hardware :)

Autor: Hauke Sattler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde sagen ein ATMega8 sollte reichen. Dann noch ein paar
Kondensatoren und 1-2 Widerstände das wars.Wenn du noch RS232/485
machen willst dann würde ich noch nen Quarz + 2 C dabeinehmen.
Ein "kleinerer AVR bring es nicht, du sparst nix und würdest dir
Erweiterungsmöglichekeiten verbauen. Evt. wäre sogar nen Mega88 (oder
Mega48) sinnvoll (wegen der höheren Frequenz).

bis dann
Hauke

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oké, danke erstmal soweit. Gegenwaertig haben wir noch ein Timing
Problem, aber das kriegen wir schon hin, hat aber erstmal Prio 1. Ich
werde mir mal den ATMega8 88 und 48 ankukken, was da so geht und
vorallem wie groß die Teile sind und ob es die in der naexten Zeit noch
gibt.

- Martin

Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei 16Mhz, 8 Kanälen, 7bit Auflösung und gleicher Frequenz müsste ein
Atmega 6kHz schaffen.
Es müsste also bei maximal 1kHz auch mit variablen Frequenzen zu
schaffen sein, allerdings müsstest du mal ausrechnen, ob die
Frequenzauflösung nicht zu grob ist. Auf's Hertz genau wirst du das so
sicher nicht hinbekommen.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein ATtiny2313 ginge auch. Den könnte man sogar mit 20MHz takten.

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jan
Es sollte schon aufs Hertz genau passen. Keine Ahnung, inwieweit
Sensoren mit der Frequenz schwanken, aber ich gehe mal davon aus, dass
es max. 1% ist. Das sollte zu machen sein.

@Rolf
...und dazu hat er noch 4 PWM Ausgaenge, gibts im 4x4 mm Gehaeuse
(MLF20), hat aber nur ein Timer. Auch mal ankukken.

Autor: wopfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,
wie wärs mit einem st10f168 oder st10f269...?
macht das alles mit links nebenbei mit capture/compare -unit.
ein paar interrupt - vektoren setzen, die dazugehörigen
minimalprogramme und die 16 x pwm an den pins abholen...
gruß wopfo

Autor: Hegy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@wopfo
danke fuer deinen input, habe mir mal die ST10er Serie angekukt. Den
ST10F168 gabs bei ST nicht mehr auf deren Heimatseite, den ST10F268
schon, allerdings im PQFP144 Package. Ist ein wenig zu gross, nicht nur
das Gehaeuse, auch einen 16-bitter fuer ein paar PWMs. Generell will ich
mich ja nicht auf 8051er oder Atmel festlegen, aber ST hat da nicht
soooo viel im Angebot. Bei uns inner Firma benutzen wir haufenweise
Fujitsu MB90f500er Serie, aber die haben m.w. nicht mal mehr eine
PWM-Unit drin.

 - Martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.