Microchip
直播中

h1654155275.5814

7年用户 216经验值
私信 关注
[问答]

ADC值不正确

嗨,我正在使用一个DSIC33 EP32 GS202数字信号控制器,我试图描述ADC。我已经编写了代码来用数据填充两个缓冲区,然后如果两个缓冲区都满了,并且缓冲区中的值(或者至少有一个缓冲区)高于用户定义的阈值,则使用UART接口将两个缓冲区写入PC。我使用早期中断将ADC值读入缓冲区。我的芯片是在MICROStiCK II开发板上编程/操作的。我使用VREF=AVDD(我相信这个MCU的唯一选择)。我正在采样核心1,使用AN1/PIN 3作为ADC输入。我以8位模式操作ADC,以FoSc/2作为时钟源。我用普通的软件触发器触发转换。我一直在玩ADCORE1L寄存器中的SAMC位以调整采样时间。我遇到的问题是我从ADC读取的值不准确。我可以读0 V和VDD相当好(分别为8和248),但任何其他电压似乎是小康。我得到了.31V和.56V的ADC值184。我已经通过测量ADC输入引脚上的输入电压验证了我施加的直流电压是准确的。我也试过用APLL作为ADC时钟源来大大减少转换时间,同时把SAMC位设置为)0X0FF来尝试增加采样时间。我附上了我的主文件和adc1文件。我肯定遗漏了一些东西。我就是想不出来。任何建议将不胜感激!谢谢!
MX.TXT(7.65 KB)-下载115次

回帖(8)

成贯征

2020-4-9 13:17:00
看来,8位ADC并没有存储你所期望的数据。您不能只复制ADCBUF1。在8位ADC上,16位ADCBUF1看起来像:0 0 0 d07 d06 d05 d04 d03 d02 d01 d00 1 0 0 0,因此,如果您的ADC读取0V,ADCBUF1看起来像:0 0 0 0 0 0 0 0 0 0 0 0 0,并且在复制到8位寄存器:0 0 0 0 0 0 0 0 0 1 0之后,对于AVdd,ADCBUF1看起来像小数8。比如:0 0 0 1 1 1 1 1 1 1 1 0 0,然后复制到8位寄存器:1 1 1 0 0,即小数点248。所以,位移位应该有帮助。你检查过DS70005213,第47页吗?
举报

杨叶

2020-4-9 13:33:59
嗨,有很多文档fordsPIC33EP32GS202。你需要使用数据表和专用的家庭参考手册到每个外围设备。对于高速ADC,请阅读文档dsPIC33/PIC24 FRM、12位高速、多SARS A/D转换器(ADC)。模数转换器。特别地,这一个对于initializee来说非常强大并且非常棘手,因为这是针对所有16位设备的通用手册,所以可能与数据表有一些不同。
举报

李艳婷

2020-4-9 13:43:52
谢谢你们的回复!我把建议的位移了一下,确定了DC的精度问题。我想看看我能多快地获得ADC的样本。在8位模式下,我的代码似乎只在大约500KSPS下采样(我为已知频率的符号波在1个周期内计数了数据点的数量),但我希望采样速率在1-2MHz范围内(数据表表明ADC在12位模式下可以采样到3.25KSPS)。我使用的是普通软件触发器和一个早期中断,在数据准备好之前触发4个时钟周期。我确实有一些其他代码必须在中断中执行(主要是如果语句正确地存储我的数据)。但是,我的系统时钟速度仍然是ADC时钟速度的两倍。我可以用不同的方式配置ADC来运行得更快吗?使用定时器触发转换?还是使用并行运行的2个内核来处理数据?我很感激任何人提供的建议。谢谢!
举报

李艳婷

2020-4-9 13:56:31
我意识到我忘了提及:我把ADC时钟设置为60MHz,我相信它非常接近我所使用的MCU的最大值(我认为最大值是70MHz)。我已经尝试用Fosc设置高达120 MHz的代码,但是它没有提高采样率。谢谢!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分