我的ADC转换有问题。
ADC设置为具有5个转换的单序列发生器。
每个62.5 US ADC都开始新的转换。
使用内部参考,ADCREFP,ADCREFM连接到陶瓷罩10uF。
输入现在已连接到AGND。
采样值约为55。
(这似乎是偏移的,但如果我减少AdcRegs.ADCTRL3.bit.ADCCLKPS,该值将增加!!!)
当我检查现在最小值最大值时,我发现许多采样值为0,许多采样值为110,这似乎是偏移的两倍。
此日志文件仅显示采样为0或大于100的值。
启动系统日志:27.02 ................................................................2017 16:09:19
时间戳采样值 1001s:0x0000 Dez:00000 1001s:0x0000 Dez:0万 1117s:0x0000 Dez:0万 1422s:0x0070 Dez:0.0112万 1422s:0x0070 Dez:00112 1450s:0x0000 Dez:00000 1450s:0x0000 Dez:0万 2144s:0x0.3万Dez:0x003,000350000:0:0.3万: 035万0 0x0072 Dez:0.0114万 3550s : 0x0072 Dez:0.0114万 3600s : 0x0000 Dez:0万 4258s : 0x0000 Dez:0万 4258s : 0x0000 Dez:00000 4632s : 0x0000 Dez:0万 4710s : 0x0000 Dez:0万 490000: 0x0000: 0x0000: 0x006B Dez:00107 4927s : 0x0000 Dez:0万 4927s : 0x0000 Dez:0万 5245s : 0x0000 Dez:0万 5246s : 0x0000 Dez:0万 5697s : 0x0000 Dez:00000 5697s : 0x0000 Dez:0万 50800000: 0x0000: 0x0000 Dez: 0x0万 0x0000 Dez:0万 6198s : 0x0069 Dez:0.0105万 6198s : 0x0069 Dez:0.0105万 6297s : 0x0000 Dez:0万 63668s : 0x0000 Dez:00000 6369s : 0x0000 Dez:0万 6656s : 0x0000 Dez:0万 :0x0000
代码:
void InitAdc (void)
{
// Init ADC
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; //通电bandgap/参考电路
Delay_US (ADC_USDELAY); //打开ADC
AdcRegs.ADCTRL3.bit.ADCPWDN的其余部分之前的延迟= 1; //打开ADC的其余
部分DELAY _US (ADC_USDELAY2); //打开ADC电源后的延迟
//结束初始ADC
//特定ADC设置:
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xF;// ADC模块期间的S/H宽度 = 16 ADC时钟
AdcRegs.ADCTRL1.bit.cps=0;
AdcRegs.ADCTRL3.bit.ADCCLKPS = 15;// ADC模块时钟= HSPCLK/2*ADC_CKPS = 60MHz/(2*2)= 15MHz
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;
AdcRegs.ADCTRL1.bit.con_run = 0; //设置连续运行
AdcRegs.ADCMAXCONV.Bit.MAX_CONV1=4;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 =0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1;
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 4;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 6;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 7;
//通过EVA
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1启动SEQ1 =1;
}
作废GetADC(void)
{
同时(AdcRegs.ADCST.bit.INT_SEQ1=0)
{
DELA_US(1);
}//等待中断
I1=AdcRegs.ADCRULT2=0>ADES4>ADCULES4;ADULT2=ADC=0>ADES0; ADULT2=0>ADESA0; ADCULT2=0>ADCULES4; ADU1=ADC=0;
ADC0>ADES4; ADUID=ADU1=0>ADESA0; ADC0>ADC0; ADULT2=0>ADESA0; ADULT2=
AdcRegs.ADCST.Bit.INT_SEQ1_CLR = 1;
}
我是遇到软件问题还是硬件问题?