Forum: Mikrocontroller und Digitale Elektronik Projekt P-Reg: Gabellichtschranke Drehzahl auswerten


von Torsten (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Torsten (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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