bldc motor stottert

Gast #3707601
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...
Angehängte Dateien:
Gast #3707702
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
Gast #3707732
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...
Gast #3707745
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?
Gast #3707763
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
Gast #3708065
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...

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