Hm.. Ok, ganz steig ich zwar noch nicht ganz dahinter, aber ich glaube die Grundidee habe ich verstanden
Ich habe jetzt auch die richtigen Abschnitte für die Servos gefunden. Ich poste die mal hier. Schaut se euch mal bitte an und sagt mir ob ich das verstanden habe:
Code:
#define Pos_Servo_1 OCR1A
#define Pos_Servo_2 OCR1B
#define Pos_Servo_3 OCR1C
#define Pos_Servo_4 OCR3A
#define Pos_Servo_5 OCR3B
#define Pos_Servo_6 OCR3C
/*****************************************************************************/
// Move Servo's
void Move (uint8_t Servo, uint16_t Value)
{
switch (Servo)
{
case 1: Pos_Servo_1 = Start_Position[1] + Value; break;
case 2: Pos_Servo_2 = Start_Position[2] + Value; break;
case 3: Pos_Servo_3 = Start_Position[3] + Value; break;
case 4: Pos_Servo_4 = Start_Position[4] + Value; break;
case 5: Pos_Servo_5 = Start_Position[5] + Value; break;
case 6: Pos_Servo_6 = Start_Position[6] + Value; break;
}
}
/*****************************************************************************/
/* Move
* Example:
*
* s_Move(6, 500,2);
* 1 - Servo 6
* 2 - (Startpostion + 500) = 2ms (right)
* 3 - (speed = 2)
*/
void s_Move (uint8_t Servo, int16_t D_Value, uint16_t Speed)
{
int16_t Actual_position=2700;
switch (Servo)
{
case 1: Actual_position = Pos_Servo_1 - Start_Position[1]; break;
case 2: Actual_position = Pos_Servo_2 - Start_Position[2]; break;
case 3: Actual_position = Pos_Servo_3 - Start_Position[3]; break;
case 4: Actual_position = Pos_Servo_4 - Start_Position[4]; break;
case 5: Actual_position = Pos_Servo_5 - Start_Position[5]; break;
case 6: Actual_position = Pos_Servo_6 - Start_Position[6]; break;
}
if (Actual_position > D_Value )
{
while (Actual_position > D_Value)
{
Actual_position--;
Move(Servo, Actual_position);
mSleep(Speed);
}
return;
}
if (Actual_position < D_Value )
{
while (Actual_position < D_Value)
{
Actual_position++;
Move(Servo, Actual_position);
mSleep(Speed);
}
return;
}
}
Es sind 3 Kabel am Servo: eines für Gnd, eines für VCC und eines welches auf die OCR1A-B und OCR3A-B (welche hier als POS_Servo_X definiert wurden und als Ausgang bei der PIN-Konfiguration) des Controllers gehen.
Mit Spannung werden se dann immer versorgt und durch die Move()-Funktionen werden in die variablen Pos_Servo_X die Werte, ausgehend von der vorher eingegebenen Startposition, eingegeben.
Und ab hier steig ich nicht mehr ganz durch:
Die Werte in Pos_Servo_x werden nun an den Servo gesendet und der macht dann was mit dem Poti? Ist da nun eine eigene kleine Elektronik mit dabei die das überprüft ob das dann passt, oder wie? Ich mein, es kann ja bei einer bestimmten Armstellung nur eine bestimmte Spannung anliegen über den Poti...
Also nen Komparator?
Und wenn ich das alles richtig verstehe (also auch Stefan und Hubert dann bekomm ich auf gar keinen Fall Werte zurück die ich für die Positionsbestimmung verwenden kann?
Ich muss/möchte mir nämlich ne Bahngleichung aufstellen mit der die Servos gesteuert werden abhängig von den Toolkoordinaten (sowas in der Art) aber dazu brauch ich glaub ich die winkelstellung (ich bin da noch nicht soo tief drin, ich les mich gerade da ein).
Gruß,
Lesezeichen