- Timestamp:
- Aug 31, 2025, 6:56:29 PM (4 days ago)
- Location:
- trunk/fw_g473rct
- Files:
-
- 13 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/fw_g473rct/Core/Inc/main.h
r22 r24 42 42 /* Exported constants --------------------------------------------------------*/ 43 43 /* USER CODE BEGIN EC */ 44 44 #define VREF 3000.0 45 45 /* USER CODE END EC */ 46 46 -
trunk/fw_g473rct/Core/Src/adc.c
r22 r24 54 54 */ 55 55 hadc1.Instance = ADC1; 56 hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV 256;56 hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; 57 57 hadc1.Init.Resolution = ADC_RESOLUTION_12B; 58 58 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 92 92 sConfig.Channel = ADC_CHANNEL_1; 93 93 sConfig.Rank = ADC_REGULAR_RANK_1; 94 sConfig.SamplingTime = ADC_SAMPLETIME_6 40CYCLES_5;94 sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5; 95 95 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED; 96 96 sConfig.OffsetNumber = ADC_OFFSET_NONE; … … 122 122 */ 123 123 hadc2.Instance = ADC2; 124 hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV 256;124 hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; 125 125 hadc2.Init.Resolution = ADC_RESOLUTION_12B; 126 126 hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 148 148 sConfig.Channel = ADC_CHANNEL_3; 149 149 sConfig.Rank = ADC_REGULAR_RANK_1; 150 sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5; 151 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED; 152 sConfig.OffsetNumber = ADC_OFFSET_NONE; 153 sConfig.Offset = 0; 154 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) 155 { 156 Error_Handler(); 157 } 158 /* USER CODE BEGIN ADC2_Init 2 */ 159 160 /* USER CODE END ADC2_Init 2 */ 161 162 } 163 /* ADC3 init function */ 164 void MX_ADC3_Init(void) 165 { 166 167 /* USER CODE BEGIN ADC3_Init 0 */ 168 169 /* USER CODE END ADC3_Init 0 */ 170 171 ADC_MultiModeTypeDef multimode = {0}; 172 ADC_ChannelConfTypeDef sConfig = {0}; 173 174 /* USER CODE BEGIN ADC3_Init 1 */ 175 176 /* USER CODE END ADC3_Init 1 */ 177 178 /** Common config 179 */ 180 hadc3.Instance = ADC3; 181 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; 182 hadc3.Init.Resolution = ADC_RESOLUTION_12B; 183 hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT; 184 hadc3.Init.GainCompensation = 0; 185 hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE; 186 hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV; 187 hadc3.Init.LowPowerAutoWait = DISABLE; 188 hadc3.Init.ContinuousConvMode = ENABLE; 189 hadc3.Init.NbrOfConversion = 3; 190 hadc3.Init.DiscontinuousConvMode = DISABLE; 191 hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START; 192 hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; 193 hadc3.Init.DMAContinuousRequests = ENABLE; 194 hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; 195 hadc3.Init.OversamplingMode = ENABLE; 196 hadc3.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256; 197 hadc3.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4; 198 hadc3.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; 199 hadc3.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE; 200 if (HAL_ADC_Init(&hadc3) != HAL_OK) 201 { 202 Error_Handler(); 203 } 204 205 /** Configure the ADC multi-mode 206 */ 207 multimode.Mode = ADC_MODE_INDEPENDENT; 208 if (HAL_ADCEx_MultiModeConfigChannel(&hadc3, &multimode) != HAL_OK) 209 { 210 Error_Handler(); 211 } 212 213 /** Configure Regular Channel 214 */ 215 sConfig.Channel = ADC_CHANNEL_1; 216 sConfig.Rank = ADC_REGULAR_RANK_1; 150 217 sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5; 151 218 sConfig.SingleDiff = ADC_SINGLE_ENDED; 152 219 sConfig.OffsetNumber = ADC_OFFSET_NONE; 153 220 sConfig.Offset = 0; 154 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) 155 { 156 Error_Handler(); 157 } 158 /* USER CODE BEGIN ADC2_Init 2 */ 159 160 /* USER CODE END ADC2_Init 2 */ 161 162 } 163 /* ADC3 init function */ 164 void MX_ADC3_Init(void) 165 { 166 167 /* USER CODE BEGIN ADC3_Init 0 */ 168 169 /* USER CODE END ADC3_Init 0 */ 170 171 ADC_MultiModeTypeDef multimode = {0}; 172 ADC_ChannelConfTypeDef sConfig = {0}; 173 174 /* USER CODE BEGIN ADC3_Init 1 */ 175 176 /* USER CODE END ADC3_Init 1 */ 177 178 /** Common config 179 */ 180 hadc3.Instance = ADC3; 181 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256; 182 hadc3.Init.Resolution = ADC_RESOLUTION_12B; 183 hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT; 184 hadc3.Init.GainCompensation = 0; 185 hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE; 186 hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV; 187 hadc3.Init.LowPowerAutoWait = DISABLE; 188 hadc3.Init.ContinuousConvMode = ENABLE; 189 hadc3.Init.NbrOfConversion = 1; 190 hadc3.Init.DiscontinuousConvMode = DISABLE; 191 hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START; 192 hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; 193 hadc3.Init.DMAContinuousRequests = ENABLE; 194 hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED; 195 hadc3.Init.OversamplingMode = DISABLE; 196 if (HAL_ADC_Init(&hadc3) != HAL_OK) 197 { 198 Error_Handler(); 199 } 200 201 /** Configure the ADC multi-mode 202 */ 203 multimode.Mode = ADC_MODE_INDEPENDENT; 204 if (HAL_ADCEx_MultiModeConfigChannel(&hadc3, &multimode) != HAL_OK) 205 { 206 Error_Handler(); 207 } 208 209 /** Configure Regular Channel 210 */ 211 sConfig.Channel = ADC_CHANNEL_1; 212 sConfig.Rank = ADC_REGULAR_RANK_1; 213 sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5; 214 sConfig.SingleDiff = ADC_SINGLE_ENDED; 215 sConfig.OffsetNumber = ADC_OFFSET_NONE; 216 sConfig.Offset = 0; 221 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) 222 { 223 Error_Handler(); 224 } 225 226 /** Configure Regular Channel 227 */ 228 sConfig.Channel = ADC_CHANNEL_12; 229 sConfig.Rank = ADC_REGULAR_RANK_2; 230 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) 231 { 232 Error_Handler(); 233 } 234 235 /** Configure Regular Channel 236 */ 237 sConfig.Channel = ADC_CHANNEL_5; 238 sConfig.Rank = ADC_REGULAR_RANK_3; 217 239 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) 218 240 { … … 241 263 */ 242 264 hadc4.Instance = ADC4; 243 hadc4.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV 256;265 hadc4.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; 244 266 hadc4.Init.Resolution = ADC_RESOLUTION_12B; 245 267 hadc4.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 255 277 hadc4.Init.DMAContinuousRequests = ENABLE; 256 278 hadc4.Init.Overrun = ADC_OVR_DATA_PRESERVED; 257 hadc4.Init.OversamplingMode = DISABLE; 279 hadc4.Init.OversamplingMode = ENABLE; 280 hadc4.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256; 281 hadc4.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4; 282 hadc4.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; 283 hadc4.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE; 258 284 if (HAL_ADC_Init(&hadc4) != HAL_OK) 259 285 { … … 265 291 sConfig.Channel = ADC_CHANNEL_4; 266 292 sConfig.Rank = ADC_REGULAR_RANK_1; 267 sConfig.SamplingTime = ADC_SAMPLETIME_ 2CYCLES_5;293 sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5; 268 294 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED; 269 295 sConfig.OffsetNumber = ADC_OFFSET_NONE; … … 295 321 */ 296 322 hadc5.Instance = ADC5; 297 hadc5.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV 256;323 hadc5.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; 298 324 hadc5.Init.Resolution = ADC_RESOLUTION_12B; 299 325 hadc5.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 309 335 hadc5.Init.DMAContinuousRequests = ENABLE; 310 336 hadc5.Init.Overrun = ADC_OVR_DATA_PRESERVED; 311 hadc5.Init.OversamplingMode = DISABLE; 337 hadc5.Init.OversamplingMode = ENABLE; 338 hadc5.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256; 339 hadc5.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4; 340 hadc5.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; 341 hadc5.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE; 312 342 if (HAL_ADC_Init(&hadc5) != HAL_OK) 313 343 { … … 319 349 sConfig.Channel = ADC_CHANNEL_TEMPSENSOR_ADC5; 320 350 sConfig.Rank = ADC_REGULAR_RANK_1; 321 sConfig.SamplingTime = ADC_SAMPLETIME_ 2CYCLES_5;351 sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5; 322 352 sConfig.SingleDiff = ADC_SINGLE_ENDED; 323 353 sConfig.OffsetNumber = ADC_OFFSET_NONE; … … 330 360 /** Configure Regular Channel 331 361 */ 332 sConfig.Channel = ADC_CHANNEL_ 1;362 sConfig.Channel = ADC_CHANNEL_VBAT; 333 363 sConfig.Rank = ADC_REGULAR_RANK_2; 334 364 if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK) … … 339 369 /** Configure Regular Channel 340 370 */ 371 sConfig.Channel = ADC_CHANNEL_2; 341 372 sConfig.Rank = ADC_REGULAR_RANK_3; 342 373 if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK) … … 347 378 /** Configure Regular Channel 348 379 */ 380 sConfig.Channel = ADC_CHANNEL_1; 349 381 sConfig.Rank = ADC_REGULAR_RANK_4; 350 382 if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK) … … 375 407 */ 376 408 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12; 377 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_ SYSCLK;409 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_PLL; 378 410 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 379 411 { … … 428 460 */ 429 461 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12; 430 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_ SYSCLK;462 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_PLL; 431 463 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 432 464 { … … 443 475 /**ADC2 GPIO Configuration 444 476 PA6 ------> ADC2_IN3 445 */ 446 GPIO_InitStruct.Pin = ADC2_IN3_UBAT__Pin; 477 PA7 ------> ADC2_IN4 478 */ 479 GPIO_InitStruct.Pin = ADC2_IN3_UBAT__Pin|GPIO_PIN_7; 447 480 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; 448 481 GPIO_InitStruct.Pull = GPIO_NOPULL; 449 HAL_GPIO_Init( ADC2_IN3_UBAT__GPIO_Port, &GPIO_InitStruct);482 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 450 483 451 484 /* ADC2 DMA Init */ … … 480 513 */ 481 514 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345; 482 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_ SYSCLK;515 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL; 483 516 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 484 517 { … … 534 567 */ 535 568 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345; 536 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_ SYSCLK;569 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL; 537 570 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 538 571 { … … 587 620 */ 588 621 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345; 589 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_ SYSCLK;622 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL; 590 623 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 591 624 { … … 672 705 /**ADC2 GPIO Configuration 673 706 PA6 ------> ADC2_IN3 674 */ 675 HAL_GPIO_DeInit(ADC2_IN3_UBAT__GPIO_Port, ADC2_IN3_UBAT__Pin); 707 PA7 ------> ADC2_IN4 708 */ 709 HAL_GPIO_DeInit(GPIOA, ADC2_IN3_UBAT__Pin|GPIO_PIN_7); 676 710 677 711 /* ADC2 DMA DeInit */ -
trunk/fw_g473rct/Core/Src/main.c
r20 r24 148 148 RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2; 149 149 RCC_OscInitStruct.PLL.PLLN = 16; 150 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV 2;150 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; 151 151 RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; 152 152 RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; -
trunk/fw_g473rct/SES/inc/fast_current.h
r20 r24 20 20 21 21 //--- GLOBALE FUNKTIONS PROTOTYPEN --------------------------------------------- 22 void FAST_CURRENT_Exec(uint32_t new valP, uint32_t newvalM);22 void FAST_CURRENT_Exec(uint32_t newVal ); 23 23 24 24 #endif // -
trunk/fw_g473rct/SES/inc/int_bat_voltage.h
r23 r24 26 26 * @retval kein 27 27 */ 28 void REF_VOLTAGE_Exec(uint32_t newval);28 void INT_BAT_VOLTAGE_Exec(uint32_t newval); 29 29 30 30 #endif // __REF_VOLTAGE_H -
trunk/fw_g473rct/SES/smartPro.emProject
r22 r24 185 185 <file file_name="inc/esr.h" /> 186 186 <file file_name="inc/fast_current.h" /> 187 <file file_name="inc/int_bat_voltage.h" /> 187 188 <file file_name="inc/modbus.h" /> 188 189 <file file_name="inc/outputs.h" /> 189 <file file_name="inc/ref_voltage.h" />190 190 <file file_name="inc/rtc.h" /> 191 191 <file file_name="inc/self_discharge.h" /> … … 212 212 <file file_name="src/esr.c" /> 213 213 <file file_name="src/fast_current.c" /> 214 <file file_name="src/int_bat_voltage.c" /> 214 215 <file file_name="src/main.c" /> 215 216 <file file_name="src/modbus.c" /> 216 217 <file file_name="src/outputs.c" /> 217 <file file_name="src/ref_voltage.c" />218 218 <file file_name="src/self_discharge.c" /> 219 219 <file file_name="src/shunt_temperature.c" /> -
trunk/fw_g473rct/SES/src/battery_voltage.c
r22 r24 13 13 #include "main.h" 14 14 #include "sysdata.h" 15 15 #include <stdio.h> 16 16 // --- EXTERNE VARIABLEN -------------------------------------------------------- 17 17 18 18 // --- LOKALE DEFINES - bitte hier dokumentieren -------------------------------- 19 #define BATTERY_VOLTAGE_FILTER 25619 #define BATTERY_VOLTAGE_FILTER 32 20 20 21 21 22 #define BATTERY_VOLTAGE_VOLTAGE_DIVIDER 6 23 #define ADC_RESOLUTION 65536//65536/2 da im differential mode24 #define ADC_OFFSET 025 #define VREF 3000 22 #define BATTERY_VOLTAGE_VOLTAGE_DIVIDER 6.0 23 #define ADC_RESOLUTION 32768.0 //65536/2 da im differential mode 24 #define ADC_OFFSET 32768.0 25 26 26 // --- LOKALE TYPE DEFS - bitte hier dokumentieren------------------------------- 27 27 … … 37 37 38 38 39 void BATTERY_VOLTAGE_Exec(int32_t new valP)39 void BATTERY_VOLTAGE_Exec(int32_t newVal) 40 40 { 41 41 static int measCounter; 42 static unsigned long avgsumP = 0; 43 int32_t avgvalP; 44 42 static unsigned long avgSum = 0; 43 int32_t avgVal; 45 44 if (measCounter < INT32_MAX) measCounter++; 46 45 47 46 48 47 // Filterlängen in 2er-Potenzen --> Compiler optimiert 49 avg sumP -= avgsumP/ BATTERY_VOLTAGE_FILTER;50 avg sumP += newvalP;51 avg valP = avgsumP/ BATTERY_VOLTAGE_FILTER;48 avgSum -= avgSum / BATTERY_VOLTAGE_FILTER; 49 avgSum += newVal; 50 avgVal = avgSum / BATTERY_VOLTAGE_FILTER; 52 51 53 52 … … 55 54 56 55 //Umrechung auf Eingangsspannung am Gerät mit Teiler 57 sys_data.s.values.batteryVoltage = ((avg valP-2048) * 3000 * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / 2048;56 sys_data.s.values.batteryVoltage = ((avgVal-ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / ADC_RESOLUTION; 58 57 59 58 … … 75 74 76 75 77 //Berechnung schnelle nWert ohne Glättung:76 //Berechnung schnelle Wert ohne Glättung: 78 77 //Umrechung auf Eingangsspannung am Gerät mit Teiler 79 sys_data.s.values.fast_voltage = ((new valP-ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / ADC_RESOLUTION;78 sys_data.s.values.fast_voltage = ((newVal-ADC_OFFSET) * VREF * BATTERY_VOLTAGE_VOLTAGE_DIVIDER ) / ADC_RESOLUTION; 80 79 81 80 -
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(); -
trunk/fw_g473rct/SES/src/fast_current.c
r20 r24 17 17 18 18 // --- LOKALE DEFINES - bitte hier dokumentieren -------------------------------- 19 //#define FAST_CURRENT_FILTER 220 21 22 19 23 20 #define I_SENSE_GAIN 40.0 21 #define ADC_OFFSET 32768 22 #define ADC_RESOLUTION 32768 //65536/2 da im differential mode 24 23 25 24 … … 51 50 52 51 53 void FAST_CURRENT_Exec(uint32_t new valP, uint32_t newvalM)52 void FAST_CURRENT_Exec(uint32_t newVal ) 54 53 { 55 static int measCounter; 56 static unsigned long avgsumP = 0; 57 uint32_t avgvalP; 58 59 if (measCounter < INT32_MAX) measCounter++; 60 61 62 // Filterlängen in 2er-Potenzen --> Compiler optimiert 63 // avgsumP -= avgsumP / FAST_CURRENT_FILTER; 64 // avgsumP += newvalP; 65 // avgvalP = avgsumP / FAST_CURRENT_FILTER; 66 67 // static unsigned long avgsumM = 0; 68 // uint32_t avgvalM; 69 // Filterlängen in 2er-Potenzen --> Compiler optimiert 70 // avgsumM -= avgsumM / FAST_CURRENT_FILTER; 71 // avgsumM += newvalM; 72 // avgvalM = avgsumM / FAST_CURRENT_FILTER; 73 74 75 //Berechne Differenzspannung am ADC Eingnag 76 double diff; 77 diff = (int32_t) newvalP - (int32_t) newvalM; 78 diff = (diff * sys_data.s.values.realVdd) / 65536; 79 54 80 55 //Umrechung auf Strom 81 56 double temp_current; 82 temp_current = (diff / I_SENSE_GAIN) / SHUNT_RESISTOR; 57 temp_current = ((int32_t) newVal - ADC_OFFSET) * VREF ; 58 temp_current = temp_current / ADC_RESOLUTION; 59 temp_current = temp_current / I_SENSE_GAIN ; 60 temp_current = temp_current / SHUNT_RESISTOR ; 83 61 sys_data.s.values.fast_current = temp_current * (sys_data.s.parameter.batteryCurrentGainCorrectionFaktor / 1000000.0); 84 62 -
trunk/fw_g473rct/SES/src/int_bat_voltage.c
r23 r24 12 12 #include "main.h" 13 13 #include "sysdata.h" 14 #include "int_bat_voltage.h" 14 15 // --- EXTERNE VARIABLEN -------------------------------------------------------- 15 16 … … 34 35 35 36 // --- GLOBALE FUNKTIONEN - bitte in Header dokumentieren------------------------ 36 void REF_VOLTAGE_Exec(uint32_t newval)37 void INT_BAT_VOLTAGE_Exec(uint32_t newval) 37 38 { 38 static unsigned long avgsum = 0;39 uint32_t avgval;40 // Filterlängen in 2er-Potenzen --> Compiler optimiert41 avgsum -= avgsum / REF_FILTER;42 avgsum += newval;43 avgval = avgsum / REF_FILTER;44 45 39 // Messung Externe Spannung basierend auf 3,3V Versorgungsspannung 46 40 // Nur für Debug Zwecke 47 sys_data.s.values.voltageVref = (avgval * 3300) / 65536;41 sys_data.s.values.voltageVref = VREF; 48 42 49 // Ermittlung Vdd als Referenz50 sys_data.s.values.realVdd = 3 000L * 65536 / avgval;;43 44 sys_data.s.values.realVdd = 3 * (newval * VREF) / 65536; 51 45 } 52 46 /*************************** End of file ****************************/ -
trunk/fw_g473rct/SES/src/main.c
r23 r24 39 39 #include "battery_voltage.h" 40 40 #include "ads1260.h" 41 #include "shunt_voltage.h" 42 #include "fast_current.h" 43 #include "int_bat_voltage.h" 44 #include "chip_temperature.h" 45 #include "shunt_temperature.h" 41 46 /* USER CODE END Includes */ 42 47 … … 61 66 modbus_t modbusData __attribute__((section(".RAM1"))); 62 67 63 __IO uint16_t adc12Data[ 2] __attribute__((section(".RAM1")));68 __IO uint16_t adc12Data[100][2] __attribute__((section(".RAM1"))); 64 69 __IO uint32_t adc1Data[1] __attribute__((section(".RAM1"))); 65 70 __IO uint32_t adc2Data[1] __attribute__((section(".RAM1"))); … … 68 73 __IO uint32_t adc5Data[4] __attribute__((section(".RAM1"))); 69 74 int silentmode =0; 70 static volatile uint32_t newADC1Data = 0; 71 static volatile uint32_t newADC2Data = 0; 75 static volatile uint32_t newADC12Data = 0; 76 static volatile uint32_t newADC3Data = 0; 77 static volatile uint32_t newADC4Data = 0; 78 static volatile uint32_t newADC5Data = 0; 72 79 /* USER CODE END PV */ 73 80 … … 95 102 uint8_t firstStartCatcher; 96 103 int mode_button_disable_time=0; 104 uint32_t adc12_time; 105 uint32_t adc12_lasttime; 97 106 /* USER CODE END 1 */ 98 107 … … 160 169 161 170 // STM32G0 Chiptemperatur Kalibrierung 162 CHIP_TEMPERATURE_Calibration( /*&sys_data*/);171 CHIP_TEMPERATURE_Calibration(); 163 172 164 173 HAL_ADCEx_Calibration_Start(&hadc1, ADC_DIFFERENTIAL_ENDED); … … 169 178 170 179 171 172 180 //SET_BIT(hadc2.Instance->CFGR, ADC_CFGR_DMAEN); //Enable DMA transfer for ADC slave (ADC12_CCR.MDMA = 0b00 -> MDMA mode disabled) 173 181 //HAL_DMA_Start(hadc2.DMA_Handle,(uint32_t)&hadc2.Instance->DR, (uint32_t)adc2Data,1); //Start ADC slave DMA … … 175 183 176 184 //HAL_ADC_Start_DMA(&hadc2, (uint32_t*)adc2Data, 1); 177 if (HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)adc12Data,1 )) //Start ADC interleaved mode185 if (HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)adc12Data,100)) //Start ADC interleaved mode 178 186 { 179 187 /* Start Error */ 180 188 Error_Handler(); 181 189 } 190 191 if (HAL_ADC_Start_DMA(&hadc3, (uint32_t *) adc3Data , 3)) 192 { 193 /* Start Error */ 194 Error_Handler(); 195 } 196 197 if (HAL_ADC_Start_DMA(&hadc4, (uint32_t *) adc4Data , 1)) 198 { 199 /* Start Error */ 200 Error_Handler(); 201 } 202 182 203 183 204 if (HAL_ADC_Start_DMA(&hadc5, (uint32_t *) adc5Data , 4)) … … 196 217 197 218 /* USER CODE BEGIN 3 */ 198 if (newADC1Data == 1) 199 { 200 BATTERY_VOLTAGE_Exec( adc12Data[1]); 201 } 202 219 if (newADC12Data == 1) 220 { 221 //Mit ADC_DIV2,Sample time 12,5Cycklen, ADC Clock 50Mhz, Oversampling 256 222 //Tconv = 6400 Takte = 0,128ms Pro Konvertierung. Also für 100 messwerte 12,8mS 223 BATTERY_VOLTAGE_Exec( adc12Data[0][1]); 224 FAST_CURRENT_Exec(adc12Data[0][0]); 225 newADC12Data = 0; 226 adc12_time = HAL_GetTick() - adc12_lasttime; 227 adc12_lasttime = HAL_GetTick(); 228 229 } 230 231 232 if (newADC3Data == 1) 233 { 234 SHUNT_TEMPERATURE_Exec(adc3Data[0]); 235 } 236 237 238 if (newADC4Data == 1) 239 { 240 SHUNT_VOLTAGE_Exec( adc4Data[0]); 241 } 242 243 244 if (newADC5Data == 1) 245 { 246 CHIP_TEMPERATURE_Exec(adc5Data[0]); 247 INT_BAT_VOLTAGE_Exec( adc5Data[1]); 248 sys_data.s.values.ovp_sense = (adc5Data[2] * VREF * 21 ) / 65536.0; 249 sys_data.s.values.lvp_sense = (adc5Data[3] * VREF * 21 ) / 65536.0; 250 } 203 251 204 252 if(sys_data.s.parameter.command != 0) … … 327 375 if (hadc->Instance==ADC1) 328 376 { 329 newADC1 Data=1;330 } 331 332 if (hadc->Instance==ADC 2)377 newADC12Data=1; 378 } 379 380 if (hadc->Instance==ADC3) 333 381 { 334 newADC2Data=1; 382 newADC3Data=1; 383 } 384 385 386 if (hadc->Instance==ADC4) 387 { 388 newADC4Data=1; 389 } 390 391 if (hadc->Instance==ADC5) 392 { 393 newADC5Data=1; 335 394 } 336 395 } -
trunk/fw_g473rct/SES/src/modbus.c
r23 r24 183 183 } 184 184 185 uint32_t fixedDelayInBitDurations = (FAST_BAUDRATE_INTERFRAME_DELAY_us * baudrate) / 1000000UL + 1UL; 186 // HAL_UART_EnableReceiverTimeout( usart); 187 // HAL_UART_ReceiverTimeout_Config(usart, fixedDelayInBitDurations); 188 189 if(HAL_UARTEx_ReceiveToIdle_DMA(mb_data->uart, mb_data->rx_buffer, RXBUFFERSIZE) != HAL_OK) 185 186 HAL_UART_EnableReceiverTimeout( usart); 187 HAL_UART_ReceiverTimeout_Config(usart, 3.5 * nrOfBitsPerChar); 188 SET_BIT(usart->Instance->CR1, USART_CR1_RTOIE); 189 190 191 if(HAL_UART_Receive_DMA(mb_data->uart, mb_data->rx_buffer, RXBUFFERSIZE) != HAL_OK) 190 192 { 191 193 printf("uart error \n\r"); … … 202 204 modbusData.mb_rx_frame_complete = 1; 203 205 modbusData.setRxLed = false; 204 modbusData.rx_head = 0;205 206 modbusData.rx_head = huart->RxXferSize - __HAL_DMA_GET_COUNTER(huart->hdmarx); 207 206 208 207 209 if (huart->ErrorCode == HAL_UART_ERROR_RTO) 208 210 { 209 printf("MB RTO Event! \n\r"); 211 212 // printf("MB RTO Event! \n\r"); 213 // Kein Fehler, normale Funktion 210 214 } 211 215 if (huart->ErrorCode == HAL_UART_ERROR_FE) … … 240 244 241 245 242 if(HAL_UARTEx_ReceiveToIdle_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK) 246 247 if(HAL_UART_Receive_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK) 243 248 { 244 249 printf("Uart Error bei neustart nach Fehler \n\r"); … … 250 255 } 251 256 252 void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)253 {254 //printf("MB rxEvent!RX=%d \n\r",Size);255 modbusData.setRxLed = true;256 257 modbusData.mb_rx_frame_complete = 1;258 modbusData.rx_head= Size +1;259 260 if(HAL_UARTEx_ReceiveToIdle_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK)261 {262 printf("uart error \n\r");263 // while(1)264 // {265 // }266 }267 268 269 }257 //void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) 258 //{ 259 // //printf("MB rxEvent!RX=%d \n\r",Size); 260 // modbusData.setRxLed = true; 261 262 // modbusData.mb_rx_frame_complete = 1; 263 // modbusData.rx_head= Size +1; 264 265 // if(HAL_UART_Receive_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK) 266 // { 267 // printf("uart error \n\r"); 268 // // while(1) 269 // // { 270 // // } 271 // } 272 273 274 //} 270 275 271 276 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) -
trunk/fw_g473rct/SES/src/shunt_temperature.c
r20 r24 38 38 void SHUNT_TEMPERATURE_Exec(int32_t adcval) 39 39 { 40 int32_ttemp;40 double temp; 41 41 42 42 43 43 //Umrechnung Spannung in mV 44 temp = (adcval * 3300 ) / 65536;44 temp = (adcval * VREF ) / 65536.0; 45 45 46 //Umrechnung in °C mit PT 1000 Sensor47 // temp = temp - 747;48 // temp = temp * 70.406;49 46 50 47 //Umrechnung in °C mit LM61 Sensor 51 48 temp = temp - 600; 52 temp = temp * 100;49 temp = temp / 10; 53 50 54 51 //2Nackommastellen 55 52 //milli grad in grad * 100 /festkomma 56 sys_data.s.values.shuntTemperature = temp / 10;53 sys_data.s.values.shuntTemperature = temp * 100; 57 54 58 55 -
trunk/fw_g473rct/SES/src/shunt_voltage.c
r20 r24 17 17 18 18 // --- LOKALE DEFINES - bitte hier dokumentieren -------------------------------- 19 20 #define SHUNT_VOLTAGE_DIVIDER 6 19 #define ADC_RESOLUTION 32768 //65536/2 da im differential mode 20 #define ADC_OFFSET 32768 21 #define SHUNT_VOLTAGE_DIVIDER 6 21 22 // --- LOKALE TYPE DEFS - bitte hier dokumentieren------------------------------- 22 23 … … 44 45 void SHUNT_VOLTAGE_Exec(int32_t newval) 45 46 { 46 static unsigned long avgsum = 0; 47 uint32_t avgval; 48 // Filterlängen in 2er-Potenzen --> Compiler optimiert 49 //avgsum -= avgsum/SHUNT_FILTER; 50 //avgsum += newval; 51 //avgval = avgsum / SHUNT_FILTER; 52 53 sys_data.s.values.shuntVoltage = (newval * (uint64_t)sys_data.s.values.realVdd * SHUNT_VOLTAGE_DIVIDER ) / 65536; 47 sys_data.s.values.shuntVoltage = ((newval-ADC_OFFSET) * VREF * SHUNT_VOLTAGE_DIVIDER ) / ADC_RESOLUTION; 54 48 55 49 } -
trunk/fw_g473rct/fw_g473rct.ioc
r23 r24 1 1 #MicroXplorer Configuration settings - do not modify 2 2 ADC1.Channel-20\#ChannelRegularConversion=ADC_CHANNEL_1 3 ADC1.ClockPrescaler=ADC_CLOCK_ASYNC_DIV 2563 ADC1.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1 4 4 ADC1.CommonPathInternal=null|null|null|null 5 5 ADC1.ContinuousConvMode=ENABLE … … 7 7 ADC1.DMAContinuousRequests=ENABLE 8 8 ADC1.EOCSelection=ADC_EOC_SINGLE_CONV 9 ADC1.IPParameters=Rank-20\#ChannelRegularConversion,master,SingleDiff-20\#ChannelRegularConversion,Channel-20\#ChannelRegularConversion,SamplingTime-20\#ChannelRegularConversion,OffsetNumber-20\#ChannelRegularConversion,NbrOfConversionFlag,Mode,DMAAccessModeView,ContinuousConvMode,OversamplingMode,DMAContinuousRequests,Overrun,ClockPrescaler,EOCSelection, RightBitShift,Ratio,CommonPathInternal9 ADC1.IPParameters=Rank-20\#ChannelRegularConversion,master,SingleDiff-20\#ChannelRegularConversion,Channel-20\#ChannelRegularConversion,SamplingTime-20\#ChannelRegularConversion,OffsetNumber-20\#ChannelRegularConversion,NbrOfConversionFlag,Mode,DMAAccessModeView,ContinuousConvMode,OversamplingMode,DMAContinuousRequests,Overrun,ClockPrescaler,EOCSelection,NbrOfConversion,RightBitShift,Ratio,CommonPathInternal 10 10 ADC1.Mode=ADC_DUALMODE_REGSIMULT 11 ADC1.NbrOfConversion=1 11 12 ADC1.NbrOfConversionFlag=1 12 13 ADC1.OffsetNumber-20\#ChannelRegularConversion=ADC_OFFSET_NONE … … 16 17 ADC1.Ratio=ADC_OVERSAMPLING_RATIO_256 17 18 ADC1.RightBitShift=ADC_RIGHTBITSHIFT_4 18 ADC1.SamplingTime-20\#ChannelRegularConversion=ADC_SAMPLETIME_6 40CYCLES_519 ADC1.SamplingTime-20\#ChannelRegularConversion=ADC_SAMPLETIME_6CYCLES_5 19 20 ADC1.SingleDiff-20\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED 20 21 ADC1.master=1 21 22 ADC2.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_3 22 ADC2.ClockPrescaler=ADC_CLOCK_ASYNC_DIV 25623 ADC2.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1 23 24 ADC2.CommonPathInternal=null|null|null|null 24 25 ADC2.DMAAccessModeView=ENABLE 25 26 ADC2.DMAContinuousRequests=ENABLE 26 27 ADC2.EOCSelection=ADC_EOC_SINGLE_CONV 27 ADC2.IPParameters=Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,NbrOfConversionFlag,Mode,DMAAccessModeView,EOCSelection,DMAContinuousRequests,Overrun,ClockPrescaler,OversamplingMode,RightBitShift,Ratio, CommonPathInternal28 ADC2.IPParameters=Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,NbrOfConversionFlag,Mode,DMAAccessModeView,EOCSelection,DMAContinuousRequests,Overrun,ClockPrescaler,OversamplingMode,RightBitShift,Ratio,SingleDiff-4\#ChannelRegularConversion,CommonPathInternal 28 29 ADC2.Mode=ADC_DUALMODE_REGSIMULT 29 30 ADC2.NbrOfConversionFlag=1 … … 34 35 ADC2.Ratio=ADC_OVERSAMPLING_RATIO_256 35 36 ADC2.RightBitShift=ADC_RIGHTBITSHIFT_4 36 ADC2.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 37 ADC2.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_6CYCLES_5 38 ADC2.SingleDiff-4\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED 37 39 ADC3.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_1 38 ADC3.ClockPrescaler=ADC_CLOCK_ASYNC_DIV256 40 ADC3.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_12 41 ADC3.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_5 42 ADC3.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1 39 43 ADC3.CommonPathInternal=null|null|null|null 40 44 ADC3.ContinuousConvMode=ENABLE 41 45 ADC3.DMAContinuousRequests=ENABLE 42 ADC3.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,NbrOfConversionFlag,master,DMAContinuousRequests,ContinuousConvMode,ClockPrescaler,CommonPathInternal 46 ADC3.EOCSelection=ADC_EOC_SEQ_CONV 47 ADC3.IPParameters=Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,NbrOfConversionFlag,master,DMAContinuousRequests,ContinuousConvMode,ClockPrescaler,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,NbrOfConversion,EOCSelection,Overrun,OversamplingMode,RightBitShift,Ratio,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,CommonPathInternal 48 ADC3.NbrOfConversion=3 43 49 ADC3.NbrOfConversionFlag=1 44 50 ADC3.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE 51 ADC3.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE 52 ADC3.OffsetNumber-4\#ChannelRegularConversion=ADC_OFFSET_NONE 53 ADC3.Overrun=ADC_OVR_DATA_OVERWRITTEN 54 ADC3.OversamplingMode=ENABLE 45 55 ADC3.Rank-1\#ChannelRegularConversion=1 46 ADC3.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5 56 ADC3.Rank-2\#ChannelRegularConversion=2 57 ADC3.Rank-4\#ChannelRegularConversion=3 58 ADC3.Ratio=ADC_OVERSAMPLING_RATIO_256 59 ADC3.RightBitShift=ADC_RIGHTBITSHIFT_4 60 ADC3.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 61 ADC3.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 62 ADC3.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 47 63 ADC3.master=1 48 64 ADC4.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_4 49 ADC4.ClockPrescaler=ADC_CLOCK_ASYNC_DIV 25665 ADC4.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1 50 66 ADC4.CommonPathInternal=null|null|null|null 51 67 ADC4.ContinuousConvMode=ENABLE 52 68 ADC4.DMAContinuousRequests=ENABLE 53 ADC4.IPParameters=Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SingleDiff-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests,ClockPrescaler, CommonPathInternal69 ADC4.IPParameters=Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SingleDiff-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests,ClockPrescaler,OversamplingMode,RightBitShift,Ratio,CommonPathInternal 54 70 ADC4.NbrOfConversionFlag=1 55 71 ADC4.OffsetNumber-3\#ChannelRegularConversion=ADC_OFFSET_NONE 72 ADC4.OversamplingMode=ENABLE 56 73 ADC4.Rank-3\#ChannelRegularConversion=1 57 ADC4.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5 74 ADC4.Ratio=ADC_OVERSAMPLING_RATIO_256 75 ADC4.RightBitShift=ADC_RIGHTBITSHIFT_4 76 ADC4.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 58 77 ADC4.SingleDiff-3\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED 59 78 ADC5.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_TEMPSENSOR_ADC5 60 ADC5.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_ 161 ADC5.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_ 179 ADC5.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_VBAT 80 ADC5.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_2 62 81 ADC5.Channel-5\#ChannelRegularConversion=ADC_CHANNEL_1 63 ADC5.ClockPrescaler=ADC_CLOCK_ASYNC_DIV 25682 ADC5.ClockPrescaler=ADC_CLOCK_ASYNC_DIV1 64 83 ADC5.CommonPathInternal=null|ADC_CHANNEL_TEMPSENSOR_ADC1|ADC_CHANNEL_VBAT|null 65 84 ADC5.ContinuousConvMode=ENABLE 66 85 ADC5.DMAContinuousRequests=ENABLE 67 86 ADC5.EOCSelection=ADC_EOC_SEQ_CONV 68 ADC5.IPParameters=Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests,EOCSelection,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,NbrOfConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,OffsetNumber-5\#ChannelRegularConversion,ClockPrescaler, CommonPathInternal87 ADC5.IPParameters=Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,DMAContinuousRequests,EOCSelection,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,OffsetNumber-4\#ChannelRegularConversion,NbrOfConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,OffsetNumber-5\#ChannelRegularConversion,ClockPrescaler,OversamplingMode,RightBitShift,Ratio,CommonPathInternal 69 88 ADC5.NbrOfConversion=4 70 89 ADC5.NbrOfConversionFlag=1 … … 73 92 ADC5.OffsetNumber-4\#ChannelRegularConversion=ADC_OFFSET_NONE 74 93 ADC5.OffsetNumber-5\#ChannelRegularConversion=ADC_OFFSET_NONE 94 ADC5.OversamplingMode=ENABLE 75 95 ADC5.Rank-2\#ChannelRegularConversion=1 76 96 ADC5.Rank-3\#ChannelRegularConversion=2 77 97 ADC5.Rank-4\#ChannelRegularConversion=3 78 98 ADC5.Rank-5\#ChannelRegularConversion=4 79 ADC5.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5 80 ADC5.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5 81 ADC5.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5 82 ADC5.SamplingTime-5\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5 99 ADC5.Ratio=ADC_OVERSAMPLING_RATIO_256 100 ADC5.RightBitShift=ADC_RIGHTBITSHIFT_4 101 ADC5.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 102 ADC5.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 103 ADC5.SamplingTime-4\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 104 ADC5.SamplingTime-5\#ChannelRegularConversion=ADC_SAMPLETIME_640CYCLES_5 83 105 CAD.formats= 84 106 CAD.pinconfig= … … 256 278 Mcu.Pin12=PA5 257 279 Mcu.Pin13=PA6 258 Mcu.Pin14=P C4259 Mcu.Pin15=PC 5260 Mcu.Pin16=P B0261 Mcu.Pin17=PB 1262 Mcu.Pin18=PB1 0263 Mcu.Pin19=PB1 1280 Mcu.Pin14=PA7 281 Mcu.Pin15=PC4 282 Mcu.Pin16=PC5 283 Mcu.Pin17=PB0 284 Mcu.Pin18=PB1 285 Mcu.Pin19=PB10 264 286 Mcu.Pin2=PC15-OSC32_OUT 265 Mcu.Pin20=PB1 2266 Mcu.Pin21=PB1 3267 Mcu.Pin22=PB1 4268 Mcu.Pin23=PB1 5269 Mcu.Pin24=P C6270 Mcu.Pin25=PC 7271 Mcu.Pin26=PC 8272 Mcu.Pin27=PC 9273 Mcu.Pin28=P A8274 Mcu.Pin29=PA 9287 Mcu.Pin20=PB11 288 Mcu.Pin21=PB12 289 Mcu.Pin22=PB13 290 Mcu.Pin23=PB14 291 Mcu.Pin24=PB15 292 Mcu.Pin25=PC6 293 Mcu.Pin26=PC7 294 Mcu.Pin27=PC8 295 Mcu.Pin28=PC9 296 Mcu.Pin29=PA8 275 297 Mcu.Pin3=PF0-OSC_IN 276 Mcu.Pin30=PA 10277 Mcu.Pin31=PA1 1278 Mcu.Pin32=PA1 2279 Mcu.Pin33=PA1 3280 Mcu.Pin34=PA1 4281 Mcu.Pin35=PA1 5282 Mcu.Pin36=P C10283 Mcu.Pin37=PC1 1284 Mcu.Pin38=PC1 2285 Mcu.Pin39=P D2298 Mcu.Pin30=PA9 299 Mcu.Pin31=PA10 300 Mcu.Pin32=PA11 301 Mcu.Pin33=PA12 302 Mcu.Pin34=PA13 303 Mcu.Pin35=PA14 304 Mcu.Pin36=PA15 305 Mcu.Pin37=PC10 306 Mcu.Pin38=PC11 307 Mcu.Pin39=PC12 286 308 Mcu.Pin4=PF1-OSC_OUT 287 Mcu.Pin40=P B3288 Mcu.Pin41=PB 4289 Mcu.Pin42=PB 5290 Mcu.Pin43=PB 6291 Mcu.Pin44=PB 7292 Mcu.Pin45=PB 9293 Mcu.Pin46= VP_ADC5_TempSens_Input294 Mcu.Pin47=VP_ADC5_ Vbat_Input295 Mcu.Pin48=VP_ CRC_VS_CRC296 Mcu.Pin49=VP_ SYS_V_VREFBUF309 Mcu.Pin40=PD2 310 Mcu.Pin41=PB3 311 Mcu.Pin42=PB4 312 Mcu.Pin43=PB5 313 Mcu.Pin44=PB6 314 Mcu.Pin45=PB7 315 Mcu.Pin46=PB9 316 Mcu.Pin47=VP_ADC5_TempSens_Input 317 Mcu.Pin48=VP_ADC5_Vbat_Input 318 Mcu.Pin49=VP_CRC_VS_CRC 297 319 Mcu.Pin5=PC0 298 Mcu.Pin50=VP_SYS_VS_Systick 299 Mcu.Pin51=VP_SYS_VS_DBSignals 320 Mcu.Pin50=VP_SYS_V_VREFBUF 321 Mcu.Pin51=VP_SYS_VS_Systick 322 Mcu.Pin52=VP_SYS_VS_DBSignals 300 323 Mcu.Pin6=PC1 301 324 Mcu.Pin7=PA0 302 325 Mcu.Pin8=PA1 303 326 Mcu.Pin9=PA2 304 Mcu.PinsNb=5 2327 Mcu.PinsNb=53 305 328 Mcu.ThirdPartyNb=0 306 329 Mcu.UserConstants= … … 366 389 PA6.GPIOParameters=GPIO_Label 367 390 PA6.GPIO_Label=ADC2_IN3_UBAT+ 368 PA6.Mode=IN3- Single-Ended391 PA6.Mode=IN3-Differential 369 392 PA6.Signal=ADC2_IN3 393 PA7.Mode=IN3-Differential 394 PA7.Signal=ADC2_IN4 370 395 PA8.GPIOParameters=GPIO_Label 371 396 PA8.GPIO_Label=LVP_SENSE … … 502 527 ProjectManager.UnderRoot=false 503 528 ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_ADC3_Init-ADC3-false-HAL-true,7-MX_ADC4_Init-ADC4-false-HAL-true,8-MX_ADC5_Init-ADC5-false-HAL-true,9-MX_FDCAN2_Init-FDCAN2-false-HAL-true,10-MX_FDCAN3_Init-FDCAN3-false-HAL-true,11-MX_I2C3_Init-I2C3-false-HAL-true,12-MX_I2C4_Init-I2C4-false-HAL-true,13-MX_SPI3_Init-SPI3-false-HAL-true,14-MX_USART1_UART_Init-USART1-false-HAL-true,15-MX_USART2_UART_Init-USART2-false-HAL-true,16-MX_USB_PCD_Init-USB-false-HAL-true,17-MX_CRC_Init-CRC-false-HAL-true 504 RCC.ADC12Freq_Value=100000000 505 RCC.ADC345Freq_Value=100000000 529 RCC.ADC12CLockSelection=RCC_ADC12CLKSOURCE_PLL 530 RCC.ADC12Freq_Value=50000000 531 RCC.ADC345CLockSelection=RCC_ADC345CLKSOURCE_PLL 532 RCC.ADC345Freq_Value=50000000 506 533 RCC.AHBFreq_Value=100000000 507 534 RCC.APB1Freq_Value=100000000 … … 526 553 RCC.I2C4Freq_Value=100000000 527 554 RCC.I2SFreq_Value=100000000 528 RCC.IPParameters=ADC12 Freq_Value,ADC345Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CK48CLockSelection,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HRTIM1Freq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLM,PLLN,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSourceVirtual,PWRFreq_Value,QSPIFreq_Value,RNGFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value555 RCC.IPParameters=ADC12CLockSelection,ADC12Freq_Value,ADC345CLockSelection,ADC345Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CK48CLockSelection,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HRTIM1Freq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSI_VALUE,MCO1PinFreq_Value,PLLM,PLLN,PLLP,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PLLSourceVirtual,PWRFreq_Value,QSPIFreq_Value,RNGFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value 529 556 RCC.LPTIM1Freq_Value=100000000 530 557 RCC.LPUART1Freq_Value=100000000 … … 534 561 RCC.PLLM=RCC_PLLM_DIV2 535 562 RCC.PLLN=16 536 RCC.PLLPoutputFreq_Value=100000000 563 RCC.PLLP=RCC_PLLP_DIV4 564 RCC.PLLPoutputFreq_Value=50000000 537 565 RCC.PLLQoutputFreq_Value=100000000 538 566 RCC.PLLRCLKFreq_Value=100000000
Note: See TracChangeset
for help on using the changeset viewer.