Hallo Ich möchte ein Brushless Regler selbst bauen den Hardware teil hab ich Provisorisch auf einer Streifplatine bereits aufgebaut funktioniert einwandfrei. Mit dem Softwareteil komm ich aber irgendwie nicht klar. Ich hab bereits alle Foren und alles was bei google zu dem Thema gab durchforsten aber keine Lösung gefunden ich lese überall über eine ungeregelte Anlaufphase um eine bestimmte Drehzahl zu erreichen bei der die Lage des Rotors bestimmt werden kann um in geregelten Normalbetrieb zu schalten. Aber ich krieg den Motor gar nicht dazu einen vollständigen 360 Grad Drehung zu machen ich hab mit dem Programm versucht nach einer bestimmten zeit immer weiter zu schalten aber tut sich irgendwie nichts die Signale kann ich aber mit dem Oszilloskop aber sehen die kommen schon in 120° Abständen ich hab auch versucht die Case-Struktur mit den knöpfen Manuel weiterzuschalten dann dreht sich der Läufer immer um ein paar grad aber der läuft nicht automatisch ein. Kann mir vielleicht jemand ein paar Tipps geben?? while(1){ switch(x) { case 0: TCD1.CCA = 0x000; // Aus TCD1.CCB = 0x000; // Aus TCD0.CCB = 0x000; // Aus TCD0.CCD = 0x000; // Aus TCD0.CCA = i; // Phase A Plus TCD0.CCC = i; // Phase B Minus _delay_ms(10); x++; break; case 1: TCD1.CCA = 0x000; // Aus TCD1.CCB = 0x000; // Aus TCD0.CCB = 0x000; // Aus TCD0.CCC = 0x000; // Aus TCD0.CCA = i; // Phase A Plus TCD0.CCD = i; // Phase C Minus _delay_ms(10); x++; break; case 2: TCD1.CCB = 0x000; // Aus TCD0.CCA = 0x000; // Aus TCD0.CCB = 0x000; // Aus TCD0.CCC = 0x000; // Aus TCD1.CCA = i; // Phase B Plus TCD0.CCD = i; // Phase C Minus _delay_ms(10); x++; break; case 3: TCD1.CCB = 0x000; // Aus TCD0.CCA = 0x000; // Aus TCD0.CCC = 0x000; // Aus TCD0.CCD = 0x000; // Aus TCD1.CCA = i; // Phase B Plus TCD0.CCB = i; // Phase A Minus _delay_ms(10); x++; break; case 4: TCD1.CCA = 0x000; // Aus TCD0.CCA = 0x000; // Aus TCD0.CCC = 0x000; // Aus TCD0.CCD = 0x000; // Aus TCD1.CCB = i; // Phase C Plus TCD0.CCB = i; // Phase A Minus _delay_ms(10); x++; break; case 5: TCD1.CCA = 0x000; // Aus TCD0.CCA = 0x000; // Aus TCD0.CCB = 0x000; // Aus TCD0.CCD = 0x000; // Aus TCD1.CCB = i; // Phase C Plus TCD0.CCC = i; // Phase B Minus _delay_ms(10); x=0; break; } } return 0; }
Stichwort Anfahrrampe. Die Umpolvorgänge am Anfang recht langsam, dann zunehmend schneller machen bis die gewünschte Geschwindigkeit erreicht ist. :-)
Jo, also ich hab hier grad eine Ansteuerung am laufen für einen sensorlosen BLDC ausm Diskettenlaufwerk. (So als Machbarkeitsstufe) Programmaufbau: Ein Timerinterrupt mit CTC-Einstellung, in dem die Umpolungen anhand einer Statusvariablen erledigt werden. Der CTC-Wert wird dabei vom anlaufen an kontinuierlich kleiner, das gibt dann die Anfahrtrampe :-)
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.