Hallo IgelIgel,
so, ich habe die Anschlagswerte auf die Norm (1ms..2ms Impuls) gesetzt:
#define LEFT_TOUCH 1000 // Left servo touch (~1.0ms)
#define RIGHT_TOUCH 1000 // Right servo touch (~2.0ms)
... und die task auf die Schnelle so verändert, dass sich das Servo ganz langsam auf seine 3 Hauptpositionen (Links/Mitte/Rechts) bewegen kann:
Code:
void task_SERVO(void)
{static uint8_t pos;
// -----------------------------------------------------------------------
// Your test code for positioning the servo here:
if (getStopwatch1() > 5000) { // Change position every ~5s
if (pos == 0) {
while (position > 1) {
position -= 2;
setSERVO(position);
setCursorPosLCD(0, 0);
writeStringLCD_P("Servopos.: ");
writeIntegerLCD(position, DEC);
writeStringLCD_P(" ");
mSleep(10);
}
} // Position of servo
if (pos == 1) {
while (position < MIDDLE_POSITION) {
position += 2;
setSERVO(position);
setCursorPosLCD(0, 0);
writeStringLCD_P("Servopos.: ");
writeIntegerLCD(position, DEC);
writeStringLCD_P(" ");
mSleep(10);
}
}
if (pos == 2) {
while (position < RIGHT_TOUCH) {
position += 2;
setSERVO(position);
setCursorPosLCD(0, 0);
writeStringLCD_P("Servopos.: ");
writeIntegerLCD(position, DEC);
writeStringLCD_P(" ");
mSleep(10);
}
}
if (pos == 3) {
while (position > MIDDLE_POSITION) {
position -= 2;
setSERVO(position);
setCursorPosLCD(0, 0);
writeStringLCD_P("Servopos.: ");
writeIntegerLCD(position, DEC);
writeStringLCD_P(" ");
mSleep(10);
}
}
pos++;
if (pos > 3) {pos = 0;}
setStopwatch1(0);
}
// -----------------------------------------------------------------------
}
Ergebnis:
Das Servo bewegt sich ganz ruhig von links nach rechts und umgekehrt. Laut Oszi liegt der Impuls zwischen 1 und 2 ms, also ok.
Wie ist das bei dir? Reagiert das Servo irgendwie merkwürdig?
Gruß Dirk
Lesezeichen