X-Git-Url: https://defiant.homedns.org/gitweb/?p=ros_wild_thumper.git;a=blobdiff_plain;f=avr%2Fmotor_ctrl%2Fmain.c;h=5d655290a7e8b78cb3efd33b881eaf85fafd3bfe;hp=a9565871f0058d7f2585f28ea5f2ca64b55694ca;hb=b301eb19e6487497a8bb946c538a25aa4ee28c1d;hpb=a5fb41902fd2065d475f1b2f618c6428a44f6cd7 diff --git a/avr/motor_ctrl/main.c b/avr/motor_ctrl/main.c index a956587..5d65529 100644 --- a/avr/motor_ctrl/main.c +++ b/avr/motor_ctrl/main.c @@ -97,8 +97,8 @@ */ -#define KP 0.061 -#define KI 0.12 +#define KP 0.09 +#define KI 0.07 #define KD 0.0 #define PID_T 0.01 // wheel diameter=12cm, encoder=48cpr, gear ratio=1:47 @@ -109,6 +109,7 @@ #define STEP_PER_M_RIGHT (STEP_PER_M) #define WHEEL_DIST 0.39912 // Measured: 0.252 #define PWM_BREAK INT16_MIN +#define STALL_LIMIT 140000 #define TWI_ACK TWCR = (1< 140000 && speed1 == 0) { + if (labs(esum1) > STALL_LIMIT && speed1 == 0) { motor1 = 0; motor1_mode = MOTOR_MANUAL; error_state |= (1<<4); esum1 = 0; } - if (labs(esum2) > 140000 && speed2 == 0) { + if (labs(esum2) > STALL_LIMIT && speed2 == 0) { motor2 = 0; motor2_mode = MOTOR_MANUAL; error_state |= (1<<5); esum2 = 0; } - if (labs(esum3) > 140000 && speed3 == 0) { + if (labs(esum3) > STALL_LIMIT && speed3 == 0) { motor3 = 0; motor3_mode = MOTOR_MANUAL; error_state |= (1<<6); esum3 = 0; } - if (labs(esum4) > 140000 && speed4 == 0) { + if (labs(esum4) > STALL_LIMIT && speed4 == 0) { motor4 = 0; motor4_mode = MOTOR_MANUAL; error_state |= (1<<7); @@ -1043,8 +1044,8 @@ int main(void) { TWI_RESET; // Motor 1 & 2 - // Also used for PWM frequency TIMER1_FREQ - // Timer 1: Fast PWM non-inverting mode, Top=255 => 15.625kHz + // Also used for PWM frequency TIMER1_FREQ (F_CPU/256) + // Timer 1: Fast PWM non-inverting mode, Top=255 => 19.531kHz // Prescaler=1 //TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM10); // Avoid narrow spike on extreme pwm value 0 by not setting COM1*1 @@ -1125,7 +1126,7 @@ int main(void) { motor4_mode = MOTOR_PID; } - if (run_update >= 156) { // TIMER1_FREQ/156 = ~100Hz + if (run_update >= 195) { // TIMER1_FREQ/195 = ~100Hz run_update=0; update_pos();