Michael, while it makes sense to add a general standard utility for this, I don't think the Hyundai/Kia code is a good candidate for this. I find it confusing you need to take the voltage into account rather than the power. Also, the "WattHours" numbers don't seem to make sense -- why would you have different capacities in the same SOC differences, and why depending on the voltage? Also, the calculator seems to need / be based on rectangular steps instead of an actual charge curve? A more natural generalized definition would in my opinion be based on modeling the actual curve, like the one I've implemented for the VW Up, see `OvmsVehicleVWeUp::CalcChargeTime()`. That takes the charge curve as direct (SOC → max power) coordinates, just adding the section gradients as a speed optimization (float divisions are very CPU intense on the ESP32): struct { int soc; float pwr; float grd; } ccurve[] = { { 0, 30.0, (32.5-30.0) / ( 30- 0) }, { 30, 32.5, (26.5-32.5) / ( 55- 30) }, { 55, 26.5, (18.5-26.5) / ( 76- 55) }, { 76, 18.5, (11.0-18.5) / ( 81- 76) }, { 81, 11.0, ( 6.5-11.0) / ( 91- 81) }, { 91, 6.5, ( 3.0- 6.5) / (100- 91) }, { 100, 3.0, 0 }, }; But maybe some other vehicle already has an even more generalized & easy to use approach. My function lacks temperature compensation, but normally delivers sufficiently close results. Regards, Michael Am 29.12.22 um 13:02 schrieb Michael Geddes:
Hi,
There's a remaining charge calculator currently in the hyundai base class which I have improved upon. This configuration allows for the charge voltage to be part of the equation. This is the example from data I collected with the ioniq 5 on 800v charging .. and I've written a plugin so I can get more charge profile information at other charge voltages.
I'm happy to leave it in the Ioniq 5 code, but was wondering if I should put the implementation in a common area.. vehicle.h maybe?
//.ichael
---8<----------------------
// Charging profile // - Must be from lowest to highest to%. // - Higher voltages must come before lower voltages for the same to% charging_step_t ioniq5_chargesteps[] = { // voltage, to%, WattHours { 750, 10, 100000 }, { 750, 25, 190000 }, { 750, 45, 220000 }, { 750, 75, 120000 }, { 750, 80, 80000 }, { 400, 85, 60000 }, { 400, 90, 40000 }, { 100, 90, 1100 }, { 400, 95, 25000 }, { 100, 95, 7400 }, { 100, 100, 7200 }, { 0, 0, 0 }, };
int CalcRemainingChargeMins(int chargeVolt, float chargespeed, int fromSoc, int toSoc, int batterySize, charging_step_t charge_steps[]) {
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26