Gast
#1567302
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