PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : servo am Pro-Bot 128



schumi2010
21.02.2010, 17:03
Hallo,

ich habe jetzt seit einigen wochen den Pro-Bot 128 und alles funktioniert einwandfrei. Ich habe Erfahrung mit Löten und Elektronischen Schaltungen, aber leider nicht so viel Erfahrung mit programieren.

Jetzt zu meinem Problem :-s

Ich habe schon mehrere verschiedene Servoansteuerungen mit dem Pro-Bot probiert aber egal was ich mache der servo bewegt sich keinen millimeter.

Könnte mir da einer weiter helfen?

Gruß
Michael

Virus
21.02.2010, 17:18
hallo schumi,

es ist hier üblich, das man auch den Programcode zeigt, es gibt in diesem Falle soviele Fehlerquellen, woher sollen wir wissen, wo der Fehrler liegt, ohne Schaltplan oder Programm?

schumi2010
21.02.2010, 17:23
Hallo Virus :P

Ja das ist mein Problem ich habe kein richtiges Programm, weil ich nicht weiß wo ich den Servo am Pro-Bot an löten oder anstecken muss :(

radbruch
21.02.2010, 17:53
Hallo

Tja, leider wurde dies bei der Entwicklung des Probot offensichtlich überhaupt nicht bedacht. Obwohl im C-Control128 ein potenter Mega 128 weckelt (laut Doku des Probot S.8 hat der u.a. 53 IOs!!!)), sind keinerlei Erweiterungsmöglichkeiten (außer I2C) vorgesehen. Schade eigentlich.

Ich sehe deshalb nur drei Möglichkeiten eigene Erweiterungen anzuschliesen:

- man verwendet Erweiterungen die I2C-fähig sind
- man verzichtet auf vorhandene Funktionen und verwendet CON3-5, wobei Con5 frei ist, wenn man I2C nicht verwendet (SDA+SCL)
- man lötet an den freien und ungenutzen Pins von X1-4 von unten eigene Anschlussdrähtchen an.

Tipps zur Programmierung dieser Erweiterungen kann ich leider nicht geben, weil ich das C-Control nicht verwende.


Ich habe schon mehrere verschiedene Servoansteuerungen mit dem Pro-Bot probiert ... das ist mein Problem ich habe kein richtiges ProgrammDas muss man nicht verstehen, oder?

Gruß

mic

schumi2010
21.02.2010, 18:05
okay dann werde ich mal die von dir genannten Optionen ausprobieren :) und vielen danke für deine schnelle und sehr ausfürlich Antwort.

eine Frage hätte ich aber noch und zwar was bräuchte ich für Erweiterungen für I2C um einen oder mehrere Servos damit zu stueren?

kcrx
22.02.2010, 23:52
Hi Michael,

ich hatte anfangs mit ähnlichen Problemen zu kämpfen. Darf ich dich als ersten Gast auf meinen Blog einladen:

PRO-BOT 128 MOD Blog (http://blogs.myspace.com/index.cfm?fuseaction=blog.ListAll&friendId=521078426)

Jetzt sollte der Link auch funktionieren... 8-[
Ich hoffe du findest dort die Lösung für dein Servo Problem.

Gruß Frank

radbruch
23.02.2010, 00:03
Hallo

Als alte Neugiernase wollte ich mir das auch anschauen, aber scheinbar ist der Link "krank":


Ungültige FriendID.
Dieser Nutzer hat entweder seine Mitgliedschaft beendet oder der Account wurde wegen Verstoßes gegen unsere Nutzungsbedingungen gelöscht.
*grummel*

schumi2010
23.02.2010, 14:27
Hallo,

vielen dank kcrx für deine Hilfe. Du hast mir mit deinem Blog sehr weitegeholfen :) wenn ich das ganze ohne die Steuerung betreiben möchte, kann ich dann einfach das rote kabel des servos an oc 1b anschließen oder muss ich dann noch etwas ändern?


Mfg Michael

Virus
23.02.2010, 14:34
also ich bekomm den Link auf und gelang auch zur entsprechenden Seite,

Probot auf RC, interessante Sache,
ich habs auch schon mal mit meinem RP6 überlegt, allerdings nicht als dauerhafte lösung sondern nach dem Dockinstation-Prinzip.

rolber
23.02.2010, 15:11
Hallo !!
Falls Du über I2C ein oder mehrere Servos steuern willst, schau Dir mal den SD 21 Servocontroller von Robotikhardware an.
Ich benutze den auch und Er ist leicht zu Programmieren, hat eine feste Slave Adresse und für jedes der Servos mehrere Regiter mit denen Du die Stellrichtung und Geschwindigkeit bestimmst.

Roland

schumi2010
23.02.2010, 15:25
Hallo Roland,

das Board ist ja der Hammer 21 Servos gleichzeigt steuern.
Vielen Dank für den Tipp :)

Vieleicht kaufe ich mir auch sofort das RN-Control dazu, das habe ich jetzt schon öfter bei guten Projekten gesehen, aber ich glaube ich experimentiere erst noch etwas mit meinem Pro-Bot.

Michael

kcrx
23.02.2010, 16:52
Bei dem von mir verwendeten Top-Line Standard Servo war
rot= 5V+
braun = Masse
orange = Steuerleitung
Also wenn das Servo an der selben Batterie wie der Pro-Bot mit Spannung versorgt wird, genügt es die Steuerleitung an OC1A oder OC1B (PWM-Ports) anzuschließen.
Bei getrennten Spannungsquellen müssen die Masse Leitungen (wie im Schaubild) verbunden werden.

Danke für den Hinweis, werde den Blogpost auch ergänzen.
Gruß Frank

schumi2010
23.02.2010, 19:39
okay, so funktioniert es jetzt einwandfrei bei mir (:

nochmals viel Dank für deine Hilfe :P

Michael

Robotniks
23.02.2010, 20:04
Hi,

schaut euch doch mal die Hilfe der IDE genauer an...
Du benötigst keinen extra Controller für die Servos, es gibt bei der
CC Pro einen Servo Befehl damit kannst du problemlos 18 Servos ansteuern!


// Ansteuerung von 3 Servos und beenden nach 10 Sek.

void main(void)
{

byte servo_var[30]; // Servo interne Variablen

// Max. 10 Servos, 20ms Intervall, Timer 3

Servo_Init(10, 1, servo_var, 1);


Servo_Set(7, 2000); // Servo Portbit 7 2000µs
Servo_Set(6, 1800); // Servo Portbit 6 1800µs
Servo_Set(5, 1600); // Servo Portbit 5 1600µs

AbsDelay(5000);

Servo_Set(7, 1000); // Servo Portbit 7 1000µs

AbsDelay(5000);

Servo_Set(7, 0); // alle Servos aus
Servo_Set(6, 0);
Servo_Set(5, 0);
}



void Servo_Init(byte servo_cnt, byte servo_interval, byte ramaddr[], byte timer);

Sub Servo_Init(servo_cnt As Byte, servo_interval As Byte, ByRef ramaddr As Byte, timer As Byte)

Beschreibung

Initialisiert die Servoroutinen. Der Parameter servo_cnt gibt an wieviele Servos gleichzeitig betrieben werden. Die Periodenlänge (10 oder 20ms) wird mit servo_interval gesetzt, der Parameter timer bestimmt, welcher 16-Bit Timer eingesetzt wird. Timer 3 steht allerdings nur bei dem Mega128 zur Verfügung. Der Anwender muß den Servoroutinen Speicher zur Verfügung stellen. Die Größe beträgt servo_cnt * 3. Möchte man also 10 Servos betreiben, so sollte man ein byte Array von 30 Bytes reservieren.

Für die Servoansteuerung wird ein 16-Bit Timer benötigt. Dies ist entweder Timer 1 oder Timer 3 (bei Mega128). Wird der Timer abgeschaltet oder für andere Timerfunktionen genutzt, so wird die Servoansteuerung nicht arbeiten.

Parameter

servo_cnt Anzahl der möglichen Servos (maximal 20)
servo_interval Periodenlänge (0=10ms, 1=20ms)
ramaddr Adresse des Speicherblocks

timer Für die Servosteuerung benutzter 16-Bit Timer (0=Timer 1, 1=Timer 3 nur Mega128)


Syntax

void Servo_Set(byte portbit, word pos);

Sub Serial_Init(portbit As Byte, pos As Word)

Beschreibung

Setzt die Pulslänge zur Steuerung des Servoarms. Der Ausgangsport wird über den portbit Parameter angegeben. (Für die Abbildung zwischen Portbits und den Pins des Atmel Mega Chips siehe Pinzuordnung von M32 und M128).

Alle Pulslängen der gestellten Servos dürfen als Summe nicht die Periodenlänge (servo_interval Parameter) überschreiten, da sonst ein erratisches Verhalten auftritt. Man kann daher z.B. 8 Servos auf 2500µs Pulslänge bei einer Periodenlänge von 20ms setzen. Zur Sicherheit sollte man allerdings ein wenig unter der Periodenlänge bleiben.

Parameter

portbit Bitnummer des Ports (siehe Tabelle)
pos Pulslänge zur Steuerung des Servoarms in µsec (500 - 2500)


Um eine schöne Liniare Bewegung zu erreichen, kannst du die Routinen von einer 10mS Timer Routine aus refreshen...


Grüße

schumi2010
23.02.2010, 20:19
okay, ich probiere in den nächsten tagen mal alles aus (:

und danke für deine Arbeit Robotniks

Michael