BLDC Motor als Rotationsencoder

Gast #2783567
Lesenswert?

Ich bin gerade auf folgendes Video gestoßen 
(https://www.youtube.com/watch?v=bHgAbA7qq0w) und würde das Ganze nun 
gerne nachbauen.

Ich bin gerade dabei, dass Prinzip zu verstehen. Leider bin ich mit der 
Ansteuerung (bzw. dem Auslesen) von BLDC Motoren nicht so ganz vertraut.

Auf der im Video verlinkten Webseite 
(http://www.fleurey.com/franck/pmwiki.php?n=Main.HDDEncoder) findet man 
neben einer SKizze auch den Quellcode.

Ich habe mal die Schaltung als Skizze angehängt.

Im Quellcode passiert nun (unter anderem) folgendes:
1
int enc_last = 0;
2
void pool_enc() {
3
  int val =  ENCVAL;
4
  if (val == enc_last) return;
5
  else if (enc_last == 1 && val == 3) (*enc_dec)();
6
  else if (enc_last == 1 && val == 0) (*enc_inc)();
7
  else if (enc_last == 2 && val == 0) (*enc_dec)();
8
  else if (enc_last == 2 && val == 3) (*enc_inc)();
9
  enc_last = val;
10
}

Ich verstehe ich nicht, warum hier "enc_last" nur auf die Fälle "1" und 
"2" geprüft wird? Prinzipiell können doch auch die Fälle "0" und "3" 
auftreten. Des Weiteren wird "val" nur auf "0" und "3" geprüft, nicht 
aber auf "1" und "2". Vermutlich macht es schon Sinn so, nur verstehe 
ich leider nicht so ganz warum. Kann mir da einer von euch eben auf die 
Sprünge helfen?

Vielen lieben Dank!
Angehängte Dateien:
Gast #2783606
Lesenswert?

BLDC schrieb:
> Ich verstehe ich nicht, warum hier "enc_last" nur auf die Fälle "1" und
> "2" geprüft wird?

In den Spulen wird nur eine Spannung induziert, wenn das Feld sich 
ändert. Weil die Spulen versetzt angeordnet sind, wird immer nur in 
einer der beiden Windungen eine nennenswerte Spannung induziert, so dass 
die anderen Fälle nicht auftreten.
Gast #2783623
Lesenswert?

Wolfgang schrieb:
> In den Spulen wird nur eine Spannung induziert, wenn das Feld sich
> ändert. Weil die Spulen versetzt angeordnet sind, wird immer nur in
> einer der beiden Windungen eine nennenswerte Spannung induziert, so dass
> die anderen Fälle nicht auftreten.

Aber es wird doch "val" auf "3" hin geprüft. Hinter "val" steckt das 
Makro "ENCVAL", dahinter dann "(PINENC & 0x03)". Es sind also PC0 und 
PC1 gesetzt?
Gast #2783845
Lesenswert?

Das Signal, dass aus den Spulen herauskommt, ist ein Sinus und ein Cos 
bzw. -Cos (je nach Drehrichtung). Das Programm erzeugt die Zählimpulse, 
aus den Phasen, wo bei der vorhergehenden Ablesung nur eins der Signale 
high waren (enc_last=1 bzw. 2) und bei der folgenden beide gleich sind 
(val=0 bzw. 3)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren