Ignore:
Timestamp:
Aug 21, 2025, 3:14:57 PM (7 days ago)
Author:
f.jahn
Message:

Änderung neuer Controller mit mehr Speicher

Location:
trunk/firmware_v2/SES/src
Files:
3 edited

Legend:

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

    r17 r23  
    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)
    27 uint32_t calTemperatureSensorDiff;     // Differenz calTemperatureSensor130Value und calTemperatureSensor30Value wird für die Kalibrierung des internen Temperatursensors bentigt
    28                                                               // Daten Temperaturanzeige µProzessor
     26                                                 // Daten Temperaturanzeige µProzessor
    2927
    3028//      --- LOKALE FUNKTIONS PROTOTYPEN ----------------------------------------------
    3129
    3230void calc_temp_compensation(void);
    33 int16_t y(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x);
     31
    3432
    3533//      --- LOKALE FUNKTIONEN - bitte hier dokumentieren -----------------------------
     
    5250  calibrationData30  = * pCalibrationData;
    5351
    54 
    5552  //Berechnung Spannung in mV bei CAL Punk 30°C
    5653  //Kalbibrierung wurde mit 12 Bit und 3000mV Vref durchgeführt
    5754  calibrationData30 = calibrationData30 / 4096;
    5855  calTemperatureSensor30Value = calibrationData30 * 3000 ;      // jetzt haben wir die Kalibrierungsspannung in mVolt bei 30°C;
    59 
    60   //pCalibrationData = (uint16_t *)TEMPSENSOR_CAL2_ADDR;
    61   //calibrationData130  = * pCalibrationData;
    62   calibrationData130  = calibrationData30 + 343;
    63 
    64   //Berechnung Spannung in mV bei CAL Punk 130°C
    65   //Kalbibrierung wurde mit 12 Bit und 3000mV Vref durchgeführt
    66   calibrationData130 = calibrationData130 / 4096;
    67   calTemperatureSensor130Value = calibrationData130 * 3000;      // jetzt haben wir die Kalibrierungsspannung in mV bei 130°C;
    68 
    69   // Spannungsdifferenz bei 100 Kelvin Temperatureunterschied
    70   calTemperatureSensorDiff = (calTemperatureSensor130Value - calTemperatureSensor30Value);
    7156}
    7257
    73 void CHIP_TEMPERATURE_Exec(uint32_t chiptemperature)
     58int CHIP_TEMPERATURE_Exec(uint32_t chiptemperature)
    7459{
    75     int32_t voltage;
     60    int32_t temp;
    7661    //Aktuelle Spannung am Temp Sensor
    77     voltage = (3300 * (uint32_t)chiptemperature) / 65536;
     62    temp = (3300 * (uint32_t)chiptemperature) / 65536;
    7863
    7964
    80     voltage = voltage - (calTemperatureSensor30Value);
     65    temp = temp - (calTemperatureSensor30Value);
    8166
    82     voltage = voltage / 2.530; //2,53mV/°C
    83     voltage = voltage + 25; //30000 da Erste Kalibrierpunkt bei 25°C --> 25
    84 
     67    temp = temp / 2.530; //2,53mV/°C
     68    temp = temp + 25; //30000 da Erste Kalibrierpunkt bei 25°C --> 25
     69        return temp;
    8570    //Durch 10 teilen, damit es in 16 Bit signed modbus register passt
    86 
    87 
    88        
    8971}
    9072
  • trunk/firmware_v2/SES/src/main.c

    r22 r23  
    8585
    8686  /* USER CODE BEGIN 1 */
    87 
     87  int temperature = 0;
     88  unsigned pwm = 0U;
     89  uint32_t uin = 0;
     90  uint32_t uout = 0;
    8891  /* USER CODE END 1 */
    8992
     
    108111  MX_DMA_Init();
    109112  MX_ADC1_Init();
    110   MX_TIM3_Init();
     113  MX_TIM16_Init();
    111114  MX_TIM17_Init();
    112115 // MX_USART1_UART_Init();
     
    163166        {
    164167          msCounter = 0;
    165       CHIP_TEMPERATURE_Exec( adcData[4]);
     168      temperature = CHIP_TEMPERATURE_Exec(adcData[4]);
    166169         
    167           static unsigned pwm = 100U;
     170          if (temperature > 50)
     171          { 
     172                  pwm++;
     173                  if (pwm > 100U) pwm = 100U;   
     174                 
     175          }
     176          if (temperature < 50)
     177          {
     178                if (pwm > 0) pwm--;
     179          }
     180          SetFANSpeed(pwm);
     181
     182
     183          if (temperature > 80)
     184          {
     185                 
     186         
     187          BUTTON_SetModeOff(); //Damit nicht von alleine wieder eingeschaltet wird
     188                  LEDS_GN_Off();
     189          LEDS_RT_BlinkCode_Start(BLINK_CODE_ERROR_TEMP, LED_RT_ON_TIME_WARN_TEMP, LED_RT_OFF_TIME, LED_RT_OFF_TIME *5); //Fehler Anzeigen
     190          printf("Temperature too high!\n");
     191         
     192          }
     193
     194          // Starting measuring frequency of the FAN tacho output
     195          static unsigned stage;
     196          extern uint32_t freq, ic_overflows;
     197
     198          switch (stage)
     199          {
     200                  case 0:
     201                          ic_overflows = 0U;
     202                          __HAL_TIM_SetCounter(&htim16, 0U);
     203                          HAL_TIM_Base_Start_IT(&htim16);
     204                          HAL_TIM_IC_Start_IT(&htim16, TIM_CHANNEL_1);
     205                          //printf("IC started\n");
     206                          stage++;
     207                          break;
     208                 
     209                  case 1: stage++; break;
     210                  case 2: stage++; break;
     211                  case 3: stage++; break;
     212                  case 4: stage++; break;
     213                  case 5: stage++; break;
     214                  case 6:
     215                          //printf("F = %u\n", freq);
     216                          if (!freq)
     217                          {
     218                                  static unsigned zeroFreqCnt;
     219
     220                                  zeroFreqCnt++;
     221                                  // Checking if we set last time non-zero FAN-speed, but
     222                                  // tacho-sensor signal is absent more than 15 sec.
     223                                  if (zeroFreqCnt > 3U && GetLastSpeed())
     224                                  {
     225                                          SetFANSpeed(0U);
     226                                          // ACHTUNG! Der Lüfter ist kaputt!
     227                                  }
     228                          }
     229                          stage = 0;
     230                          break;
     231          }
     232
     233          uin = VOLTAGE_MEAS_GetUin();
     234          uout = VOLTAGE_MEAS_GetUout();
     235          printf("uin= %d, uout=%d, temp=%d, pwm=%d, fan=%d\r\n", uin, uout, temperature,pwm,freq);
    168236         
    169           SetFANSpeed(pwm);
    170 
    171           pwm++;
    172           if (pwm > 300U) pwm = 300U;   // 30.0%
    173         }
     237         
     238        } //endsecond tick
    174239
    175240
     
    190255
    191256          case MODE_MAINSWITCH_LVP_OVP:
    192         MODE_LVP_OVP_Exec();
     257     //   MODE_LVP_OVP_Exec();
    193258      break;
    194259
  • trunk/firmware_v2/SES/src/voltage_meas.c

    r17 r23  
    77
    88
    9 uint32_t voltageUin;
    10 uint32_t voltageUout;
    11 uint32_t voltageDrop;
     9static uint32_t voltageUin;
     10static uint32_t voltageUout;
     11static uint32_t voltageDrop;
    1212
    1313#define VOLTAGE_DIVIDER_12V             6
     
    2424  vuin = adcValUin * VREF;
    2525  vuin = vuin / 65635;
    26   vuin = vuin * VOLTAGE_DIVIDER_12V; //Divider ür 12V Version
     26  vuin = vuin * VOLTAGE_DIVIDER_12V; //Divider für 12V Version
    2727  voltageUin = vuin;
    2828
     
    3131  vuout = adcValUout * VREF;
    3232  vuout = vuout / 65635;
    33   vuout = vuout * VOLTAGE_DIVIDER_12V; //Divider ür 12V Version
     33  vuout = vuout * VOLTAGE_DIVIDER_12V; //Divider für 12V Version
    3434  voltageUout = vuout;
    3535 
     
    6464  dropLimitCounter = 0;
    6565       
    66   }
     66}
     67
     68uint32_t VOLTAGE_MEAS_GetUin(void)
     69{
     70  return voltageUin;
     71       
     72}
     73
     74uint32_t VOLTAGE_MEAS_GetUout(void)
     75{
     76  return voltageUout;   
     77}
Note: See TracChangeset for help on using the changeset viewer.