TI中文支持网
TI专业的中文技术问题咨询交流网站

DSP28335 ADC采样

EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // 150 / (2*3) = 0x3
EDIS;

InitAdc();

AdcRegs.ADCTRL1.bit.ACQ_PS = 0xf;

AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x1;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 0 Non-Cascaded Mode
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1;
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //选择管脚ADCINA0
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; //ADCINA1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; //ADCINB0
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; //ADCINB1
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4;
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x79;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 7; // Set up ADC to perform 4 conversions for every SOC

//AdcRegs.ADCTRL1.bit.CPS = 1;
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; //连续运行模式

以上是我的ADC配置,但是实际操作过程中,输入DSP的ADC管脚电压时对的,然而除了0V和3V是准确的,中间的任何值转换之后与实际电压值相差0.19V到0.22V左右,请问这是为什么,我是使用DMA搬运数据

Susan Yang:

关于28335的ADC DMA您可以参考

software-dl.ti.com/…/C28x_Delfino_MDW_8-1.pdf

的 Lab 9: Servicing the ADC with DMA

您可以在下面的链接下载代码

training.ti.com/c2000-f2833x-microcontroller-workshop

单从您现在给出的代码,我没有发现问题。

Susan Yang:

请问您在不使用DMA情况下ADC测试结果是正常的吗?您现在实现的主要功能是什么?

网络上也有一些相关分享,您也可以参考一下

blog.csdn.net/…/88622324

user5197967:

回复 Susan Yang:

不使用DMA的情况下和使用DMA的情况是一样的
主要功能就是采集AD值,换算回电压值上报

Susan Yang:

回复 user5197967:

那建议您直接使用TI的ADC测试例程(暂时先不使用DMA),以排除硬件问题

C:\ti\c2000\C2000Ware_3_03_00_00\device_support\f2833x\examples

user5197967:

回复 user5197967:

测试过了,和我的代码效果是一样的

Susan Yang:

回复 user5197967:

关于ADC的测量误差,您可以看一下

e2echina.ti.com/…/137976

您这个误差有点大了。请问您使用的参考电压是什么?

E2E上也有类似的讨论,请看一下

e2e.ti.com/…/418301

以及文档 www.ti.com/…/spraas1d.pdf

user5197967:

回复 Susan Yang:

我使用的是内部基准,然后我大概以0.1V的间隔测试了一下,除了0-0.22V之外,都差022V左右

赞(0)
未经允许不得转载:TI中文支持网 » DSP28335 ADC采样
分享到: 更多 (0)