工具与软件:
您好!
我使用的是 内置 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; ... }