Hallo, ich mal wieder. Gesamtprojekt ist, eine Regelung für einen DC-Motor zu bauen. (P- oder PI- reicht erstmal). PWM-Ausgang, welches eine H-Brücke treibt, läuft und kann von 1-400 geregelt werden, Frequenz 20 kHz. void Geschwafel_Ende(); Problem nun: Zustandsrückführung, um Regelung zu bauen. Habe eine Gabellichtschranke 2-Kanal, aber erstmal soll nur die Drehzahl ausgelesen werden (hab schon ein Programmcode welcher mir die absolute Position angibt, er wertet die Drehrichtung mittels Graycode aus und erhöht/verkleinert eine Variable jeweils um 1). Enc22 von Maxon, f_max = 20 kHz bei 100 Strich pro Umdrehung, kann also bis 12000 UPM messen. Motor macht 8820 UPM als max. Erstmal meine Rechnung, bevor ich programmiere, ist sie so richtig? F_CPU ist 16 Mhz, Periodendauer T=62,5 ns 8820 UP/min = 147 UP / sek = 147*100 Imp / sek = 14,7 kHz => T=68 us Ich wollt nun weiterhin einen Zähler nehmen, der auf falling/rising edge triggert und damit die Impulsbreite bestimmen. Angenommen, Prescaler Timer = 256, macht also 256 * 62,5 ns = 16 us pro Zählererhöhung um "1". => 4 Zählimpulse bei 8820 UPM mit einem Fehler von 0,25*T_pre256 Der Zähler zählt nun bis 2^16 hoch, also 65536, macht eine Dauer von 65536*16 us = etwas über 1 Sek. Fazit: könnte damit alles von 8820 UPM bis 1 UPM abdecken. FRAGE 1: richtig gerechnet? ______________________________________________________________________ __ Programmierung: Der erste ISR setzt den Zähler auf 0 (rising edge) der zweite gibt den Zählerstand per volatile raus und setzt dann den Zähler wieder auf 0. FRAGE 2: Wie unterscheide ich das ganze, ohne möglichst viel in der ISR zu machen? Überlegung war, jemals mit einer if zu checken, ob eine Variable 0 oder 1 ist und somit zu gucken, ob er nun den Zählstand nur resetten soll oder erstmal den Zählstand ausgibt und dann resettet. FRAGE 3: Die Regelung an sich soll mit ca. 1 kHz ablaufen, wird es da irgendwie zeitkritisch bei Verwendung einer ISR ? Muss dann ja noch, sobald ich die Periodendauer habe, die IST-Drehzahl berechnen, dann die Regeldifferenz und daraus letztendlich die Ausgangsgröße in Form des Tastverhältnisses der PWM. Vielen Dank für eure Antworten
Gegenfrage: In welchem Drehzahlbereich musst du eigentlich regeln und ehe du da jetzt irgendwelche Rechnungen präsentierst, solltest du erst mal Festlegen, wass denn eigentlich dein Messprinzip sein soll: Willst du Periodendauer messen (Zeit zwischen 2 Pulsen) oder willst du Pulse zählen (Anzahl Pulse zwischen 2 Zeitmarken) Frage: Würde es nicht genügen, wenn du einfach nur die Zeitdauer von einer steigenden Flanke zur nächsten misst? Dann brauchst du in ISR nicht viel machen bzw. mit dem Input Capture könnte die Hardware das abmessen einer Periodendauer fast ganz von alleine machen Frage: Ein Motor ändert ja seine Drehzahl nicht besonders abrupt. Anstelle deiner Enocderscheibe würde es unter Umständen genügen, die Drehzahl dadurch zu Messen, dass du nur 1 Punkt der Welle betrachtest, du also ein Signal bekommst, wenn die Welle 1 ganze Umdrehung gemacht hat. Normalerweise reicht das völlig aus.
Letztendlich soll die Regelung mit 1 kHz ablaufen, somit sollte ein Regelzyklus 1 ms dauern. D.h. es würde wohl reichen, im Zeitintervall einer Millisekunde die Impulse zu zählen, um dann anhand der Impulszahl die aktuelle Drehzahl , die Regelabweichung und die Stellgröße auszurechnen. Dazu habe ich ja bereits diesen Code: http://www.mikrocontroller.net/articles/Drehgeber#Solide_L.C3.B6sung:_Beispielcode_in_C Dann muss ich aber nach obiger Berechnung alle 68 us (Bei höchster Drehzahl tritt in dieser Dauer ein Impuls auf) gucken, damit mir kein Impuls beim Zählen verloren geht, oder ? Mein Betreuer der Arbeit (Bachelorarbeit) ist fest der Meinung, hier muss mit ISR gearbeitet werden.
Um eine ISR wirst du nicht rumkmmen. Die Frage ist nur was du in dieser ISR zutun hast :-) Such doch mal im Forum nach Frequenzzähler oder Drehzahlmesser. Es ist ja nicht so, daß so etwas jetzt DIE Weltneuheit wäre
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.