Atmega16 BLDC-Regler, BEMF

Gast #2414743
Lesenswert?

Hallo Techniker, Liebe Microcontroller Freunde, Verehrte User,


wir versuchen in der Fachhochschule einen BLDC Regler zu entwerfen.
Soweit so gut

Der Code, der in C geschrieben ist,ist folgender:
Main.c http://pastebin.com/e4EdcBpK
init.h http://pastebin.com/XApHTWa0

Der Brushless Motor (CD Rom Motor) läuft auch soweit an, bis ca. 8000 
U/min.

An der Stelle, an der der Motor vom "Timerbetrieb" in den "Messbetrieb" 
umgeschalten werden soll bleibt er stecken, bzw. stehen.

Nun zum Schaltungsaufbau und Programmbeschreibung das man sich schneller 
herantasten kann:

Die Schaltung ist ähnlich wie bei 
http://www.mikrokopter.de/ucwiki/BL-...rlV1_1_sch.gif aufgebaut.
Der einzige Unterschied ist der von uns verwendete Atmega 16 und das wir 
nur ein PWM Ausgang verwenden und diesen durch drei AND Gatter auf die 
drei High-Fets schicken. Strommessung usw. hab ich noch nicht 
implementiert.

Also zum Programm...
- Timer0 läuft mit ca 50 kHZ und ist zur PWM Erzeugung für die Highfets 
zuständig.

- Timer1 Compare A Interrupt dient zum Hochlauf des Motors.
hier wird der OCR1A immer weiter (weitgehenst linear) heruntergezählt, 
sodass sich die Kommutierungsfrequenz erhöht.

Timer1 Compare B Interrupt ist für die Holdoff Zeit nach der 
kommutierung.
Der Timer 2 wird für die Kommutierungszeit verwendet.

Durch den MUX wird immer nur einer der drei ADC aktiviert. Sodass 
dadurch die richtige Phase gemessen werden kann und auf den Komparator 
AIN1 gelegt wird.

An AIN0 liegt die "virtuelle" Motorsternspannung an.

Nun finde ich meinen Fehler im Code nicht und würde mich wirklich sehr 
freuen wenn sich jemand mit der Problematik auskennt und mir 
weiterhelfen kann.

Gruß
Gast #2414832
Lesenswert?

Toby12 schrieb:
> Der einzige Unterschied ist der von uns verwendete Atmega 16 und das wir
> nur ein PWM Ausgang verwenden und diesen durch drei AND Gatter auf die
> drei High-Fets schicken

Da muste schon mal den aktuellen Schaltplan beilegen, wenn Du einen 
Antwort haben willst.
#2415314
Lesenswert?

> das hab ich nur vergessen einzuzeichen^^ daran liegts nicht.

Den Schaltplan solltest du am Besten schon vollständig darstellen. So 
können Fehler ja nicht gefunden werden.

PS: Viel Erfolg bei dem Projekt. Habe selber mal einen BLDC gebaut und 
ich fand es bisweilen schon etwas knifflig. Unterm Strich ist es aber 
kein Hexenwerk.

Viele Grüße!
Jonny
#2416030
Lesenswert?

Ich würde mal debuggen. Du könntest zum Beispiel mal überprüfen, ob der 
Analog Comparator Interrupt ausgeführt wird. Dazu könntest du erstmal 
einfach eine Dreieckspannung (oder einen Sinus etc...) an den Comp 
eingang anschließen und an den Vergleichseingang einen festen pegel und 
dann gucken ob der Interrupt ausgelöst wird wenn sich die "< bzw.>" - 
Bedingung ändert.

Auf diese Weise kannst du den Fehler einkreisen. Ferner wäre es sinnvoll 
sich mit dem Oszi die Differenz aus Mittelwert und Induzierter 
Phasenspannung anzusehen. Dann siehst du nämlich ob da überhaupt sinnige 
Werte anliegen.

Um den Code zu überprüfen würde ich einzelne Komponenten des Codes 
getrennt überprüfen. Interessante Frage wäre zb. ob die ISR vom Comp 
auslöst?
Gast #2419778
Lesenswert?

Hallo Toby12!

Ich bin auch schon an diesem Thema gescheitert. Keine Ahnung ob es an 
Software oder Hardware liegt. Wäre echt super wenn jemand was dazu sagen 
könnte! Ich sehe im Prinzip keinen Fehler in deinem Programm.

LG

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