Gast
#4658032
Hallo, ich hab hier ein STM32 Nucleo L476 vor mir liegen und versuche micht gerade am auslesen des internen Temperatursensors. Ich benutze den HAL und CubeMX von ST und hab mir den Code für den ADC generieren lassen: hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV8; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.OversamplingMode = DISABLE; hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_64; hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_6; hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; hadc1.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /**Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_12CYCLES_5; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } Meine Messung der Temperatur läuft so ab: while(HAL_ADC_PollForConversion(&hadc1,10) != HAL_OK); temp = (int)HAL_ADC_GetValue(&hadc1); Laut ST Reference Manual lässt sich die Temperatur folgendermaßen berechnen: T (in °C) = ((110°C - 30°C)/(TS_CAL2 - TS_CAL1))*(TS_DATA - TS_CAL1)+30°C Die Werte TS_CALx stellen Kalibirierungswerte von ST für 30°C und 110°C dar. Sie liegen bei 1040 und 1321. Ich messe jedoch immer Werte um 950. Eingesetzt ergibt sich dann eine Temperatur knapp über dem Nullpunkt. Glaubt mir, bei mir ist es wärmer. Vielleicht sieht jemand einen Fehler in meinem Code. Habe jetzt schon viele Kombinationen aus ADC clock prescaler und sampling time durch, daran sollte es nicht liegen... Danke und Gruß