Gast
#2414743
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ß
