Browse Source

new ESC calibration routine

git-svn-id: https://arducopter.googlecode.com/svn/trunk@2121 f9c3cf11-9bcb-44bc-f272-b75c42450872
master
jasonshort 14 years ago
parent
commit
c577bce85d
  1. 6
      ArduCopterMega/Parameters.h
  2. 6
      ArduCopterMega/radio.pde
  3. 47
      ArduCopterMega/setup.pde
  4. 4
      ArduCopterMega/system.pde
  5. 5
      ArduCopterMega/test.pde

6
ArduCopterMega/Parameters.h

@ -91,6 +91,7 @@ public:
k_param_throttle_cruise, k_param_throttle_cruise,
k_param_flight_mode_channel, k_param_flight_mode_channel,
k_param_flight_modes, k_param_flight_modes,
k_param_esc_calibrate,
// //
// 220: Waypoint data // 220: Waypoint data
@ -180,7 +181,7 @@ public:
AP_Int8 current_enabled; AP_Int8 current_enabled;
AP_Int16 milliamp_hours; AP_Int16 milliamp_hours;
AP_Int8 compass_enabled; AP_Int8 compass_enabled;
AP_Int8 esc_calibrate;
// RC channels // RC channels
RC_Channel rc_1; RC_Channel rc_1;
@ -264,6 +265,9 @@ public:
rc_camera_pitch (k_param_rc_9, PSTR("RC9_")), rc_camera_pitch (k_param_rc_9, PSTR("RC9_")),
rc_camera_roll (k_param_rc_10, PSTR("RC10_")), rc_camera_roll (k_param_rc_10, PSTR("RC10_")),
esc_calibrate (0, k_param_esc_calibrate, PSTR("ESC")),
// PID controller group key name initial P initial I initial D initial imax // PID controller group key name initial P initial I initial D initial imax
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid_acro_rate_roll (k_param_pid_acro_rate_roll, PSTR("ACR_RLL_"), ACRO_RATE_ROLL_P, ACRO_RATE_ROLL_I, ACRO_RATE_ROLL_D, ACRO_RATE_ROLL_IMAX * 100), pid_acro_rate_roll (k_param_pid_acro_rate_roll, PSTR("ACR_RLL_"), ACRO_RATE_ROLL_P, ACRO_RATE_ROLL_I, ACRO_RATE_ROLL_D, ACRO_RATE_ROLL_IMAX * 100),

6
ArduCopterMega/radio.pde

@ -7,8 +7,6 @@ byte failsafeCounter = 0; // we wait a second to take over the throttle and sen
void init_rc_in() void init_rc_in()
{ {
//read_EEPROM_radio(); // read Radio limits
// set rc channel ranges // set rc channel ranges
g.rc_1.set_angle(4500); g.rc_1.set_angle(4500);
g.rc_2.set_angle(4500); g.rc_2.set_angle(4500);
@ -66,6 +64,10 @@ void init_rc_out()
OCR4B = 0xFFFF; // PH4, OUT6 OCR4B = 0xFFFF; // PH4, OUT6
OCR4C = 0xFFFF; // PH5, OUT5 OCR4C = 0xFFFF; // PH5, OUT5
// don't fuss if we are calibrating
if(g.esc_calibrate == 1)
return;
if(g.rc_3.radio_min <= 1200){ if(g.rc_3.radio_min <= 1200){
output_min(); output_min();
} }

47
ArduCopterMega/setup.pde

@ -13,6 +13,7 @@ static int8_t setup_current (uint8_t argc, const Menu::arg *argv);
static int8_t setup_sonar (uint8_t argc, const Menu::arg *argv); static int8_t setup_sonar (uint8_t argc, const Menu::arg *argv);
static int8_t setup_compass (uint8_t argc, const Menu::arg *argv); static int8_t setup_compass (uint8_t argc, const Menu::arg *argv);
static int8_t setup_declination (uint8_t argc, const Menu::arg *argv); static int8_t setup_declination (uint8_t argc, const Menu::arg *argv);
static int8_t setup_esc (uint8_t argc, const Menu::arg *argv);
static int8_t setup_show (uint8_t argc, const Menu::arg *argv); static int8_t setup_show (uint8_t argc, const Menu::arg *argv);
// Command/function table for the setup menu // Command/function table for the setup menu
@ -24,6 +25,7 @@ const struct Menu::command setup_menu_commands[] PROGMEM = {
{"pid", setup_pid}, {"pid", setup_pid},
{"radio", setup_radio}, {"radio", setup_radio},
{"motors", setup_motors}, {"motors", setup_motors},
{"esc", setup_esc},
{"level", setup_accel}, {"level", setup_accel},
{"modes", setup_flightmodes}, {"modes", setup_flightmodes},
{"frame", setup_frame}, {"frame", setup_frame},
@ -196,19 +198,51 @@ setup_radio(uint8_t argc, const Menu::arg *argv)
} }
static int8_t static int8_t
setup_motors(uint8_t argc, const Menu::arg *argv) setup_esc(uint8_t argc, const Menu::arg *argv)
{ {
report_frame(); Serial.printf_P(PSTR("\nUnplug battery, calibrate as usual.\n Press Enter to cancel.\n"));
init_rc_in(); g.esc_calibrate.set_and_save(1);
print_hit_enter(); while(1){
delay(1000); delay(20);
if(Serial.available() > 0){
g.esc_calibrate.set_and_save(0);
break;
}
}
}
int out_min = g.rc_3.radio_min + 70; void
init_esc()
{
Serial.printf_P(PSTR("\nCalibrate ESC\nRestart when done."));
g.esc_calibrate.set_and_save(0);
while(1){
read_radio();
delay(20);
APM_RC.OutputCh(CH_1, g.rc_3.radio_in);
APM_RC.OutputCh(CH_2, g.rc_3.radio_in);
APM_RC.OutputCh(CH_3, g.rc_3.radio_in);
APM_RC.OutputCh(CH_4, g.rc_3.radio_in);
}
}
static int8_t
setup_motors(uint8_t argc, const Menu::arg *argv)
{
print_hit_enter();
report_frame();
//init_rc_in();
//delay(1000);
int out_min = g.rc_3.radio_min + 70;
while(1){ while(1){
delay(20); delay(20);
@ -316,6 +350,7 @@ setup_accel(uint8_t argc, const Menu::arg *argv)
return(0); return(0);
} }
static int8_t static int8_t
setup_pid(uint8_t argc, const Menu::arg *argv) setup_pid(uint8_t argc, const Menu::arg *argv)
{ {

4
ArduCopterMega/system.pde

@ -186,6 +186,9 @@ void init_ardupilot()
// menu; they must reset in order to fly. // menu; they must reset in order to fly.
// //
if (digitalRead(SLIDE_SWITCH_PIN) == 0) { if (digitalRead(SLIDE_SWITCH_PIN) == 0) {
if(g.esc_calibrate == 1){
init_esc();
}else{
digitalWrite(A_LED_PIN,HIGH); // turn on setup-mode LED digitalWrite(A_LED_PIN,HIGH); // turn on setup-mode LED
Serial.printf_P(PSTR("\n" Serial.printf_P(PSTR("\n"
"Entering interactive setup mode...\n" "Entering interactive setup mode...\n"
@ -197,6 +200,7 @@ void init_ardupilot()
main_menu.run(); main_menu.run();
} }
} }
}
// All of the Gyro calibrations // All of the Gyro calibrations
// ---------------------------- // ----------------------------

5
ArduCopterMega/test.pde

@ -166,10 +166,7 @@ test_radio(uint8_t argc, const Menu::arg *argv)
while(1){ while(1){
delay(20); delay(20);
read_radio(); read_radio();
//output_manual_throttle();
//g.rc_1.calc_pwm();
//g.rc_2.calc_pwm();
//g.rc_4.calc_pwm();
Serial.printf_P(PSTR("IN 1: %d\t2: %d\t3: %d\t4: %d\t5: %d\t6: %d\t7: %d\n"), Serial.printf_P(PSTR("IN 1: %d\t2: %d\t3: %d\t4: %d\t5: %d\t6: %d\t7: %d\n"),
g.rc_1.control_in, g.rc_1.control_in,

Loading…
Cancel
Save