Forum: Mikrocontroller und Digitale Elektronik bldc motor stottert


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von TM (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Seit etwas längeren sind wir daran einen BLDC Controller zu entwickeln, 
welcher dem aus dem Artikel Brushless-Controll für Modellbaumotoren 
nachempfunden ist.

Der Hardware aufbau ist annähernd der gleiche. Jedoch verwenden wir 
einen lpc1313 als Controller und lesen auch den mittelabgriff der Back 
EMF über einen ADC Channel ein.

Es ist nun soweit und ein erster Programmablauf wurde entwickelt und 
aufgespielt leidert resultiert dieser in einem stotternden Motor, 
welcher nicht in einen ruhigen verlauf Resultiert.

Eventuell könnte jemand sich mal mein Programmablauf anschauen.

Dieser ist recht abstrakt gehalten und das Prinzip sollte daher recht 
schnell zu erkennen sein.

Eventuell fällt ja jemanden direkt ein Fehler auf...

von dunno.. (Gast)


Lesenswert?

hey thomas,

also die eigentliche ansteuerung habe ich nicht nachvollzogen..

aber könnte es sein dass dein programm aufgrund von interrupts o.ä. 
einfach nicht isochron läuft..?

hast du mal versucht in der mainloop nen pin zu togglen und mal aufm 
oszi geschaut obs jittert?

gruß
jan

von dunno.. (Gast)


Lesenswert?

ups, namen falsch erinnert. tobias sollte das natürlich werden. ;)

von TM (Gast)


Lesenswert?

dunno.. schrieb:
> hey thomas,
>
> also die eigentliche ansteuerung habe ich nicht nachvollzogen..
>
> aber könnte es sein dass dein programm aufgrund von interrupts o.ä.
> einfach nicht isochron läuft..?
>
> hast du mal versucht in der mainloop nen pin zu togglen und mal aufm
> oszi geschaut obs jittert?
>
> gruß
> jan

Hey, das könnte tatsächlich sein alle 72 takte kommt mein systick 
interrupt, allerdings nur sehr kurz.

Oszi hab ich momentan leider nicht da. Aber ein Anhaltspunkt wäre das ja 
schonmal...

Eventuell fällt ja nochmehr auf, danke schonmal...

von dunno.. (Gast)


Lesenswert?

alle 72 cpu-takte ein interrupt?

schau dir mal die interruptroutine mitsamt kontextwechsel im 
disassembler an.. ich kenn jetzt die cortexe nicht, nur "alte" arm7, 
aber da ist mit dem kontextwechsel schon ein großteil der 72 takte 
verbraucht.....

so schnelle interrupts sind nicht zielführend. mach das langsamer.

oder hast du einen prescaler für den timer drin?

von TM (Gast)


Lesenswert?

dunno.. schrieb:
> alle 72 cpu-takte ein interrupt?
>
> schau dir mal die interruptroutine mitsamt kontextwechsel im
> disassembler an.. ich kenn jetzt die cortexe nicht, nur "alte" arm7,
> aber da ist mit dem kontextwechsel schon ein großteil der 72 takte
> verbraucht.....
>
> so schnelle interrupts sind nicht zielführend. mach das langsamer.
>
> oder hast du einen prescaler für den timer drin?

Ok das werde ich mal ändern, anstelle des systick_timers für delays nehm 
ich dann mal einen timer mit passenden prescaler

von dunno.. (Gast)


Lesenswert?

bist du eigentlich sicher dass du setPhase und StopWatch_Start bei jedem 
durchlauf machen willst, oder vielleicht nur beim eintritt in eine 
phase?

von TM (Gast)


Lesenswert?

TM schrieb:
> dunno.. schrieb:
>> alle 72 cpu-takte ein interrupt?
>>
>> schau dir mal die interruptroutine mitsamt kontextwechsel im
>> disassembler an.. ich kenn jetzt die cortexe nicht, nur "alte" arm7,
>> aber da ist mit dem kontextwechsel schon ein großteil der 72 takte
>> verbraucht.....
>>
>> so schnelle interrupts sind nicht zielführend. mach das langsamer.
>>
>> oder hast du einen prescaler für den timer drin?
>
> Ok das werde ich mal ändern, anstelle des systick_timers für delays nehm
> ich dann mal einen timer mit passenden prescaler

Stimmt!! Wird auch geändert

dunno.. schrieb:
> bist du eigentlich sicher dass du setPhase und StopWatch_Start bei
> jedem
> durchlauf machen willst, oder vielleicht nur beim eintritt in eine
> phase?

Bei setPhase hast du recht...Stopwatch_Start könnt ich mir vielleicht 
auch sparen, werd ich auch mal ändern...

von TM (Gast)


Lesenswert?

dunno.. schrieb:
> bist du eigentlich sicher dass du setPhase und StopWatch_Start bei
> jedem
> durchlauf machen willst, oder vielleicht nur beim eintritt in eine
> phase?

Ohja das mit dem StopWatch_Start ist nen riesiger Fehler danke!!!

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.