RP6conrad
04.05.2008, 21:05
Ich habe mir einen Greifer auf Holz gebastelt für meine RP6. Das Ding soll leere Cola cans aufnimmen und transportieren. Der Greifer functioniert recht gut. Die Puls von Servos wirden mit der bestehende Timer ISR von 100 µs gemacht (Controllib.c). Das geht sehr einfach. Nachteil ist das die Auflösung nur in Schritte von 100µs geht. Das gibt dan nur 10 Servopos von Min bis Max (eigenlich 12 bis 13, die meiste Servos gehen von 0.9 mS bis 2.2 mS). Reicht volkommen aus für mich. Problem mit Servos und Greifer : Wen der Servo die Greifer schliest, aber er kan nicht seine Endposition erreichen, nimmt er ein sehr hohe Strom. Ich hatte mir mal gedacht von diesen Strom zu messen, und daraus dan die Pulslange zu corrigieren (Strom zi hoch, Greifer zuruck einige Schritte offnen).
ISR (TIMER0_COMP_vect)
{
// Blocking delay (100µs):
delay_timer++;
servo_timer++;
if (servo_timer>200) {servo_timer=0;PORTC |= IO_PC5;PORTC |= IO_PC7;}
if (servo_timer>servo2) PORTC &= ~IO_PC5;
if (servo_timer>servo1) PORTC &= ~IO_PC7;
ISR (TIMER0_COMP_vect)
{
// Blocking delay (100µs):
delay_timer++;
servo_timer++;
if (servo_timer>200) {servo_timer=0;PORTC |= IO_PC5;PORTC |= IO_PC7;}
if (servo_timer>servo2) PORTC &= ~IO_PC5;
if (servo_timer>servo1) PORTC &= ~IO_PC7;