工具与软件:
您好!
我使用的是 内置 ADC (修订版 G)。 在我的应用中、我将对一个非常慢的传感器信号进行采样、该信号会随着温度的升高而降低(温度范围:22至300 °C)。 在室温下对信号进行采样时、它会产生非常嘈杂的输出、大约有250个噪声计数。
我不确定在寄存器级别的 ADC 配置是否有问题。 我还仔细检查了硬件 PCB 设计、没发现任何问题。
提前感谢您的帮助。
下图显示了噪声频带:
ADC 计数范围从最小值2450到最大值2600
y 轴:ADC 计数
X 轴:t in s (总计100ms、因为显示1000个样本)

void InitAdc(void)
{
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; // Power up bandgap/reference circuitry
DELAY_US(ADC_usDELAY); // Delay before powering up rest of ADC
AdcRegs.ADCTRL3.bit.ADCPWDN = 1; // Power up rest of ADC
DELAY_US(ADC_usDELAY2); // Delay after powering up ADC
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;
AdcRegs.ADCTRL1.bit.CPS = 0;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0;
//ADCINA1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;
AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ = 1;
// AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
// ADC clock prescaler ADCCLKPS = 0010 -> FCLK = 18.75
AdcRegs.ADCTRL3.bit.ADCCLKPS = 2;
EvbRegs.GPTCONB.bit.T4STAT = 1; //Counting upward
EvbRegs.GPTCONB.bit.TCMPOE = 0; //high-impedance state
EvbRegs.GPTCONB.bit.T4PIN = 0; //Forced low
EvbRegs.GPTCONB.bit.T4TOADC = 2; //Setting of period interrupt flag starts ADC
//T4CON Timer 4 Control Register
EvbRegs.T4CON.bit.FREE = 0; //Stop on emulation suspend
EvbRegs.T4CON.bit.SOFT = 0; //Stop on emulation suspend
EvbRegs.T4CON.bit.TMODE = 2; //Continous-Up Count Mode
EvbRegs.T4CON.bit.TPS = 7; //Input clock prescaler
EvbRegs.T4CON.bit.T4SWT3 = 0; //0: use own tenable bit; 1: use tenable to T4CON
EvbRegs.T4CON.bit.TENABLE = 1; //0: disable timer op; 1: enable timer op
EvbRegs.T4CON.bit.TCLKS10 = 0; //clock source: internal
EvbRegs.T4CON.bit.TCLD10 = 3; //reserved
EvbRegs.T4CON.bit.TECMPR = 0; //0: disable timer compare; 1: enable timer compare
EvbRegs.T4CON.bit.SET3PR = 0; //0: use own period; 1: use T4PR
EvbRegs.T4PR = 58594; // Sampling rate = 10 Hz
}
//Interrupt Routine
interrupt void ADCINT_ISR(void)
{
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
EDIS;
rawValue = (AdcRegs.ADCRESULT0) >> 4;
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
...
}