PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo mit Bascom Befehl mach nur "scheiße"



AVRboy
16.10.2006, 19:58
Hi,

noch ne andere frage was mich nicht loslässt ich habe ein kleine servo prog geschrieben was eigentlich richtig ist glaube ich jedoch geht mein servo immer nur in eine richtung und das bis zum verecken bis ich im den strom klau. hier mal das prog:




$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200

D
Config Servos = 1 , Servo1 = Porta.0 , Reload = 10
Config Pina.0 = Output
Enable Interrupts

Do
Print "Servo Test"
Wait 1

Servo(1) = 0
Wait 2
Servo(1) = 200
Wait 2
Servo(1) = 240
Wait 2
Servo(1) = 150
Wait 2
Loop



ich weis nicht muss man da was bei einer bestimmten quarz ferq. selber berechnen. vieleicht sind meine fuses auch falsch was ich nicht glaube
bei mir steht das auf external crystal high frequenz... 4ms ....cksel=1111 sut=10. ](*,)

hat jemand vieleicht ausserdem noch eine ahnung wie man soetwas über software macht oder über pwm.wär dankbar für hilfe!!!!!!!


mfg M.R

PicNick
16.10.2006, 20:13
Mit dem ersten Servo(1) = 0 wird er keine Freude haben.
Der Bereich sollte von ~100 bis 200 sein, normalerweise

AVRboy
16.10.2006, 21:08
aber egal bei welchem wert er geht immer bis zum anschlag zurück nicht wo ist den der wert für mitte ,schritt rechts ,schritt links.

mfg

Jon
16.10.2006, 21:16
Das Programm sollte soweit stimmen, nur dass über den Servo-Configs noch so ein komisches "D" steht. Das sollte weg.

Die Werte für links, mitte, rechts musst du über Experimente herausfinden. Das ist bei jedem Servo anders.

jon

AVRboy
17.10.2006, 17:05
das d ist raus und nicht das problem

Jon
17.10.2006, 18:52
Geht es denn mit anderen Servos?
Vielleicht liegt es ja am Servo.

jon

AVRboy
17.10.2006, 20:41
mal sehen das habe ich auch schon gedacht aber denn gedanken wieder verworfen ich werde testweisse mal den von robotikhardware angebotenen servo kaufen.

raptor_79
17.10.2006, 21:04
versuch mal die werde
servo(0) = 30 'links
servo(0) = 90 'mitte
servo(0) = 180 'rechts

und reload= 7
geht bei mir.

AVRboy
19.10.2006, 19:26
ja danke werde ich probieren hat vieleicht jemand die gleichen erfahrungen oder probleme wenn ja wie habt ihrs gelöst. und wie kann ich soetwas ohne den servo befehl machen mit (timer oder) pwm bei timer wüsste ich überhaupt nicht wie bei pwm muss man dan ja einzelne pulse ausgeben oder????????
oder anderst wie kann man so was über software machen???????
weil bei pwm/timer kannst ja nur begrenst servos dran machen.

mfg

raptor_79
19.10.2006, 19:52
ich weiß jetzt erhlich nicht ganz, was du meinst.
aber... das läuft INTERN doch über den timer.
so kannst du ein servo pro bin dranhängen. was willst mehr?

bei pwm musst halt die frequenz "imitieren".

also ich hab mit oszi an einem empfänger (modellflugzeug-bauteil) den ausschlag eines servos gemessen. sind 15mS der eine anschlag, neutralstellung 20mS und anderer anschlag 25mS.

und den servobefehl hab ich jetzt so angepasst, daß er den puls, welchen das servo braucht nachbildet. und jetzt kann ich mein servo eben dazwischen bewegen. sind bei mit die werte, die in meinem vorhergehenden eintrag stehen. also links, mitte und rechts.
werte, die dazwischen stehen, stellen das servo auf die dementsprechende position.

timmy83
20.10.2006, 14:35
Hallo!

Habe das gleiche Problem mit dem Servo. Hab die Werte
Servo(1) = 30
Waitms 1000
Servo(1) = 90
Waitms 1000
Servo(1) = 180
Waitms 1000
versucht und der Servo läuft ruckartig nur in eine Richtung und versucht am Endanschlag weiterzufahren. Wenn ich die Spannung vom Servo wegnehm und wieder draufgebe läuft er in den gleichen Schritten in die andere Richtung. Der Servo (Robbe RS 101) ist schon recht alt, so ca. 15 Jahre. Kann´s sein, dass diese anders angesteuert werden müssen?

MfG

Timmy

AVRboy
21.10.2006, 21:38
also raptor_79 ich meinte kann ich den PWM so berechnen,einstellen das er ein high von z.b. 1.5 ms sendet. als nächstes wollte ich das so machen das ich über rs 232 z.b. sende l für links und er sagt dem pwm wie er den puls zu machen hat und der servo geht einmal links.

und über software kann man sowas denke ich doch auch machen um jeden port benutzen zu können nur wie mache ich für jeden pin das timing. bei pwm hätte ich ja nur begrentzt ports oder.

frage: kann man ausrechnen was man in die servo befehle einsetzten muss um die richtige pulslange zu bekommen.

desweiteren bei einer fernsteuerung ist es doch so eine bestimmte hebel stellung gibt einen bestimmten puls und dieser puls sagt dem servo wo er stehen soll und dort bleiben bis der puls z.b. erhöht wird sodas der servo einwenig weiter geht und dort bleibt. gibt es da irgend wie was womit man sich sowas erschliessen kann oder so.



ich habe keinen so ein alten servo also ich glaube kaum das es daran liegt denn sonst müsste ja jeder modellflieger seine servos austauschen weil die nich kompatibel zu einer neuen fernsteuerung sind. bei mir ist das mit der spannung was du das beschreibst jedoch nicht. er leuft bei mir egal was ich da einsetzt ob 30 oder 180 oder von mir aus 255 immer in eine richtung und das immer noch auch wenn er am ansclag angekommen ist. ich weiss ehrlich nicht wo da der fehler sein soll.

bei wem von euch geht das den und welche servos mit welchen werten für 1 schritt links
1 schritt rechts
und zentral mitte
habt ihr.

das macht mich nämlich völlig verrückt ich könnte ja dem nach nichteinmal einen hexapod ohne zusätze steuern.

mfg

dibahh
21.10.2006, 22:25
ist es den viel komplizierter wenn man einen 10 Bit timer nimmt?

Michael
21.10.2006, 22:34
Hallo AVRBoy,
Hier (http://www.elektronik-projekt.de/include.php?path=forum/showthread.php&threadid=2427) gab es letztes Jahr eine Disskussion zum Thema. Das Flußdiagramm am Ende zeigt eine Möglichkeit. Bei Bedarf kram ich auch das Programm dazu nochmal raus.

Gruß, Michael

raptor_79
22.10.2006, 23:58
ich habe meie werte mit RELOAD=7
mit 10 gehts bei mir auch nicht.

ich hab das genze mit einem oszi ausgemessen bzw. verglichen.
läuft super.

und was die servos angeht.
also das servosignal (das ist das signal, was vom empfänger an das servo abgegeben wird) sieht so aus.
puls nach 18ms, der selber 2ms dauert bei vollausschlag in eine richtung, und 1,5ms bei neutral (knüppel mitte) und 1,1ms etwa wenn vollausschlag andere richtung.
das sind aber jetzt die werte für mein servo und geproggtem sender.
grundsätzlich wird/ist das immer so. zumindest im groben. generell muß ich bei servos die endpositionen und neutralstellung anpassen. (beim flugzeug jetzt) das mach ich, indem ich es an der fernsteuerung einstelle)
würde die werte jetzt aber im großen und ganzen als allgemein geltend bezeichnen, da ich je mehrere flugzeute und servos habe (neue und sehr alte) und es aber nie probleme gibt. ich kanns immer einstellen.

schlimmstenfalls muß ich wegen servobrummen (servo steht an) den vollausschlag zurücktrimmen/begrenzen. aber die servos lassen sich immer steuern.

mach es einfach mit "SERVO" mit config servo kannst ja den port bestimmen. da und servo(2) sagt dann ja auch, welches servo gemeint ist.


noch fragen?



$regfile = "M32def.dat"
$crystal = 4915200
$baud = 4800



'************************************************* ******************************
'******************************* LCD-Conf-Block ********************************
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Config Lcdbus = 4
Config Lcdmode = Port
Cursor Off Noblink


'Config Servo
Config Servos = 1 , Servo1 = Portb.1 , Reload = 7 'Reload=7 funktioniert am besten


'Config Servopin on AVR
Config Portb.1 = Output

'Enables Interrupts
Enable Interrupts









Cls

Do

Servo(1) = 35 'Links 35=linker Anschlag
Lcd "Position 35"


Waitms 200
Cls

Servo(1) = 90 'Mitte 90=etwa die Mitte
Lcd "Position 90"
Waitms 200
Cls


Servo(1) = 180 'Rechts 180=rechter Anschlag
Lcd "Position 180"

Waitms 200
Cls

Loop
End

das ist ein kleines servotest programm. hab dir das mal hingestellt. muß halt nur an deinen MC angepasst werden (pin/port-belegung)