1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-17 21:35:44 +03:00

Fix Blackbox P interval (#5645)

This commit is contained in:
Míguel Ángel Mulero Martínez 2018-04-09 14:35:54 +02:00 committed by Michael Keller
parent 4b3ada82bf
commit 802edf236b
6 changed files with 57 additions and 54 deletions

View file

@ -55,7 +55,7 @@ gyroDev_t gyroDev;
TEST(BlackboxTest, TestInitIntervals)
{
blackboxConfigMutable()->p_denom = 32;
blackboxConfigMutable()->p_ratio = 32;
// 250Hz PIDloop
gyro.targetLooptime = 4000;
blackboxInit();
@ -123,7 +123,7 @@ TEST(BlackboxTest, TestInitIntervals)
TEST(BlackboxTest, Test_500Hz)
{
blackboxConfigMutable()->p_denom = 32;
blackboxConfigMutable()->p_ratio = 32;
// 500Hz PIDloop
gyro.targetLooptime = 2000;
blackboxInit();
@ -141,7 +141,7 @@ TEST(BlackboxTest, Test_500Hz)
TEST(BlackboxTest, Test_1kHz)
{
blackboxConfigMutable()->p_denom = 32;
blackboxConfigMutable()->p_ratio = 32;
// 1kHz PIDloop
gyro.targetLooptime = 1000;
blackboxInit();
@ -167,7 +167,7 @@ TEST(BlackboxTest, Test_1kHz)
TEST(BlackboxTest, Test_2kHz)
{
blackboxConfigMutable()->p_denom = 32;
blackboxConfigMutable()->p_ratio = 32;
// 2kHz PIDloop
gyro.targetLooptime = 500;
blackboxInit();
@ -200,7 +200,7 @@ TEST(BlackboxTest, Test_2kHz)
TEST(BlackboxTest, Test_8kHz)
{
blackboxConfigMutable()->p_denom = 32;
blackboxConfigMutable()->p_ratio = 32;
// 8kHz PIDloop
gyro.targetLooptime = 125;
blackboxInit();
@ -223,9 +223,9 @@ TEST(BlackboxTest, Test_8kHz)
EXPECT_EQ(true, blackboxShouldLogPFrame());
}
TEST(BlackboxTest, Test_zero_p_denom)
TEST(BlackboxTest, Test_zero_p_ratio)
{
blackboxConfigMutable()->p_denom = 0;
blackboxConfigMutable()->p_ratio = 0;
// 1kHz PIDloop
gyro.targetLooptime = 1000;
blackboxInit();
@ -246,9 +246,9 @@ TEST(BlackboxTest, Test_zero_p_denom)
TEST(BlackboxTest, Test_CalculatePDenom)
{
blackboxConfigMutable()->p_denom = 0;
blackboxConfigMutable()->p_ratio = 0;
// note I-frame is logged every 32ms regardless of PIDloop rate
// so p_denom is 32 when blackbox logging rate is 1kHz
// so p_ratio is 32 when blackbox logging rate is 1kHz
// 1kHz PIDloop
gyro.targetLooptime = 1000;
@ -290,57 +290,65 @@ TEST(BlackboxTest, Test_CalculateRates)
{
// 1kHz PIDloop
gyro.targetLooptime = 1000;
blackboxConfigMutable()->p_denom = 32;
blackboxConfigMutable()->p_ratio = 32;
blackboxInit();
EXPECT_EQ(32, blackboxIInterval);
EXPECT_EQ(1, blackboxPInterval);
EXPECT_EQ(1, blackboxGetRateNum());
EXPECT_EQ(1, blackboxGetRateDenom());
blackboxConfigMutable()->p_denom = 16;
blackboxConfigMutable()->p_ratio = 16;
blackboxInit();
EXPECT_EQ(32, blackboxIInterval);
EXPECT_EQ(2, blackboxPInterval);
EXPECT_EQ(1, blackboxGetRateNum());
EXPECT_EQ(2, blackboxGetRateDenom());
blackboxConfigMutable()->p_denom = 8;
blackboxConfigMutable()->p_ratio = 8;
blackboxInit();
EXPECT_EQ(32, blackboxIInterval);
EXPECT_EQ(4, blackboxPInterval);
EXPECT_EQ(1, blackboxGetRateNum());
EXPECT_EQ(4, blackboxGetRateDenom());
// 8kHz PIDloop
gyro.targetLooptime = 125;
blackboxConfigMutable()->p_denom = 32; // 1kHz logging
blackboxConfigMutable()->p_ratio = 32; // 1kHz logging
blackboxInit();
EXPECT_EQ(256, blackboxIInterval);
EXPECT_EQ(8, blackboxPInterval);
EXPECT_EQ(1, blackboxGetRateNum());
EXPECT_EQ(8, blackboxGetRateDenom());
blackboxConfigMutable()->p_denom = 64; // 2kHz logging
blackboxConfigMutable()->p_ratio = 48; // 1.5kHz logging
blackboxInit();
EXPECT_EQ(256, blackboxIInterval);
EXPECT_EQ(5, blackboxPInterval);
EXPECT_EQ(5, blackboxGetRateDenom());
blackboxConfigMutable()->p_ratio = 64; // 2kHz logging
blackboxInit();
EXPECT_EQ(256, blackboxIInterval);
EXPECT_EQ(4, blackboxPInterval);
EXPECT_EQ(1, blackboxGetRateNum());
EXPECT_EQ(4, blackboxGetRateDenom());
blackboxConfigMutable()->p_denom = 128; // 4kHz logging
blackboxConfigMutable()->p_ratio = 128; // 4kHz logging
blackboxInit();
EXPECT_EQ(256, blackboxIInterval);
EXPECT_EQ(2, blackboxPInterval);
EXPECT_EQ(1, blackboxGetRateNum());
EXPECT_EQ(2, blackboxGetRateDenom());
blackboxConfigMutable()->p_denom = 256; // 8kHz logging
blackboxConfigMutable()->p_ratio = 256; // 8kHz logging
blackboxInit();
EXPECT_EQ(256, blackboxIInterval);
EXPECT_EQ(1, blackboxPInterval);
EXPECT_EQ(1, blackboxGetRateNum());
EXPECT_EQ(1, blackboxGetRateDenom());
// 0.126 PIDloop
gyro.targetLooptime = 126;
blackboxConfigMutable()->p_ratio = 32; // 1kHz logging
blackboxInit();
EXPECT_EQ(253, blackboxIInterval);
EXPECT_EQ(7, blackboxPInterval);
EXPECT_EQ(7, blackboxGetRateDenom());
}