-         
Ergebnis 1 bis 4 von 4

Thema: Servosteuerung mit PWM von Timer1

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.12.2007
    Beiträge
    15

    Servosteuerung mit PWM von Timer1

    Anzeige

    Hallo alle zusammen,

    habe hier schon einige Threads gelesen und finde das Forum echt klasse. Nun habe ich mir auch ein RN-Controller zugelegt und will versuchen den mit Bascom zu dressieren.

    Ich versuche gerade ein Servo(Lexors Mini200) anzusteuern, was aber leider nicht ganz so klappt. Habe mich schon in Büchern und im Forum schlau gemacht und denke, dass ich theoretisch verstanden habe wie das geht. Dennoch macht das Ding nicht, was ich denke ihm gesagt zu haben.

    Mit dem Servo-Befehl dreht er immer nur nach links bis zum Anschlag. Habe schon die Zeiten variiert aber das half nichts.

    Darauf hin habe ich es über Timer1 wie folgt probiert:

    6547200 Hz Controllerfrequenz und Prescale von 64. Damit komme ich mit meinen Berechnungen auf 50Hz PWM-Frequenz. Bei einer Auflösung von 10 Bit sollte man einen positiven Impuls von ca. 1,5 ms mit Compare=946 erzeugen können?
    Damit dreht das Servo zwar nicht mehr auf Anschlag, sondern stellt sich auf eine def. Position ein, wenn ich nun aber den Compare-Wert variiere bleibt es trotzdem auf dieser Position.

    Liegt der Fehler bei mir oder beim Servo?
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    
    $crystal = 6547200
    $baud = 9600
    
    
    
    Config Portd.5 = Output
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 64
    
    
    
    Do
    
    
     Compare1a = 946
    
    Loop
    
    End

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Also, die Timer-Parameter sind o.k., damit generierst Du in der Tat ein Signal von ca. 50 Hz und einer positiven Impulsdauer von 1,5 ms.

    Wie veränderst Du denn den Wert von Compare1a? Vielleicht liegt da das Problem... poste doch mal den kompletten Code!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.12.2007
    Beiträge
    15
    Danke für die Antwort.

    Die Werte von Compare1a habe ich wie folgt geändert.
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 6547200
    $baud = 9600
    
    Dim I As Integer
    
    Config Portd.5 = Output
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 64
    
    
    For I = 946 To 980
      Compare1a = I
      Sound Portd.7 , 400 , 450
      Wait 1
    Next
    
    End
    Der Servo steuert eine Position an und verharrt dort. Komischer Weise ist, wenn man versucht ihn per Hand zu drehen, nur in eine Richtung ein Widerstand festzustellen!?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Der Servo steuert eine Position an und verharrt dort.
    Bewegt es sich denn langsam in die Endposition? Das wäre ja logisch, denn wenn I den Maximalwert von 980 erreicht hat, stoppt das Programm ja.
    Kommt denn ordnungsgemäß jede Sekunde der Sound-Ton?

Berechtigungen

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