ich habe eine Pumpe und möchte diese mit PWM in ihrer Förderleistung steuern. Startwert ist 100% und Endwert sollen z.B. 50% Förderleistung sein. Dazwischen soll die Spannung in gleichmässigen Schritten abnehmen und anschliessend wieder gleichmässig zunehmen, bis sie nochmal 100% erreicht. (und das dann in einer Endlosschleife)5% Schritte wären schon absolut ausreichend, da ich Druckschwankungen durch die grossen Spannungspruenge vermeiden möchte. Hat da vielleicht jemand ne Idee
Vielen Dank fuer eure Hifle
Kannst Du mal ein Bild reinhängen wie die Kurve letztendlich aussehen soll, was für eine Periodendauer der Endlosschleife willst Du haben, und bist Du sicher, dass Du die Spannung verändern willst, und nicht nur das Impuls-Pause-Verhältnis?
mhhh ja das mit analogWrite kenn ich ja...aber geht es nicht, dass das Programm automatisch die tastverhältnisse anpasst! Also dass man nicht jeden Wert von Hand eingeben muss. Ich brauch irgendwie etwas fuer ne lineare Abnahme :-)
also meine Zeit messe ich zu Beginn....diese teile ich dann ich gleichlange intervalle auf, wobei nach jedem Intervall das Tastverhältnis zuerst verringert und dann in den gleichen Intervallen wieder erhöht werden soll..ich hoffe es ist einigermassen verständlich ;-) Vielen vielen Dank
Ach so...könntest du viell. diese Anweisung ein bisschen erklären :-)
ZUERST wird “modulo 100” gerechnet.
Jogurt hätte auch sagen können:
if (steps>100) steps=0;
Dadurch würde man aber die Information verlieren, der wie vielte Zyklus jetzt gerade vorliegt…
DANN wird auf 255 skaliert. Normalerweise würde man denken:
steps/100255
aber / ist eine Ganzkomma-Operation, und der Rest geht dadurch verloren… Macht man es umgekehrt
steps255/100
dann ist das Resultat etwas genauer; man muss nur aufpassen, dass es bei der Multiplikation nicht zu einem Überlauf kommt…
Es soll aber während dieses Zyklus nicht nur rauf- sondern auch wieder runtergezählt werden, deshalb nutzt Jogurt die Werte 128 bis 255, um herunterzuzählen
if (value>=128) value = 255-value;
(Ich glaube, er hat sich da beim < vertan…)
Das ist sehr guter Code - bitte verstehen und nachmachen
Jogurt hätte auch sagen können:
if (steps>100) steps=0;
Nicht ganz, das Äquivalent zu “steps%=100” wäre “while (steps>=100) steps = steps-100;”. Dabei bleibt der Übertrag erhalten.
if (value>=128) value = 255-value;
(Ich glaube, er hat sich da beim < vertan…)
Nein, Jimmy83 will laut Diagramm PWM mit einer geglätteten Spannung zwischen 2,5V und 5V haben, daher muss sich value zwischen 128 und 255 bewegen. Aus diesem Grund mache ich die Subtraktion von 255 nur, wenn der Wert von value kleiner ist als 128, das hebt ihn dann wieder über diese Grenze.
Das ist sehr guter Code - bitte verstehen und nachmachen
Ich habe oben gesagt, dass mein "if" NICHT das gleiche ist, sondern nur eine nahe liegendere Möglichkeit darstellt. Ich wollte nicht das modulo erklären (=Deine Schleife), sondern den Sinn.
Ich hatte die Kurve nicht richtig angeguckt; so wie ich das verschlimmbessert habe, ergibt sich dann ein Mittelwert von 1,25V :-)
Und entschuldige, dass ich das "h" vergessen habe ;D