-
Hallo,
Auch wenn der Thread ausgestorben ist:
Für die beiden Servos in den Beinen (Gelenke) hat er ja 30 Ncm.
Wieviel hat denn der Servo, der als Schulter dient, also das Bein drehen kann? Und wie schnell kann sihc der Roboter bewegen? Also ist die Bewegung eher langsam oder geht sie auch richtig flott?
MfG,
jga
-
naja, so ein bein wiegt vllt 120g und der servo muss es ja nicht hochhaben, sondern nur drehen.
Weiß nicht, was er für nen Lauf-Modus hat, aber wenns einer mit 3Beinen am Boden ist, dann kanns (falls gut programmiert) schon recht fix sein..
-
danke erstmal an plusminus, für den hinweis im icq bezüglich der lipo-akkus.
ich hatte anfang des jahres das projekt erstmal auf eis gelegt, aus zeitmangel und weil ich keine befriedigende lösung für zwei probleme gefunden hatte.
1) picaxe und funkmodul wollen beide nur als i²c master kommunizieren.
ich werde da notgedrungen auf den picaxe verzichten und jeden einzelnen befehl über funk geben (also auf die "treiberroutinen" die der picaxe zur verfügung stellen sollte verzichten).
2) akkukonzept
hatte damals spezielle nimh akkus bestellt, welche leider nie ankamen.
nun höre ich aber von speziellen, hochstromfähigen lipos, welche ich nun auch testen werde. mein erster versuch mit einem normalen lipo war ja wegen des hohen innenwiderstands und dem damit verbundenen zusammenbruch der versorgungsspannung nicht gerade von erfolg gekrönt.
habe nun auch wieder mehr zeit - und daher: i´m back \:D/
-
Argl, ich komme nicht weiter mit der Programmierung 8-[
Ich lasse den PICAXE weg und steuere den SD21 direkt vom CM02 aus an.
Das ganze mit C++. Beide Möglichkeiten (16Bit/8Bit) führen nicht zum Erfolg.
Hier der Code:
Message Handlers: (funktionieren - SRF08 läßt sich problemlos steuern)
Code:
void CBrain::SetupCommPort( LPCTSTR comport)
{
DCB dcb;
COMMTIMEOUTS ct;
CloseHandle(hCom);
hCom = CreateFile( comport, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
GetCommState(hCom, &dcb);
dcb.BaudRate = CBR_19200;
dcb.fParity = FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(hCom, &dcb);
GetCommTimeouts(hCom, &ct);
ct.ReadIntervalTimeout = 500;
ct.ReadTotalTimeoutMultiplier =500;
ct.ReadTotalTimeoutConstant = 500;
SetCommTimeouts(hCom, &ct);
SetCommMask(hCom, EV_RXCHAR);
}
16Bit-Version:
Code:
#define I2C_CMD 0x55 // direct I2C control command
#define CM01_CMD 0x5a // CM01 command
#define SD21 0xc2 // SD21 adress
HANDLE hCom;
BYTE SerialBuf[200];
...
BD.Servo = 0x00; //servo 1 (register 0)
BD.Speed0 = 0x05; //speed 5
BD.Leg0a = 0x08; //lowbyte
BD.Leg0b = 0x07; //highbyte
SerialBuf[0] = I2C_CMD; //send I2C command
SerialBuf[1] = SD21; //adress of SD21 (0xc2)
SerialBuf[2] = BD.Servo;
SerialBuf[4] = BD.Speed0;
SerialBuf[3] = BD.Leg0a;
SerialBuf[5] = BD.Leg0b;
WriteFile(hCom, &SerialBuf, 6, &n, NULL);
8Bit-Version:
Code:
#define I2C_CMD 0x55 // direct I2C control command
#define CM01_CMD 0x5a // CM01 command
#define SD21 0xc2 // SD21 adress
HANDLE hCom;
BYTE SerialBuf[200];
...
BD.Servo = 0x3F; //base adress servo1 (63)
BD.Leg0base = 0x40; //position 64
SerialBuf[0] = I2C_CMD; //send I2C command
SerialBuf[1] = SD21; //adress of SD21
SerialBuf[2] = BD.Servo;
SerialBuf[3] = BD.Leg0base;
WriteFile(hCom, &SerialBuf, 4, &n, NULL);
Es bewegt sich absolut nichts ](*,)
Weiss jemand Rat ?
-
ok, habe den fehler gefunden.
ich hatte vergessen, dem CM02 die Anzahl der Datenbytes mitzuteilen
8-[ ](*,)