From a735848834b5a5d50974060d8a0b94f7d50d846b Mon Sep 17 00:00:00 2001 From: Christian Lind Vie Madsen Date: Tue, 14 Oct 2025 11:24:31 +0200 Subject: [PATCH] not done yet because calculation is wrong.. --- cm_heatsink_emulator.c | 33 ++++++++++++++++++++++++++------- cm_heatsink_emulator.h | 10 +++++++--- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/cm_heatsink_emulator.c b/cm_heatsink_emulator.c index 24c3835..3adaf26 100644 --- a/cm_heatsink_emulator.c +++ b/cm_heatsink_emulator.c @@ -11,21 +11,40 @@ static float deltaTempElement(cm_heatsink_thermalElement_t *element, float temperature, float power){ - return temperature + (power * element->thermal_resistance); + return temperature + (power * element->R_th); } -float cm_heatsinkEmul_getRespon(cm_heatsinkEmul_t *inst, float dt){ +float cm_heatsinkEmul_getRespon(cm_heatsinkEmul_t *inst, float dtime){ - float t = 0.0; - - for(int i = inst->thermalElements_len; i > 0; i--){ + float dtemp = inst->ambientTemp; + for(int i = inst->thermalElements_Counts; i > 0; i--){ + dtemp+= deltaTempElement(&inst->thermalElements[i], dtemp, inst->power); } - inst->heatsinkTemperature = inst->heatsinkTemperature + (1.0 / inst->thermal_capacity) * (pj5_ThermEmul_Heatsink_RespVal(inst) - inst->heatsinkTemperature) * dt; + printf("dTemp: %f", dtemp); - return v_prev; + //inst->heatsinkTemperature = inst->heatsinkTemperature + (1.0 / inst->C_th) * (pj5_ThermEmul_Heatsink_RespVal(inst) - inst->heatsinkTemperature) * dt; + + return inst->heatsinkTemperature; + +} + + +int cm_heatsinkEmul_init(cm_heatsinkEmul_t *inst, cm_heatsink_thermalElement_t *elements, int elements_Count, float power, float ambientTemp){ + + if(inst == NULL)return 0; + if(elements == NULL)return 0; + if(elements_Count == 0)return 0; + + inst->thermalElements = elements; + inst->thermalElements_Counts = elements_Count; + + inst->power = power; + inst->ambientTemp = ambientTemp; + + return 0; } diff --git a/cm_heatsink_emulator.h b/cm_heatsink_emulator.h index a65051d..3c4704b 100644 --- a/cm_heatsink_emulator.h +++ b/cm_heatsink_emulator.h @@ -7,27 +7,31 @@ #ifndef CM_HEATSINK_EMULATOR_H_ #define CM_HEATSINK_EMULATOR_H_ +#include +#include typedef struct { char label[32]; - float thermal_resistance; // In Kelvin/Watt or Celsius/Watt (you can mix!) + float R_th; // In Kelvin/Watt or Celsius/Watt (you can mix!) }cm_heatsink_thermalElement_t; typedef struct { cm_heatsink_thermalElement_t *thermalElements; - int thermalElements_len; + int thermalElements_Counts; float power; float ambientTemp; - float thermal_capacity; + float C_th; // Thermal capacity // Dynamic float heatsinkTemperature; }cm_heatsinkEmul_t; +float cm_heatsinkEmul_getRespon(cm_heatsinkEmul_t *inst, float dt); +int cm_heatsinkEmul_init(cm_heatsinkEmul_t *inst, cm_heatsink_thermalElement_t *elements, int elements_Count, float power, float ambientTemp); #endif /* CM_HEATSINK_EMULATOR_H_ */