您好!
文档 SLAU445I - MSP430FR4xx 和 MSP430FR2xx 系列用户指南、表21-8。 ADCMCTL0寄存器说明中的说明指出、我可以将 ADCSREFx 设置为000b ={VR+= AVCC 和 VR–= AVSS}、此时将使用"AVCC"作为 ADC 基准。
我希望这实际上是 DVCC -在本例中为3.3V、并允许我测量系统 Vcc 电源范围内的任何东西。
在搜索 SLAU445I、SLASEC4D 和 DOCNUM-2.91.13.01中、我找不到 AVCC 的说明-它似乎没有出现在任何引脚上。 您是否能够确认 AVCC 实际是什么?
我还注意到读取内部温度传感器的一个奇怪结果。
在发现必须启用内部 Vref 之前、我读取了几项读数、发现使用 AVCC 作为 ADC ref 时内部温度非常低(几位)。 似乎内部 Vref 必须被启用、即使当它未用于 ADC 时也是如此、这样才能从温度传感器中获得合理的读数。
我按如下方式初始化 ADC:
//使用 ADC 的内置振荡器初始化 ADC
ADC_init (ADC_base、ADC_SAMPLEHOLDSOURCE_SC、ADC_CLOCKSOURCE_SMCLK、ADC_CLOCKDIVIDER_6);
//设置采样计时器以采样保持16个时钟周期
ADC_setupSamplingTimer (ADC_base、ADC_CYCLEHOLD_128_CYCLES、false);
//配置起始输入通道和基准电压
ADC_configureMemory (ADC_base、ADC_INPUT_DVCC、ADC_VREFPOS_AVCC、ADC_VREFNEG_AVSS);
// ADC_configureMemory (ADC_base、ADC_INPUT_DVCC、ADC_VREFPOS_INT、ADC_VREFNEG_AVSS);
ADC_setupSamplingTimer (ADC_base、ADC_CYCLEHOLD_4_CYCLES、ADC_MULTIPLESAMPLESENABLE);
ADC_setDataReadBackFormat (ADC_base、ADC_unsigned_binary);
ADC_setResolution ( ADC_BASE、ADC_Resolution_12bit );
//在每次测量就绪时启用中断。
ADC_enableInterrupt ( ADC_base、ADC_completed_interrupt_flag );
PMM_enableTempSensor ();
// PMM_enableInternalReference ();
// PMM_selectVoltageReference (PMM_REFVSEL_1_5V );
ADC_ENABLE (ADC_BASE);
然后、我触发了一个序列读取、以在中断时将所有通道转储到存储器阵列。
使用 AVCC 作为基准并在禁用内部 Vref 的情况下、我得到:
最右侧是 DVCC 输入(符合预期的最大值)、第二右侧是 DVSS (符合预期的0)、禁用的 Vref、所以很低、然后温度- 0x0027似乎很低。
启用 Vref (未注释上面的 init 中有2行)、我得到:
测得的 Vref 现在为0x073D、假设 ADC ref 为3.3V、给出的电压为1.492v、这符合预期。
测量温度现在为0x03E9或0.805v 或大约40°C、这似乎是合理的。
参考的文档。
SLAU445I -《MSP430FR4xx 和 MSP430FR2xx 系列用户指南》
SLASEC4D - MSP430FR235x、MSP430FR215x 混合信号微控制器
DOCNUM-2.91.13.01 -用于 MSP430FR2xx_4xx 器件的 MSP430 DriverLib
此致
吉姆·怀特豪斯