Changeset 26 for trunk/firmware/Src/self_discharge.c
- Timestamp:
- Sep 8, 2025, 6:57:30 PM (7 weeks ago)
- File:
-
- 1 edited
-
trunk/firmware/Src/self_discharge.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/firmware/Src/self_discharge.c
r6 r26 1 1 #include <stdio.h> 2 2 #include "sysdata.h" 3 3 #include "self_discharge.h" 4 4 5 #define HOLD_TIME ( 3 * 3600 ) //3 stunde5 #define HOLD_TIME (10800 ) //10800 = 3 stunde 6 6 #define SD_FILTER 64 7 7 … … 10 10 11 11 const double batt_float_voltage_tol = 0.03; 12 const doublebatt_voltage_holding_tol = 10;12 const int32_t batt_voltage_holding_tol = 10; 13 13 int32_t max_u = sys_data.s.parameter.uBatFull * ( 1 + batt_float_voltage_tol); 14 14 int32_t min_u = sys_data.s.parameter.uBatFull * ( 1 - batt_float_voltage_tol); … … 48 48 u_hold = 0; 49 49 holding_counter = 0; 50 //printf("self_discharge: fail voltage too high!\n"); 50 51 return -2; 51 52 } … … 56 57 u_hold = 0; 57 58 holding_counter = 0; 59 //printf("self_discharge: fail voltage too low!\n"); 58 60 return -2; 61 } 62 63 64 if (sys_data.s.values.batteryCurrent < sys_data.s.parameter.extraDischargeStrom_mA) 65 { 66 //Abbruch Ladegerät wurde entfernt, wir müssen mindesten den Lipro Strom messen 67 u_hold = 0; 68 holding_counter = 0; 69 //printf("self_discharge: fail current too small!\n"); 70 return -3; 59 71 } 60 72 … … 62 74 if (holding_counter > HOLD_TIME) 63 75 { 64 sys_data.s.values.selfDischarge = sys_data.s.values.batteryCurrent ;76 sys_data.s.values.selfDischarge = sys_data.s.values.batteryCurrent - sys_data.s.parameter.extraDischargeStrom_mA; 65 77 } 66 78 67 79 80 //Wenn ein gültiger Wert gemessen wurde, dann zu Mittelwert hinzufügen 81 if (sys_data.s.values.selfDischarge > 0) 82 { 68 83 69 // --- Mittelwert ---70 static uint32_t last_days;71 static unsigned long avgsum = 0;84 // --- Mittelwert --- 85 static uint32_t last_days; 86 static unsigned long avgsum = 0; 72 87 73 // Converting seconds into days74 uint32_t days = sys_data.s.values.onTime / (24U * 3600U);88 // Converting seconds into days 89 uint32_t days = sys_data.s.values.onTime / (24U * 3600U); 75 90 76 // Alle 24 Stunden ein Wert zur Mittelwertberechnung hinzufügen77 if (days != last_days)78 {79 last_days = days;91 // Alle 24 Stunden ein Wert zur Mittelwertberechnung hinzufügen 92 if (days != last_days) 93 { 94 last_days = days; 80 95 81 uint32_t avgval;82 // Filterlängen in 2er-Potenzen --> Compiler optimiert83 avgsum -= avgsum/SD_FILTER;84 avgsum += sys_data.s.values.selfDischarge;85 avgval = avgsum / SD_FILTER;96 uint32_t avgval; 97 // Filterlängen in 2er-Potenzen --> Compiler optimiert 98 avgsum -= avgsum/SD_FILTER; 99 avgsum += sys_data.s.values.selfDischarge; 100 avgval = avgsum / SD_FILTER; 86 101 87 sys_data.s.values.selfDischargeAvg = avgval; 102 sys_data.s.values.selfDischargeAvg = avgval; 103 } 104 88 105 } 89 90 91 106 92 107
Note: See TracChangeset
for help on using the changeset viewer.
