Hallo zusammen, ich habe hier einen Atmega, der über einen Hallsensor 4905 am Eingang INT0 Impulse zählt und somit die Drehzahl eines Motors in ms/Umdrehung in eine Variable schreibt. Das klappt soweit alles ausgezeichnet. Nun soll beim Beschleunigen irgendwann ein Schaltvorgang ausgelöst werden und ein Ausgang gesetzt werden. Da der Motor dabei etwas abgebremst wird, fällt die Drehzahl etwas ab, der Motor beschleunigt wieder und der Schaltvorgang wiederholt sich endlos. Ich benötige also vermutlich die Funktion eines Schmitt-Triggers, der beim Schalten einen gewissen Spielraum zulässt im Programm für den Schaltvorgang. Wie programmiert man so eine Funktion in C? Hysterese, ok - aber dieses annähernde Gegenteil? Alle meine Ideen haben nicht gegriffen, kann wer helfen? Grüße aus dem nun kühleren Ruhrpott Klaus
Das ist eine Hysterese.
1 | if (drehzahl > (schwelle + Hysterese)) |
2 | SCHALT_AUSGANG_EIN; |
3 | else if (drehzahl < (schwelle - Hysterese)) |
4 | SCHALT_AUSGANG_AUS; |
Sehr einfach also.
Hc Zimmerer schrieb: > Das ist eine Hysterese. Du hast Recht! > Sehr einfach also. Nochmals Recht - im Normalfall. Hier liegt das etwas komplizierter: dieser Schaltvorgang soll den Motorantrieb von "analogem Beschleunigen" auf Synchronbetrieb umschalten. Also in etwa so: >
1 | > if (drehzahl > (schwelle + Hysterese)) |
2 | > Synchronbetrieb; |
3 | > else if (drehzahl < (schwelle - Hysterese)) |
4 | > beschleunigen; |
5 | >
|
Die Sinuserzeugung für den Synchronbetrieb steht unter "if" und wird damit eingeschaltet. Beim nächsten Schleifendurchlauf ist durch die Umschaltung die Drehzahl leicht abgefallen und damit wird "else if" angesprungen. Weil "schwelle - Hysterese" noch nicht erreicht ist, bleibt der Motor einen Moment antriebslos und beschleunigt dann wieder..... Bin für jede Idee dankbar! nochmals Grüße aus dem Ruhrpott Klaus
Du setzt dir in den if Abfragen nur ein Flag. if (drehzahl > (schwelle + Hysterese)) sync = true; else if (drehzahl < (schwelle - Hysterese)) sync = false; if (sync) { // Sinus generieren } else { ... }
Hallo Hc Zimmerer, hallo Fabian, Bingo! Etliche Male Danke dafür! Wieder einen Schritt weiter. Wie ihr schon gemerkt haben werdet, bin ich ziemlicher "Anfenger" in der Materie Mikrocontroller und dieser Sprache. Das Grundprogramm stammt von einem netten Kollegen, der jetzt seinen wohlverdienten Urlaub genießt, ich tue aber schon, was ich kann, damit ich weiterkomme. Ich hoffe, ich darf mich nochmals melden, wenn die nächste größere Hürde kommt.....
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.