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.
我的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; }
我是遇到软件问题还是硬件问题?
Steve,
如何将ADC输入连接到AGND? 是直接短路还是通过电阻器拉动?
所有五个ADC输入是否都偏向AGND?
汤米
Tommy,
当我将序列发生器更改为仅采样一个通道时,结果会更好。
我发现我的问题,这是通过扁平电缆连接的附加主板的硬件问题。
当我断开扁平电缆时,一切都正常。
目前,我对输入进行了4次抽样。 这比50 % 减少了更多的错误。
现在我有时间去寻找真正的问题。
Steve