Archiv verlassen und diese Seite im Standarddesign anzeigen : Newbee: Servo lässt sich nicht steuern...
FlashCube
30.01.2006, 14:01
Hi RN!
Ich versuche jetzt seit ein paar tagen schon ein servo mit meinem ATmega8 zu steuern...
Also, folgender Aufbau:
Ein MyAVR-Board mit ATmega8 in Bascom Programmiert.
Ein "Sanwa 1301" Servo mit externer Stromversorgung (6V).
PinB.1 ist mit der Signalleitung des Servos verbunden.
Ich habe zwei verschiedene Programme geschrieben:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb = Output
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
Enable Interrupts
Do
Servo(1) = 150
Loop
End
mit dem Code Ruckelt das Servo fast am Anschlag mit ~5Hz.
2. Versuch:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb = Output
Do
Portb.1 = 1
Waitus 1500
Portb.1 = 0
Waitms 20
Loop
End
Mit Diesem Code ruckelt das Servo nicht mehr, es fährt ganz normal bis zum Anschlag.
Das Problem ist nur, dass ich keinen einfluss auf die angefahrene position
habe wenn ich die HI-Periode zwischen 1 und 2 ms schwanken lasse.
Ich weiss wirklich nicht mehr weiter... ich habe schon versucht andere
werte für $crystal zu nehmen... aber 1000000 sollte stimmen oder?
Auch ein vorwiderstand an portb.1 hilft nichts...
Kann es am Servo liegen?
Ich bin wirklich neu auf dem Gebiet, die Lösung kann also durchaus banal sein.
danke schonmal...
FlashCube
king-sixXx
30.01.2006, 17:50
Hallo FlashCube!
Willkommen im Forum!
Wenn du deinen Servo nur um eine bestimmte Schrittzahl drehen willst musst du noch einen Zähler einbauen:
$regfile = "m8def.dat"
$crystal = 1000000
Dim A as Byte
A=1
Config Portb = Output
Do
Portb.1 = 1
Waitus 1500
Portb.1 = 0
Waitms 20
Incr A
Loop Until A = 10
End
Dein Motor sollte sich jetzt um 10 Schritte bewegen...
$crystal gibt übrigens an, wie schnell dein Quarz ist.
MFG!
king-sixXx
30.01.2006, 17:56
Wenns auch vor und zurück gehen soll, dann schau mal hier vorbei:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=733&highlight=l298
FlashCube
30.01.2006, 18:45
Hi king-sixXx,
danke für deine antworten...
ich bin ein bischen verwirrt...
Servo = Schrittmotor?
braucht ein servo nicht ein konstantes signal?
Wenn ich das mit dem Zähler mache, macht das servo zwar nur einzelne "schritte" die sind aber (wenn ich Loop until A = 2 einstelle) bestimmt 10°-15° gross...
und mit der methode kann ich doch auch garkeine servo-positionen einstellen... nur positionsänderungen...
ich dachte wie gesagt, ein servo bekommt ein konstantes positions-signal ?
FlashCube
30.01.2006, 19:51
Wie ist das eigentlich mit der Servo-schaltung?
Es sollte doch langen den Port mit dem Signal-kabel von servo zu verbinden oder?
und was hat es mit dem HI-LO-vertauschen auf sich?
muss ich jetzt 1ms HI und 20ms LO geben oder umgekehrt?
sorry für die newbee fragen!
king-sixXx
30.01.2006, 19:52
upps... nein ein servo is kein schrittmotor. sorry da bin ich aufs falsche Gleis gekommen :oops:
Hi,
Wenn das Servo, egal wo es steht, immer an den gleichen Anschlag fährt heisst das, dass die Impulslänge falsch ist (entweder zu lang oder zu kurz).
Was hast du denn für einen Quarz? Dein "$Crystal"-Eintarg wäre für einen 1MHz Quarz richtig. Es würde mich wundern, wenn du "nur" einen 1MHz Quarz drin hättest.
Der Servobefehl braucht die korrekte "$Crystal"-Angabe
Walter
Ja,neben der korrekten Angabe des Taktes ist auch zu bemerken das er nicht zu niedrig sein sollte.
Mit 1-2 Mhz läuft es nicht.
Bei 4 Mhz gibt es leichte Abweichungen.
Mit 8 läuft er dan gut.
FlashCube
31.01.2006, 16:56
Danke für die hilfe.
aber es funzt leider immer noch nicht...
Ich habe das Fusebit auf 8Mhz und folgenden Code probiert:
$regfile = "m8def.dat"
$crystal = 8000000
Config Portb = Output
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
Enable Interrupts
Do
Servo(1) = 150
Loop
End
das servo zuckt jetzt zwar nicht mehr aber es fährt immer an den anschlag.
(habe schon werte zwischen 25 und 360 für servo(1) genommen)
das gleiche problem tritt mit dem 2. code auf.
sollte ich mal den reload wert verändern?.. auf was?
Ja irgendwas machste da noch falsch oder dein Servo hat nen Hau wech.
Kein Ahnung.
Mein Programm läuft jedenfalls prima.
Der alte S15 läuft hier gerade mit folgendem Programm immer schön hin und her.
$regfile = "M8def.dat"
$crystal = 8000000
$baud = 19200
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
Enable Interrupts 'Ist nötig
Config Portb.1 = Output 'Servoausgang
Config Pind.6 = Input 'Taster 1
Config Pind.7 = Input 'Taster 2
Dim Ist As Byte
Dim Minimum As Byte
Dim Maximum As Byte
Dim Schrittweite As Byte
Dim Pause As Byte
Dim Z As Word
Minimum = 35 'Rechter Anschlag
Maximum = 155 'Linker Anschlag
Schrittweite = 1 'Schrittweite beim erhöhen
Pause = 25 'Verzögerungszeit in ms damits steuerbar bleibt
Ist = Minimum 'Einfach nur Definierter Startwert
Do
Do
Incr Ist
Servo(1) = Ist
Waitms Pause
Loop Until Ist = Maximum
Do
Decr Ist
Servo(1) = Ist
Waitms Pause
Loop Until Ist = Minimum
Loop
End
FlashCube
01.02.2006, 01:51
JUHU!... es geht
es lag an der externen stromquelle, wenn ich die 5V vom board abgreife gehts einwandfrei.
.....wenn ich die 5V vom board abgreife ......
Entschuldige aber nur mal aus neugier.
Wie haste es denn vorher versucht ?
FlashCube
01.02.2006, 11:50
ich hab das servo mit einem externen netzteil betrieben...
nur die PWM-Leitung war mit dem board verbunden...
aber es sollte doch auch mit externer spannung gehen?...
.... aber die Masse musst du natürlich schon auch mit dem board verbinden!!!!!!!
Gruß
Walter
Ja,aber "nur" die Masse sonst macht der Spannungsregler auf dem board Terror.
FlashCube
01.02.2006, 19:14
ok... jetzt läufts mit externem netzteil... danke für den support!!!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.