Forum: Mikrocontroller und Digitale Elektronik Atmega16 BLDC-Regler, BEMF


von Toby12 (Gast)


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ß

von Düsendieb (Gast)


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.

von Toby12 (Gast)


Angehängte Dateien:

Lesenswert?

Hey,
anbei der Schaltplan.

Ich muss noch anmerken, dass die N-Mosfets TTL tauglich sind!

Gruss

von Jonny O. (-geo-)


Lesenswert?

AVCC ist nicht angeschlossen - den musst du noch mit +5V verbinden ;)

von 1234 (Gast)


Lesenswert?

Von Junctions hast du auch noch nichts gehört?
Das eine da hat Eagle bestimmt gemacht
Gib mal in die Befehlszeile Junction ein.

von Toby12 (Gast)


Lesenswert?

Danke :) ,

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

von Jonny O. (-geo-)


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

von Toby12 (Gast)


Lesenswert?

Hi

hat denn keiner eine Idee, was im Code falsch sein könnte?

Gruss

von Jonny O. (-geo-)


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?

von Toby12 (Gast)


Lesenswert?

In den ISR vom komparator springt er rein.

Bloß sperrt der motor dann, das heißt er springt nicht zur nächstem 
state weiter :/

von Toby12 (Gast)


Lesenswert?

Hat denn keiner eine Idee?

von NEU12 (Gast)


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

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.