Guten Tag allerseits, ich wende mich mit einer wahrscheinlich simplen, aber für mich nicht ganz einleuchtenden Frage an Euch: Und zwar bin ich dran, eine PWM-Anwendung zu programmieren, welche ich softwaremäßig im Maximalstrom limitieren kann. Genauer: Die PWM-Auflösung beträgt 0 bis 255, d.h. 255 entsprechen 100% des Stroms. Der Wert kommt seriell über ein DMX-Pult. Um den maximalen Strom jedoch anwendungsspezifisch in der Höhe limitieren zu können, möchte ich einfach den Wert 0 bis 255 verändern. Meine Vorstellung wäre, dass das Pult immer 0 bis 255 sendet, wenn ich den Strom jedoch auf maximal 50% limitieren will, nach der Berechnung nur noch 0 bis 127 an den PWM-Ausgang gelangt. Danke im Voraus F.J.
1 | if (inputPWM > pwmMax) |
2 | inputPWM = pwmMax; |
macht das, was du beschrieben hast. Das wusstest du aber vermutlich selber. Also: Was ist die Frage? Oliver
Franz Josef wrote: > Genauer: Die PWM-Auflösung beträgt 0 bis 255, d.h. 255 entsprechen 100% > des Stroms. Der Wert kommt seriell über ein DMX-Pult. Um den maximalen > Strom jedoch anwendungsspezifisch in der Höhe limitieren zu können, > möchte ich einfach den Wert 0 bis 255 verändern. Meine Vorstellung wäre, > dass das Pult immer 0 bis 255 sendet, wenn ich den Strom jedoch auf > maximal 50% limitieren will, nach der Berechnung nur noch 0 bis 127 an > den PWM-Ausgang gelangt. Wenn ich das richtig verstanden habe willst du den ankommenden Wert neu skalieren, so daß der Eingangswert z.B. halbiert wird bei 50%? Dann brauchst du den ankommenden Wert (0-255) einfach nur durch 2 zu teilen. Oder wenn du in % arbeiten willst eben teiler=100/prozent und neu=alt/teiler. Diese Variante funktioniert mit 8Bit Ganzzahlen natürlich immer nur mit Rundungsfehler. Wenn du mit Fließkommazahlen arbeiten willst kannst du auch direkt neu=alt*prozent/100 rechnen. Aber Fließkommazahlen sind immer sehr rechenaufwendig und brauchen viel Code. Oder willst du den ankommenden Wert einfach nur bei 50% abschneiden? Dann kannst du die eben schon erwähnte Variante benutzen. Ciao, Rainer
Hallo, die Version, den Maximalwert zu scalieren, ging auch noch. nimm den kommenden Wert 0...255 (wert). Nimm die maximalen Strom 0...255 (strom). Nimm (strom * wert) / 256. Ist in ASM ein mul mit 2 Takten und ein mov aus r1, sollte auch in C schnell genug sein. Gruß aus Berlin Michael
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.