YAMS
Yet Another Mechanism System
Loading...
Searching...
No Matches
BatterySim.hpp
Go to the documentation of this file.
1// Copyright (c) 2026 Yet Another Software Suite
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
6#include <map>
7#include <mutex>
8#include <unordered_map>
9#include <wpi/units/current.hpp>
10#include <wpi/units/impedance.hpp>
11#include <wpi/units/voltage.hpp>
12
14
30 public:
32 static wpi::units::volt_t BatteryVoltage;
34 static wpi::units::ohm_t BatteryResistance;
35
43 static wpi::units::volt_t CalculateVoltage(const void* id, wpi::units::ampere_t current);
44
71 static void ReplaceSOCInterpolation(const std::map<double, double>& socToVoltage);
72
85 static void ReplaceCapacityDerating(const std::map<double, double>& currentToCapacityFraction);
86
97 static void EnableDischarge(double batteryCapacityAmpHours, wpi::units::volt_t nominalVoltage,
98 wpi::units::ohm_t nominalResistance);
99
104 static void DisableDischarge();
105
107 static void ResetDischarge();
108
114 static double GetStateOfCharge();
115
122 static void RemoveCurrent(const void* id);
123
128 static void Reset();
129
136 static bool HasCurrent(const void* id);
137
138 private:
139 static void UpdateDischarge(double totalCurrentAmps);
141 static double StateOfCharge();
142 static double InterpolateOpenCircuitVoltage(double stateOfCharge);
143 static double Interpolate(const std::map<double, double>& table, double key);
144
146 static std::mutex m_mutex;
147 static std::unordered_map<const void*, double> m_currents;
148 static bool m_dischargeEnabled;
149 static double m_batteryCapacityAmpHours;
150 static double m_ampHoursUsed;
151 static double m_lastTimestampSeconds;
152 static std::map<double, double> m_socToVoltage;
153 static std::map<double, double> m_currentToCapacityFraction;
154};
155
156} // namespace yams::motorcontrollers::simulation
static void RemoveCurrent(const void *id)
static wpi::units::ohm_t BatteryResistance
Definition BatterySim.hpp:34
static void ReplaceSOCInterpolation(const std::map< double, double > &socToVoltage)
static wpi::units::volt_t CalculateVoltage(const void *id, wpi::units::ampere_t current)
static wpi::units::volt_t BatteryVoltage
Definition BatterySim.hpp:32
static void ReplaceCapacityDerating(const std::map< double, double > &currentToCapacityFraction)
static void EnableDischarge(double batteryCapacityAmpHours, wpi::units::volt_t nominalVoltage, wpi::units::ohm_t nominalResistance)
Definition SimSensorConfig.hpp:15