我想知道推荐的ADC配置,用于使用SDK 3.0.8.0进行正确和稳定的直流测量值
基于“UM-B-004 DA14580_581外设DRVERS_V1.4.PDF”和“DA14580_DS_V3.1.PDF”的信息,我的配置当前如下所示:
adc_calibrate()
adc_init(gp_adc_se | gp_adc_chop,adc_polarity_unsigned,0 / * no 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_SING的两个样本
2.在ADC_INIT()之后使用20微秒延迟,该延迟与“da14580_ds_v3.1.pdf”中的“表293”中描述的定时特征映射(注意:在ADC_CALIBRATE()中adc_int()之后使用相同的20微秒延迟())))。
1. Is the 20 microseconds delay needed after an adc_init() ?
2. Are/should the necessary delays be controlled via GP_ADC_DELAY_REG and GP_ADC_DELAY2_REG taking in consideration that adc_int() sets GP_ADC_DELAY_EN ?
3. ADC相关寄存器的内部工作有更多信息吗?
设备:
嗨Icujba,如果您不使用衰减,不需要延迟。随着衰减(如果您打算测量电压> 1.2V的情况下),您应该添加一些延迟,以允许内容收取。这应该在4us的范围内。有关ADC的内部工作的更多信息,但这是不可用的宠物。你有一些具体问题吗?
Best regards, RvA
Hi RvA,
感谢你的回复。我将使用“衰减”方案的推荐延迟。
最好的问候,离子
你好,
我真的很简单代码,我没有得到ADC的一致结果(至少4位丢弃4位,所以有效的分辨率是6位,您也在电池中制作),看起来ADC也很相当巨大的偏移错误,校准没有帮助。偏移误差是尤其在较低电压下的主要问题......
我的测试设置真的很简单:External_Power ---> 100K欧姆电阻--->输入引脚(配置为PID_ADC)。代码使用您的示例,因此尚未修改ADC功能(在最后阶段添加了Chop Bit)
if(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 min:0x%x,max:0x%x,diff%u \ r \ n”,u16min,u16max,u16max-u16min);
凭借50MV录制的最大值是正确的,休息太低:
ADC ATT 1X,CALIB在MEAS之前,1000x单次测量
ADC MIN:0xF,MAX:0x3B,Diff 44
I also tried to average 10 samples but the results has still ~17% error at 50mV, 140mV has ~5,5% error and 550mV 1,7% error, minimum error (~1,25%) is reached at level ~700mV after that error looks to stay stable...
Raising the voltage does not help, the difference between min/max samples stays same (and again the highest ones are correct)
ADC ATT 1X,CALIB在MEAS之前,1000x单次测量
ADC MIN:0x150,MAX:0x17A,Diff 42
ADC校准寄存器值在校准后的范围之间变化......
OFFP: 0x204-0x208
OFFN:0x1f8-0x1fa.
ADC功能不是在描述数据sheet, so I would like to get all material what you had for it. There are also some register bits (GP_ADC_CHOP, GP_ADC_IDYN...) which may do something but according to your reference design (battery is quite stable DC-source?) those are not used...
在ADC_INIT()中启用GP_ADC_CHOP,那么结果在MIN / MAX差异方面更好,但现在MAX不是那么关闭实际值......
ADC ATT 1X,CALIB在MEAS之前,1000x单次测量
ADC MIN:0x158,MAX:0x176,Diff 30
我猜GP_ADC_CHOP应肯定使用。可以同时启用GP_ADC_I20U和GP_ADC_IDYN常量VS动态之间的区别是多少?
抱歉,关于最大值是正确的,我看过50mv的差异,44dec作为AD转换结果是50mV,假设1,18V参考。所以没有办法确定SW中的“正确”值......
我猜我想出来了some parts of the problem (large difference between min&max), there was noise from external-power. I added capasitor to measurement end which solved that one. How ever there still looks to be offset error, is this a feature? Error looks to be ~5%-2% being highest in lower end...
使用以下公式转换MV打印* 1180/1023和ADC值现在是小数
72MV(测量)给出(CHACH_ON):ADC MIN:65,MAX:67,Diff 2,AVG:66 MV:76
366MV(测量)给出(CHOP_ON):ADC MIN:314,MAX:316,Diff 2,AVG:314 MV:362
692MV(测量)给出(CHOP_ON):ADC MIN:588,MAX:590,Diff 2,AVG:588 MV:678
835MV(测量)给出(CHOP_ON):ADC MIN:706,MAX:709,Diff 3,AVG:707 MV:815
1066MV(测量)给出(CHACH_ON):ADC MIN:903,MAX:906,Diff 3,AVG:905 MV:1043
我需要以最大速度(约50kHz)来样,例如我续了1000个样本,我不能使用Capasitor,所以,对我的次要偏移是巨大的。
任何人都可以告诉我如何解决它?