PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servosteuerung mit PWM von Timer1



Hendrix85
12.12.2007, 14:03
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?
$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

Sauerbruch
13.12.2007, 00:00
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!

Hendrix85
16.12.2007, 16:49
Danke für die Antwort.

Die Werte von Compare1a habe ich wie folgt geändert.

$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!?

Sauerbruch
17.12.2007, 17:08
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?