您好!
我们通过查看示例启用了内部温度、但我们没有获得预期的读数。
为了启用此 TS、我们使用了2.5V 基准的 TLV 校准点 ADC 初始部分附后供参考。
void AdcInit(void){ ADC12_B_initParam FsiAdc; ADC12_B_configureMemoryParam CMOLG; ADC12_B_configureMemoryParam VDO; ADC12_B_configureMemoryParam TempSensor; DMA_initParam AdcDMA; FsiAdc.clockSourceDivider = ADC12_B_CLOCKDIVIDER_1; FsiAdc.clockSourcePredivider = ADC12_B_CLOCKPREDIVIDER__1; FsiAdc.clockSourceSelect = ADC12_B_CLOCKSOURCE_ADC12OSC; FsiAdc.internalChannelMap = ADC12_B_TEMPSENSEMAP;//ADC12_B_NOINTCH; FsiAdc.sampleHoldSignalSourceSelect = ADC12_B_SAMPLEHOLDSOURCE_SC; ADC12_B_init(ADC12_B_BASE,&FsiAdc); ADC12_B_enable(ADC12_B_BASE); ADC12_B_setupSamplingTimer(ADC12_B_BASE, ADC12_B_CYCLEHOLD_64_CYCLES, ADC12_B_CYCLEHOLD_4_CYCLES, ADC12_B_MULTIPLESAMPLESENABLE); ADC12_B_setResolution(ADC12_B_BASE, ADC12_B_RESOLUTION_12BIT); CMOLG.differentialModeSelect = ADC12_B_DIFFERENTIAL_MODE_DISABLE; CMOLG.endOfSequence = ADC12_B_NOTENDOFSEQUENCE; CMOLG.inputSourceSelect = ADC12_B_INPUT_A13; CMOLG.memoryBufferControlIndex = ADC12_B_MEMORY_0; CMOLG.refVoltageSourceSelect = ADC12_B_VREFPOS_EXTPOS_VREFNEG_EXTNEG; CMOLG.windowComparatorSelect = ADC12_B_WINDOW_COMPARATOR_DISABLE; ADC12_B_configureMemory(ADC12_B_BASE, &CMOLG); VDO.differentialModeSelect = ADC12_B_DIFFERENTIAL_MODE_DISABLE; VDO.endOfSequence = ADC12_B_NOTENDOFSEQUENCE;//ADC12_B_ENDOFSEQUENCE; VDO.inputSourceSelect = ADC12_B_INPUT_A14; VDO.memoryBufferControlIndex = ADC12_B_MEMORY_1; VDO.refVoltageSourceSelect = ADC12_B_VREFPOS_EXTPOS_VREFNEG_EXTNEG; VDO.windowComparatorSelect = ADC12_B_WINDOW_COMPARATOR_DISABLE; ADC12_B_configureMemory(ADC12_B_BASE, &VDO); TempSensor.differentialModeSelect = ADC12_B_DIFFERENTIAL_MODE_DISABLE; TempSensor.endOfSequence = ADC12_B_ENDOFSEQUENCE; TempSensor.inputSourceSelect = ADC12_B_INPUT_TCMAP; TempSensor.memoryBufferControlIndex = ADC12_B_MEMORY_2; TempSensor.refVoltageSourceSelect = ADC12_B_VREFPOS_EXTPOS_VREFNEG_EXTNEG; TempSensor.windowComparatorSelect = ADC12_B_WINDOW_COMPARATOR_DISABLE; ADC12_B_configureMemory(ADC12_B_BASE, &TempSensor); // while(REFCTL0 & REFGENBUSY); // If ref generator busy, WAIT // REFCTL0 |= REFVSEL_2 + REFON; // Enable i nternal 1.2V reference // while(!(REFCTL0 & REFGENRDY)); // while(Ref_A_isRefGenBusy (REF_A_BASE)); Ref_A_enableReferenceVoltage (REF_A_BASE); // Ref_A_setReferenceVoltage (REF_A_BASE,REFVSEL_2); Ref_A_enableTempSensor(REF_A_BASE); // Ref_A_disableTempSensor(REF_A_BASE); // Ref_A_disableReferenceVoltage(REF_A_BASE); AdcDMA.channelSelect = DMA_CHANNEL_2; AdcDMA.transferModeSelect = DMA_TRANSFER_REPEATED_BLOCK; AdcDMA.transferSize = 3; AdcDMA.transferUnitSelect = DMA_SIZE_SRCWORD_DSTWORD; AdcDMA.triggerSourceSelect = DMA_TRIGGERSOURCE_26; AdcDMA.triggerTypeSelect = DMA_TRIGGER_RISINGEDGE; DMA_init(&AdcDMA); DMA_setSrcAddress(DMA_CHANNEL_2, (uint32_t) &ADC12MEM0, DMA_DIRECTION_INCREMENT); DMA_setDstAddress(DMA_CHANNEL_2, (uint32_t) AdcRawCounts, DMA_DIRECTION_INCREMENT); DMA_disableTransferDuringReadModifyWrite(); DMA_enableRoundRobinPriority(); DMA_enableInterrupt(DMA_CHANNEL_2); DMA_enableTransfers(DMA_CHANNEL_2); DMA_startTransfer(DMA_CHANNEL_2); }我们的目标是在-10至-40°C 的温度范围内获得正确的读数
在5个器件上的室中读取的读数。
温度 | 设备1 | 设备2 | 设备3 | 设备4 | 设备5 |
-10 | 0.95 | -4.1. | -3.97 | -2.36. | -3. |
-20 | -9.53 | -15.3 | 15.37 | -13.06 | -13. |
-25. | -14.29 | -20.28 | -20.7 | -18.04 | -18. |
-30 | -18.58. | -25. | -25. | -22.52 | -23. |
-35. | -22.62 | -29.24 | -29.82 | -26.75 | -27. |
-40 | -26.2 | 33.47. | 33.88 | -30.98 | -31. |