-         
Ergebnis 1 bis 4 von 4

Thema: PWM-Signal einer RC-Anlage mit input capture messen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.03.2010
    Beiträge
    66

    PWM-Signal einer RC-Anlage mit input capture messen

    Anzeige

    Hallo,

    ich verwende einen Mega644 und versuche momentan das PWM-Signal einer RC-Anlage zu messen.
    Man sagte mir dass das am Besten mit dem input capture Modus geht.

    Momentan habe ich folgendes zusammengebastelt:

    Code:
    char wert1=0;
      char wert2=0;
      char Ergebnis;
      int run=0;
       
      
    
    void pwm_init()
      {
        TCCR1A = 0;
        TCCR1B = (1<<ICES1)  | (1<<CS10);  // steigende Flanke, kein Prescaler
        TCCR1C = 0;
        TIMSK1 = (1<<ICIE1) ;  // Interrupt akivieren, Capture
      }
       
       
       
      ISR( TIMER1_CAPT_vect )
      {
        if (run==0) 
        {
                      run=1; //als nächstes zweiter Durchlauf
                      wert1=ICR1; //Startwert
                      TCCR1B &= ~ (1<<ICES1); //setzen auf fallende Flanke
        }
        else
        if (run==1) 
        {
                      run=0; //als nächstes erster Durchlauf
                      wert2=ICR1; //Endwert
                      TCCR1B |= (1<<ICES1); //setzen auf steigende Flanke
       
                      //Berechnung
                      Ergebnis=wert2-wert1;
        }
       
      }
    die Variable "Ergebnis" lasse ich mir via RS232 ausgeben. Leider kommt da nur Müll an.
    Das die Variablen wert2, wert1 als char definiert werden, habe ich aus einem Beispiel übernommen, mir ist nicht klar warum.
    Ich hätte integer erwartet.

    Hardwareseitig habe ich zum testen den Empfänger an VCC und GND vom µc angeschlossen und einfach die Signalleitung direkt an den PD6(ICP1) vom µc gesetzt.

    Wer kann mir dazu etwas sagen?

    Gruß




    Tante Edith`s Meinung:
    Das mit dem Char ist Müll, habe es mal als Double angenommen und nun kommen Zahlen, welche sich immerhin passend zum "Gas-geben" am Sender, ändern.
    Das es 5-Stellige Zahlen sind, wird wohl an der Taktfrequenz liegen.
    Ich werde mal testen, die Zahl umzurechen und einen Servo anzuschließen.


    Letzter Stand:
    Wenn ich den Wert durch 16 Teile komme ich in Neutralstellung auf ~1500 µs
    Das passt soweit.
    Allerdings ist der min-Wert 1200 und der max-Wert 1800.
    Der Bereich ist zu klein. Er sollte bei etwa 1000 bis 2000 liegen.
    Hat jemand eine Idee warum mir da was fehlt?
    Geändert von MechMac (07.03.2011 um 21:39 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von MechMac Beitrag anzeigen
    Das mit dem Char ist Müll, habe es mal als Double angenommen
    Double ist auch nicht viel besser als Char. Nimm das, was auch dem Zähler selbst entspricht, also uint16_t. Nur dann ist "Ergebnis" auch in dem Fall korrekt, wenn der Zähler zwischen den Flanken überläuft, und wert2 daher kleiner ist als wert1.
    MfG
    Stefan

  3. #3
    RN-Premium User Begeisterter Techniker
    Registriert seit
    30.04.2004
    Alter
    41
    Beiträge
    245
    Bist du sicher dass deine Fernsteuerung den vollen Umfang überträgt? Je nach Sender kannst du ja Endlagen von den Servos begrenzen. Miss doch mal mit einem Oszilloskop nach, was der Sender schickt und was du misst.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    08.03.2010
    Beiträge
    66
    Vielen Dank euch beiden.
    Unter Verwendung von uint16_t habe ich nun keine Negativ-Werte als Ergebnis mehr und an der Funke war
    eine Servo-Wegbegrenzung eingestellt die den Ausschlag begrenzt hat.
    Nun passt es.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •