Limit integral windup, some new PID values and linearise thrust.

This commit is contained in:
2012-12-08 12:31:17 +00:00
parent 999e129e2c
commit 274805c2a0
5 changed files with 75 additions and 23 deletions

48
main.c
View File

@@ -9,6 +9,7 @@
#include "led.h"
#include "status.h"
#include "watchdog.h"
#include "thrust.h"
#define PINSEL0 (*((volatile unsigned int *) 0xE002C000))
#define PINSEL1 (*((volatile unsigned int *) 0xE002C004))
@@ -219,6 +220,8 @@ int main(void) {
return 0;
}
static int power = 0;
void menu_handler(void)
{
int i;
@@ -329,35 +332,56 @@ void menu_handler(void)
}
break;
case '0' & 0xdf:
timer_set_pwm_value(0, 0);
timer_set_pwm_value(1, 0);
timer_set_pwm_value(2, 0);
timer_set_pwm_value(3, 0);
set_thrust(0, 0.0);
set_thrust(1, 0.0);
set_thrust(2, 0.0);
set_thrust(3, 0.0);
power = 0;
break;
#if 0
case '1' & 0xdf:
timer_set_pwm_value(0, PWM_MAX/2);
power--;
if (power < 0)
power = 15;
power = power % 16;
putstr("Power setting: ");
putint(power);
putstr("\r\n");
set_thrust(0, ((float)power)/16.0);
break;
case '2' & 0xdf:
timer_set_pwm_value(1, PWM_MAX/2);
power++;
power = power % 16;
putstr("Power setting: ");
putint(power);
putstr("\r\n");
set_thrust(0, ((float)power)/16.0);
break;
#endif
#if 0
case '1' & 0xdf:
set_thrust(0, 0.5);
break;
case '2' & 0xdf:
set_thrust(1, 0.5);
break;
case '3' & 0xdf:
timer_set_pwm_value(2, PWM_MAX/2);
set_thrust(2, 0.5);
break;
case '4' & 0xdf:
timer_set_pwm_value(3, PWM_MAX/2);
set_thrust(3, 0.5);
break;
case '5' & 0xdf:
timer_set_pwm_value(0, PWM_MAX);
set_thrust(0, 1.0);
break;
case '6' & 0xdf:
timer_set_pwm_value(1, PWM_MAX);
set_thrust(1, 1.0);
break;
case '7' & 0xdf:
timer_set_pwm_value(2, PWM_MAX);
set_thrust(2, 1.0);
break;
case '8' & 0xdf:
timer_set_pwm_value(3, PWM_MAX);
set_thrust(3, 1.0);
break;
#endif
case '9' & 0xdf: