Changes to acc functionality. OBS! Not working correctly

This commit is contained in:
philsson 2016-10-24 17:34:44 +02:00
parent 8ae24669af
commit 1ef8f56ed6
2 changed files with 22 additions and 4 deletions

View File

@ -18,6 +18,7 @@
#include "drivers/sbus.h"
#include "scheduler/scheduler.h"
#include <math.h>
#include "drivers/failsafe_toggles.h"
#define PTERM_SCALE 0.032029f /*P-term used as a scale value to the PID controller*/
#define ITERM_SCALE 0.244381f /*I-term used as a scale value to the PID controller*/
@ -87,7 +88,8 @@ float calcAngle(const uint8_t axis, const float x_axis, const float y_axis, cons
**************************************************************************/
float convertData(int inputRange, int outputRange, int offset, float value)
{
return (outputRange/inputRange)*(value-offset);
return ((float)outputRange/(float)inputRange)*(value-(float)offset);
//return 1.0;
}
/**************************************************************************
@ -154,7 +156,7 @@ void getPointRate(float *desiredCommand, uint8_t ID_profile)
{
case PID_ID_GYRO:
if (!PidProfile[PID_ID_ACCELEROMETER].pidEnabled)
if (!(PidProfile[PID_ID_ACCELEROMETER].pidEnabled && flags_IsSet_ID(systemFlags_flightmode_acceleromter_id)))
{
desiredCommand[ROLL] = convertData(RADIO_RANGE, GYRO_RANGE, 0, PidProfile[PID_ID_ACCELEROMETER].PID_Out[ROLL]);
desiredCommand[PITCH] = convertData(RADIO_RANGE, GYRO_RANGE, 0, PidProfile[PID_ID_ACCELEROMETER].PID_Out[PITCH]);
@ -326,7 +328,7 @@ void pidRun(uint8_t ID)
break;
case PID_ID_ACCELEROMETER:
if (!PidProfile[PID_ID_ACCELEROMETER].pidEnabled)
if (!(PidProfile[PID_ID_ACCELEROMETER].pidEnabled && flags_IsSet_ID(systemFlags_flightmode_acceleromter_id)))
{
PidProfile[PID_ID_ACCELEROMETER].PID_Out[ROLL] = rc_input.Roll;
PidProfile[PID_ID_ACCELEROMETER].PID_Out[PITCH] = rc_input.Pitch;

View File

@ -266,6 +266,10 @@ typedef enum
COMMAND_ID_PID_ACCEL_YAW_P_LIMIT,
COMMAND_ID_PID_ACCEL_OUT_LIMIT,
/* Enable the different pid loops */
COMMAND_ID_PID_GYRO_ISENABLED,
COMMAND_ID_PID_ACCEL_ISENABLED,
/* Counter for the amount of commands */
COMMAND_ID_COUNT,
@ -634,8 +638,20 @@ const cliCommandConfig_t commandTable[COMMAND_ID_COUNT] = {
},
[COMMAND_ID_PID_ACCEL_OUT_LIMIT] =
{
"pid_accel_yaw_p_limit", COMMAND_ID_PID_ACCEL_OUT_LIMIT, EEPROM_PID_ACCELEROMETER, EEPROM_VALUE_TYPE_PROFILE, 20, VAL_UINT_16, .valueRange = {0, 65000}
"pid_accel_out_limit", COMMAND_ID_PID_ACCEL_OUT_LIMIT, EEPROM_PID_ACCELEROMETER, EEPROM_VALUE_TYPE_PROFILE, 20, VAL_UINT_16, .valueRange = {0, 65000}
},
/* Enable pid loops */
[COMMAND_ID_PID_GYRO_ISENABLED] =
{
"pid_gyro_isenabled", COMMAND_ID_PID_GYRO_ISENABLED, EEPROM_PID_GYRO, EEPROM_VALUE_TYPE_PROFILE, 0, VAL_BOOL, .valueRange = {0, 1}
},
[COMMAND_ID_PID_ACCEL_ISENABLED] =
{
"pid_accel_isenabled", COMMAND_ID_PID_ACCEL_ISENABLED, EEPROM_PID_ACCELEROMETER, EEPROM_VALUE_TYPE_PROFILE, 0, VAL_BOOL, .valueRange = {0, 1}
},
};
/***********************************************************************