Forum: Mikrocontroller und Digitale Elektronik BLDC Encoder mittels Operationsverstärker


von Encoder (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich bin zwar mit Mikrocontrollern einigermaßen vertraut, aber 
Operationsverstärker sind ein neues Thema für mich. Insofern gehe ich 
fast davon aus, dass meine Schaltung nicht perfekt ist. Konstruktive 
Kritik ist natürlich erwünscht ;).

Ich versuche einen Brushless DC Motor mittels eines 
Operationsverstärkers als Encoder zu benutzen. Der Operationsverstärker 
in meinem Fall ist ein LM358. Der Motor ist ein "MYSTERY D2825-5000 5000 
Rpm/V Brushless Outrunner", welchen ich noch von meinem Modellflieger 
über habe. Angeschlossen ist das Gebilde letztendlich an einem ATmega88.

Die Schaltung sieht im Wesentlichen so aus wie im Bild im Anhang dieses 
Beitrags angedeutet. Die drei "freien" Leitungen auf der linken Seite 
sind mit den 3 Phasen des BLDC Motors verbunden, die zwei "freien" 
Leitungen auf der Rechten Seite führen zu je einem Pin an meinem 
ATmega88.

Der Mikrocontroller schaut sich dann den jeweils aktuellen Zustand der 
zwei Pins an und vergleicht diesen mit dem vorhergehenden Zustand und 
inkrementiert bzw. dekrementiert eine Variable. Der relevante Ausschnitt 
sieht in etwa so aus:
1
uint8_t val = (PINB & 0x03);
2
3
if (val == last) {    continue;
4
5
} else if (last == 1 && val == 3) {
6
    increase();
7
} else if (last == 1 && val == 0) {
8
    decrease();
9
} else if (last == 2 && val == 0) {
10
    increase();
11
} else if (last == 2 && val == 3) {
12
    decrease();
13
}
14
15
last = val;

Prinzipiell funktioniert das Ganze auch schon. Es ist nur so, dass zum 
Teil (wenn man langsam dreht, oder sich die Drehung zum Ende hin von 
selbst verlangsamt) "Schritte" verloren gehen bzw. sogar falsch, d.h. 
als Schritte in die "falsche" Richtung erkannt werden. Meine Erklärung 
dafür ist, dass der Operationsverstärker nicht "stark" genug ist und 
dadurch "Zustände" verloren gehen.

Bevor ich jetzt aber aus solchen Vermutungen heraus einen (teuren) 
empfindlicheren Operationsverstärker erwerbe (gäbe es dafür 
Vorschläge?), wollte ich fragen, was ihr zu dem Ganzen sagt? Lässt sich 
mit dem aktuellen Aufbau mehr herausholen?

Leider steht mir kein Oszilloskop zur Verfügung. Im Min-Max Modus meines 
Multimeters messe ich bei "langsamer" Drehung des BLDC Motors in etwa 
0,1 - 1 mV zwischen je zwei Phasen. Das liegt halt einfach unter dem 
Wert, für den der LM358 spezifiziert ist. Nur ist das mit dem Multimeter 
eher eine Schätzung als eine Messung ;).

Im Übrigen frage ich mich auch warum bei vielen (allen?) Aufbauten mit 
Komparatoren Widerstände verwendet werden? Dienen diese lediglich zur 
Strombegrenzung oder haben die auch einen anderen Zweck?

Vielen Dank!

von Klaus D. (kolisson)


Lesenswert?

Hi mein lieber,
schau mal hier auf Seite 13.

Google nach "Atmel doc7658-2.pdf"

da siehst du die Schaltung für Back EMF.

Gruss Klaus

von Encoder (Gast)


Lesenswert?

Klaus De lisson schrieb:
> da siehst du die Schaltung für Back EMF.
Wobei mir nicht ganz klar ist wie ich das auf meinem Fall anzuwenden 
habe? Ich benutze ja nur zwei Operationsverstärker. Außerdem sind das 
recht viele Bauteile, lässt sich das nicht irgendwie weiter 
vereinfachen?

von Klaus D. (kolisson)


Lesenswert?

Encoder schrieb:
> Ich benutze ja nur zwei Operationsverstärker.

Das ist bei 3 Phasen ja wohl schon ein Fehler ... oder ?
Die gezeigte Schaltung ist die, die man verwendet um Sensorlose
BLDC in der Drehung zu überwachen.

Da dein BLDC ja nur 3 der 6 Kabel nach aussen geführt hat musst du
zumindest ersteinmal einen "virtuellen Sternpunkt" erzeugen.
Das kannst du tun, indem du an jedem der 3 Ausgänge des Motors einen
1kOhm Widerstand anbringst und das jeweilig andere Ende der Widerstände
miteinander verbindest. Diese Sternförmige Verbindung ist dann an den
GND deine Schaltung anzubringen.
Danach hast du an jedem deiner 3 Motoranschlüsse ein Signal gegen diesen 
Sternpunkt und deiner Masse.
Damit später nix kaputt geht machst du dann an jedem dieser 3 Ausgänge
noch eine einfache Diode dran (1N4148 mit Anode an Motor).
An den Kathoden hast du dann das Drehsignal.
(3 positive Pulse per Umdrehung)

Gruss Klaus

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Mit welcher Frequenz tastest du den Motor (Port B) ab?
Warum prüfst du nur 4 Konstellationen?
1
if (val == last) {
2
    continue;
3
} else if (last == 1 && val == 2) {
4
    increase();
5
} else if (last == 1 && val == 0) {
6
    decrease();
7
} else if (last == 3 && val == 0) {
8
    increase();
9
} else if (last == 3 && val == 2) {
10
    decrease();
11
}
Währe dies nicht sinnvoller?

Encoder schrieb:
> Es ist nur so, dass zum
> Teil (wenn man langsam dreht, oder sich die Drehung zum Ende hin von
> selbst verlangsamt) "Schritte" verloren gehen bzw. sogar falsch, d.h.
> als Schritte in die "falsche" Richtung erkannt werden.
Wie schnell ist langsam?

von Encoder (Gast)


Lesenswert?

Klaus De lisson schrieb:
> Das ist bei 3 Phasen ja wohl schon ein Fehler ... oder ?
Wieso? Funktionieren tut es ja wunderbar. Das Fehlverhalten tritt ja nur 
auf, wenn sich der Motor nicht schnell genug dreht.

Klaus De lisson schrieb:
> Die gezeigte Schaltung ist die, die man verwendet um Sensorlose
> BLDC in der Drehung zu überwachen.
Ich bin keineswegs ein Experte, aber das was ich bisher über Back EMF 
gelesen habe, hilft mir so nicht weiter. Back EMF wird ja dazu verwendet 
um sensorlos die Kommutierung bei BLDC Motoren durchführen zu können. 
Überall steht aber beschrieben, dass das nur ab einer bestimmten 
Mindestgeschwindigkeit zuverlässig funktioniert.

M. K. schrieb:
> Mit welcher Frequenz tastest du den Motor (Port B) ab?
Zur Zeit passiert das alles in einer recht kurzen Hauptschleife. Diese 
besteht aus knapp 50 Instruktionen. Der Controller läuft mit 8 MHz. Das 
macht grob überschlagen 160 kHz.

M. K. schrieb:
> Warum prüfst du nur 4 Konstellationen?
Ich habe ja nur zwei Pins. Da gibt es eben 2^2 verschiedene 
Konstellationen. Das wird hier 
(Beitrag "BLDC Motor als Rotationsencoder") auch nochmal etwas 
ausführlicher erklärt.

M. K. schrieb:
> Währe dies nicht sinnvoller?
Das macht keinerlei Unterschied.

M. K. schrieb:
> Wie schnell ist langsam?
Schwer zu sagen. Im Prinzip tritt der Fehler unmittelbar vor dem 
Stillstand des Motors auf - unabhängig davon wie schnell man ihn 
ursprünglich andreht.

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.