您好!
我们通过查看示例启用了内部温度、但我们没有获得预期的读数。
为了启用此 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. |