打印
[数据转换器-信号链]

ADS1230的问题

[复制链接]
5759|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用ADS1230采集3吨称重传感器的数据。
调试的时候用电阻和电位器搭了一个模拟传感器输出差分信号的电路,此时测量出来的差分电压准确。不过都是在静态下测的,也就是输出的差分信号是一个固定电压值,每次都只是测量这个固定的电压。
实际测量时,称重传感器输出的是渐变的信号,随着压力的增大,实时采集压力值。但是此时ADS1230就不能正常工作了,采集回来的值不准确,甚至直接是7FFFF。电路采用的datasheet上的推荐电路,后来甚至按照TI的ADS1230评估板搭了一个电路,也是如此。
什么原因会导致采集静态的差分信号正常,而当差分信号动态变化时就不正常呢??

相关帖子

沙发
gaoyang9992006| | 2013-9-13 12:21 | 只看该作者
楼主看一下程序,是不是采集频率或者某个地方代码不合理造成的

使用特权

评论回复
板凳
popeye021|  楼主 | 2013-9-13 12:50 | 只看该作者
gaoyang9992006 发表于 2013-9-13 12:21
楼主看一下程序,是不是采集频率或者某个地方代码不合理造成的

下面是数据采集程序。每次采集都会等待ADS1230输出转换结果。
设置的芯片AD转换速率是80SPS。
我的ADS1230是在单独的一块小板上,通过接线和主控板相连。
最最无法理解的是:最开始的一块小板可以正常工作,但是其后几块小板都是我说的问题。我的程序就是在最开始的那块能工作的小板上用的。


//读取ADS1230的转换结果
unsigned long ADconvert( void )
{
        unsigned long ulResult = 0;
        unsigned int uiTemp = 0;
        unsigned char ucTemp = 0;
        unsigned char i = 0;
        unsigned char j = 0;
       
        ADsclk = 0;
       
        for( j = 0 ; j < 30 ; j++ );
       
        while( 1 )
        {
                PCA0CPH4 = 0;
               
          if( ADdout == 0 )                                     //确认AD转换是否完成
                  {
                          for( j = 0 ; j < 180 ; j++ );
                       
                          for( i = 0 ; i < 12 ; i++ )                     //读高12位数据
                          {
                                  ADsclk = 1;
                               
                                  for( j = 0 ; j < 30 ; j++ );
                               
                                  if( ADdout == 1 )
                                          {
                                                  uiTemp = ( uiTemp << 1) | 0x0001;
                                          }
                                  else
                                          {
                                                  uiTemp = uiTemp << 1;
                                          }
                                       
                                  ADsclk = 0;
                               
                                  for( j = 0 ; j < 30 ; j++ );
                          }
                       
                          for( i = 0 ; i < 8 ; i++ )                      //读低8位数据
                          {
                                  ADsclk = 1;
                               
                                  for( j = 0 ; j < 30 ; j++ );
                               
                                  if( ADdout == 1 )
                                          {
                                                  ucTemp = ( ucTemp << 1) | 0x01;
                                          }
                                  else
                                          {
                                                  ucTemp = ucTemp << 1;
                                          }
                                       
                                  ADsclk = 0;
                               
                                  for( j = 0 ; j < 30 ; j++ );
                          }
                       
                          ADsclk = 1;                                     //发送第21个时钟脉冲,使ADS1230芯片的DOUT输出拉高
                       
                          for( j = 0 ; j < 30 ; j++ );
                               
                          ADsclk = 0;
                       
                          for( j = 0 ; j < 30 ; j++ );
                       
//                          ADdout = 1;
                       
//                          for( j = 0 ; j < 30 ; j++ );
                          
                          PCA0CPH4 = 0;
                          
                          break;
                  }
               
        }
       
        ulResult = uiTemp;
        ulResult = ulResult << 8;       
        ulResult = ulResult | ucTemp;
                       
        return ulResult;
               
}

使用特权

评论回复
地板
gaoyang9992006| | 2013-9-13 13:26 | 只看该作者
没看出来啥大问题,高12位和低8位可以一起读啊,干嘛分开,合并一起,另外x=x<<1可以写成x<<=1;应该更快速,那个分开写中间时间会拉长。试一下,我先午睡了,晚上再帮你研究一下。不行了,我帮你找TI的专家问问。

使用特权

评论回复
5
zeluo| | 2013-9-13 18:25 | 只看该作者
还是版主比较敬业   不错啊    1驱动这一块   一直觉得自己比较薄弱   要好好花点时间   好好去钻研钻研   谢谢了

使用特权

评论回复
6
popeye021|  楼主 | 2013-9-13 19:41 | 只看该作者
gaoyang9992006 发表于 2013-9-13 13:26
没看出来啥大问题,高12位和低8位可以一起读啊,干嘛分开,合并一起,另外x=x ...

多谢指点,我再鼓捣一下,有新变化再请教。

使用特权

评论回复
7
popeye021|  楼主 | 2013-9-14 18:52 | 只看该作者
本帖最后由 popeye021 于 2013-9-14 19:02 编辑
gaoyang9992006 发表于 2013-9-13 13:26
没看出来啥大问题,高12位和低8位可以一起读啊,干嘛分开,合并一起,另外x=x ...


我有鼓捣了一下。
利用断点调试,可以读到转换的AD值,反复读取,值会变小。同一电压,一般最先读取的二进制数大,以后读取的都逐渐变小,当然最大和最小也就差不到16,可能差10左右。:Q
后来为了直观一点,接了液晶屏,把采集到的值按照对应压力值显示出来。
奇怪的是,第一次上电后,我调节电位器,还能够显示力值从小变大,当压力值达到90公斤时,单片机会发送脉冲给步进电机驱动器,这里没有接驱动器,并且显示界面会变一下,就是把显示的压力值数字形状变大而已。但是这以后采集数据就出错了,显示力值不准。并且断电后,再上电,调节电位器,当压力值小于90公斤时,也无**确显示,采集的值不准。
后来我又使用断电调试,采集固定差分电压还是没有问题的。
完全不知如何应对啊。

使用特权

评论回复
8
gaoyang9992006| | 2013-9-15 10:23 | 只看该作者
楼主上电路,感觉程序木有大问题,你直接读取20位了还是分开读的,现在.我一般习惯一次读出来,这样速度快,读取每一位的间隔相同,不会在程序严谨性上出问题,另外看看你的电路是不是不便于连续快读

使用特权

评论回复
9
chuangpu| | 2013-9-15 13:34 | 只看该作者
帮楼主顶一个   这一块   不是很了解  

使用特权

评论回复
10
popeye021|  楼主 | 2013-9-15 18:05 | 只看该作者
gaoyang9992006 发表于 2013-9-15 10:23
楼主上电路,感觉程序木有大问题,你直接读取20位了还是分开读的,现在.我一般习惯一次读出来,这样速度快,读取 ...

我已经改为直接读取20位了。
我的硬件是本来有一块主控板,然后单独做了一个ADS1230的小板,中间接线来采集数据。
最开始有一块ADS1230小板是正常工作的,但是后面焊的同样的小板就不行,主控板还是同一块。
至于程序的采集和显示控制逻辑,换成HX710的小板是可以正常工作的。
由于后面焊的小板都不行,我后来照着TI的评估板电路做了一个小板,也是同样的现象。
电路图就是照着评估板来的。

ADS1230.jpg (157.53 KB )

ADS1230.jpg

使用特权

评论回复
11
gaoyang9992006| | 2013-9-16 13:02 | 只看该作者
楼主,由于传感器精度比较高,是不是变化范围不大?如果变化范围不大,那就是正常的,因为电磁干扰都可以导致一定范围的变化。如果变化范围不足1%那肯定是没问题的。

使用特权

评论回复
12
popeye021|  楼主 | 2013-9-17 12:38 | 只看该作者
gaoyang9992006 发表于 2013-9-16 13:02
楼主,由于传感器精度比较高,是不是变化范围不大?如果变化范围不大,那就是正常的,因为电磁干扰都可以导 ...

测试都是用电阻和电位器模拟的差分信号,调节电位器,增大或者减小差分电压。
应该不是你说的这个原因。

使用特权

评论回复
13
cjhk| | 2013-9-20 09:16 | 只看该作者
有可能是采样元器件  本身不精准   存在偏差  或者是采样速度过慢   导致的   具体   只能一边调试   一边修改了

使用特权

评论回复
14
comeon201208| | 2013-9-20 21:18 | 只看该作者
看完楼上各位的解决办法的,我也茅塞顿开的,虽然不是很理解的,还是了解了很多的这方面的知识的

使用特权

评论回复
15
zxl19941028| | 2013-12-25 22:00 | 只看该作者
谁能给我发一份电路图啊,bjyibiao@126.com

使用特权

评论回复
16
zxl19941028| | 2013-12-25 22:01 | 只看该作者
popeye021 发表于 2013-9-13 12:50
下面是数据采集程序。每次采集都会等待ADS1230输出转换结果。
设置的芯片AD转换速率是80SPS。
我的ADS123 ...

能给我发一份成功应用的电路图吗,bjyibiao@126.com

使用特权

评论回复
17
gaoyang9992006| | 2013-12-26 21:04 | 只看该作者
转换速度要小鱼芯片的最大速度,建议小于最大速度的一半。这样芯片有更多的时间进行充放电和转换。

使用特权

评论回复
18
firstblood| | 2013-12-26 22:56 | 只看该作者
楼主的Ad采集的参考源的设计呢,是不是换下参考源的试试吧

使用特权

评论回复
19
lianfutiana| | 2016-12-28 21:59 | 只看该作者
ads1230的Dout脚有时候正常,有时候就一直输出为高,这个有遇到吗?太奇怪了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

86

主题

455

帖子

4

粉丝