BLDC (nach Rading) - Poti als Geschwindigkeitsvorgabe verwenden

Gast #4742980
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?
Gast
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.
(Firma: matzetronics)
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.