大家好,我有两个问题想咨询一下。
1。.我用CC2540与手机传输数据,只能达到么1.8KB/S,再快就会丢包。
数据手册上讲一次连接可以传输4个包,可是我测试的时候一次连接只能传1个包,传两个包都会丢数据。这是为什么呢?
2。CC2540的ADC输出数值有偏移(我用的是14位精度),虽然转换曲线是直线,但是直线的斜率变了
我现在用的办法是找一个较大的值和一个较小的值,生成一个直线方程才能校准(见下方)。
可是,后来发现每个芯片的偏移量和斜率都不一样,难道每个芯片都要用程序去校准?
//ADC计算值应该为4407,实测为4212
//ADC计算值应该为3733,实测为3602
//据上两个点生成直线方程 (y=1.105x-247)
Yan:
Kery,
想提高传输速度,请参考:http://processors.wiki.ti.com/index.php/OverlappedProcessing
关于ADC,请看这个文档的第12章:http://www.ti.com/lit/ug/swru191f/swru191f.pdf
Kery Lee:
回复 Yan:
hello Yan,
你所说的两个文档,我之前都有看过。是因为我的测到的实际值与文档的理论值不一样才来此咨询的。
与否告知:
1,与手机的实时传输速度提高到3.5KB/S能否稳定工作不丢包?
2,ADC的偏差是否由硬件本身造成的?
Kery Lee:
回复 Kery Lee:
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采样程序,测试情况都差不多。
zongru zhan:
回复 Kery Lee:
这种情况应该属于参考电压偏差大, 如果对ADC一致性要求较高, 可以考虑使用外部专门的参考源。
zongru zhan:
回复 Kery Lee:
这个是参考电源的偏差,建议使用外部精准参考电压源
Kery Lee:
回复 zongru zhan:
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的工程师帮看下,这是不是芯片本来的缺陷?
zongru zhan:
回复 Kery Lee:
我说的外部参考源 是专门的参考电压输出片子 比如TL431
http://www.ti.com/product/tl431
Fred Wang:
回复 Kery Lee:
文档上有说明,最好使用内部参考电压1.25V来做标准。外部电路可以采用分压法测量。