1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-18 08:54:15 +01:00

OP-22 Flight/PiOS: Spektrum improvements, removed my zero throttle glitch

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2306 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
sambas 2010-12-28 18:37:36 +00:00 committed by sambas
parent 7ccdb296ac
commit 0b2a0884ae
3 changed files with 25 additions and 8 deletions

View File

@ -114,7 +114,8 @@ static void guidanceTask(void *parameters)
if ((manualControl.FlightMode == MANUALCONTROLCOMMAND_FLIGHTMODE_AUTO) &&
((systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_VTOL) ||
(systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_QUADP) ||
(systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_QUADX)))
(systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_QUADX) ||
(systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_HEXA) ))
{
if(positionHoldLast == 0) {
/* When enter position hold mode save current position */

View File

@ -266,7 +266,7 @@ TIM8 | Servo 5 | Servo 6 | Servo 7 | Servo 8
#define PIOS_SPEKTRUM_SUPV_ENABLED 1
#define PIOS_SPEKTRUM_SUPV_TIMER TIM6
#define PIOS_SPEKTRUM_SUPV_TIMER_RCC_FUNC RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE)
#define PIOS_SPEKTRUM_SUPV_HZ 50 // 1/22ms
#define PIOS_SPEKTRUM_SUPV_HZ 60 // 1/22ms
#define PIOS_SPEKTRUM_SUPV_IRQ_CHANNEL TIM6_IRQn
#define PIOS_SPEKTRUM_SUPV_IRQ_FUNC void TIM6_IRQHandler(void)

View File

@ -43,8 +43,8 @@
/* Global Variables */
/* Local Variables, use pios_usart */
static uint16_t CaptureValue[12];
static uint8_t prev_byte = 0xFF, sync = 0, bytecount = 0, byte_array[20] = { 0 };
static uint16_t CaptureValue[12],CaptureValueTemp[12];
static uint8_t prev_byte = 0xFF, sync = 0, bytecount = 0, frame_error=0, byte_array[20] = { 0 };
uint8_t sync_of = 0;
@ -77,7 +77,7 @@ void PIOS_SPEKTRUM_Init(void)
TIM_TimeBaseStructure.TIM_Prescaler = (PIOS_MASTER_CLOCK / 1000000) - 1; /* For 1 uS accuracy */
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(PIOS_PPM_SUPV_TIMER, &TIM_TimeBaseStructure);
TIM_TimeBaseInit(PIOS_SPEKTRUM_SUPV_TIMER, &TIM_TimeBaseStructure);
/* Enable the Update Interrupt Request */
TIM_ITConfig(PIOS_SPEKTRUM_SUPV_TIMER, TIM_IT_Update, ENABLE);
@ -188,8 +188,12 @@ int32_t PIOS_SPEKTRUM_Decode(uint8_t b)
frame = channel >> 15;
channeln = (channel >> 10) & 0x0F;
data = channel & 0x03FF;
if (channeln < 12)
CaptureValue[channeln] = data;
if(channeln==0 && data<10) // discard frame if throttle misbehaves
{
frame_error=1;
}
if (channeln < 12 && !frame_error)
CaptureValueTemp[channeln] = data;
}
}
if (bytecount == 16) {
@ -197,6 +201,14 @@ int32_t PIOS_SPEKTRUM_Decode(uint8_t b)
bytecount = 0;
sync = 0;
sync_of = 0;
if (!frame_error)
{
for(int i=0;i<12;i++)
{
CaptureValue[i] = CaptureValueTemp[i];
}
}
frame_error=0;
}
prev_byte = b;
return 0;
@ -232,13 +244,17 @@ PIOS_SPEKTRUM_SUPV_IRQ_FUNC {
sync = 0;
bytecount = 0;
prev_byte = 0xFF;
frame_error=0;
sync_of++;
/* watchdog activated */
if (sync_of > 1) {
if (sync_of > 3) {
/* signal lost */
sync_of = 0;
for (int i = 0; i < 12; i++)
{
CaptureValue[i] = 0;
CaptureValueTemp[i] = 0;
}
}
}