BLDC Motor als Rotationsencoder

Gast #2783567
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
Wolfgang schrieb:
> Wie kommst du drauf, dass das ein BLDC Motor sein soll?

Das wird irgendwo in den Kommentaren des Videos vermutet:

> looks more like a hard drive spindle motor which is a BLDC motor, not a
> stepper. BLDC motors have integral hall switches (usually)
Gast
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.