Changeset 24 for trunk/fw_g473rct/SES/src/chip_temperature.c
- Timestamp:
- Aug 31, 2025, 6:56:29 PM (4 days ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/fw_g473rct/SES/src/chip_temperature.c
r20 r24 24 24 // --- LOKALE VARIABLEN - bitte hier dokumentieren ------------------------------ 25 25 uint32_t calTemperatureSensor30Value; // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen) 26 uint32_t calTemperatureSensor1 30Value; // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen)26 uint32_t calTemperatureSensor110Value; // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen) 27 27 uint32_t calTemperatureSensorDiff; // Differenz calTemperatureSensor130Value und calTemperatureSensor30Value wird für die Kalibrierung des internen Temperatursensors bentigt 28 28 // Daten Temperaturanzeige µProzessor 29 29 double slope; 30 30 // --- LOKALE FUNKTIONS PROTOTYPEN ---------------------------------------------- 31 31 … … 46 46 uint16_t * pCalibrationData; 47 47 float calibrationData30; 48 float calibrationData1 30;48 float calibrationData110; 49 49 50 50 // lade Temperatur Kalibrierungswert (Wert bei 30°C) … … 55 55 //Berechnung Spannung in mV bei CAL Punk 30°C 56 56 //Kalbibrierung wurde mit 12 Bit und 3000mV Vref durchgeführt 57 calibrationData30 = calibrationData30 / 4096; 58 calTemperatureSensor30Value = calibrationData30 * 3000 ; // jetzt haben wir die Kalibrierungsspannung in Volt bei 30°C; 57 calTemperatureSensor30Value = (calibrationData30 * 3000) / 4096 ; // jetzt haben wir die Kalibrierungsspannung in Volt bei 30°C; 59 58 60 59 pCalibrationData = (uint16_t *)TEMPSENSOR_CAL2_ADDR; 61 calibrationData1 30 = * pCalibrationData;60 calibrationData110 = * pCalibrationData; 62 61 63 //Berechnung Spannung in mV bei CAL Punk 1 30°C62 //Berechnung Spannung in mV bei CAL Punk 110°C 64 63 //Kalbibrierung wurde mit 12 Bit und 3000mV Vref durchgeführt 65 calibrationData130 = calibrationData130 / 4096; 66 calTemperatureSensor130Value = calibrationData130 * 3000; // jetzt haben wir die Kalibrierungsspannung in Volt bei 130°C; 64 calTemperatureSensor110Value = (calibrationData110 * 3000 / 4096); // jetzt haben wir die Kalibrierungsspannung in Volt bei 110°C; 67 65 68 66 // Spannungsdifferenz bei 100 Kelvin Temperatureunterschied 69 calTemperatureSensorDiff = (calTemperatureSensor130Value - calTemperatureSensor30Value); 67 // Slope enthält die Änderung in mV pro °C 68 calTemperatureSensorDiff = (calTemperatureSensor110Value - calTemperatureSensor30Value); 69 slope = (double) calTemperatureSensorDiff / (TEMPSENSOR_CAL2_TEMP - TEMPSENSOR_CAL1_TEMP); 70 71 70 72 } 71 73 72 74 void CHIP_TEMPERATURE_Exec(uint32_t chiptemperature) 73 75 { 74 int32_tvoltage;76 double voltage; 75 77 //Aktuelle Spannung am Temp Sensor 76 voltage = (3 300 * chiptemperature) / 65536;78 voltage = (3000 * chiptemperature) / 65536; 77 79 78 80 79 81 voltage = voltage - calTemperatureSensor30Value; 80 voltage = voltage * 100000; //100000 da Kalibrierwerte 100 Kelvin Delta T haben und wir alles in m°C rechnen 81 voltage = voltage / (int32_t)(calTemperatureSensorDiff); 82 voltage = voltage + 30000; //30000 da Erste Kalibrierpunkt bei 30°C --> 30 000 m°C 82 voltage = voltage / slope; 83 voltage = voltage + 30.0; 83 84 84 //Durch 10 teilen, damit es in 16 Bit signed modbus register passt 85 sys_data.s.values.chipTemperature = voltage /10;85 //*100 für Kommastellen 86 sys_data.s.values.chipTemperature = voltage * 100 ; 86 87 87 88 calc_temp_compensation();
Note: See TracChangeset
for help on using the changeset viewer.