Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1634 → Rev 1635

/branches/dongfang_FC_rewrite/rate-notes
File deleted
/branches/dongfang_FC_rewrite/rc2.c
File deleted
/branches/dongfang_FC_rewrite/rc2.h
File deleted
/branches/dongfang_FC_rewrite/TODO-list.txt
1,2 → 1,2
- Check that yaw attitude mesaurement (excl. compass) and control (with the difference that H H can be turned off) are working just about as in H&I code.
- Check that acc. mode looping is still complete and "safe" to use.
- Find that pitch and roll rate limiter missing at least in HH mode.
/branches/dongfang_FC_rewrite/analog.c
65,7 → 65,7
#include "eeprom.h"
 
/*
* Arrays could have been used arrays for the 2 * 3 axes, but despite some repetition,
* Arrays could have been used for the 2 * 3 axes, but despite some repetition,
* the code is easier to read without.
*
* For each A/D conversion cycle, each channel (eg. the yaw gyro, or the Z axis
/branches/dongfang_FC_rewrite/eeprom.c
91,6 → 91,14
for (i=0; i<sizeof(staticParams.UserParams2); i++) {
staticParams.UserParams2[i] = 0;
}
/*
* While we are still using userparams for flight parameters, do set
* some safe & meaningful default values.
*/
staticParams.UserParams1[4] = 0b01010101;
staticParams.UserParams1[5] = 2; // H&I motor smoothing.
staticParams.UserParams1[6] = 120;
staticParams.UserParams1[7] = 5;
}
 
void setOtherDefaults(void) {
/branches/dongfang_FC_rewrite/rc.c
216,13 → 216,9
if(RC_Quality) {
RC_Quality--;
if (NewPpmData-- == 0) {
 
DebugOut.Analog[12] = stickOffsetPitch;
DebugOut.Analog[13] = stickOffsetRoll;
 
RC_PRTY[CONTROL_PITCH] = (RCChannel(CH_PITCH) - stickOffsetPitch) * staticParams.StickP + RCDiff(CH_PITCH) * staticParams.StickD;
RC_PRTY[CONTROL_ROLL] = (RCChannel(CH_ROLL) - stickOffsetRoll) * staticParams.StickP + RCDiff(CH_ROLL) * staticParams.StickD;
RC_PRTY[CONTROL_THROTTLE] = RCChannel(CH_THROTTLE) + PPM_diff[staticParams.ChannelAssignment[CH_THROTTLE]] * dynamicParams.UserParams[6] + 120;
RC_PRTY[CONTROL_ROLL] = (RCChannel(CH_ROLL) - stickOffsetRoll) * staticParams.StickP + RCDiff(CH_ROLL) * staticParams.StickD;
RC_PRTY[CONTROL_THROTTLE] = RCChannel(CH_THROTTLE) + PPM_diff[staticParams.ChannelAssignment[CH_THROTTLE]] * dynamicParams.UserParams[3] + 120;
if (RC_PRTY[CONTROL_THROTTLE] < 0) RC_PRTY[CONTROL_THROTTLE] = 0; // Throttle is non negative.
tmp1 = -RCChannel(CH_YAW) - RCDiff(CH_YAW);
// exponential stick sensitivity in yawring rate
290,23 → 286,26
}
 
#define COMMAND_THRESHOLD 85
#define COMMAND_CHANNEL_VERTICAL CH_THROTTLE
#define COMMAND_CHANNEL_HORIZONTAL CH_YAW
 
uint8_t RC_getCommand(void) {
if(RCChannel(CH_THROTTLE) > COMMAND_THRESHOLD) {
// throttle is up
if(RCChannel(CH_YAW) > COMMAND_THRESHOLD)
if(RCChannel(COMMAND_CHANNEL_VERTICAL) > COMMAND_THRESHOLD) {
// vertical is up
if(RCChannel(COMMAND_CHANNEL_HORIZONTAL) > COMMAND_THRESHOLD)
return COMMAND_GYROCAL;
if(RCChannel(CH_YAW) < -COMMAND_THRESHOLD)
if(RCChannel(COMMAND_CHANNEL_HORIZONTAL) < -COMMAND_THRESHOLD)
return COMMAND_ACCCAL;
return COMMAND_NONE;
} else if(RCChannel(CH_THROTTLE) < -COMMAND_THRESHOLD) {
// pitch is down
if(RCChannel(CH_YAW) > COMMAND_THRESHOLD)
} else if(RCChannel(COMMAND_CHANNEL_VERTICAL) < -COMMAND_THRESHOLD) {
// vertical is down
if(RCChannel(COMMAND_CHANNEL_HORIZONTAL) > COMMAND_THRESHOLD)
return COMMAND_STOP;
if(RCChannel(CH_YAW) < -COMMAND_THRESHOLD)
if(RCChannel(COMMAND_CHANNEL_HORIZONTAL) < -COMMAND_THRESHOLD)
return COMMAND_START;
return COMMAND_NONE;
} else {
// pitch is around center
// vertical is around center
return COMMAND_NONE;
}
}
324,27 → 323,31
*
* Not in any of these positions: 0
*/
 
#define ARGUMENT_THRESHOLD 70
#define ARGUMENT_CHANNEL_VERTICAL CH_PITCH
#define ARGUMENT_CHANNEL_HORIZONTAL CH_ROLL
 
uint8_t RC_getArgument(void) {
if(RCChannel(CH_PITCH) > ARGUMENT_THRESHOLD) {
// pitch is up
if(RCChannel(CH_ROLL) > ARGUMENT_THRESHOLD)
if(RCChannel(ARGUMENT_CHANNEL_VERTICAL) > ARGUMENT_THRESHOLD) {
// vertical is up
if(RCChannel(ARGUMENT_CHANNEL_HORIZONTAL) > ARGUMENT_THRESHOLD)
return 2;
if(RCChannel(CH_ROLL) < -ARGUMENT_THRESHOLD)
if(RCChannel(ARGUMENT_CHANNEL_HORIZONTAL) < -ARGUMENT_THRESHOLD)
return 4;
return 3;
} else if(RCChannel(CH_PITCH) < -ARGUMENT_THRESHOLD) {
// pitch is down
if(RCChannel(CH_ROLL) > ARGUMENT_THRESHOLD)
} else if(RCChannel(ARGUMENT_CHANNEL_VERTICAL) < -ARGUMENT_THRESHOLD) {
// vertical is down
if(RCChannel(ARGUMENT_CHANNEL_HORIZONTAL) > ARGUMENT_THRESHOLD)
return 8;
if(RCChannel(CH_ROLL) < -ARGUMENT_THRESHOLD)
if(RCChannel(ARGUMENT_CHANNEL_HORIZONTAL) < -ARGUMENT_THRESHOLD)
return 6;
return 7;
} else {
// pitch is around center
if(RCChannel(CH_ROLL) > ARGUMENT_THRESHOLD)
// vertical is around center
if(RCChannel(ARGUMENT_CHANNEL_HORIZONTAL) > ARGUMENT_THRESHOLD)
return 1;
if(RCChannel(CH_ROLL) < -ARGUMENT_THRESHOLD)
if(RCChannel(ARGUMENT_CHANNEL_HORIZONTAL) < -ARGUMENT_THRESHOLD)
return 5;
return 0;
}
/branches/dongfang_FC_rewrite/uart0.c
134,8 → 134,8
"SetPointYaw ",
"YawRateIFactor ", //10
"Gyro I Factor ",
"StickOffsetPitch",
"StickOffsetRoll ",
" ",
" ",
"R/C Var 4 ",
"User Param 4 ", //15
"RCQuality ",
/branches/dongfang_FC_rewrite/userparams.txt
1,3 → 1,5
User param 4: Throttle stick D value.
 
Userparam 5: Filter control.
bits 0-1: Gyros 1st order
bits 2-3: Gyros 2nd order
21,9 → 23,9
GyroAccTrim = -1'th order integral drift correction -
Offset corrections are divided by this before added to offsets. Default 2.
DriftComp = Max offset correction per iteration (=per 1/2 second).
This limits the value _before_ division by GyroAccTrim! Default 32 (ENC-03)
This limits the value _before_ division by GyroAccTrim. Default 32 (ENC-03)
 
Rotary rate limiter flag ON = dongfang axis coupling used. Otherwise H&I axis coupling
Rotary rate limiter flag ON = dongfang axis coupling used. OFF = H&I axis coupling
(with the modification that it does not affect the rate values).
If axis coupling is off: No effect.
The rotary rate limiter was removed.