Changeset 28 for trunk/fw_g473rct/SES/src/outputs.c
- Timestamp:
- Sep 11, 2025, 4:17:09 PM (7 weeks ago)
- File:
-
- 1 edited
-
trunk/fw_g473rct/SES/src/outputs.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/fw_g473rct/SES/src/outputs.c
r20 r28 26 26 //--- LOKALE FUNKTIONS PROTOTYPEN ---------------------------------------------- 27 27 /* 28 * @brief 28 * @brief Heizungssteuerung 29 29 * @param kein 30 30 * @retval kein 31 31 */ 32 void AuxModeHeaterExec(void); 33 34 32 35 //--- LOKALE FUNKTIONEN - bitte hier dokumentieren ----------------------------- 33 36 … … 226 229 lastMode = sys_data.s.parameter.ovpMode; 227 230 } 231 232 233 234 #define LVP_DETECTION_LEVEL 6000 //< 6 V 235 #define CHARGE_DETECT_HYSTERESE 10 236 237 void AuxModeHeaterExec(void) 238 { 239 static int outputState=0; 240 241 int offv = sys_data.s.parameter.auxOutputSetpointOn - CHARGE_DETECT_HYSTERESE; 242 int onv = sys_data.s.parameter.auxOutputSetpointOn + CHARGE_DETECT_HYSTERESE; 243 244 if ((sys_data.s.values.shuntVoltage > onv) && (sys_data.s.values.ovp_sense < LVP_DETECTION_LEVEL) && (outputState == 0)) 245 { 246 printf("Heater on\r\n"); 247 outputState = 1; 248 if (sys_data.s.parameter.auxOutputInverted == 0) 249 { 250 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET); 251 } 252 else 253 { 254 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET); 255 } 256 257 } 258 259 //Ausschalten 260 //Wenn Spannung am Shunt < setpoint (ladegeräteerkennung 14,8V?) und Entladung 261 //Oder wenn OVP wieder da ist 262 //sys_data.s.values.batteryCurrent < sys_data.s.parameter.auxOutputSetpointOff 263 264 if ((sys_data.s.values.shuntVoltage < offv ) || (sys_data.s.values.ovp_sense > LVP_DETECTION_LEVEL)) 265 { 266 if (outputState == 1) 267 { 268 printf("Heater off\r\n"); 269 outputState = 0; 270 if (sys_data.s.parameter.auxOutputInverted == 0) 271 { 272 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET); 273 } 274 else 275 { 276 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET); 277 } 278 } 279 } 280 } 281 282 void AuxModeSOCExec(void) 283 { 284 static int outputState=0; 285 286 287 if ((sys_data.s.values.soc > (sys_data.s.parameter.auxOutputSetpointOn*1000)) && (outputState == 0)) 288 { 289 printf("AUX on (SOC Mode)\r\n"); 290 outputState = 1; 291 if (sys_data.s.parameter.auxOutputInverted == 0) 292 { 293 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET); 294 } 295 else 296 { 297 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET); 298 } 299 300 } 301 302 303 if ((sys_data.s.values.soc < (sys_data.s.parameter.auxOutputSetpointOff*1000)) && (outputState == 1)) 304 { 305 printf("AUX off (SOC Mode)\r\n"); 306 outputState = 0; 307 if (sys_data.s.parameter.auxOutputInverted == 0) 308 { 309 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET); 310 } 311 else 312 { 313 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET); 314 } 315 } 316 317 318 } 319 320 321 int16_t loadCurrentLimit; // 30 maximaler Laststrom in A wenn der Strom grer ist als der eingestelle Wert dann wird die Laststrom Protection aktiv, darf nicht unsigned sein, da Entladestrom mit Minus angegeben [A] Default -500 A 322 int16_t chargeCurrentLimit; // 31 maximaler Ladestrom in A wenn der Strom grer ist als der eingestelle Wert dann wird die Ladestrom Protection aktiv [A] Default:500A 323 324 325 int16_t chargeStopHighTemperatureStart; // 32 Abschalttemperatur Ladung wegen zu hoher Temperatur [C * 100] 326 int16_t chargeStopHighTemperatureStop; // 33 Wiedereinschalttemperatur [C * 100] 327 328 int16_t chargeStopLowTemperatureStart; // 34 Abschalttemperatur Ladung wegen zu niedriger Temperatur [C * 100] 329 int16_t chargeStopLowTemperatureStop; // 35 Wiedereinschalttemperatur [C * 100] 330 331 int16_t dischargeStopHighTemperatureStart; // 36 Abschalttemperatur Entladung wegen zu hoher Temperatur [C * 100] 332 int16_t dischargeStopHighTemperatureStop; // 37 Wiedereinschalttemperatur[C * 100] 333 334 int16_t dischargeStopLowTemperatureStart; // 38 Abschalttemperatur EntLadung wegen zu niedriger Temperatur 335 int16_t dischargeStopLowTemperatureStop; // 39 Wiedereinschalttemperatur 336 337 338 339 void AuxModeAlarmExec(void) 340 { 341 static int outputState=0; 342 343 344 if ( 345 (sys_data.s.values.shuntTemperature > (chargeStopHighTemperatureStart - 500)) || 346 (sys_data.s.values.chipTemperature > (chargeStopHighTemperatureStart - 500)) || 347 (sys_data.s.values.shuntTemperature < (chargeStopLowTemperatureStart + 500)) || 348 (sys_data.s.values.chipTemperature < (chargeStopLowTemperatureStart + 500)) || 349 (sys_data.s.values.shuntTemperature > (dischargeStopHighTemperatureStart - 500)) || 350 (sys_data.s.values.chipTemperature > (dischargeStopHighTemperatureStart - 500)) || 351 (sys_data.s.values.shuntTemperature < (dischargeStopLowTemperatureStart + 500)) || 352 (sys_data.s.values.chipTemperature < (dischargeStopLowTemperatureStart + 500)) || 353 (sys_data.s.values.batteryCurrent > ((chargeCurrentLimit*1000LL) - 10000)) || 354 (sys_data.s.values.batteryCurrent < ((loadCurrentLimit*1000LL) + 10000)) 355 356 ) 357 { 358 if ( outputState == 0) 359 { 360 printf("AUX on (Alarm Mode)\r\n"); 361 outputState = 1; 362 if (sys_data.s.parameter.auxOutputInverted == 0) 363 { 364 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET); 365 } 366 else 367 { 368 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET); 369 } 370 } 371 } 372 else // Alles OK 373 { 374 if ( outputState == 0) 375 { 376 printf("AUX off (Alarm Mode)\r\n"); 377 outputState = 0; 378 if (sys_data.s.parameter.auxOutputInverted == 0) 379 { 380 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET); 381 } 382 else 383 { 384 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_SET); 385 } 386 } 387 } 388 } 389 390 391 void OUTPUTS_CheckAUX(void) 392 { 393 394 switch (sys_data.s.parameter.auxOutputMode) 395 { 396 case AUX_MODE_OFF: 397 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET); 398 break; 399 400 case AUX_MODE_HEATER: 401 AuxModeHeaterExec(); 402 break; 403 404 case AUX_MODE_SOC: 405 AuxModeSOCExec(); 406 break; 407 408 case AUX_MODE_ALARM: 409 AuxModeAlarmExec(); 410 break; 411 412 413 default: 414 HAL_GPIO_WritePin(AUX_EN_GPIO_Port, AUX_EN_Pin, GPIO_PIN_RESET); 415 break; 416 417 418 } 419 420 421 } 422 228 423 /*************************** End of file ****************************/
Note: See TracChangeset
for help on using the changeset viewer.
