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ß
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.
Hey, anbei der Schaltplan. Ich muss noch anmerken, dass die N-Mosfets TTL tauglich sind! Gruss
AVCC ist nicht angeschlossen - den musst du noch mit +5V verbinden ;)
Von Junctions hast du auch noch nichts gehört? Das eine da hat Eagle bestimmt gemacht Gib mal in die Befehlszeile Junction ein.
Danke :) , das hab ich nur vergessen einzuzeichen^^ daran liegts nicht.
> 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
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?
In den ISR vom komparator springt er rein. Bloß sperrt der motor dann, das heißt er springt nicht zur nächstem state weiter :/
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.