Forum: Mikrocontroller und Digitale Elektronik ARM cortex m3 BLDC-Motor Hall Sensoren via QEI auswerten


von Andi B. (rc23)


Lesenswert?

Hallo,

ich bin kein Experte in Sachen Programmierung und µC und würde mich über 
jeder Hilfe freuen.

Es geht um folgendes, ich habe einen BLDC-Motor bei dem ich die Drehzahl 
anhand der integrierten Hall-Sensoren auswerten möchte.

Ich habe den Code für die Motor-Kontrolle bereits gefunden, blicke da 
aber nicht so richtig durch.

Mir geht es nur darum, die Flanken zu erkennen, zu zählen und daraus die 
Drehzahl zu bestimmen. Jetzt sind da aber noch viele andere Funktionen, 
die ich nicht brauche. Nur weiß ich nicht genau, wie ich es schaffe bzw. 
was ich alles löschen kann um nur die lpc17xx_qei.c im main.c laufen zu 
lassen.

Hat jemand einen Rat oder womöglich einen Lösungsansatz?

Ich bedanke mich im voraus!

von leluno (Gast)


Lesenswert?

Zum erkennen von Flanken reicht eigentlich ein normaler Pin der auf 
Eingang geschaltet wird. Die Berechnung der Drehzahl müsste über einen 
Timer erfolgen. Die speziellen Funktionen für ein Drehfeld brauchst du 
dann gar nicht.

von Andi B. (rc23)


Lesenswert?

leluno schrieb:
> Zum erkennen von Flanken reicht eigentlich ein normaler Pin der auf
> Eingang geschaltet wird. Die Berechnung der Drehzahl müsste über einen
> Timer erfolgen. Die speziellen Funktionen für ein Drehfeld brauchst du
> dann gar nicht.

Vielen Dank für die Antwort.

In meinem Fall habe zwei Signale, um die Drehrichtung bestimmen zu 
können.
Und ich habe gelesen, dass der Quadratur Encoder dafür am besten 
geeignet ist.
Hast du zufällig einen Link, wo dein Lösungsvorschlag beschrieben wird?

von Karl K. (leluno)


Lesenswert?

das ist ein einfacher Impulszähler:
1
//Messung Zeit für Durchfluss 1000l/h => 92 imps/sec
2
//Geschwindigkeit timer0 31 ticks/sec
3
p1_l_hou=0;
4
timer0_imp=0;
5
while(timer0_imp<93){
6
while(WMZ==1&&timer0_imp<93);
7
while(WMZ==0&&timer0_imp<93);
8
p1_l_hou++;  
9
}


Es wäre natürlich schöner wenn das mit dem LPC-Motor-Control 
funktionieren würde. Das Manual ist da aber etwas knapp. Vielleicht eine 
Frage für den NXP-support. Würde mich auch interessieren.

von Lothar (Gast)


Lesenswert?

Die mbed Library ist etwas einfacher nachzuvollziehen als die LPCOpen 
Library hat aber dieselbe Funktion:

http://mbed.org/cookbook/QEI

von Andi B. (rc23)


Lesenswert?

Danke euch!

Die mbed library ist wirklich übersichtlicher und einfacherer zu 
verstehen.

Aber wenn ich das richtig verstanden habe, ist ja die QEI.cpp in c++ 
geschrieben. Bekomme ich da nicht ein Problem wenn die bereits vorhanden 
SW in C geschrieben wurde?

von Karl K. (leluno)


Lesenswert?

im manual ist unter 26.6.3.12 ein "QEI-Velocity Capture Register" 
beschrieben. Aus diesem Wert müsste sich doch die Geschwindigkeit direkt 
berechnen lassen?

von Andi B. (rc23)


Lesenswert?

karl k. schrieb:
> im manual ist unter 26.6.3.12 ein "QEI-Velocity Capture Register"
> beschrieben. Aus diesem Wert müsste sich doch die Geschwindigkeit direkt
> berechnen lassen?

Wahrscheinlich eine blöde Frage, aber wie komme ich an den Wert ran bzw. 
wie kann ich mir den anzeigen lassen?

von Andi B. (rc23)


Lesenswert?

Ich habe heute versucht das Programm zum laufen zu bringen.
Dabei habe ich das Blinky-Projekt für das LPC1768 genommen und dort die 
Funktion qei.cpp und die dazugehörigen Header hinzugefügt.

Jetzt habe ich zwei errors drin, die ich einfach nicht wegbekomme.
Und zwar:

compiling qei.cpp...
qei.cpp: error: L6002U: Could not open file .\flash\qei.o: No such file 
or directory
".\Flash\Blinky.axf" - 1 Errors, 0 Warning(s).

Der gleiche Fehler kommt auch wenn ich versuche die main.cpp zu 
überestzen, nur eben mit main.o.

Das Verzeichnis existiert und beinhaltet andere *.o Files.

So wie ich das verstanden habe handelt es sich um einen Linker Fehler.
Kann mir jemand sagen wie ich die errors weg kriege?
Muss ich etwas in den Einstellungen vom µVision ändern?

von Lothar (Gast)


Lesenswert?

mbed ist ein anderer Compiler man muss es also als uVision Projekt 
exportieren:

http://mbed.org/handbook/Exporting-to-uVision

Die Alternative wäre, das qei.cpp so abzuändern, dass es mit den uVision 
Libraries compiliert, ist aber zuviel Aufwand.

Noch ein anderer Vorschlag: ich nutze statt uVision die Konkurrenz also 
IAR Embedded Workbench. Da ist ein lauffähiges Projekt dabei:

LPC1700CMSIS\Examples\QEI

Gibt es bei uVision eventuell auch, aber wenn nicht, einfach umsteigen.

von Karl K. (leluno)


Lesenswert?

du kannst die register direkt auslesen:

uint32_t test_rpm= QUEICAP;

druck dir das Manual Chapter 26 QEI (besser das ganze Manual) aus und 
arbeite es von der Initialisierung an  ab.


Wie ist denn dein Schaltungsaufbau?

von Karl K. (leluno)


Lesenswert?


von Andi B. (rc23)


Lesenswert?

Ich habe ein Keil MCB1760 Evaluation Board.
Jetzt sitze ich schon eine Weile dran, schaffe es aber nicht die mbed 
Software zu flashen.

Ist das mit dem Board überhaupt möglich?

Ich habe es als µVision Projekt exportiert und das kompelieren läuft 
auch fehlerfrei. Wie ich das Ganze aufs Board bekomme ist mir aber nicht 
klar.

In einer Anleitung von Keil steht, dass man die *.bin Datei einfach per 
drag&drop in den MBED drive kopieren kann.

Mein Board wird aber nicht als Laufwerk angezeigt.
Gibt es irgendwelche Einstellungen die ich beachten muss?

von Lothar (Gast)


Lesenswert?

Andi B. schrieb:
> In einer Anleitung von Keil steht, dass man die *.bin Datei einfach per
> drag&drop in den MBED drive kopieren kann.

Das geht aber nur, wenn auf dem MCB1760 der USB-Bootloader drauf ist. 
Das ist aber wahrscheinlich bei Auslieferung nicht der Fall.

Dann muss mit dem seriellen Bootloader geflasht werden, mit FlashMagic:

http://www.flashmagictool.com/

Dafür benötigt man aber RS232 am Rechner oder ein USB-seriell-Kabel z.B.

http://www.conrad.de/ce/de/product/558711/LogiLink-USB-20-Seriell-Adapter-USB-20-Stecker-A-D-SUB-Stecker-9pol-D-SUB-Stecker-25pol-Schwarz-12-m?ref=searchDetail

von Andi B. (rc23)


Lesenswert?

Lothar schrieb:
> Andi B. schrieb:
>> In einer Anleitung von Keil steht, dass man die *.bin Datei einfach per
>> drag&drop in den MBED drive kopieren kann.
>
> Das geht aber nur, wenn auf dem MCB1760 der USB-Bootloader drauf ist.
> Das ist aber wahrscheinlich bei Auslieferung nicht der Fall.
>
> Dann muss mit dem seriellen Bootloader geflasht werden, mit FlashMagic:
>
> http://www.flashmagictool.com/
>
> Dafür benötigt man aber RS232 am Rechner oder ein USB-seriell-Kabel z.B.
>
> 
http://www.conrad.de/ce/de/product/558711/LogiLink-USB-20-Seriell-Adapter-USB-20-Stecker-A-D-SUB-Stecker-9pol-D-SUB-Stecker-25pol-Schwarz-12-m?ref=searchDetail

Ok, ob der Bootloader drauf ist weiß ich nicht und so ein Kabel habe ich 
auch nicht. Schade.

Die LPCopen libraries sind einfach nicht verständlich genug und das 
manual ist mit meinem Wissensstand auch keine große Hilfe :(

von Lothar (Gast)


Lesenswert?

Ist beim MCB1760 nicht ein ULINK-ME Programmieradapter dabei?

Damit kann man das Binary aus uVision heraus drauf schieben.

von Andi B. (rc23)


Lesenswert?

Doch ein ULINK2-ME Adapter hab ich, aber damit hab ichs nicht geschafft 
es drauf zu flashen. Vielleicht mache ich auch etwas falsch.

Ich habe bloß diese Anleitung dafür gefunden:
http://www.keil.com/appnotes/docs/apnt_207.asp

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.