[技术问答] N76E003 ADC连续采样不准问题

[复制链接]
2400|33
 楼主 | 2018-4-17 09:21 | 显示全部楼层 |阅读模式
本帖最后由 kamp2000 于 2018-4-17 09:24 编辑

测试条件:
1,线性电源12.6V,分压电阻20K:2K
2,AMS1117降压到5V供电 N76E003 ;
3,ADC_BandGap读出来是比较稳定的。
4,ADC单通道在分压电阻处连续采样25秒求线性电源输入值

串口显示连续采样结果: (从上到下是连续的)
0936 --7次
0933--17次
0931--236次
0928--331次
0925--41次
0920--300次
0914--直到结束

用五位半台表高速挡测试,分压电阻处的电压是比较稳定的,但采集结果成下降趋势,但在区间又比较稳定,只有0931和0928比较符合结果,且中间没有跳变。
CKDIV = 0x02; ADC采样时转到四分频下又测试了,结果差不多,收尾值都是最小值0914,误差较大。

请教下各位朋友,看问题可能是哪些方面?
| 2018-4-17 09:25 | 显示全部楼层
给个我做的函数你,前面先转换空转换4次才准,不知道什么原因,我也是想到以前用HOLTEK 单片机有这个问题就这样的
uint16_t adc_convert ( uint8_t ch)  //   analog channel ,  0--8, 8 channel is bandgap  
{
        uint16_t adc_temp;
        uint16_t adc_sum;
        uint8_t i;
       
        adc_sum = 0;
        ADCCON0 &= 0xF0;
        ADCCON0 |= ch;
       
        for(i = 0; i < 4; i++)
        {
                ADCF = 0;       
                ADCS = 1;
                while(ADCF == 0);
        }
       
//---------------------------------------
   for(i = 0;  i < 8;i++)
         {
                        adc_temp = 0;

                        ADCS = 1;
                        while(ADCF == 0);
               
                        adc_temp = ADCRH;
                        adc_temp <<= 4;
                        adc_temp |= ( ADCRL & 0x0F);
                       
                  adc_sum += adc_temp;
         }
   adc_sum >>= 3;   //    /8
        return adc_sum;
}
| 2018-4-17 09:48 | 显示全部楼层
时钟降到8M或以下ADC转换正常。
 楼主 | 2018-4-17 10:16 | 显示全部楼层
wm20031015 发表于 2018-4-17 09:48
时钟降到8M或以下ADC转换正常。

已经4分频了,问题一样。如果短期几次采样,还没有问题,如果持续采样,就会出问题了
 楼主 | 2018-4-17 10:17 | 显示全部楼层
pmw_56 发表于 2018-4-17 09:25
给个我做的函数你,前面先转换空转换4次才准,不知道什么原因,我也是想到以前用HOLTEK 单片机有这个问题就 ...

已经按手册丢前三笔了,问题是连续采样,数值逐渐下降
| 2018-4-17 10:22 | 显示全部楼层
本帖最后由 pmw_56 于 2018-4-17 10:23 编辑
kamp2000 发表于 2018-4-17 10:17
已经按手册丢前三笔了,问题是连续采样,数值逐渐下降

为什么我持续采用带隙很稳定的 ? printf 打印速率快跟慢数据有些变化,但是稳定的
| 2018-4-17 11:43 | 显示全部楼层
pmw_56 发表于 2018-4-17 10:22
为什么我持续采用带隙很稳定的 ? printf 打印速率快跟慢数据有些变化,但是稳定的 ...

使用带隙的时候切换过通道了,并非所谓的连续采样吧
 楼主 | 2018-4-17 12:01 | 显示全部楼层
本帖最后由 kamp2000 于 2018-4-17 12:07 编辑
离散的星 发表于 2018-4-17 11:43
使用带隙的时候切换过通道了,并非所谓的连续采样吧

开机求一次VDD(值正常,在误差范围内),然后切换到通道4开始连续采样25秒

        READ_BANDGAP();
        Enable_ADC_BandGap;        
       Get_VDD_Voltage();    // 求VDD电压
#ifdef UART
         printf ("VDD_Voltage = %1.3f\r\n",VDD_Voltage);
#endif         
         delay1ms(100);

   Enable_ADC_AIN4;
   CKDIV = 0x02;
         count = 0;
         ADC_Bypass();
        ADC_Bypass();  //丢弃
     do{
                clr_ADCF;
                set_ADCS;                                                                        // ADC start trig signal
                while(ADCF == 0);
                temp_high = (ADCRH<<4);
                temp_value  = temp_high + ADCRL;
#ifdef UART                        
                 printf ("%04d\r\n",temp_value);   //这里串口助手波特率降4倍,9600接收
#endif                                         
          }while(count<2500);
CKDIV = 0x00;

如果不用串口实时输出,可以在do while里面求得最大最小值,相差较大,按12bit 4096分格子,有30多个格子的差异,因为是分压电阻值,换算成输入电压值,有0.4-0.5V的电压差异,明显有问题
| 2018-4-17 17:06 | 显示全部楼层
我用定时器中断采样,没问题。
| 2018-4-17 19:17 | 显示全部楼层
不要用电阻分压就去测,想准再加个跟随器。
| 2018-4-17 19:24 | 显示全部楼层
没遇到,挺准的。
 楼主 | 2018-4-19 00:37 | 显示全部楼层
dongnanxibei 发表于 2018-4-17 19:17
不要用电阻分压就去测,想准再加个跟随器。

这是SAR型的ADC,输入阻抗应该不小吧,还需要一级跟随吗?
| 2018-4-21 18:16 | 显示全部楼层
pmw_56 发表于 2018-4-17 09:25
给个我做的函数你,前面先转换空转换4次才准,不知道什么原因,我也是想到以前用HOLTEK 单片机有这个问题就 ...

没有看到关闭数字输入缓冲区,除了测带隙不准,其它通道一次测准。
| 2018-4-22 14:35 | 显示全部楼层
红果电子 发表于 2018-4-21 18:16
没有看到关闭数字输入缓冲区,除了测带隙不准,其它通道一次测准。

有个什么AINDIDS什么寄存器是关闭数字输入的寄存器你看下是不是,我忘了
 楼主 | 2018-4-27 14:21 | 显示全部楼层
Enable_ADC_AIN4;  是根据官方那个库里面带的宏  ADCCON0&=0xF0;ADCCON0|=0x04;P05_Input_Mode;AINDIDS=0x00;AINDIDS|=SET_BIT4;ADCCON1|=SET_BIT0       
| 2018-4-27 14:39 | 显示全部楼层
从你的结果来看,明显是电阻的温飘引起的,20K的电阻随着开机时间一直在变大,你连续长时间开机估计数值就会稳定不变了,或者改用低温飘电阻试一下,我在使用N76E003的ADC,除了Vref不可以改外,没发现什么缺点。
| 2018-4-27 14:47 | 显示全部楼层
还有一点,因为76E003的VREF是VDD,因此,你的LD1117稳压本身的温飘也会产生这样的结果。除非你校正了VDD。
| 2018-12-28 14:57 | 显示全部楼层
楼主,ADC现在怎么样了?希望能解答!
我的问题也卡在ADC 这里。我采集所有通道。方法:通道1采集丢弃——100ms后,采集AIN1丢弃,——再100ms采集AIN1,保存——100ms后,采集AIN2丢弃,——100ms后采集AIN2丢弃——再100ms后采集AIN2 保存;
(每次采样间隔100ms,前两次丢弃,包括带隙电压采集。方便实时计算外部电压)。
问题:复位后准确,过段时间不准;从新复位又正常。。。
| 2018-12-28 14:57 | 显示全部楼层
楼主,ADC现在怎么样了?希望能解答!
我的问题也卡在ADC 这里。我采集所有通道。方法:通道1采集丢弃——100ms后,采集AIN1丢弃,——再100ms采集AIN1,保存——100ms后,采集AIN2丢弃,——100ms后采集AIN2丢弃——再100ms后采集AIN2 保存;
(每次采样间隔100ms,前两次丢弃,包括带隙电压采集。方便实时计算外部电压)。
问题:复位后准确,过段时间不准;从新复位又正常。。。
| 2018-12-28 14:57 | 显示全部楼层
楼主,ADC现在怎么样了?希望能解答!
我的问题也卡在ADC 这里。我采集所有通道。方法:通道1采集丢弃——100ms后,采集AIN1丢弃,——再100ms采集AIN1,保存——100ms后,采集AIN2丢弃,——100ms后采集AIN2丢弃——再100ms后采集AIN2 保存;
(每次采样间隔100ms,前两次丢弃,包括带隙电压采集。方便实时计算外部电压)。
问题:复位后准确,过段时间不准;从新复位又正常。。。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表