Wer kann mir bitte nochmal weiterhelfen? Ich habe mir einen BLDC Motorcontroller nach "Ulrich Rading" gebaut, welcher auch soweit gut funktioniert. Allerdings würde ich gerne die Drehzahl per Poti einstellen können. Nur, was vor ein paar Tagen wunderbar funktioniert hatte, klappt heute nicht mehr. Im Grunde habe ich mich an das gehalten, was ich hier gefunden habe: http://www.fingers-welt.de/phpBB/viewtopic.php?f=14&t=1406 und auch so eingefügt: //################################################################## void next_commutate_state (unsigned char startup) //################################################################## { /* //Potiwert einlesen ACSR &= ~(1<<ACIE); //ANALOG_COMP_vect interrupt deaktivieren ADMUX = (0<<REFS1) | (0<<REFS0); //Externe Referenzspannung verwenden ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); //Vorteiler = 128 => 125kHz ADCSRA |= (1 << ADEN); // ADC aktivieren old_ADMUX =ADMUX; //ADMUX zwischenspeichern ADMUX = POTI; // Kanal für Poti wählen (ADMUX = 5) ADCSRA |= (1 << ADSC); // eine ADC-Wandlung while (ADCSRA & (1 << ADSC)) { // auf Abschluss der Konvertierung warten } rx_pwm = ADCW >> 2; // MSB in rx_pwm lesen ADCSRA &= ~(1 << ADEN); // ADC deaktivieren ADMUX = old_ADMUX; // AMDUX zurücksetzen ACSR &= ~(1<<ACIE); // ANALOG_COMP_vect interrupt aktivieren */ switch (rotor_state) { case (0): if(!SENSE_H || startup) { WH_OFF; UH_ON; SENSE_W; rotor_state = 1; TCNT1 = 1; } break; . . . Das Problem ist aber, das der Controller völlig aus dem Takt kommt, sobald ich die Potimessung einkommentiere. Heißt, er findet überhauptnicht mehr in den Interruptbetrieb bzw. der Motor läuft sehr Ruckartig. Dies war vorgestern noch anders, alles was ich verändert habe, ist ein neuer Prozessor und ein 16MHz Quarz anstatt von 8Mhz. Allerdings habe ich den Vorteiler des ADCs daher angepasst, sodass er auf 125kHz liegt. Hat schonmal jemand gleiches erfolgreich Versucht und kann mir ein paar Tips geben?
Um es nochmal anders zu formulieren, es ist egal, ob ich den gemessenen Wert rx_pwm verwenden, oder nicht. Sobald ich die ADC-Potimessung einkommentiere, kommt der Motor nicht mehr in Gang. Also bremst diese das ganze System aus. Nur, wie gesagt. Vor kurzem hat es noch genau so funktioniert.
Kennt vielleicht jemand einen funktionierenden Beispielcode zu dem Thema?
Jonas schrieb: > while (ADCSRA & (1 << ADSC)) { // auf Abschluss der > Konvertierung warten > } Da währenddessen nichts anderes mehr geht (denn der ADCOMP Interrupt ist ja auch gesperrt), ist das recht mutig. Das steht ja auch so bei Fingers Welt: >Beim Gas geben muss man allerdings ein wenig sachte sein, sonst > verschluckt er sich gern, aber damit kann ich leben. Der nächste Punkt ist das Überschreiben von ADMUX: Einmal > ADMUX = (0<<REFS1) | (0<<REFS0); //Externe Referenzspannung > verwenden Und dann gleich > ADMUX = POTI; // Kanal für Poti wählen (ADMUX = 5) Ich hoffe, das 'POTI' bei dir auch richtig definiert ist. Das haut so aber trotzdem nicht hin, denn dann ist das vorherige Beschreiben sinnlos. Mach dir lieber ein #define, indem du REF und Kanal gleichzeitig setzt und schreib das in einem Rutsch auf ADMUX. Im Moment kann das gerade so klappen, denn REFS ist bei dir auf 0, aber trotzdem mal im Auge behalten. Was ist denn am AREF Pin angeschlossen? Das ist aber alles recht heikel, denn der ADCOMP-Job ist so ziemlich das wichtigste bei diesem BLDC Kontroller.
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.