May have fixed the problem
May have solved the issue with the throttle not wokring when maxing some of the stick controlls. Could still not be correct but the issue seems to have been located.
This commit is contained in:
parent
0df214b68a
commit
bce8d66ea0
@ -25,7 +25,7 @@
|
||||
#define SBUS_FRAME_SIZE 25
|
||||
#define SBUS_HEADER 0x0F
|
||||
#define SBUS_FOOTER 0x00
|
||||
#define USART1_SBUS_DMA_SIZE SBUS_FRAME_SIZE * 5 + 1 // sbus package is 176 bits (22 bytes)
|
||||
#define USART1_SBUS_DMA_SIZE SBUS_FRAME_SIZE + 1 // sbus package is 176 bits (22 bytes)
|
||||
|
||||
#define SBUS_MAX_CHANNEL 18 // Including two digital
|
||||
#define STICK_CHANNEL_COUNT 4
|
||||
|
@ -128,7 +128,7 @@ void mix()
|
||||
int16_t throttleMax = mixerConfig.maxCommand; // Import
|
||||
int16_t throttleRange = throttleMax - throttleMin; // The throttle range we have with current defines
|
||||
|
||||
|
||||
//TODO: Seems to be causing an error when maxing any of the stick with low throttle
|
||||
/* Check if we have enough interval for the adjustments */
|
||||
// Check if we maxed out
|
||||
if (RPY_MixRange > throttleRange)
|
||||
@ -139,7 +139,18 @@ void mix()
|
||||
float mixReduction = (float) throttleRange / RPY_MixRange;
|
||||
// Apply the scaling to all outputs
|
||||
for (int i = 0; i < MOTOR_COUNT; i++)
|
||||
{
|
||||
RPY_Mix[i] = RPY_Mix[i] * mixReduction;
|
||||
|
||||
//TEMPFIX recalculate
|
||||
if (RPY_Mix[i] > RPY_Mix_Max) RPY_Mix_Max = RPY_Mix[i];
|
||||
if (RPY_Mix[i] < RPY_Mix_Min) RPY_Mix_Min = RPY_Mix[i];
|
||||
}
|
||||
|
||||
//Temp fix may not be right
|
||||
RPY_MixRange = RPY_Mix_Max - RPY_Mix_Min;
|
||||
throttleMin += (RPY_MixRange / 2);
|
||||
throttleMax -= (RPY_MixRange / 2);
|
||||
}
|
||||
// If we have the needed range no scaling is needed
|
||||
else
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
/* This instance is read by the whole system and should contain actual RX data */
|
||||
sbusFrame_s sbusChannelData = {0};
|
||||
dma_usart_return raw_dma_data_t = {0};
|
||||
dma_usart_return raw_dma_data_t;
|
||||
|
||||
/* Create a DMA Handler */
|
||||
usart_dma_profile dmaHandler;
|
||||
@ -107,16 +107,28 @@ void sbus_read()
|
||||
static int sbus_arr_iterator = SBUS_FRAME_SIZE;
|
||||
static bool stop_bit_read = false;
|
||||
|
||||
|
||||
// If continue only if we get new data from DMA
|
||||
if (raw_dma_data_t.new_data)
|
||||
{
|
||||
|
||||
for (int i = 0; i < USART1_SBUS_DMA_SIZE; i++)
|
||||
{
|
||||
uint8_t msg = raw_dma_data_t.buff[i];
|
||||
// Look for the beginning of a sbus frame
|
||||
if ( message_it == 0 ) //&& stop_bit_read)
|
||||
{
|
||||
message_it = (raw_dma_data_t.buff[i] == ((uint8_t)SBUS_HEADER)) ? 1 : 0;
|
||||
//message_it = (raw_dma_data_t.buff[i] == ((uint8_t)SBUS_HEADER)) ? 1 : 0;
|
||||
if (msg == ((uint8_t)SBUS_HEADER))
|
||||
{
|
||||
sbus_arr[(message_it)] = msg;
|
||||
message_it++;
|
||||
}
|
||||
else
|
||||
{
|
||||
message_it = 0;
|
||||
}
|
||||
|
||||
// sbus_arr_iterator = 0;
|
||||
// stop_bit_read = false;
|
||||
}
|
||||
@ -125,19 +137,17 @@ void sbus_read()
|
||||
else
|
||||
{
|
||||
|
||||
if (message_it -1 < SBUS_FRAME_SIZE)
|
||||
if ((message_it) < SBUS_FRAME_SIZE)
|
||||
{
|
||||
sbus_arr[message_it - 1] = raw_dma_data_t.buff[i];
|
||||
sbus_arr[(message_it)] = msg;
|
||||
message_it++;
|
||||
}
|
||||
if (message_it - 1 == SBUS_FRAME_SIZE)
|
||||
|
||||
if ((message_it) == SBUS_FRAME_SIZE)
|
||||
{
|
||||
if (raw_dma_data_t.buff[i] == SBUS_FOOTER)
|
||||
|
||||
message_it = 0;
|
||||
if (msg == (uint8_t)SBUS_FOOTER)
|
||||
{
|
||||
message_it = 0;
|
||||
|
||||
|
||||
|
||||
//stop_bit_read = true;
|
||||
// If the expected byte is stop byte, then we overwrite to the return value.
|
||||
@ -179,7 +189,9 @@ void sbus_read()
|
||||
sbusChannelData.chan8 = rx_truncate(sbusChannelData.chan8);
|
||||
}
|
||||
else
|
||||
{
|
||||
message_it = 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include "drivers/motormix.h"
|
||||
#include "drivers/motors.h"
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
* BRIEF: Should contain all the initializations of the system, needs to
|
||||
* run before the scheduler.
|
||||
@ -57,6 +58,7 @@ void init_system()
|
||||
//init motors to run with oneshot 125
|
||||
pwmEnableAllMotors(Oneshot125);
|
||||
|
||||
|
||||
#ifdef USE_LEDS
|
||||
//Initialize the on board leds
|
||||
ledReavoEnable();
|
||||
|
Reference in New Issue
Block a user