Hallo, ich bin auf der Suche nach einem Bauteil was es mir ermöglicht per I²C ein PWM mit mindestens 8 bit Auflösung zu generieren. Da ich ingesamt 24 Kanäle benötige, wäre es wünschenswert wenn 8 oder zumindest 4 Kanäle auf einem Chip vereint sind. Die einzelen PWM müssen sich getennt von einander in ihrer Duty-Cycle regeln lassen. Habe schon überlegt evtl. mehrere MEGA128 einzusetzen, ist aber nicht meine erste Wahl, da die doch ein wenig überdimensioniert sind. Von Philips Semiconductor gibt es ein ein I²C LED Blinker. Da kann man zwar 8 LEDs ein und ausschalten und in zwei Gruppen mit verschienen PWM versorgen aber nicht jeden Kanal einzeln " dimmen". Das I²C Interface ist zwar wünschenswert aber nicht unbedingt nötig. Kennt jemand so etwas oder zumindest ähnliches? Gruss Deimos
Kommt ganz darauf an welche Frequenz die PWM maximal können muss. Es bietet sich ja sonst auch eine Lösung mittels Software PWM an. Beim MEGA 128 hast du natürlich den Vorteil von 6 * 16 Bit PWM in Hardware.
Bei 24 PWM-Kanälen kommt es vielleicht auch auf die Verteilung der PWM-Impulse untereinander an. Wenn jeweils alle 24-Kanäle gleichzeitig an der Stromversorgung "saugen", gibts u.U. Engpässe. Siegfried
Hi! Wie wäre es wenn du einen AT8515 nur PWM machen lässt und ihm über SPI die Steuerwerte deines Masters sendest. Ist nur so ein Gedanke aber: Pins hast du genügend,SPI kann er ganz locker, schnell ist er auch. So aus dem Bauch heraus würde ich denken: ein 10KHz PWM pro Kanal sollte machbar sein. Gruss Uwe
Hallo Deimos, schau doch mal unter folgenden Link bei Maxim nach: http://para.maxim-ic.com/compare.asp?Fam=PWM&Tree=Timers&HP=Timers.cfm Ciao Dieter
Hallo Deimos, sag doch endlich mal, wie schnell es sein muß. Für ne Lampensteuerung sollten 100Hz ... 200Hz Wandlerrate dicke reichen. Und das schafft bequem z.B. ein AT89C52 in Software. Ein I2C-Slave mit max 10kBit in Software ist auch möglich. Peter
Hallo Deimos, sieh Dir vielleicht das Programm 'pwm_avr.s90' unter der Rubrik 'PWM_Software' auf www.mino-elektronik.de nebst der Erläuterungen dazu an. Dort werden 8 PWM-Signale mit einem speziellen Verfahren per Software erzeugt und auf einem Port ausgegeben. Das Programm läßt sich erweitern, daß insgesamt 24 Kanäle (3 Ports) mit einem 40 pol. AVR-Controller machbar sind. Die PWM-Signale werden per Interrupt von Timer0 erzeugt. Bei 8 Kanälen werden ca. 100 Taktzyklen, bei 24 Kanälen ca. 230 benötigt. Wenn Dir ca. 10% Prozessorleistung für das Auffrischen der Daten reichen, könnte alle 256 Takte ein Interrupt ausgelöst werden: Timer0 ohne Vorteiler. Jenseits vom Tellerrand: unter der obigen Adresse findest Du auch ein Prozessormodul CHIP_2352 mit der H8S/2352 CPU. Hiermit lassen sich 15 PWM-Signale mit 50ns Auflösung realisieren: z.B. 10bit Auflösung bei 20kHz. Wenn man viele Kanäle mit hoher Geschwindigkeit und Auflösung braucht kann dies durchaus eine sinnvolle Alternative - auch kostenmäßig - zu vielen AVRs sein. Gruß Michael
Hallo Deimos, habe Dein Problem 'mal mit dem ATmega16 durchgespielt. Hiermit könntest Du 24 PWM-Kanäle mit den Ports A, B und D realisieren, wie oben angedeutet. Da der IIC-Bus hardwaremäßig integriert ist und minimale Bedienung erfordert, reicht ein bißchen CPU-Zeit zur Parameterübergabe völlig aus. Da der IIC-Bus wartet, bis die Daten vom Empfänger abgenommen werden, ist auch kein zeitkritischer Interrupt notwendig. Als Krönung kann man die vier Hardware-PWM-Kanäle als hochfrequente Ausgänge mit einbinden (betreffendes PortBit überschreiben). Da der ATmega16 einen internen Oszillator hat, der mit fast 16MHz schwingt (0xff->OSCAL), braucht man für die komplette Schaltung nur noch einen Abblockkondensator und ggf. zwei Pullups. Bedauerlicherweise kann man die weiteren 'schönen Innereien' wie RAM, EEPROM, +++ nicht separat verwenden. Ich könnte mir vorstellen, daß eine derartige Schaltung für die perfekte Illumination eines Weihnachtsbaumes sorgen könnte. Gruß Michael
Hallo Michael, es geht aber auch schneller. Meine Routine braucht 33 (bzw. 67) Zyklen für 8 (bzw. 24) Ausgänge. Entweder man nimmt einen 90S8515 oder 3 * 90S1200. Peter
Hallo Peter, Deine Routine ist natürlich optimal, wenn man die verwendeten internen Register frei hat und die Ausgangsfrequenz nicht sehr hoch sein muß. Ich wollte kein internes Register fest belegen, da der C-Compiler prinzipiell alles ausradieren kann. Ferner sollte die Ausgangsfrequenz möglichst hoch sein: bei meiner Routine liegen bei 128 Ausgangswert (50%) ca. 15,6kHz am Ausgang, bei Dir sind es etwa 123Hz (Timer0-overflow, 8MHz Takt). Wenn man einen DC-Motor anschließt, kann man den Unterschied deutlich hören. Aber letzlich kommt es darauf an, wofür man was braucht. Schönen Abend! Michael
Hallo Michael, also ich komme aber auf 8MHz 66 256 = 470Hz. Wenn ich Dich richtig verstehe, wandelt Deine Routine bei jedem Wert mit einer anderen Frequenz. Welche ist es dann z.B. bei dem Wert 1 oder 129 ? Man muß doch immer vom ungünstigsten Fall ausgehen. Ja bei Assembler kann man eben die Interrupts so richtig optimieren. Und die restlichen 5 Register sollten doch dicke ausreichen für eine I2C-Empfangsroutine. Peter
Hallo Michael, so ich hab mir Deine Routinen gründlicher angesehen. Wenn ich das richtig verstehe, ist es das klassische 1Bit-DAC Prinzip ausm CD-Player. Da hast Du natürlich recht, daß es sich besser filtern läßt. Für eine Lampensteuerung sollte alles über 200Hz ausreichen. Für eine DC-Motorsteuerung wird manchmal eine so niedrige Frequenz genommen, daß er leicht ruckelt. Dadurch erreicht man noch langsamere untere Drehzahlen, da durch das Ruckeln die Haftreibung aufgehoben wird. Peter
Hallo Peter, bei meinen Frequenzberechnungen bin ich von 8MHz/256/256 ausgegangen. Man kann aber auch T0 im Interrupt nachladen, damit sein nächster Interrupt schneller kommt. Mir ging es darum, die 'klassische' Funktion eines Rate-Multipliers (CD4089) nachzubilden, der es vor vielen, vielen Jahren ermöglichte, 16bit DA-Wandler zu geringen Kosten aufzubauen. Wir können nur spekulieren, welche Aufgabe obige Anfrage lösen sollte. Ich denke, wer viele PWM-Kanäle braucht, hat genug Anregungen bekommen, um sich das gewünschte auszusuchen. Gruß Michael
Hallo, vielen Dank für die vielen verschiedenen und kontruktiven Vorschläge und Denkanstösse. Gruß Deimos
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.