想知道的建议ADC配置正确,稳定的直流测量与SDK 3.0.8.0
根据我目前的配置看起来像这样在“UM-B-004 DA14580_581外围Drivers_v1.4.pdf”提供的信息和“DA14580_DS_v3.1.pdf”:
adc_calibrate ()
adc_init(GP_ADC_SE | GP_ADC_CHOP,ADC_POLARITY_UNSIGNED,0 / *没有GP_ADC_ATTN3X * /)
adc_enable_channel(ADC_CHANNEL_P00)
adc_get_sample()
adc_disable()
纵观adc_get_vbat_sample()它的接缝:
1. GP_ADC_CHOP使用不是优选的,虽然在“DA14580_DS_v3.1.pdf”强烈推荐,和具有相反GP_ADC_SIGN代替两个样本被用于
2.一个20微秒的延迟是adc_init后使用权(),其与特性“表293”,从“DA14580_DS_v3.1.pdf”(注描述的定时映射:adc_int后相同的20微秒的延迟被使用()在adc_calibrate())。
1.adc_init()之后需要20微秒的延迟吗?
2.考虑到adc_int()设置了GP_ADC_DELAY_EN,是否/应该通过GP_ADC_DELAY_REG和GP_ADC_DELAY2_REG来控制必要的延迟?
3.是否有更多可用信息有关ADC相关寄存器的内部运作?
设备:
嗨Icujba,如果你不使用衰减不需要延迟。随着衰减(在需要的情况下,你打算测量电压> 1.2V),你应该添加一些延迟,以允许收取的内部帽。这应该是更4US的范围。有关于ADC的内部工作然而,这不是可用pubicly更多信息。你有没有一些具体的问题吗?
最好的问候,RvA
嗨RvA,
感谢你的回复。我将使用推荐的延迟为“与衰减”的场景。
最好的问候,约努茨
你好,
我有非常简单的代码,我没有得到来自ADC一致的结果(至少低4位应丢弃,因此有效分辨率为6位,你必须作出这样也battery.c)和看起来像ADC有也相当巨大的偏移误差和校准并没有帮助。偏移误差是主要的问题,特别是在较低的电压...
我的测试设置是非常简单的:external_power ---> 100K欧姆的电阻--->输入引脚(配置为PID_ADC)。代码使用你的例子为的就是让ADC的功能已不被修改(除了在最后阶段加入CHOP位)
如果(u16ADC> u16Max){u16Max = u16ADC;}
UINT16 u16ADC = 0U;
uint16 i = 1000U;
UINT16 u16Min = 0xFFFFU;
UINT16 u16Max = 0U;
DBG_PRINT("\n\rADC att 1x, calib before meas, 1000x single meas\n\r");
adc_enable_channel(ADC_CHANNEL_VDD_REF);
adc_calibrate ();
adc_init(GP_ADC_SE,0,0);//单端模式下,1V18
adc_enable_channel(ADC_MEAS_TEMP);
当我 - )
{
u16ADC = adc_get_sample();
如果(u16ADC
}
adc_disable();
DBG_PRINT( “ADC分钟:0X%的x,最大:0X%的x,DIFF%U \ r \ n” 个,u16Min,u16Max,u16Max-u16Min);
随着50mV的记录的最大值是正确的,其余的都是太低:
ADC ATT 1X,MEAS前CALIB,1000个单MEAS
ADC分钟:0xf,最大:0x3b,DIFF 44
我也尝试了平均10个样本,但结果仍然有~17%的误差在50mV, 140mV有~ 5.5%的误差和550mV 1,7%的误差,最小误差(~1,25%)达到水平~700mV后,误差看起来保持稳定…
提高电压没有帮助,最小/最大样本之间的差异保持不变(并且最高的是正确的)
ADC ATT 1X,MEAS前CALIB,1000个单MEAS
ADC分钟:量0x150,最大:0x17a,DIFF 42
校准后,该范围之间的ADC校准寄存器值变化...
OFFP: 0 x204-0x208
OFFN:0x1f8-0x1FA
ADC的功能没有在数据表中描述,所以我想得到所有的材料,你有它。还有一些寄存器位(GP_ADC_CHOP, GP_ADC_IDYN…)可能会做一些事情,但根据你的参考设计(电池是相当稳定的直流源?)
启用在adc_init的GP_ADC_CHOP(),那么结果是更好的最小/最大差异方面,但现在最大也不是那么接近实际值...
ADC ATT 1X,MEAS前CALIB,1000个单MEAS
ADC分钟:0x158,最大:0x176,DIFF 30
我想这GP_ADC_CHOP应明确使用。灿GP_ADC_I20U&GP_ADC_IDYN同时启用就是不断VS动态之间的区别?
很抱歉说最大值是正确的,我看了DIFF在为50mV的44dec作为AD转换结果为50mV假设1,18V参考。因此,有没有办法来确定SW“正确”的价值...
我猜我发现了问题的一些部分(最小和最大的差别很大),有外部电源的噪音。我在测量端增加了电容,解决了这个问题。无论如何仍然有偏移误差,这是一个特性吗?错误看起来是~5%-2%在低端是最高的…
毫伏打印是使用现在下面的公式AVG *一千○二十三分之一千一百八和ADC值是小数转换
72mV(测量值),得到(CHOP_ON):ADC分钟:65,最大:67,DIFF 2,AVG:66毫伏:76
366mV(测量值),得到(CHOP_ON):ADC分钟:314,最大:316,DIFF 2,AVG:314毫伏:362
692mV(测量值),得到(CHOP_ON):ADC分钟:588,最大:590,DIFF 2,AVG:588毫伏:678
835mV(测量值),得到(CHOP_ON):ADC分钟:706,最大:709,DIFF 3,AVG:707毫伏:815
1066mV(测量值),得到(CHOP_ON):ADC分钟:903,最大:906,DIFF 3,AVG:905毫伏:1043
我需要以最大速度(约50KHz的)样品,例如我得到1000的样品continuesly,我上无法使用capasitor,因此,偏移smaple对我是巨大的。
谁能告诉我该怎么解决呢?