-
        

Ergebnis 1 bis 8 von 8

Thema: Motorgeschwindigkeit auslesen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.07.2011
    Ort
    Leonberg, Stuttgart
    Beiträge
    11

    Motorgeschwindigkeit auslesen

    Anzeige

    Hallo

    ich habe eine eigentlich recht simple Frage, allerdings im Forum nichts dazu gefunden (vielleicht ist sie ja zu simpel).

    Ich möchte meinen Asuro, wenn er gegen etwa fährt, kurz anhalten, drehen, und anschließend mit der ursprünglichen Geschwindigkeit weiterfahren lassen. Dazu würde ich den anfänglichen Wert der Motorengeschwindigkeit auslesen und speichern.

    Gibt es dafür einen Befehl, wie beispielsweiße MotorSpeed.Left?

    Danke
    Tausendacht

    Edit:
    oh, ich glaube ich bin in's falsche Unterverzeichnis gerutscht. Wollte eigentlich zu c-programmierung. Könnte mich jemand dorthin schieben?
    Geändert von Tausendacht (16.08.2011 um 11:23 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Du weißt doch mit welchem PWM du die Motoren angesteuert hast. Diesen Wert setzt du immer wieder ein. Ansonsten kannst du den Wert in eine Variable speichern, so in etwa (schreibe es nur in Grundzügen, du musst es abändern):

    Motor PWM = 128 => Motor mit PWM 128 laufen lassen
    Motor PWM gesichert = Motor PWM => Die aktuelle Motor PWM in eine Variable speichern
    ....... => weitere Kommandos wie z.B. drehen,...
    Motor PWM = Motor PWM gesichert => Die Variable wieder als Motor PWM übergeben

    Hoffentlich kennst du dich aus.

    MfG Hannes

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.07.2011
    Ort
    Leonberg, Stuttgart
    Beiträge
    11
    Danke für die Antwort.

    Ich hab in der Library nachgeschaut wie MotorSpeed definiert ist und dort gefunden:
    Code:
    inline void MotorSpeed (
      unsigned char left_speed,
      unsigned char right_speed )
    {
       OCR1A = left_speed;
       OCR1B = right_speed;
     }
    Also hab ich dies für mich einfach umgedreht und den Wert aus OCR1A / OCR1B in die Variablen Left_Speed / Right_Speed gespeichert.

    Ein Test sah aus, als wärs richtig. Geht diese Lösung? Auf was genau greife ich mit OCR1A / OCR1B zu?
    Geändert von Tausendacht (16.08.2011 um 14:27 Uhr)

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Die Lösung "geht" und ist auch recht pfiffig. OCR1A/B sind die Vergleichsregister für die zwei Kanäle des Timer1. Wenn das Zählregister des Timers den gleichen Wert wie das jeweilige Vergleichsregister hat, wird der entsprechende PWM-Ausgang auf low geschaltet. So wird die Leistung für die Antriebe gesteuert. Und deshalb steht, wie du selbst schon in MotorSpeed() gefunden hast, der aktuelle Wert für die Geschwindigkeit in OCR1A/B. btw: Die Funktion sollte meiner Meinung nach besser MotorPWM() heißen.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Aber, den MotorSpeed werten sind eigentlich nur Motor-kraft werten. Wann man die aktuelle Radgeschwindigkeit haben möchte, sollst man erst die Geberscheiben von den Odometrie zahlen müssen.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.555
    Zitat Zitat von Valen
    ... MotorSpeed werten sind eigentlich nur Motor-kraft werten ... Wann man die aktuelle Radgeschwindigkeit haben möchte, sollst man erst die Geberscheiben ...
    Genau. Gerade beim Beschleunigen und Bremsen (Verzögern) unterscheidet sich PWM-Vorgabe und Ist-Drehzahl z.T. dramatisch. Beispiel beim Anfahren "volle Kanne" ist die PWM auf Maximum und die Fahrt (noch) auf Null. Beispiel (nicht vom asuro) siehe diesen Fahrtest mit Graphen zu Motor12: Istdrehzahl I_drz12 (rote Kreise) und PWM: iy12PWM (blaue Rauten).
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    32
    Beiträge
    563
    Das Auslesen der Odometrie ist doch nach Aufgabenstellung uninteressant. Tausendacht möchte bei einer Kollision, dass der Asuro sich abwendet und dann mit der vorherigen Geschwindigkeit weiterfährt.

    Code:
    if(Kollision)
    {
    Speicher_Links = OCR1A; Speicher_Rechts = OCR1B;
    MotorSPEED(100,100);
    MotorDIR(RWD,RWD); _delay_ms(1000); MotorDIR(RWD,FWD); _delay_ms(500); MotorDIR(FWD,FWD); MotorSPEED(Speicher_Links,Speicher_Rechts);
    }
    Das noch in brauchbares Asuro-C übersetzt müsste doch eigentlich machen was du willst oder?
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von Arkon Beitrag anzeigen
    Das Auslesen der Odometrie ist doch nach Aufgabenstellung uninteressant. Tausendacht möchte bei einer Kollision, dass der Asuro sich abwendet und dann mit der vorherigen Geschwindigkeit weiterfährt.
    Das stimmt. Ich möchte nur gern erklären das es ein underschied/misverständnis gibt, MotorSpeed vs. Kraft/Drehmoment.

Ähnliche Themen

  1. LDR an ADC auslesen, RP6
    Von eckiii im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 19.04.2009, 19:18
  2. 3x ADC auslesen
    Von JeyBee im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 24.03.2009, 10:01
  3. Motorgeschwindigkeit mit 2 Taster ändern
    Von Christopher1 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 26.08.2007, 23:33
  4. Antworten: 7
    Letzter Beitrag: 26.06.2007, 11:34
  5. Antworten: 9
    Letzter Beitrag: 17.11.2006, 13:35

Berechtigungen

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