PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grundlegende Fragen zur Servoansteuerung und PWM



strunz
13.03.2006, 20:02
Hallo an alle da draussen,

ich habe da mal ein Paar grundlegende fragen zur Servoansteuerung:

Ich habe den ATMEGA32, BASCOM AVR.
Jetzt will ich einen Servomotor(auf dem eine minikamera montiert ist) rechts und linksrum drehen lassen je nachdem welchen wert ich eingebe.

Ich habe mich schon soweit eingelesen, dass ich weis, das ich dafür verschiedene Frequenzen brauche, nämlich zwischen 1ms und 2ms. Richtig?

Jetzt zu meinen Fragen:
Wie mache ich das am simpelsten?
Über die PWM pins am Controller?
Wenn ja, könnte mir jemand ein Testprogramm schreiben und es mit mir stück für stück durchanalysieren, ich glaube so verstehe ich das am besten.
Die PWM pins sind: PortB.0 und PortB.1
Meine Frequenz ist 4MHz.
Der Controller ein ATMega32

Danke schon mal im voraus

x-ryder
13.03.2006, 21:14
$regfile = "m32def.dat"

'Servo-Funktion von Bascom konfigurieren
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10

'Port B als Output schalten
Config Portb = Output

'Alle Interrupts anmachen, da nen Timer benutzt wird
Enable Interrupts

'Einmal in die eine Richtung
Servo(1) = 100

'und einmal in die andere
Servo(1) = 200

'so, datt solltes gewesen sein
End

Martin ^^

strunz
13.03.2006, 21:23
Acha, danke erst mal. So kompliziert schaut das jetzt ja nicht aus.
Aber was soll ich machen damit mein Servo jetzt nach recht dreht?

Wie gesagt, bin ein VollNoob!!

x-ryder
13.03.2006, 21:25
also die 200 steht glaubich für rechts, musste testen, das 200 iss 2 ms puls, und 100 iss 1 ms puls, also sollte es ja 200 sein ^^

Martin

strunz
13.03.2006, 21:36
wenn ich das genauso abkopiere wie du mir das aufgeschrieben hast. Müsste sich da schon was drehen? Oder muss ich das eine "Servo(1) = 200" auskomentieren?
Verstehe ich das richtig:
Wert kleiner 150 -->eine Richtung
Wert größer 150 --> andere Richtung

Also zB so:

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb = Output
Servo(1) = 120
End

Nu soll er halt links bis zu einer bestimmten Position (120) drehen!?

Oder bin ich da auf dem Holzweg?

x-ryder
13.03.2006, 21:38
jepp, das iss richtig, also bei meinem programm sollte sich schon was bewegen, aber ich entnehme deinem post, dass sich nichts bewegt, aber duz hast das prinzip schon richtig verstanden ^^

Martin

strunz
13.03.2006, 21:41
Ok, danke. Also habe ich irgendwo sch***e gebaut. Bei mir dreht sich nichts.
Ein Oszi wäre jetzt nicht schlecht ^^

x-ryder
13.03.2006, 21:43
ich hab einen *oszischick* siehst du was? ^^

so, also wieder fehlerbehebung, aber die verlagern wa nach morgen, ich penn jetzt ^^

Martin

strunz
13.03.2006, 21:43
ES TUT ES TUT, juhu, Stecker war falschrum drufff, Vielen Dank nochmal x-ryder..

x-ryder
13.03.2006, 21:45
looooooooooooooooooool, bitte, wie immer eben :-P

Martin

strunz
13.03.2006, 21:49
ja, das selbe kann ich auch sagen^^ gute nacht

MAxK
14.03.2006, 14:53
Hallo,

ich habe dazu auch mal eine Frage. ich habe einen robbe Futaba Servo.

Mit deinem Code oben dreht er sich immer linksrum egal welchen wert(100/200) ich eingebe.

Dieser Servo hat drei Anschlüsse:
weiß habe ich an den ATmega8
schwarz an GND
und rot an VCC 5+

muss ich dies umpolen oder wie funktioniert das ??(:

strunz
14.03.2006, 16:16
bei mir hat der wert auch nicht so funktionier, be imir dreht er sich zwischen 22 und 102 wobei 22linksauschlag ist und 102 rechtsauschlag. ausserdem musste ich den gesammten code in eine do loop schleife packen.