3x PWM messen und angepasst ausgeben

OP #3455884
Lesenswert?

Hallo Zusammen,

ich möchte gerne mit einen LED-Controller bauen, der lediglich das 
PWM-Signal eines anderen Controllers aufnimmt und angepasst wieder 
ausgibt. Zur Erfassung eines PWM-Signal gibt es ja von Atmel ein 
Beispiel (AVR135), leider wird dafür aber der Input-Capture-PIN 
verwendet, von dem es zumindest beim ATmega8 und 16 jeweils nur einen 
gibt.

Nun habe ich überlegt das einfach über einen durchlaufenden Timer zu 
regeln und den Zustand der drei Eingangssignale in Software zu 
speichern. Ob die Ausgangsseitigen 3 PWM-Kanäle dann als Hardware oder 
Software-PWM laufen müsste ich dann sehen.

Leider habe ich schön länger nix mehr mit Mikrocontrollern gemacht, 
daher bin ich gerade nicht so richtig fit darin nach zu rechnen ob das 
überhaupt gehen kann. Wenn ich richtig rechne, dann müsste ich den µC 
mit ca. 60MHz laufen lassen um schnell genug zu sein, was dann das aus 
für diese Idee wäre:

PWM-Frequenz des führenden Controllers: mal 80Hz, mal 830Hz, je nach 
Betriebsmodus (gemessen mittels DSO)
Angenommene Auflösung der PWM: 8 bit

830Hz * 256 Zustände = 212480 Messungen pro Sekunde nötig
8 Bit Timer ohne Prescaler, überlauf bei 256: 54.394.880 Takte pro 
Sekunde erforderlich.

Liege ich richtig? Was hätte ich für alternativen?

Hintergrund ist folgender: Ich habe eine LED-Beleuchtung mit insgesamt 7 
Metern LED-Strips. Leider sind ca 2 Meter mit anderen LEDs bestückt als 
die anderen 5 Meter, so das die Farbe nicht immer passt. Hier würde ich 
gerne mit einer Anpassungsschaltung Abhilfe schaffen.

vielen Dank im Voraus und schonmal frohe Weihnachten

Biertrinker
Gast #3455909
Lesenswert?

Spricht etwas dagegen, die PWMs mit einem RC-Tiefpass zu filtern, das 
Resultat A/D zu wandeln und daraus neue, passende PWM-Muster zu 
erzeugen?

Die vorgeschlagenen Antiquitäten ATmega8 und ATmega16 haben dafür 
jedenfalls genügend Ressourcen.
(Firma: matzetronics) #3455933
Lesenswert?

Zwingt dich denn jemand, wirklich jeden einzelnen PWM Puls zu messen, du 
könntest da ja auch nur alle 10tel Sekunde oder so die Teile durchgehen. 
Und tu dir einen Gefallen, nimm einen MC mit Pinchange Interrupt. Als 
Zeitbasis kannst du einen Timer durchlaufen lassen und per Pinchange 
Zeitstempel erfassen.
OP #3456123
Lesenswert?

Hallo,

Marcus schrieb:
> Spricht etwas dagegen, die PWMs mit einem RC-Tiefpass zu filtern, das
> Resultat A/D zu wandeln und daraus neue, passende PWM-Muster zu
> erzeugen?

eigentlich nichts, ausser das das PWM-Signal mit 80Hz kommt und mal mit 
830Hz. Wie der zu berechnen wäre ist mir auch nicht so recht klar, aber 
das ließe sich schon rausfinden ;-) Würde natürlich den Zeitfaktor aus 
der Sache nehmen, wenn der Tiefpass nicht zu viel glättet. Sonst hinkt 
der zweite Abschnitt bei schnelleren Farbwechseln hinterher.

Allerdings würde ich es auch gerne ohne AD-Wandlung lösen wenn es denn 
geht.

> Du hast einen Faktor 256 zu viel drin. Du willst die An-Zeit eines PWM
> Signals mit 800Hz bestimmen mit 8bit Auflösung. Es werden 256*800Hz =
> 205kHz Abtastfrequenz.

Der Faktor kam durch die Annahme da rein, dass ich den 
Overflow-Interrupt eines 8-Bit Timers nutze. Ok, ich könnte auch einen 
Compare Match Timer nutzen, dann brauche ich keine 256 als Faktor, aber 
ein Timer der bei jedem CPU-Takt auslöst hilft mir ja auch  nicht ;-) 
Mit einem Compare Match bei 50 und dann neu zählen komme ich auf:

830*256*50 = 10.624.000 das wäre ja immerhin machbar. Anders gerechnet, 
wenn ich einen 16MHz Quarz nehe müsste ich alle 75 CPU Takte eine 
Messung durchführen. Ist das realistisch zu schaffen?

> Und tu dir einen Gefallen, nimm einen MC mit Pinchange Interrupt. Als
> Zeitbasis kannst du einen Timer durchlaufen lassen und per Pinchange
> Zeitstempel erfassen.

Das wäre ja die Lösung, wie sie auch Atmel in der AVR135 vorschlägt, 
geht aber mit meiner Bastelkistenhardware nicht, da immer nur ein 
Pinchange Interrupt verfügbar ist.

vielen Dank und viele Grüße

Biertrinker
Gast #3456481
Lesenswert?

Aike Terjung schrieb:
> Ich schau
> es mir genauer an, wäre ja die perfekte Lösung!

Du mußt den Input-Capture über den analog Komparator auslösen; dieser 
kann per ADC-Multiplexer die zugehörigen Eingänge anwählen.

Aike Terjung schrieb:
> Allerdings würde ich es auch gerne ohne AD-Wandlung lösen wenn es denn
> geht.

Der ADC steht dann wegen der Verwendung des Multiplexers auch nur noch 
begrenzt zur Verfügung.
OP #3456708
Lesenswert?

@Sean: Das ist ein Fertiger LED-Controller mit Fernbedienung, den wollte 
ich eigentlich nicht komplett ersetzten, das ist mir dann doch zu viel 
Arbeit.

@Ralph: Ich möchte eigentlich schon mit den Komponenten arbeiten, die 
ich gerade da habe. Soll ja auch ein Einzelstück werden und keine Serie.

viele Grüße

Biertrinker

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren