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
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.
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)
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 ;-).
Hi was spricht gegen 16 Zähler deren vergleichswert dann einfach per AVR in ein Latch gehämmert wird? Ok hardwarelastig aber simpel.
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.
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. ...
<<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.
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
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.
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
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
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 :)
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
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
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.
@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.
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
@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
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.