求助CC2530 ADC测量不准确的 英文原因

CC2530AD分辨率问题
在学习CC2530开发板的时候,对于自带分辨率的位数一直没搞清楚,不同的书上有不同的说法,有的说14位,有的说是12位,也没找到确切的说明。在网上找到网友给出的确切结论:
(1)TI的CC2430(CC2530通用)的片内AD转换采用sigma-delta原理,设计为14位分辨率,转换结果存入ADCH的8位和ADCL的高6位,ADCL的0、1位无效。
由于测试结果没有达到设计要求,ADCL的2、3位只能作为噪声忽略而对分辨率不起作用,所以TI把AD的分辨率从14位调整至12位。(或许以前的说明书出现了14位分辨率的情况)。分辨率分为7位,9位,10位和12位。
(2)AD转换的结果采用补码的形式保存,所以若采用7位分辨率,可以得到的值范围在-64到63之间。
(3)AD转换的结果实行左对齐(高位开始),而且该对齐方式不能选择。如果使用7位分辨率,结果为于ADCH寄存器的高7位。其他的分辨率以此类推。
此条目发表在分类目录。将加入收藏夹。
朋友的博客
2017年十一月
6789101112
13141516171819
20212223242526CC2530 ADC学习 - CSDN博客
CC2530 ADC学习
CC2530有8个ADC通道,系统框图如下:
使用ADC有两种情况:
第一种是连续转换,此时需要配置ADCCON1和ADCCON2寄存器;
第二种是单次转换,此时只需要配置寄存器ADCCON3即可。
请初学者搞清楚哈,单次转换只需要配置寄存器ADCCON3就可以。
我今天实验的情况:
使用ADC测量单节干电池的电压。
选择的参考电压基准为:AVDD=3.3V,模拟通道选择通道0.
则初始化函数为:
static uint16 readV(uint8 channal,uint8 resolution)
&&&&&& & uint16
&&&&&& & APCFG |= 1 && //注意这里是设置ADC输入通道!!
&&&&&& & ADCIF = 0 ;
&&&&&& & ADCCON3 = (HAL_ADC_REF_AVDD | resolution | channal) ;&&& &
&&&&&& & while ( !ADCIF ) ;
&&&&&& & value = ADCL ;
&&&&&& & value |= ((uint16) ADCH) && 8 ;//这里注意一下
&&&&&& & if(channal == HAL_ADC_DEC_064)//7位分辨率
&&&&&& & &&& &&value &&= 9 ;
&&&&&& & else if(channal == HAL_ADC_DEC_128) //9位分辨率
&&&&&&&&&&&&& & value &&= 7 ;
&&&&&& & else if(channal == HAL_ADC_DEC_256) //10位分辨率
&&&&&&&&&&&&& &value &&= 6 ;
&&&&&& & else if(channal == HAL_ADC_DEC_512) //12位分辨率
&&&&&&&&&&&&& & value &&= 4;
使用如下方式调用该函数:
1&&&&&&&&&& temp = readV(HAL_ADC_CHN_AIN0,HAL_ADC_DEC_256) ;//10位分辨率
2&&&&&&&&&& _ltoa(temp,vdataformat.Test,16) ;
3&&&&&&&&&& temp = (temp + (temp && 5) ) && 6 ;
4&&&&&&&&&& Data[0] = (uint8)temp/10 + '0' ;
5&&&&&&&&&& Data[1] = '.' ;
6&&&&&&&&&& Data[2] = (uint8)temp%10 + '0' ;
第1行,选择模拟通道0,10位分辨率;
第2行,将读取到的AD转换值以十六进制的形式显示出来。
第3行,这是将读取到的值转换为实际的电压值。为了显示方便,将其扩大了10倍。
实际电压值=& AD转换值* 33 /1024&&&
注意这里是10位分辨率,同时将读取的电压值扩大了10倍数。
但是,经过一天半的测试我发现上述公式不行!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
后来发现AD转换值最大是0x&?xml:namespace prefix = st1 ns = &urn:schemas-microsoft-com:office:smarttags& /&,也就是说是6位,所以,果断修改上述公式,如下:
实际电压值=& AD转换值* 33 /64&&
当然,没有人会傻到让个小51单片机去计算乘法和除法;
一般处理技巧是:将乘法转换为左移运算,除法转换为右移运算;
所以:推导过程如下:
实际电压值=& AD转换值* 33 /64&& =(AD转换值*32 + AD转换值)/ 64
&&&&&&&&& =& ((AD转换值&& 5 ) + AD转换值)&& 6
呵呵,我敢说,有部分初学者肯定没用过上述方法,算上给大家个小技巧吧。
第4—6行,将数据显示出来,输出到串口上。
然后,我使用稳压电源,型号:TPR3003,输出0---3.3V,然后输如到AD通道0,测试结果如下:
当然,需要说明的是,我买CC2530是散新的,所以,我怀疑片子确实存在问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
此外,对于TI这款芯片,感觉数据手册写的太烂了,一个内部参考电压,整个数据手册都没说过是多少,最后从网上看到貌似是1.25V,而CC2420内部的参考电压是1.15V,貌似是,现在不确定!!!
还有就是协议栈里的ADC驱动是完全照搬的CC2430吧,不相信的朋友可以查看一下,CC2530的ADC分辨率是7位、9位、10位和12位,但是协议栈里面的驱动如下:
switch (resolution)
&&& case HAL_ADC_RESOLUTION_8:
&&&&& reading &&= 8;
&&& case HAL_ADC_RESOLUTION_10:
&&&&& reading &&= 6;
&&& case HAL_ADC_RESOLUTION_12:
&&&&& reading &&= 4;
&&& case HAL_ADC_RESOLUTION_14:
&&& default:
&&&&& reading &&= 2;
这绝对是恶心人,上述分辨率是CC2430的,貌似是,真让人寒心!!!
本文已收录于以下专栏:
相关文章推荐
CC2530 ADC学习笔记
CC2530中adc的使用记录本文主要是记录使用CC2530中adc过程中遇到的问题。同时分析ZigBee协议栈中实现的代码。
ADC的基本知识
CC2530中ADC相关特性
CC2530中和ADC相...
一、任务分析编写程序实现实验板测定芯片外部光敏传感器的电压,通过串口发送电压值。实验板安装上光线传感器,光线的强弱转换成电压的高低,经ADC转换以后通过串口将电压值发送给PC,可以通过串口调试软件读取...
/*****************************************
//by 虚幻代码
//名称:读取片内温度并通过串口显示
//说明:取片内温度传感器为AD源,通过串口在PC上显示...
【原创】zstack - 协议栈程序精简日志- AD 采样试验闲来无事测试zstack协议栈的记录。zstack协议栈中已经有完整的AD采样接口api,位于hal_adc文件中,提供的接口如下:/* ...
初窥ZIGBEE
要在zigbee的组网中加入烟雾传感器的模块,所以需要用到cc2530的ADC对传感器输出的模拟信号进行采样。下面是自己对实现用CC2530的ADC采集外部电压的程序过程。
在调试cc2530的上的ADC的小实验中,遇到的一些问题,想和大家一起分享一下。
关于ADC的使用需要注意以下几点:
 1.关于配置的寄存器:IO口的配置,其实仔细用大脑想想不用看数据手册就应该想...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)求助TI技术人员CC2530检测电池电压问题 - ZigBee技术 - 德州仪器在线技术支持社区
求助TI技术人员CC2530检测电池电压问题
发表于3年前
<input type="hidden" id="hGroupID" value="43"
问题1:&/p>
&p>电池电压正常情况下高于&a href=&.cn/product/cn/CC2530& target=&extwin&>CC2530&/a>的工作电压3.3,接近3.3的时候电池基本没电了,而ADC检测的电压不能大于参考电压,这就意味着要检测电池电压就必须找到大于电池电压且稳压的参考点了,我这么理解不知道正确否?&/p>
&p>问题2:&/p>
&p>所以我现在的想法是用P07也就是通道7上的外部电压(需要一个升压稳压电路了)为参考点,通过P06连接去检测电池电压,希望官方给予解答,谢谢!!!&/p>
&p>P06通过一个小电阻33欧直接连接到电池正极!另外想问下IO口所能承受的电压为多少&/p>&div style=&clear:&>&/div>" />
求助TI技术人员CC2530检测电池电压问题
此问题尚无答案
All Replies
电池电压正常情况下高于的工作电压3.3,接近3.3的时候电池基本没电了,而ADC检测的电压不能大于参考电压,这就意味着要检测电池电压就必须找到大于电池电压且稳压的参考点了,我这么理解不知道正确否?
所以我现在的想法是用P07也就是通道7上的外部电压(需要一个升压稳压电路了)为参考点,通过P06连接去检测电池电压,希望官方给予解答,谢谢!!!
P06通过一个小电阻33欧直接连接到电池正极!另外想问下IO口所能承受的电压为多少
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元56336分
如果要上传ZigBee Sniffer Log,请把文件另外为psd或者cubx文件,用附件方式上传,不要使用截图没有任何作用。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
所以我问的第一个问题理解就是要向测比ZIGBEE工作电压高的电压是测不了的咯?
哦,对了,我的电路是经过LDO稳压输出3.3之后才给zigbee供电的,然后想用zigbee测前端电池的电压
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
探花17918分
+外部加电路嘛。都这么做。
电阻分压、运算电路等。。。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
恩,谢谢,解决
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
电路这样接,但是测试结果不对!!!!测其他IO口都是正确的,唯独这个接了电池电压的测不准
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
我用想用的内部基准1.15V测内部1/3VDD,在电池供电电压由3.3V降到2.2V过程中,请问手册上供电电压在2.2V时能正常工作包含ADC部分吗?且此时内部基准1.15V还能正常得到吗?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
自己用采用内部基准测量内部温度的例程测试,将供电电压由3.3V降到2.2V过程中,温度出现不正常。想问在供电电压变化的情况下,用ADC内部基准作为参考进行测量,能行吗?非得用外部参考?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
自己测试时供电电压在2.9V~2.1V范围,使用512抽取率,内部参考电压做基准源,测量AD值恒为1FFF满量程。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.ZIGBEE_ADC 本程序基于CC2530,用AD采集片上的电压,最后通过串口输出,打算是用在烟雾传感器的, SCM 单片机开发 238万源代码下载-
&文件名称: ZIGBEE_ADC
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 47 KB
&&上传时间:
&&下载次数: 228
&&提 供 者:
&详细说明:本程序基于CC2530,用AD采集片上的电压,最后通过串口输出,打算是用在烟雾传感器的,通过组网来传递采集信息。该程序是基本的构成部分。-This procedure is based on the CC2530, AD collection on-chip voltage, and finally going to smoke sensor to pass through the network to collect information through the serial port output. The program is a basic component.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&ZIGBEE_LED\ad.c&&..........\adc.c&&..........\adc.h&&..........\Debug\Exe\SmokeAD.a51&&..........\.....\...\SmokeAD.hex&&..........\.....\Obj\adc.r51&&..........\.....\...\dma.r51&&..........\.....\...\led.r51&&..........\.....\...\main.r51&&..........\.....\...\SmokeAD.pbd&&..........\.....\...\SmokeAD.r51&&..........\.....\...\uart.r51&&..........\hal_defs.h&&..........\hal_types.h&&..........\led.c&&..........\led.h&&..........\main.c&&..........\settings\SmokeAD.cspy.bat&&..........\........\SmokeAD.dbgdt&&..........\........\SmokeAD.dni&&..........\........\SmokeAD.wsdt&&..........\SmokeAD.dep&&..........\SmokeAD.ewd&&..........\SmokeAD.ewp&&..........\SmokeAD.eww&&..........\uart.c&&..........\uart.h&&..........\Debug\Exe&&..........\.....\List&&..........\.....\Obj&&..........\Debug&&..........\settings&&ZIGBEE_LED
&近期下载过的用户:
&&&&&&&&&&&&&&&&&&[]
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - CC2530 s ADC sampel code and apllication. Modufy from the TI sample code.
&[] - 无线龙CC2530开发平台 Zigbee网络无线通信的系统测试软件,可以实现DMA传输RF数据。
&[] - CC2530外部传感器采集程序,采集温度、光强、气体含量等
&[] - zigbee开发资料,一些重要函数的用法及内容,文中均有提及
此外还包括一些实验例程
&[] - CC2530通过ADC采集片内温度传感器程序
&[] - zeebig无线通讯模块,包括收发模块程序,并调试通过
&[] - CC2530单片机数模转换源代码,可用于12位精度数模转换
&[] - 基于zstack的协议栈开发,传感器采集数据,然后通过路由器上传到协调器节点,最终在pc机上显示。
&[] - CC2530开发环境,使用slip协议和边界路由,构建一个虚拟网卡的WSN驱动程序,集成开发环境为IAR
&[] - 短距离无线通信技术和组网技术的资料,包括wsn 无线单片机等核心技术cc2530 光敏传感器adc转换问题!! - ZigBee技术 - 德州仪器在线技术支持社区
cc2530 光敏传感器adc转换问题!!
发表于2年前
<input type="hidden" id="hGroupID" value="43"
协议栈是2.5.1-a,想利用热敏电阻接P0_5,以下是我用来读取adc的值&/p>
&p>uint16 ReadLightData( void )&br>{&br>& uint16 reading = 0;&/p>
&p>& uint16 total = 0;&&/p>
&p>&&br>& P0SEL &= ~0x20;//设置为普通IO&br>& P0DIR &= ~0x20; // 设置P0.5为输入方式&br>& asm(&NOP&);asm(&NOP&);&/p>
&p>for(i = 0; i & 4; i++)&br> {&br> APCFG |= 1 && 5 ; //注意这里是设置ADC输入通道!!&br> ADCCON3 = 0x80|0x20|0x05; & //AVDD5参考电压 10位分辨率 &通道5使能&br> ADCCON1 |= 0x30;//手动模式&br> ADCCON1 |= 0x40; //开启单通道ADC&br> &br> while(!(ADCCON1 & 0x80)); //等待AD转换完成&br>&br> reading = ADCL;&br>&&br> reading |= ((uint16) ADCH) && 8;&/p>
&p>&br> reading &&= 6;&br>&&br> total +=&br> }&br> total &&= 2; //求4次平均值&br>&br>}&/p>
&p>这样得出来的adc值,在不懂光敏电阻情况下,输出值也是时大时小,有0-1000浮动,本以为adc这东西最简单了,搞了一天都这样,真郁闷!!!&/p>&div style=&clear:&>&/div>" />
cc2530 光敏传感器adc转换问题!!
此问题尚无答案
All Replies
协议栈是2.5.1-a,想利用热敏电阻接P0_5,以下是我用来读取adc的值
uint16 ReadLightData( void ){& uint16 reading = 0;
& uint16 total = 0;&
&& P0SEL &= ~0x20;//设置为普通IO& P0DIR &= ~0x20; // 设置P0.5为输入方式& asm(&NOP&);asm(&NOP&);
for(i = 0; i & 4; i++) { APCFG |= 1 && 5 ; //注意这里是设置ADC输入通道!! ADCCON3 = 0x80|0x20|0x05; & //AVDD5参考电压 10位分辨率 &通道5使能 ADCCON1 |= 0x30;//手动模式 ADCCON1 |= 0x40; //开启单通道ADC
while(!(ADCCON1 & 0x80)); //等待AD转换完成 reading = ADCL;& reading |= ((uint16) ADCH) && 8;
reading &&= 6;& total += } total &&= 2; //求4次平均值}
这样得出来的adc值,在不懂光敏电阻情况下,输出值也是时大时小,有0-1000浮动,本以为adc这东西最简单了,搞了一天都这样,真郁闷!!!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
这是硬件连接方式,接在P0_5
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
榜眼20302分
把采样间隔调大一些,我们的是Sigma delta的ADC,采样保持的时候会抽电流,如果不影响光敏电阻的情况下,你在ADC输入脚挂一个大一点的电容试试呢?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
电容该多大?怎么接法呢?求教!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
榜眼20302分
我当时帮客户调的时候是1uf的电容,挂在input引脚上接地,现象跟你类似,但不知道对你适用否,仅供参考
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
&加了1uf的电容,确实不会波动很大,他是一点一点的上升,又一点一点的下降,但是我将相同的程序运行在开发板上,P0_5不加电容,却能够正常的反馈出光敏值,难道开发板上的P0_5加了什么电路不成?可是万用表测得P0_5并没外加什么电路!!!这就奇了怪了,难道淘宝的ZigBee芯片质量差点?还是焊脚的焊锡影响ad测量值?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
你好 我想问一下我用的光敏电阻,采集到的最大值怎么不会超过127,搞不清什么情况。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.

我要回帖

更多关于 360开机时间不准确 的文章

 

随机推荐