/* * cm_heatsink_emulator.c * * Created on: 14 Oct 2025 * Author: Christian L. V. Madsen (OZ1CM) */ #include "cm_heatsink_emulator.h" #include "math.h" #define EULER_NUM 2.7182818284590452353602 static float deltaTempElement(cm_heatsink_thermalElement_t *element, float temperature, float power){ return temperature + (power * element->R_th); } float cm_heatsinkEmul_getRespon(cm_heatsinkEmul_t *inst, float dtime){ float dtemp = inst->ambientTemp; for(int i = inst->thermalElements_Counts; i > 0; i--){ dtemp+= deltaTempElement(&inst->thermalElements[i], dtemp, inst->power); } printf("dTemp: %f", dtemp); //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; }