www.mikrocontroller.net

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


Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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#...

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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.