Skip to content

Commit

Permalink
preliminary tcmux test
Browse files Browse the repository at this point in the history
  • Loading branch information
Dopp-IO committed Feb 8, 2024
1 parent 0c049df commit 39ee0e8
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 31 deletions.
2 changes: 1 addition & 1 deletion lib/systems/include/SysClock.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ struct SysTick_s
class SysClock
{
private:
enum TriggerIndices_s
enum TriggerIndices_e
{
TRIG_1000 = 0,
TRIG_500 = 1,
Expand Down
14 changes: 9 additions & 5 deletions lib/systems/include/TorqueControllerMux.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
const float maxSpeedForModeChange = 5.0; // m/s
const float maxTorqueDeltaForModeChange = 0.5; // Nm

enum TorqueLimit_e
enum class TorqueLimit_e
{
TCMUX_LOW_TORQUE = 0,
TCMUX_MID_TORQUE = 1,
Expand All @@ -33,9 +33,9 @@ class TorqueControllerMux
{DialMode_e::ENDURANCE, TC_NO_CONTROLLER},
};
std::unordered_map<TorqueLimit_e, float> torqueLimitMap_ = {
{TCMUX_LOW_TORQUE, 10.0},
{TCMUX_MID_TORQUE, 15.0},
{TCMUX_FULL_TORQUE, 20.0}
{TorqueLimit_e::TCMUX_LOW_TORQUE, 10.0},
{TorqueLimit_e::TCMUX_MID_TORQUE, 15.0},
{TorqueLimit_e::TCMUX_FULL_TORQUE, 20.0}
};
DrivetrainCommand_s controllerCommands_[static_cast<int>(TC_NUM_CONTROLLERS)];
TorqueControllerNone torqueControllerNone_;
Expand All @@ -52,7 +52,7 @@ class TorqueControllerMux
, torqueControllerSimple_(controllerCommands_[static_cast<int>(TC_SAFE_MODE)])
{
muxMode_ = TC_NO_CONTROLLER;
torqueLimit_ = TCMUX_LOW_TORQUE;
torqueLimit_ = TorqueLimit_e::TCMUX_LOW_TORQUE;
}
// Functions
void tick(
Expand All @@ -71,6 +71,10 @@ class TorqueControllerMux
{
return drivetrainCommand_;
};
const TorqueLimit_e& getTorqueLimit()
{
return torqueLimit_;
};
};

#endif /* __TORQUECTRLMUX_H__ */
35 changes: 20 additions & 15 deletions lib/systems/src/SysClock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
// Constructor
SysClock::SysClock()
{

for (int i = 0; i < static_cast<int>(TriggerIndices_e::NUM_TRIGGERS); i++)
{
triggerTimes[i] = 0;
}
}

SysTick_s SysClock::tick(unsigned long sysMicros)
Expand All @@ -12,29 +15,31 @@ SysTick_s SysClock::tick(unsigned long sysMicros)
.millis = sysMicros / 1000,
.micros = sysMicros,
.triggers = {
.trigger1000 = sysMicros > triggerTimes[TRIG_1000],
.trigger500 = sysMicros > triggerTimes[TRIG_500],
.trigger100 = sysMicros > triggerTimes[TRIG_100],
.trigger50 = sysMicros > triggerTimes[TRIG_50],
.trigger10 = sysMicros > triggerTimes[TRIG_10],
.trigger5 = sysMicros > triggerTimes[TRIG_5],
.trigger1 = sysMicros > triggerTimes[TRIG_1]
.trigger1000 = sysMicros > triggerTimes[static_cast<int>(TriggerIndices_e::TRIG_1000)],
.trigger500 = sysMicros > triggerTimes[static_cast<int>(TriggerIndices_e::TRIG_500)],
.trigger100 = sysMicros > triggerTimes[static_cast<int>(TriggerIndices_e::TRIG_100)],
.trigger50 = sysMicros > triggerTimes[static_cast<int>(TriggerIndices_e::TRIG_50)],
.trigger10 = sysMicros > triggerTimes[static_cast<int>(TriggerIndices_e::TRIG_10)],
.trigger5 = sysMicros > triggerTimes[static_cast<int>(TriggerIndices_e::TRIG_5)],
.trigger1 = sysMicros > triggerTimes[static_cast<int>(TriggerIndices_e::TRIG_1)]
}
};

// Recalculate trigger times
if (tickReturn.triggers.trigger1000)
triggerTimes[TRIG_1000] += 1'000;
triggerTimes[TriggerIndices_e::TRIG_1000] += 1'000;
if (tickReturn.triggers.trigger500)
triggerTimes[TRIG_500] += 2'000;
triggerTimes[TriggerIndices_e::TRIG_500] += 2'000;
if (tickReturn.triggers.trigger100)
triggerTimes[TRIG_100] += 10'000;
triggerTimes[TriggerIndices_e::TRIG_100] += 10'000;
if (tickReturn.triggers.trigger50)
triggerTimes[TRIG_50] += 20'000;
triggerTimes[TriggerIndices_e::TRIG_50] += 20'000;
if (tickReturn.triggers.trigger10)
triggerTimes[TRIG_10] += 100'000;
triggerTimes[TriggerIndices_e::TRIG_10] += 100'000;
if (tickReturn.triggers.trigger5)
triggerTimes[TRIG_5] += 200'000;
triggerTimes[TriggerIndices_e::TRIG_5] += 200'000;
if (tickReturn.triggers.trigger1)
triggerTimes[TRIG_1] += 1'000'000;
triggerTimes[TriggerIndices_e::TRIG_1] += 1'000'000;

return tickReturn;
}
6 changes: 3 additions & 3 deletions lib/systems/src/TorqueControllerMux.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,20 @@ void TorqueControllerMux::tick(
)
{
// Tick all torque controllers
torqueControllerSimple_.tick(tick, pedalsData, torqueLimit_);
torqueControllerSimple_.tick(tick, pedalsData, torqueLimitMap_[torqueLimit_]);

// Tick torque button logic at 50hz
if (tick.triggers.trigger50)
{
// detect high-to-low transition and lock out button presses for DEBOUNCE_MILLIS ms
if (
torqueLimitButtonPressed_
&& dashboardTorqueModeButtonPressed
&& !dashboardTorqueModeButtonPressed
&& tick.millis - torqueLimitButtonPressedTime_ > DEBOUNCE_MILLIS
)
{
// WOW C++ is ass
torqueLimit_ = static_cast<TorqueLimit_e>((static_cast<int>(torqueLimit_) + 1) % static_cast<int>(TCMUX_NUM_TORQUE_LIMITS));
torqueLimit_ = static_cast<TorqueLimit_e>((static_cast<int>(torqueLimit_) + 1) % (static_cast<int>(TorqueLimit_e::TCMUX_NUM_TORQUE_LIMITS)));
torqueLimitButtonPressedTime_ = tick.millis;
}
torqueLimitButtonPressed_ = dashboardTorqueModeButtonPressed;
Expand Down
2 changes: 1 addition & 1 deletion platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build_src_filter =
-<**/*.c>
-<**/*.cpp>
build_unflags = -std=gnu++11
build_flags = -std=c++17
build_flags = -std=c++17 -g
lib_ignore =
interfaces-lib

Expand Down
5 changes: 0 additions & 5 deletions test/controller_mux_test.h

This file was deleted.

2 changes: 1 addition & 1 deletion test/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#include "state_machine_test.h"
#include "pedals_system_test.h"

#include "torque_controller_mux_test.h"


int main(int argc, char **argv)
Expand Down
59 changes: 59 additions & 0 deletions test/torque_controller_mux_test.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#ifndef TORQUE_CONTROLLER_MUX_TEST
#define TORQUE_CONTROLLER_MUX_TEST

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <SysClock.h>
#include <TorqueControllerMux.h>
#include <PedalsSystem.h>
#include <SteeringSystem.h>
#include "AnalogSensorsInterface.h"
#include "DashboardInterface.h"

TEST(TorqueControllerMuxTesting, test_torque_button)
{
const int SERIES_LENGTH = 10;
SysClock clock = SysClock();
SysTick_s cur_tick;
TorqueControllerMux torque_controller_mux = TorqueControllerMux();

bool buttonTimeSeries[SERIES_LENGTH]; // 50hz time series
// Cycle back to low test
buttonTimeSeries[1] = true;
buttonTimeSeries[3] = true;
buttonTimeSeries[5] = true;
// Cycle only on button release test
for (int i = 7; i < SERIES_LENGTH; i++)
buttonTimeSeries[i] = true;

ASSERT_EQ(torque_controller_mux.getTorqueLimit(), TorqueLimit_e::TCMUX_LOW_TORQUE);

// Run test
for (int i = 0; i < SERIES_LENGTH; i++)
{
cur_tick = clock.tick(i * 1000 * 20); // 20 ms increments
torque_controller_mux.tick(
cur_tick,
(const DrivetrainDynamicReport_s) {},
(const PedalsSystemData_s) {},
(const SteeringSystemData_s) {},
(const AnalogConversion_s) {},
(const AnalogConversion_s) {},
(const AnalogConversion_s) {},
(const AnalogConversion_s) {},
DialMode_e::MODE_1,
buttonTimeSeries[i]
);
// Test conditions
if (i == 2)
ASSERT_EQ(torque_controller_mux.getTorqueLimit(), TorqueLimit_e::TCMUX_MID_TORQUE);
if (i == 4)
ASSERT_EQ(torque_controller_mux.getTorqueLimit(), TorqueLimit_e::TCMUX_FULL_TORQUE);
if (i == 6)
ASSERT_EQ(torque_controller_mux.getTorqueLimit(), TorqueLimit_e::TCMUX_LOW_TORQUE);
if (i == SERIES_LENGTH - 1)
ASSERT_EQ(torque_controller_mux.getTorqueLimit(), TorqueLimit_e::TCMUX_LOW_TORQUE);
}
}

#endif /* TORQUE_CONTROLLER_MUX_TEST */

0 comments on commit 39ee0e8

Please sign in to comment.