This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2540的传输速度和ADC

Other Parts Discussed in Thread: CC2540, TL431

大家好,我有两个问题想咨询一下。

1。.我用CC2540与手机传输数据,只能达到么1.8KB/S,再快就会丢包。

数据手册上讲一次连接可以传输4个包,可是我测试的时候一次连接只能传1个包,传两个包都会丢数据。这是为什么呢?

2。CC2540的ADC输出数值有偏移(我用的是14位精度),虽然转换曲线是直线,但是直线的斜率变了

我现在用的办法是找一个较大的值和一个较小的值,生成一个直线方程才能校准(见下方)。

可是,后来发现每个芯片的偏移量和斜率都不一样,难道每个芯片都要用程序去校准?

//ADC计算值应该为4407,实测为4212
//ADC计算值应该为3733,实测为3602
//据上两个点生成直线方程 (y=1.105x-247)

  • Kery,

    想提高传输速度,请参考:http://processors.wiki.ti.com/index.php/OverlappedProcessing

    关于ADC,请看这个文档的第12章:http://www.ti.com/lit/ug/swru191f/swru191f.pdf

  • hello Yan,

    你所说的两个文档,我之前都有看过。是因为我的测到的实际值与文档的理论值不一样才来此咨询的。

    与否告知:

    1,与手机的实时传输速度提高到3.5KB/S能否稳定工作不丢包?

    2,ADC的偏差是否由硬件本身造成的?

  • ADC的精度问题还是没有解决,我测试了两块板情况都一样,测试情况如下:(我现在用AVDD5作参考电压,14位分辨率,ADC1口采样)
    一块板AVDD5的电压为3.268V,ADC1的电压为1.634V,理论转换值应该是4096,
    可是连续5次测到的值为:3932,3931,3931,3931,3931。
    另一块板AVDD5的电压为3.269V,ADC1的电压为1.633V,理论转换值应该是4092,
    可是连续5次测到的值为:4017,4017,4016,4017,4016。
    如果每个都不一样,软件也没办法校准啊,请问如何解决?我试过不跑协议,只写一个简单的ADC采样程序,测试情况都差不多。
  • 这种情况应该属于参考电压偏差大, 如果对ADC一致性要求较高, 可以考虑使用外部专门的参考源。

  • 这个是参考电源的偏差,建议使用外部精准参考电压源

  • Dear zongru zhan,

    其实VDD5就是外部参考电压啊,

    鉴于你的建议,我也做了如下测试,

    在ADC1接的电压=0.506V,在ADC7接的电压=0.653V

    用内部参考电压,测得ADC1的ADC值为3392,ADC7的ADC值为3380。(这里我非常不明白,不准就不准,为什么电压大的值反而要小?)

    然后用ADC7做参考电压,测得ADC1的值为5252。(这个也不准啊,正常值应该是0.506/0.653*8192=6347)

     

    测试的时候,没跑协议,代码很简单,

    #include<ioCC2541.h>

    unsigned int count,val[10];

     int AdValue=0;

     void main()

     {  //设置系统时钟32MHz    

         CLKCONCMD &= ~0x40;    

         while(CLKCONSTA & 0x40);       

         CLKCONCMD &= ~0x47;    

     //ADC初始化   

           APCFG=0xff;

         ADCCON1 = 0x33;

         ADCCON3 = 0x31;

     //ADC采样5次    

       for(count=0;count<5;count++)    

       {        

             ADCCON3 = 0x31;          //内部基准  12位ENOB  通道1

            while(!(ADCCON1&0X80));

            AdValue = ADCL>>2 ;        

            AdValue |= ADCH <<6;       

            if(AdValue<0) AdValue=0;        

            val[count]=AdValue;    

         }    

         while(1);

     }

    TI的工程师帮看下,这是不是芯片本来的缺陷?

     

     

  • 我说的外部参考源 是专门的参考电压输出片子 比如TL431

    http://www.ti.com/product/tl431

  • 文档上有说明,最好使用内部参考电压1.25V来做标准。外部电路可以采用分压法测量。