/branches/dongfang_FC_fixedwing/arduino_atmega328/analog.c |
---|
41,7 → 41,7 |
/* |
* Airspeed |
*/ |
int16_t airpressure; |
uint32_t airpressure; |
uint16_t airspeedVelocity = 0; |
//int16_t airpressureWindow[AIRPRESSURE_WINDOW_LENGTH]; |
//uint8_t airpressureWindowIdx = 0; |
211,7 → 211,6 |
} |
void startAnalogConversionCycle(void) { |
twimaster_startCycle(); |
// Stop the sampling. Cycle is over. |
for (uint8_t i = 0; i<8; i++) { |
ADSensorInputs[i] = 0; |
221,6 → 220,7 |
adChannel = AD_AIRPRESSURE; |
ADMUX = (ADMUX & 0xE0) | adChannel; |
startADC(); |
twimaster_startCycle(); |
sensorDataReady = 0; |
} |
301,7 → 301,7 |
} |
// probably wanna aim at 1/10 m/s/unit. |
#define LOG_AIRSPEED_FACTOR 0 |
#define LOG_AIRSPEED_FACTOR 2 |
void analog_updateAirspeed(void) { |
uint16_t rawAirpressure = ADSensorInputs[AD_AIRPRESSURE]; |
369,7 → 369,7 |
} |
void analog_calibrate(void) { |
#define OFFSET_CYCLES 120 |
#define OFFSET_CYCLES 32 |
uint8_t i, axis; |
int32_t offsets[4] = { 0, 0, 0, 0}; |
/branches/dongfang_FC_fixedwing/arduino_atmega328/commands.c |
---|
7,24 → 7,28 |
#include "output.h" |
#include "rc.h" |
#ifdef USE_MK3MAG |
// TODO: Kick that all outa here! |
uint8_t compassCalState = 0; |
#endif |
void commands_handleCommands(void) { |
/* |
* Get the current command (start/stop motors, calibrate), if any. |
*/ |
uint8_t command = controlMixer_getCommand(); |
uint8_t repeated = controlMixer_isCommandRepeated(); |
uint8_t argument = controlMixer_getArgument(); |
if (!isFlying) { |
if (command == COMMAND_RCCAL && !repeated) { |
RC_calibrate(); |
rcTrim_writeToEEProm(); |
beepNumber(2); // 2 beeps means RC. |
} else if (command == COMMAND_GYROCAL && !repeated) { |
// Gyro calibration, with or without selecting a new parameter-set. |
// paramSet_readFromEEProm(1); |
if (command == COMMAND_GYROCAL && !repeated) { |
// Gyro calinbration, with or without selecting a new parameter-set. |
paramSet_readFromEEProm(1); |
analog_calibrate(); |
attitude_setNeutral(); |
controlMixer_setNeutral(); |
beepNumber(1); // 1 beep means gyro. |
beepNumber(1); |
} else if (command == COMMAND_CHMOD && !repeated) { |
configuration_setFlightParameters(argument); |
} |
} |
} // end !MOTOR_RUN condition. |
} |
/branches/dongfang_FC_fixedwing/arduino_atmega328/commands.h |
---|
5,8 → 5,7 |
#define COMMAND_NONE 0 |
#define COMMAND_GYROCAL 1 |
#define COMMAND_RCCAL 2 |
#define COMMAND_CHMOD 3 |
#define COMMAND_CHMOD 2 |
void commands_handleCommands(void); |
/branches/dongfang_FC_fixedwing/arduino_atmega328/configuration.c |
---|
9,7 → 9,6 |
int16_t variables[VARIABLE_COUNT]; |
ParamSet_t staticParams; |
ChannelMap_t channelMap; |
RCTrim_t rcTrim; |
IMUConfig_t IMUConfig; |
volatile DynamicParams_t dynamicParams; |
34,8 → 33,8 |
{offsetof(ParamSet_t, gyroPID[2].I), offsetof(DynamicParams_t, gyroPID[2].I),0,255}, |
{offsetof(ParamSet_t, gyroPID[2].D), offsetof(DynamicParams_t, gyroPID[2].D),0,255}, |
{offsetof(ParamSet_t, gimbalServoConfigurations[0].manualControl), offsetof(DynamicParams_t, gimbalServoManualControl[0]),0,255}, |
{offsetof(ParamSet_t, gimbalServoConfigurations[1].manualControl), offsetof(DynamicParams_t, gimbalServoManualControl[1]),0,255}, |
{offsetof(ParamSet_t, servoConfigurations[0].manualControl), offsetof(DynamicParams_t, servoManualControl[0]),0,255}, |
{offsetof(ParamSet_t, servoConfigurations[1].manualControl), offsetof(DynamicParams_t, servoManualControl[1]),0,255}, |
{offsetof(ParamSet_t, outputFlash[0].timing), offsetof(DynamicParams_t, output0Timing),0,255}, |
{offsetof(ParamSet_t, outputFlash[1].timing), offsetof(DynamicParams_t, output1Timing),0,255}, |
}; |
90,19 → 89,19 |
// Servos |
staticParams.servoCount = 7; |
staticParams.servosReverse = CONTROL_SERVO_REVERSE_ELEVATOR | CONTROL_SERVO_REVERSE_RUDDER; |
staticParams.gimbalServoMaxManualSpeed = 10; |
for (uint8_t i=0; i<2; i++) { |
staticParams.gimbalServoConfigurations[i].manualControl = 128; |
staticParams.gimbalServoConfigurations[i].stabilizationFactor = 0; |
staticParams.gimbalServoConfigurations[i].minValue = 32; |
staticParams.gimbalServoConfigurations[i].maxValue = 224; |
staticParams.gimbalServoConfigurations[i].flags = 0; |
staticParams.servoConfigurations[i].manualControl = 128; |
staticParams.servoConfigurations[i].stabilizationFactor = 0; |
staticParams.servoConfigurations[i].minValue = 32; |
staticParams.servoConfigurations[i].maxValue = 224; |
staticParams.servoConfigurations[i].flags = 0; |
} |
// Battery warning and emergency flight |
staticParams.batteryWarningVoltage = 101; // 3.7 each for 3S |
staticParams.emergencyThrottle = 35; |
staticParams.emergencyFlightDuration = 30; |
for (uint8_t i=0; i<3; i++) { |
staticParams.gyroPID[i].P = 80; |
111,9 → 110,9 |
staticParams.gyroPID[i].iMax = 45; |
} |
staticParams.stickIElevator = 60; |
staticParams.stickIAilerons = 80; |
staticParams.stickIRudder = 25; |
staticParams.stickIElevator = 80; |
staticParams.stickIAilerons = 120; |
staticParams.stickIRudder = 40; |
// Outputs |
staticParams.outputFlash[0].bitmask = 1; //0b01011111; |
148,9 → 147,6 |
IMUConfig.gyroDWindowLength = 3; |
IMUConfig.gyroQuadrant = 0; |
IMUConfig.imuReversedFlags = 0; |
IMUConfig.gyroCalibrationTweak[0] = |
IMUConfig.gyroCalibrationTweak[1] = |
IMUConfig.gyroCalibrationTweak[2] = 0; |
} |
/***************************************************/ |
157,9 → 153,7 |
/* Default Values for R/C Channels */ |
/***************************************************/ |
void channelMap_default(void) { |
channelMap.RCPolarity = 1; |
channelMap.HWTrim = 192; |
channelMap.variableOffset = 128; |
channelMap.HWTrim = 0; |
channelMap.channels[CH_ELEVATOR] = 1; |
channelMap.channels[CH_AILERONS] = 0; |
channelMap.channels[CH_THROTTLE] = 2; |
/branches/dongfang_FC_fixedwing/arduino_atmega328/configuration.h |
---|
42,7 → 42,6 |
uint8_t gyroActivityDamping; |
uint8_t driftCompDivider; // 1/k (Koppel_ACC_Wirkung) |
uint8_t driftCompLimit; // limit for gyrodrift compensation |
int8_t gyroCalibrationTweak[3]; |
} IMUConfig_t; |
extern IMUConfig_t IMUConfig; |
93,7 → 92,7 |
/*PMM*/uint8_t output0Timing; |
/*PMM*/uint8_t output1Timing; |
uint8_t gimbalServoManualControl[2]; |
uint8_t servoManualControl[2]; |
/* P */uint8_t userParams[8]; |
} DynamicParams_t; |
112,21 → 111,13 |
*/ |
typedef struct { |
uint8_t RCPolarity; // 1=positive, 0=negative. Use positive with Futaba receiver, negative with FrSky. |
uint8_t HWTrim; |
uint8_t variableOffset; |
uint8_t HWTrim; |
uint8_t variableOffset; |
uint8_t channels[MAX_CHANNELS]; |
} ChannelMap_t; |
extern ChannelMap_t channelMap; |
// With fixed wing, we need some way to trim the plane. This is done during a trim flight without gyros activated, |
// and then save in a succeeding gyro calibration command. |
typedef struct { |
int16_t trim[MAX_CHANNELS]; |
} RCTrim_t; |
extern RCTrim_t rcTrim; |
typedef struct { |
int16_t offsets[3]; |
} sensorOffset_t; |