Ignore:
Timestamp:
Aug 31, 2025, 6:56:29 PM (4 days ago)
Author:
f.jahn
Message:

Shunt Temperatursensor aktiviert

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/fw_g473rct/SES/src/chip_temperature.c

    r20 r24  
    2424//      --- LOKALE VARIABLEN - bitte hier dokumentieren ------------------------------
    2525uint32_t calTemperatureSensor30Value;  // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen)
    26 uint32_t calTemperatureSensor130Value; // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen)
     26uint32_t calTemperatureSensor110Value; // Kalibrierungswert für den Temperatursensor auf dem STM32G0 (Werksmäßig im SCB Bereich gespeichert wird beim Programmstart ausgelesen)
    2727uint32_t calTemperatureSensorDiff;     // Differenz calTemperatureSensor130Value und calTemperatureSensor30Value wird für die Kalibrierung des internen Temperatursensors bentigt
    2828                                                              // Daten Temperaturanzeige µProzessor
    29 
     29double slope;
    3030//      --- LOKALE FUNKTIONS PROTOTYPEN ----------------------------------------------
    3131
     
    4646  uint16_t * pCalibrationData;
    4747  float calibrationData30;
    48   float calibrationData130;
     48  float calibrationData110;
    4949
    5050  // lade Temperatur Kalibrierungswert (Wert bei 30°C)
     
    5555  //Berechnung Spannung in mV bei CAL Punk 30°C
    5656  //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;
    5958
    6059  pCalibrationData = (uint16_t *)TEMPSENSOR_CAL2_ADDR;
    61   calibrationData130  = * pCalibrationData;
     60  calibrationData110  = * pCalibrationData;
    6261
    63   //Berechnung Spannung in mV bei CAL Punk 130°C
     62  //Berechnung Spannung in mV bei CAL Punk 110°C
    6463  //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;
    6765
    6866  // 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
    7072}
    7173
    7274void CHIP_TEMPERATURE_Exec(uint32_t chiptemperature)
    7375{
    74     int32_t voltage;
     76    double voltage;
    7577    //Aktuelle Spannung am Temp Sensor
    76     voltage = (3300 * chiptemperature) / 65536;
     78    voltage = (3000 * chiptemperature) / 65536;
    7779
    7880
    7981    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;
    8384
    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 ;
    8687
    8788        calc_temp_compensation();
Note: See TracChangeset for help on using the changeset viewer.