Forum: Mikrocontroller und Digitale Elektronik Gescheiter Programmablauf


von Stephan R. (Firma: FHK) (nautosteer)


Lesenswert?

Hallo!
Frage: Teil eines Programmablaufs ist das Ansteuern eines 
Linearantriebes mittels zweier Ports (Ein-/Ausfahren) und der 
Rückmeldung durch den Spannungswert eines Potis vom Linearantrieb zum 
ADC eines AVR.
Das Ein-und Ausfahren auf den Sollwert kann einige Sekunden in Anspruch 
nehmen, natürlich soll der Programmablauf so lange nicht still stehen.
Andererseits sollen eventuell auftretende Verzoegerungen in anderen 
Programmteilen nicht zu einem Überschwingen durch zu langes Warten auf 
die nächste Rückmeldungs-Messung führen.
Wie ist da eine vernünftige Herangehensweise?

von Karl H. (kbuchegg)


Lesenswert?

Stephan R. schrieb:

> Wie ist da eine vernünftige Herangehensweise?


Wie immer:
Ein Timer erzeugt mit einer ISR einen 'Basistakt' in Form von 
regelmässigen ISR Aufrufen. Und in der ISR passiert dann das was
a) kurz genug für eine ISR ist
b) regelmässig gemacht werden muss, wie zb die Überwachung von
   Endschaltern oder auch eine Überwachung der Endposition oder
   ein Zyklus durch den PID Regler.


Es ist eigentlich immer das gleiche: In einem realen Programm kommt man 
um einen Timer und seine regelmässigen ISR Aufrufe nicht herum. Sie sind 
der Schlüssel zu einem Programm welches scheinbar mehrere Dinge 
gleichzeitig bzw. irgendwelche Aktionen im Hintergrund erledigt.

von Stephan R. (Firma: FHK) (nautosteer)


Lesenswert?

Klingt sinnvoll.
Ich stelle mir nur die bloede Situation vor, dass die "Rückmeldngs-ISR" 
zwar dreimal in der Sekunde feststellt, dass ein Wert längst am Anschlag 
ist, dann aber zurück ins Hauptprogramm springt, wo vielleicht grad eine 
ungünstige Schleife verhindert, dass die Stelle, an der der zugehoerige 
Aktor abgeschaltet wird, erst viel später erreicht wird.
Vielleicht denk ich nur zu kompliziert, ich probiers erstmal...
Danke!

von Karl H. (kbuchegg)


Lesenswert?

Stephan R. schrieb:
> Klingt sinnvoll.
> Ich stelle mir nur die bloede Situation vor, dass die "Rückmeldngs-ISR"
> zwar dreimal in der Sekunde feststellt, dass ein Wert längst am Anschlag
> ist, dann aber zurück ins Hauptprogramm springt, wo vielleicht grad eine
> ungünstige Schleife verhindert, dass die Stelle, an der der zugehoerige
> Aktor abgeschaltet wird,

Und wer oder was hindert dich daran, dass die ISR welche die 
Überschreitung feststellt, gleich selber den Aktor abschaltet?

richtig: niemand

Als Faustregel: In einer ISR hat nichts verloren
LCD Ausgabe
UART AUsgabe
komplexere Berechnungen zb mit sin/cos oder sonstigen Floating Point 
Schnickschnack.

Aber ein paar If mit einem Portzugriff, sind nicht wirklich ein Thema, 
das dir ín einer ISR Kopfzerbrechen machen müsste.
Die Daumenregel "ISR so kurz wie möglich" bedeutet nicht, dass man gar 
nichts machen darf ausser einem Job-Flag setzen.

von oldmax (Gast)


Lesenswert?

Hi
Mal eine kurze Frage zur Laufzeit deines Programmes: Wie hoch taktest du 
deinen Controller ?
Gut, ich schreibe meine Programme in Assembler, da ist es schon möglich, 
die Zykluszeit zu berechnen. Für eine Steuerung "Fahren bis Endschalter" 
oder "Fahren auf Sollwert" dürfte die Zykluszeit deines Programmes bei 
8MHz ungefähr 1 mSek. (ca. 4000 Befehle) dauern. Das ist schon mächtig 
viel Code... ich glaub da eher an 25% von diesem Wert wird im Zykus 
durchgeackert.... Daher denk ich, dürftest du kein Timing-Problem haben. 
Ansonsten bleibt noch höherer Takt, Aufteilung von Prozessen usw.
Gruß oldmax

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stephan R. schrieb:
> zu einem Überschwingen durch zu langes Warten

Ein Überschwingen könnte durch einen Regler (PI oder PID) verhindert 
werden. Die Ist Grösse ist in diesem Fall das Poti und die Sollgrösse 
der Wert des Potis bei Ende bzw. Anfang des Weges. Da es sich um einen 
AVR handelt, könnte dir die AppNote AVR221 helfen, ein einfacher, gut 
anpassbarer PID Regler in C.

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
Noch kein Account? Hier anmelden.