PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Servo



BlackHawk
07.02.2011, 15:32
Hi,

ich hab jetzt schon die Suche benutzt, aber nichts wirkliches gefunden, was mir weiter hilft.

Ich hatte vor einen Servo anzusteueren, und den im Links- und rechtslauf zu betreiben. Alerdings dreht er mit dem Programm nur nach links, egal wie ich die Wartezeit einstelle. Zu den Servos, es sind welche von Conrad, bei dem einen ist die Poti-Achse gekürzt. Trotzdem laufen beide, auch der Originale stets nach links.

Wisst ihr rat?


#include <avr/io.h>
#define F_CPU 8000000L
#include <util/delay.h>



int main (void)
{

DDRD |= (1<<PD5);


while(1)
{
PORTD |= (1<<PD5);
_delay_us(1500);
PORTD &= ~(1<<PD5);
_delay_us(18500);
}



return 0;
}

wkrug
07.02.2011, 15:49
Hast Du an den Servos irgendwie rummanipuliert?

Normalerweise müssten die Servos mit einem 1,5ms Impuls auf Mittelstellung laufen und dort stehen bleiben.

Bei kürzeren impulsen gehts nach links bei längeren nach rechts ( oder umgekehrt je nach Servo Hersteller ).

Dauernd rundum drehen tut sich ein Original Servo eigentlich nicht!

Entweder hast Du die Taktfrequenz des Controllers irgendwo falsch eingestellt, oder es ist ein Fehler im Programm, der mir momentan aber auch nicht auffällt.

Läuft der Controller denn auch tatsächlich mit 8MHz? Oder mit den default 1MHz?

BlackHawk
07.02.2011, 16:12
Hi,

also wir haben zwei Servos. Einer bei dem die Poti-Achse gekürzt is, der nur nach links dreht. Und einen originalen, der nur nach links bis zum Anschalg dreht, dann aber irgendwie ständig versucht weiter zu drehen. Klingt zumindest so.

Da ich Anfänger bin, weiß ich jetzt nicht, ob er auf default läuft. Wo kann man das denn einsehen, bzw. umstellen?

Danke schonma!

wkrug
07.02.2011, 16:43
Mir fehlt da irgendwo die Include für den Controller.

Die meisten ATMEGA's mit internen Taktquelle laufen mit 8MHz mit! integrierten /8 Vorteiler. Also mit 1MHz.
Die Einstellungen kann man mit den sog. Fuses ändern.
Wie die eingestellt werden ist von der verwendeten Brennsoftware abhängig.

Was benutzt Du denn da ?

Eine Fuse - Calculator findest Du hier: http://www.engbedded.com/fusecalc/

Vorsicht bei wilden rumprogrammieren an den Fuses.
Wenn man da was total falsches einstellt - Z.B. externer Taktgenerator - lässt sich der Controller nicht mehr per ISP programmieren!

Also lieber 3x nachschauen, bevor man da einfach was reihackt.

BlackHawk
07.02.2011, 16:44
Also wir benutzen AVR Studio 4.

Als Controller dient der Attiny2313

Also ich hab grad ma geguckt bei den Fuses in PonyProg, da is nirgends ein Häkchen!

Hubert.G
07.02.2011, 16:56
Hast du mit einem Oszi schon mal die Impulse angeschaut ob sie in der Länge passen. Ich denke mal sie tun es nicht.
In der AVR-Library-Referenz steht:
The maximal possible delay is 768 us / F_CPU in MHz

Ein default gibt es bei den Servos nicht, die laufen dort hin wo es die Poti Einstellung vorgibt.

Mach anstelle der 1500µs eine while mit einem delay von 10µs und lässt diese 150 mal durchlaufen.
Anstelle der 18500µs nimmst du 18ms.
Wenn du mit dem Kontroller allerdings mehr machen willst solltest du auf einen Timer mit PWM umsteigen.

BlackHawk
07.02.2011, 16:59
Einen Oszi hab ich nicht. Und den Tipp mit der Schleife werd ich gleich ma probieren. Danke!

BlackHawk
07.02.2011, 17:06
Also, ich hab jetzt ma so gemacht, aber egel wie ichs einstelle ( ob 100 oder 200 mal Durchlauf), der Servo dreht nur nach links!





#include <avr/io.h>
#define F_CPU 8000000L
#include <util/delay.h>

int i=1;
int main (void)
{

DDRD |= (1<<PD5);


while(1)
{
PORTD |= (1<<PD5);
while(i<=200)
{
_delay_us(10);
i++;
}
PORTD &= ~(1<<PD5);
_delay_ms(18);
}



return 0;
}

oberallgeier
07.02.2011, 17:47
Hallo BlackHawk

hast Du Dir schon mal im RN-W iki (klick hier) (http://www.rn-wissen.de/index.php/Servos#Ansteuerung:_Signalform_und_Schaltung) angesehen, wie ein Se rvo angeschlossen werden muss? Hast Du eine vom Controller gesonderte Versorgung des Se rvos und einen gemeinsamen GND?

BlackHawk
08.02.2011, 10:50
Hi,

ich hatte eine gesonderte Stromversorgung für den Servo. Allerdings mit getrennetn Massen. Ich hab jetzt ma die Massen zusammengelegt, aber trotzdem keine Besserung. Solangsam bekomm ich das Gefühl, dass ich da zwei Montags-Servos erwischt hab.

Dirk
08.02.2011, 13:24
Solangsam bekomm ich das Gefühl, dass ich da zwei Montags-Servos erwischt hab.
Nach allem, was du so schreibst, dürften die Servos ok sein.

Check:
1. Läuft der Attiny2313 wirklich mit 8 MHz? Wenn er neu ist und du keine Fuses verändert hast, läuft er mit 1 MHz.

2. Stichwort "der Servo dreht nur nach links!": Servos sind "Stellmotoren". Sie drehen nur solange, bis sie eine gewünschte Position angenommen haben. Hilfreich wäre, wenn du beschreibst, WO der Servohebel STEHT (z.B. am linken Anschlag, in der Mitte oder am rechten Anschlag).

Test:
Zu 1.: Schreib mal ein "Blinklicht"-Programm mit einer LED an einem Pin. Nimm Warteschleifen von 1s zwischen an und aus. Wenn die LED dann nicht 1s an und 1s aus ist, läuft dein 2313 nicht auf 8 MHz.

Zu 2.: Wenn du nach deinem Prog das Servo stromlos machst, kannst du vorsichtig den Hebel drehen und so testen, wo er steht.

Gruß Dirk

BlackHawk
08.02.2011, 14:58
So, also die Idee mit der LED war ja perfekt. Er blinkt bei 8MHz nicht 1s. Also läuft er wohl intern nur auf 1MHz, so wie du sagst.

Aber was muss ich dann in den Fuses einstellen, denn davor hab ich ehrlich gesagt riesen Respekt, man will ja nichts kaputt machen?

Also zu den Servos: Wir haben einen, wo die Poti-Achse gekürzt wurde, dieser aber auf Mittelstellung gebracht wurde.

Der andere dreht immer nach links, egal wohin wir den Hebel drehen. Selbst wenn er auf dem linken Anschlag steht will er trotzdem weiter drehen.

Aber das könnte doch damit zusammenhängen, dass die MHz verstellt sind?


Edit: So ich Voll-Idiot, hab jetzt natürlich in den Fuses rumgespielt. Das Kalibrieren klappt und den Test macht er auch richtig. Aber ich kann keine Programme mehr raufspeichern!

BlackHawk
08.02.2011, 16:15
So, ich hatte den Controller ja stets über ISP programmiert.

Jetzt hab ich mal aufs Evalutions Board von Pollin gesetzt, da kann ich auch wieder Programme schreiben.

Kann ich daher gefahrenlos, alle Häkchen bei den Fuses entfernen, und diese dann neu schreiben um ihn wieder per ISP zu programmieren?

BlackHawk
08.02.2011, 16:40
Mein Kumpel hats geschafft!!!!!!! Er läuft wieder, auch mit ISP. Ich versuch jetzt ma wieder den Servo auf 8MHz. Ma gucken.

BlackHawk
08.02.2011, 16:48
Also, ich fass ma zusammen:

Wir haben jetzt die Fuses gesetzt, mit Hilfe dem Rechner von Wkrug.
Wir haben dann das Programm, welches mit 8MHz läuft geschrieben.
Aber immernoch dreht alles nach links!

oberallgeier
08.02.2011, 17:02
Ohne Oskar ist hier die Fehlersuche mühselig. Vielleicht nimmst Du mal die doppelte Rampenzeit, 2 bis 3 ms. Ziel: Drehung nach rechts.