Changeset 23 for trunk/firmware_v2/SES/src
- Timestamp:
- Aug 21, 2025, 3:14:57 PM (7 days ago)
- Location:
- trunk/firmware_v2/SES/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/firmware_v2/SES/src/chip_temperature.c
r17 r23 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 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 29 27 30 28 // --- LOKALE FUNKTIONS PROTOTYPEN ---------------------------------------------- 31 29 32 30 void calc_temp_compensation(void); 33 int16_t y(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t x); 31 34 32 35 33 // --- LOKALE FUNKTIONEN - bitte hier dokumentieren ----------------------------- … … 52 50 calibrationData30 = * pCalibrationData; 53 51 54 55 52 //Berechnung Spannung in mV bei CAL Punk 30°C 56 53 //Kalbibrierung wurde mit 12 Bit und 3000mV Vref durchgeführt 57 54 calibrationData30 = calibrationData30 / 4096; 58 55 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°C65 //Kalbibrierung wurde mit 12 Bit und 3000mV Vref durchgeführt66 calibrationData130 = calibrationData130 / 4096;67 calTemperatureSensor130Value = calibrationData130 * 3000; // jetzt haben wir die Kalibrierungsspannung in mV bei 130°C;68 69 // Spannungsdifferenz bei 100 Kelvin Temperatureunterschied70 calTemperatureSensorDiff = (calTemperatureSensor130Value - calTemperatureSensor30Value);71 56 } 72 57 73 voidCHIP_TEMPERATURE_Exec(uint32_t chiptemperature)58 int CHIP_TEMPERATURE_Exec(uint32_t chiptemperature) 74 59 { 75 int32_t voltage;60 int32_t temp; 76 61 //Aktuelle Spannung am Temp Sensor 77 voltage= (3300 * (uint32_t)chiptemperature) / 65536;62 temp = (3300 * (uint32_t)chiptemperature) / 65536; 78 63 79 64 80 voltage = voltage- (calTemperatureSensor30Value);65 temp = temp - (calTemperatureSensor30Value); 81 66 82 voltage = voltage/ 2.530; //2,53mV/°C83 voltage = voltage+ 25; //30000 da Erste Kalibrierpunkt bei 25°C --> 2584 67 temp = temp / 2.530; //2,53mV/°C 68 temp = temp + 25; //30000 da Erste Kalibrierpunkt bei 25°C --> 25 69 return temp; 85 70 //Durch 10 teilen, damit es in 16 Bit signed modbus register passt 86 87 88 89 71 } 90 72 -
trunk/firmware_v2/SES/src/main.c
r22 r23 85 85 86 86 /* USER CODE BEGIN 1 */ 87 87 int temperature = 0; 88 unsigned pwm = 0U; 89 uint32_t uin = 0; 90 uint32_t uout = 0; 88 91 /* USER CODE END 1 */ 89 92 … … 108 111 MX_DMA_Init(); 109 112 MX_ADC1_Init(); 110 MX_TIM 3_Init();113 MX_TIM16_Init(); 111 114 MX_TIM17_Init(); 112 115 // MX_USART1_UART_Init(); … … 163 166 { 164 167 msCounter = 0; 165 CHIP_TEMPERATURE_Exec(adcData[4]);168 temperature = CHIP_TEMPERATURE_Exec(adcData[4]); 166 169 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); 168 236 169 SetFANSpeed(pwm); 170 171 pwm++; 172 if (pwm > 300U) pwm = 300U; // 30.0% 173 } 237 238 } //endsecond tick 174 239 175 240 … … 190 255 191 256 case MODE_MAINSWITCH_LVP_OVP: 192 MODE_LVP_OVP_Exec();257 // MODE_LVP_OVP_Exec(); 193 258 break; 194 259 -
trunk/firmware_v2/SES/src/voltage_meas.c
r17 r23 7 7 8 8 9 uint32_t voltageUin;10 uint32_t voltageUout;11 uint32_t voltageDrop;9 static uint32_t voltageUin; 10 static uint32_t voltageUout; 11 static uint32_t voltageDrop; 12 12 13 13 #define VOLTAGE_DIVIDER_12V 6 … … 24 24 vuin = adcValUin * VREF; 25 25 vuin = vuin / 65635; 26 vuin = vuin * VOLTAGE_DIVIDER_12V; //Divider ür 12V Version26 vuin = vuin * VOLTAGE_DIVIDER_12V; //Divider für 12V Version 27 27 voltageUin = vuin; 28 28 … … 31 31 vuout = adcValUout * VREF; 32 32 vuout = vuout / 65635; 33 vuout = vuout * VOLTAGE_DIVIDER_12V; //Divider ür 12V Version33 vuout = vuout * VOLTAGE_DIVIDER_12V; //Divider für 12V Version 34 34 voltageUout = vuout; 35 35 … … 64 64 dropLimitCounter = 0; 65 65 66 } 66 } 67 68 uint32_t VOLTAGE_MEAS_GetUin(void) 69 { 70 return voltageUin; 71 72 } 73 74 uint32_t VOLTAGE_MEAS_GetUout(void) 75 { 76 return voltageUout; 77 }
Note: See TracChangeset
for help on using the changeset viewer.