not done yet because calculation is wrong..
This commit is contained in:
@@ -11,21 +11,40 @@
|
|||||||
|
|
||||||
static float deltaTempElement(cm_heatsink_thermalElement_t *element, float temperature, float power){
|
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;
|
float dtemp = inst->ambientTemp;
|
||||||
|
|
||||||
for(int i = inst->thermalElements_len; i > 0; i--){
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,27 +7,31 @@
|
|||||||
|
|
||||||
#ifndef CM_HEATSINK_EMULATOR_H_
|
#ifndef CM_HEATSINK_EMULATOR_H_
|
||||||
#define CM_HEATSINK_EMULATOR_H_
|
#define CM_HEATSINK_EMULATOR_H_
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char label[32];
|
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;
|
}cm_heatsink_thermalElement_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
cm_heatsink_thermalElement_t *thermalElements;
|
cm_heatsink_thermalElement_t *thermalElements;
|
||||||
int thermalElements_len;
|
int thermalElements_Counts;
|
||||||
|
|
||||||
float power;
|
float power;
|
||||||
float ambientTemp;
|
float ambientTemp;
|
||||||
float thermal_capacity;
|
float C_th; // Thermal capacity
|
||||||
|
|
||||||
// Dynamic
|
// Dynamic
|
||||||
float heatsinkTemperature;
|
float heatsinkTemperature;
|
||||||
|
|
||||||
}cm_heatsinkEmul_t;
|
}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_ */
|
#endif /* CM_HEATSINK_EMULATOR_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user