我想充分利用内部温度传感器。 我使用 LP-MSPM0C1104 LaunchPad 测试了传感器。 我‘了 SDK 中的"ADC12_single_conversion"示例作为基准、将 Vref 更改为内部1.4并选择了"Ch11…"
结果不如我预期的好。 我连续进行了100000次测量、我从1848年到1868年从 ADC 获得了广泛的结果。 请参见下图。 我希望结果读数具有更高的可重复性。 为什么如此广泛的结果? 我可以执行任何操作来获得更可重复的结果吗?
Thx, Goran
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我想充分利用内部温度传感器。 我使用 LP-MSPM0C1104 LaunchPad 测试了传感器。 我‘了 SDK 中的"ADC12_single_conversion"示例作为基准、将 Vref 更改为内部1.4并选择了"Ch11…"
结果不如我预期的好。 我连续进行了100000次测量、我从1848年到1868年从 ADC 获得了广泛的结果。 请参见下图。 我希望结果读数具有更高的可重复性。 为什么如此广泛的结果? 我可以执行任何操作来获得更可重复的结果吗?
Thx, Goran
尊敬的 Goran:
我怀疑、CPU 运行时似乎存在噪音。
在和示例中、我将设置更改为使用电源策略 STOP0、并使用从 LFOSC 运行的计时器每20ms 生成一个事件(启动 ADC 采样/转换)。 不要使用计时器中断、因为这会强制唤醒 CPU。 ADC 完成时、它会生成一个中断、以唤醒 CPU 来读取数据、将数据从 UART 发送出去、然后 CPU 返回到 STOP0。
void send(uint8_t* buffer, uint8_t size)
{
uint8_t i;
for (i = 0; i < size; i++)
{
DL_UART_Main_transmitDataBlocking(UART_0_INST, buffer[i]);
}
}
int main(void)
{
SYSCFG_DL_init();
DL_SYSCTL_setPowerPolicyRUN0SLEEP0();
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
gCheckADC = false;
calibration = (uint16_t)0x41c4003c;
while (1) {
DL_ADC12_enableConversions(ADC12_0_INST);
__WFI();
if(gCheckADC == true)
{
gAdcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
sample++;
len = sprintf((char*)asciiBuffer, "%d, %d\r\n", sample, gAdcResult);
send(asciiBuffer,len);
gCheckADC = false;
}
}
}
void ADC12_0_INST_IRQHandler(void)
{
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
gCheckADC = true;
break;
default:
break;
}
}