Changeset 55 for trunk/fw_g473rct/SES/src
- Timestamp:
- Apr 1, 2026, 9:33:58 AM (5 weeks ago)
- Location:
- trunk/fw_g473rct/SES/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/fw_g473rct/SES/src/esr.c
r38 r55 14 14 15 15 16 extern uint16_t adc12Data[SAMPLE_ARRAY_SIZE][2]; 16 extern uint16_t adc1Data[SAMPLE_ARRAY_SIZE]; 17 extern uint16_t adc2Data[SAMPLE_ARRAY_SIZE]; 18 extern uint16_t adc4Data[SAMPLE_ARRAY_SIZE]; 17 19 18 20 … … 109 111 for (x=0; x < SAMPLE_ARRAY_SIZE; x++) 110 112 { 111 sys_data.s.values.current_buffer[(SAMPLE_ARRAY_SIZE-1)-x] = adc1 2Data[x][0];112 sys_data.s.values.voltage_buffer[(SAMPLE_ARRAY_SIZE-1)-x] = adc 12Data[x][1];113 sys_data.s.values.current_buffer[(SAMPLE_ARRAY_SIZE-1)-x] = adc1Data[x]; 114 sys_data.s.values.voltage_buffer[(SAMPLE_ARRAY_SIZE-1)-x] = adc2Data[x]; 113 115 } 114 116 … … 134 136 135 137 //Suche Min und max werte im Array 136 int32_t minU=INT32_MAX; 137 int32_t maxU=0; 138 int32_t minUBatt=INT32_MAX; 139 int32_t maxUBatt=0; 140 int32_t minUOut=INT32_MAX; 141 int32_t maxUOut=0; 138 142 int32_t minI=INT32_MAX; 139 143 int32_t maxI=0; 140 144 int32_t minIPos = -1; 141 145 int32_t maxdIPos = -1; 142 int32_t minUPos = -1; 143 int32_t maxUPos = -1; 146 int32_t minUBattPos = -1; 147 int32_t maxUBattPos = -1; 148 int32_t minUOutPos = -1; 149 int32_t maxUOutPos = -1; 144 150 145 151 //Suche min und max werte 146 152 for (x=0; x < SAMPLE_ARRAY_SIZE; x++) 147 153 { 148 if (adc12Data[x][0] < minI) { minI = adc12Data[x][0]; minIPos = x; } 149 if (adc12Data[x][0] >= maxI) { maxI = adc12Data[x][0]; maxdIPos = x; } 150 if (adc12Data[x][1] < minU) { minU = adc12Data[x][1]; minUPos = x; } 151 if (adc12Data[x][1] > maxU) { maxU = adc12Data[x][1]; maxUPos = x; } 154 if (adc1Data[x] < minI) { minI = adc1Data[x]; minIPos = x; } 155 if (adc1Data[x] >= maxI) { maxI = adc2Data[x]; maxdIPos = x; } 156 if (adc2Data[x] < minUBatt) { minUBatt = adc2Data[x]; minUBattPos = x; } 157 if (adc2Data[x] > maxUBatt) { maxUBatt = adc2Data[x]; maxUBattPos = x; } 158 if (adc4Data[x] < minUOut) { minUOut = adc4Data[x]; minUOutPos = x; } 159 if (adc4Data[x] > maxUOut) { maxUOut = adc4Data[x]; maxUOutPos = x; } 152 160 } 153 161 … … 161 169 //Funktioniert nur bei Synchroner Messug von Strom und Spannung 162 170 //int32_t dU = maxU - minU; 163 int32_t dU = adc12Data[maxdIPos][1] - adc12Data[minIPos][1]; 171 int32_t dUBatt = adc2Data[maxdIPos] - adc2Data[minIPos]; 172 int32_t dUOut = adc4Data[maxdIPos] - adc4Data[minIPos]; 164 173 165 174 //Umrechnung in mV / mA … … 167 176 dI = dI * (sys_data.s.parameter.batteryCurrentGainCorrectionFaktor / 1000000.0); 168 177 169 dU = dU* (double )VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER / BATTERY_VOLTAGE_ADC_RESOLUTION ;170 178 dUBatt = dUBatt * (double )VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER / BATTERY_VOLTAGE_ADC_RESOLUTION ; 179 dUOut = dUOut * (double )VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER / BATTERY_VOLTAGE_ADC_RESOLUTION ; 171 180 172 181 //Minimale Belastung Prüfen ob es genügent Änderungen gab … … 188 197 //printf("dI change!\r\n"); 189 198 190 if (abs(dU) < min_dU) {191 return -2;192 }199 //if (abs(dU) < min_dU) { 200 // return -2; 201 //} 193 202 194 203 //printf("dU change!\r\n"); … … 204 213 for (x=0; x < (SAMPLE_ARRAY_SIZE-1); x++) 205 214 { 206 dIx = adc1 2Data[x+1][0] - adc12Data[x][0];215 dIx = adc1Data[x+1] - adc1Data[x]; 207 216 if (dIx > dIMax) { dIMax = dIx; dIMaxPos = x; } 208 217 } 209 218 210 //if ((dIMaxPos < 5 ) || (dIMaxPos > (SAMPLE_ARRAY_SIZE-5) )) 211 //{ 212 // return -3; 213 // } 219 214 220 215 221 216 222 //ESR berechnen! 217 sys_data.s.values.esr_fast = ( (double)dU / (double) dI) * 10000; 223 sys_data.s.values.esr_fast = ( (double)dUBatt / (double) dI) * 10000; 224 sys_data.s.values.esr = ( (double)dUOut / (double) dI) * 10000; 218 225 last_refresh = sys_data.s.values.onTime; 219 226 … … 221 228 for (x=0; x < SAMPLE_ARRAY_SIZE; x++) 222 229 { 223 sys_data.s.values.current_buffer_fast[x] = (int32_t) adc1 2Data[x][0] - FAST_CURRENT_ADC_OFFSET ;224 sys_data.s.values.voltage_buffer_fast[x] = (int32_t) adc 12Data[x][1] - BATTERY_VOLTAGE_ADC_OFFSET ;230 sys_data.s.values.current_buffer_fast[x] = (int32_t) adc1Data[x] - FAST_CURRENT_ADC_OFFSET ; 231 sys_data.s.values.voltage_buffer_fast[x] = (int32_t) adc2Data[x] - BATTERY_VOLTAGE_ADC_OFFSET ; 225 232 } 226 233 -
trunk/fw_g473rct/SES/src/main.c
r25 r55 265 265 { 266 266 ADS1260_ConversionFinished(); 267 ESR_Exec();268 269 267 newCurrentValue = 0; 270 268 -
trunk/fw_g473rct/SES/src/outputs.c
r38 r55 45 45 } 46 46 47 48 49 void OUTPUTS_OverwriteChargeCtrl_ChargeEnabled(void) 50 { 51 GPIO_InitTypeDef GPIO_InitStruct = {0}; 52 GPIO_InitStruct.Pin = OVERWRITE_CHARGE_CTRL_Pin; 53 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 54 GPIO_InitStruct.Pull = GPIO_NOPULL; 55 HAL_GPIO_Init(OVERWRITE_CHARGE_CTRL_GPIO_Port, &GPIO_InitStruct); 56 HAL_GPIO_WritePin(OVERWRITE_CHARGE_CTRL_GPIO_Port, OVERWRITE_CHARGE_CTRL_Pin, OUTPUTS_CHARGE_ALLOWED); 57 58 59 } 60 61 62 void OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(void) 63 { 64 GPIO_InitTypeDef GPIO_InitStruct = {0}; 65 GPIO_InitStruct.Pin = OVERWRITE_CHARGE_CTRL_Pin; 66 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 67 GPIO_InitStruct.Pull = GPIO_NOPULL; 68 HAL_GPIO_Init(OVERWRITE_CHARGE_CTRL_GPIO_Port, &GPIO_InitStruct); 69 70 HAL_GPIO_WritePin(OVERWRITE_CHARGE_CTRL_GPIO_Port, OVERWRITE_CHARGE_CTRL_Pin, OUTPUTS_CHARGE_NOT_ALLOWED); 71 72 73 } 74 75 76 void OUTPUTS_OverwriteChargeCtrl_Disabled(void) 77 { 78 GPIO_InitTypeDef GPIO_InitStruct = {0}; 79 GPIO_InitStruct.Pin = OVERWRITE_CHARGE_CTRL_Pin; 80 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 81 GPIO_InitStruct.Pull = GPIO_NOPULL; 82 HAL_GPIO_Init(OVERWRITE_CHARGE_CTRL_GPIO_Port, &GPIO_InitStruct); 83 84 85 } 86 87 88 void OUTPUTS_OverwriteDischargeCtrl_DischargeEnabled(void) 89 { 90 GPIO_InitTypeDef GPIO_InitStruct = {0}; 91 GPIO_InitStruct.Pin = OVERWRITE_DISCHARGE_CTRL_Pin; 92 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 93 GPIO_InitStruct.Pull = GPIO_NOPULL; 94 HAL_GPIO_Init(OVERWRITE_DISCHARGE_CTRL_GPIO_Port, &GPIO_InitStruct); 95 HAL_GPIO_WritePin(OVERWRITE_DISCHARGE_CTRL_GPIO_Port, OVERWRITE_DISCHARGE_CTRL_Pin, OUTPUTS_DISCHARGE_ALLOWED); 96 97 98 } 99 100 101 void OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(void) 102 { 103 GPIO_InitTypeDef GPIO_InitStruct = {0}; 104 GPIO_InitStruct.Pin = OVERWRITE_DISCHARGE_CTRL_Pin; 105 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 106 GPIO_InitStruct.Pull = GPIO_NOPULL; 107 HAL_GPIO_Init(OVERWRITE_DISCHARGE_CTRL_GPIO_Port, &GPIO_InitStruct); 108 109 HAL_GPIO_WritePin(OVERWRITE_DISCHARGE_CTRL_GPIO_Port, OVERWRITE_DISCHARGE_CTRL_Pin, OUTPUTS_CHARGE_NOT_ALLOWED); 110 111 112 } 113 114 115 void OUTPUTS_OverwriteDischargeCtrl_Disabled(void) 116 { 117 GPIO_InitTypeDef GPIO_InitStruct = {0}; 118 GPIO_InitStruct.Pin = OVERWRITE_DISCHARGE_CTRL_Pin; 119 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 120 GPIO_InitStruct.Pull = GPIO_NOPULL; 121 HAL_GPIO_Init(OVERWRITE_DISCHARGE_CTRL_GPIO_Port, &GPIO_InitStruct); 122 123 124 } 125 47 126 /* 48 127 * @brief Prüfen ob LVP Signal abgeschaltet werden muss … … 69 148 printf("OUTPUTS_LVP_BATTERY_UNDERVOLTAGE\n"); 70 149 sys_data.s.values.lvpState = OUTPUTS_LVP_BATTERY_UNDERVOLTAGE; 71 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_NOT_ALLOWED);150 OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(); 72 151 } 73 152 else if(sys_data.s.values.batteryCurrent < ((int32_t)sys_data.s.parameter.loadCurrentLimit*1000)) … … 75 154 printf("OUTPUTS_LVP_OVERCURRENT\n"); 76 155 sys_data.s.values.lvpState = OUTPUTS_LVP_OVERCURRENT; 77 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_NOT_ALLOWED);156 OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(); 78 157 } 79 158 else if(sys_data.s.values.shuntTemperature > sys_data.s.parameter.dischargeStopHighTemperatureStart) … … 81 160 printf("OUTPUTS_LVP_SHUNT_OVERTEMPERATURE\n"); 82 161 sys_data.s.values.lvpState = OUTPUTS_LVP_SHUNT_OVERTEMPERATURE; 83 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_NOT_ALLOWED);162 OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(); 84 163 } 85 164 else if(sys_data.s.values.chipTemperature > sys_data.s.parameter.dischargeStopHighTemperatureStart) … … 87 166 printf("OUTPUTS_LVP_CHIP_OVERTEMPERATURE\n"); 88 167 sys_data.s.values.lvpState = OUTPUTS_LVP_CHIP_OVERTEMPERATURE; 89 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_NOT_ALLOWED);168 OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(); 90 169 } 91 170 else if(sys_data.s.values.shuntTemperature < sys_data.s.parameter.dischargeStopLowTemperatureStart) … … 93 172 printf("OUTPUTS_LVP_SHUNT_UNDERTEMPERATURE\n"); 94 173 sys_data.s.values.lvpState = OUTPUTS_LVP_SHUNT_UNDERTEMPERATURE; 95 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_NOT_ALLOWED);174 OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(); 96 175 } 97 176 else if(sys_data.s.values.chipTemperature < sys_data.s.parameter.dischargeStopLowTemperatureStart) … … 99 178 printf("OUTPUTS_LVP_CHIP_OVERTEMPERATURE\n"); 100 179 sys_data.s.values.lvpState = OUTPUTS_LVP_CHIP_UNDERTEMPERATURE; 101 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_NOT_ALLOWED);180 OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(); 102 181 } 103 182 } … … 123 202 printf("OUTPUT LVP OK\n"); 124 203 sys_data.s.values.lvpState = OUTPUTS_LVP_OK; 125 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_ALLOWED);204 OUTPUTS_OverwriteDischargeCtrl_Disabled(); 126 205 } 127 206 } … … 129 208 else if (sys_data.s.parameter.lvpMode == OUTPUTS_LVP_MODE_MANUAL_ON) 130 209 { 131 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_ALLOWED);210 OUTPUTS_OverwriteDischargeCtrl_DischargeEnabled(); 132 211 } 133 212 else if (sys_data.s.parameter.lvpMode == OUTPUTS_LVP_MODE_MANUAL_OFF) 134 213 { 135 HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_NOT_ALLOWED); 136 } 137 else HAL_GPIO_WritePin(DISCHARGE_ENABLE_GPIO_Port, DISCHARGE_ENABLE_Pin, OUTPUTS_DISCHARGE_NOT_ALLOWED); 214 OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(); 215 } 216 else 217 { 218 OUTPUTS_OverwriteDischargeCtrl_DischargeDisabled(); 219 } 138 220 139 221 lastMode = sys_data.s.parameter.lvpMode; … … 164 246 printf("OUTPUTS_OVP_BATTERY_OVERVOLTAGE\n"); 165 247 sys_data.s.values.ovpState = OUTPUTS_OVP_BATTERY_OVERVOLTAGE; 166 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED);248 OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(); 167 249 } 168 250 else if(sys_data.s.values.batteryCurrent > ((int32_t) sys_data.s.parameter.chargeCurrentLimit * 1000)) … … 170 252 printf("OUTPUTS_OVP_OVERCURRENT\n"); 171 253 sys_data.s.values.ovpState = OUTPUTS_OVP_OVERCURRENT; 172 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED);254 OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(); 173 255 } 174 256 else if(sys_data.s.values.shuntTemperature > sys_data.s.parameter.chargeStopHighTemperatureStart) … … 176 258 printf("OUTPUTS_OVP_SHUNT_OVERTEMPERATURE\n"); 177 259 sys_data.s.values.ovpState = OUTPUTS_OVP_SHUNT_OVERTEMPERATURE; 178 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED);260 OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(); 179 261 } 180 262 else if(sys_data.s.values.chipTemperature > sys_data.s.parameter.chargeStopHighTemperatureStart) … … 182 264 printf("OUTPUTS_OVP_CHIP_OVERTEMPERATURE\n"); 183 265 sys_data.s.values.ovpState = OUTPUTS_OVP_CHIP_OVERTEMPERATURE; 184 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED);266 OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(); 185 267 } 186 268 else if(sys_data.s.values.shuntTemperature < sys_data.s.parameter.chargeStopLowTemperatureStart) … … 188 270 printf("OUTPUTS_OVP_SHUNT_UNDERTEMPERATURE\n"); 189 271 sys_data.s.values.ovpState = OUTPUTS_OVP_SHUNT_UNDERTEMPERATURE; 190 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED);272 OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(); 191 273 } 192 274 else if(sys_data.s.values.chipTemperature < sys_data.s.parameter.chargeStopLowTemperatureStart) … … 194 276 printf("OUTPUTS_OVP_CHIP_UNDETEMPERATURE\n"); 195 277 sys_data.s.values.ovpState = OUTPUTS_OVP_CHIP_UNDERTEMPERATURE; 196 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED);278 OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(); 197 279 } 198 280 } … … 213 295 printf("OUTPUT OVP OK\n"); 214 296 sys_data.s.values.ovpState = OUTPUTS_OVP_OK; 215 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_ALLOWED);297 OUTPUTS_OverwriteChargeCtrl_Disabled(); // externer steuerung 216 298 } 217 299 } … … 219 301 else if (sys_data.s.parameter.ovpMode == OUTPUTS_OVP_MODE_MANUAL_ON) 220 302 { 221 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_ALLOWED);303 OUTPUTS_OverwriteChargeCtrl_ChargeEnabled(); //ACHTUNG: Manual On 222 304 } 223 305 else if (sys_data.s.parameter.ovpMode == OUTPUTS_OVP_MODE_MANUAL_OFF) 224 306 { 225 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED); 226 } 227 else HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED); 307 OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(); 308 } 309 else 310 { 311 OUTPUTS_OverwriteChargeCtrl_ChargeDisabled(); 312 } 228 313 229 314 lastMode = sys_data.s.parameter.ovpMode;
Note:
See TracChangeset
for help on using the changeset viewer.
