[数据转换器-信号链] 24位 AD AD1252

[复制链接]
1746|6
 楼主| assange 发表于 2014-7-30 19:47 | 显示全部楼层 |阅读模式
AD, ADS, ads1, gp, pi
大学生,接触电路不久,正在过一个创新实验,用的基本是TI 的样片,最近在调试ADS1252,下面附上我的程序,但是有个小问题,测得的电压:a的值转化计算后于实际存在近两倍的误差,不知道哪里出了问题,特来请教论坛大神~多谢各位指点。测量值=a/(2^24)*5.0 是这样吗?

  1. //ADS1251_4    ADS1252_CLK PAout(5)
  2. //ADS1251_5    ADS1252_DOUT  PCin(12)
  3. //ADS1251_6    ADS1252_SCLK PCout(10)

  4. void ADS1252_Config(void)
  5. {
  6.         GPIO_QuickInit(HW_GPIOC,10,kGPIO_Mode_OPP);
  7.         GPIO_QuickInit(HW_GPIOA, 5,kGPIO_Mode_OPP);
  8.         GPIO_QuickInit(HW_GPIOC,12,kGPIO_Mode_IFT);
  9. }
  10. unsigned long int ADC_1252(void)
  11. {
  12.         unsigned long int a;
  13.         unsigned char i;  
  14.         a=0;
  15.         ADS1252_SCLK = 0;  
  16.         ADS1252_CLK  = 0;     
  17.         //DRDY ģʽ,36¸öCLKÖÜÆÚ
  18.         for(i=0;i<48;i++)  ADS1252_CLK = ~ADS1252_CLK; //t4     
  19.         for(i=0;i<12;i++)  ADS1252_CLK = ~ADS1252_CLK; //t2   
  20.         for(i=0;i<12;i++)  ADS1252_CLK = ~ADS1252_CLK; //t3   
  21.         //DOUT ģʽ,348¸öCLKÖÜÆÚ   
  22.         ADS1252_CLK  = 1;  
  23.         ADS1252_CLK  = 0;   
  24.         ADS1252_SCLK = 1;   
  25.         if(ADS1252_DOUT==1)        a|=0x01;
  26.         ADS1252_CLK  = 1;
  27.         ADS1252_CLK  = 0;
  28.         ADS1252_SCLK = 0;   
  29.         ADS1252_CLK  = 1;  
  30.         ADS1252_CLK  = 0;  
  31.         ADS1252_CLK  = 1;  
  32.         ADS1252_CLK  = 0;    //4¸öCLKÖÜÆÚ
  33.         for(i=0;i<23;i++)  
  34.         {
  35.                 a=a<<1;
  36.                 if(ADS1252_DOUT==1)        a|=0x01;   
  37.                 ADS1252_SCLK = 1;   
  38.                 ADS1252_CLK  = 1;  
  39.                 ADS1252_CLK  = 0;  
  40.                 ADS1252_CLK  = 1;  
  41.                 ADS1252_CLK  = 0;
  42.                 ADS1252_SCLK = 0;  
  43.                 ADS1252_CLK  = 1;  
  44.                 ADS1252_CLK  = 0;  
  45.                 ADS1252_CLK  = 1;  
  46.                 ADS1252_CLK  = 0;
  47.         }            //4*23=92¸öCLKÖÜÆÚ
  48.         ADS1252_SCLK = 1;   
  49.         ADS1252_CLK  = 1;  
  50.         ADS1252_CLK  = 0;  
  51.         ADS1252_CLK  = 1;  
  52.         ADS1252_CLK  = 0;
  53.         ADS1252_SCLK = 0;  
  54.         ADS1252_CLK  = 1;  
  55.         ADS1252_CLK  = 0;  
  56.         ADS1252_CLK  = 1;  
  57.         ADS1252_CLK  = 0;    //4¸öCLKÖÜÆÚ
  58.         //248¸öCLKÖÜÆÚ
  59.         for(i=0;i<248;i++)        {ADS1252_CLK = ~ADS1252_CLK;}
  60.         for(i=0;i<248;i++)        {ADS1252_CLK = ~ADS1252_CLK;}
  61.         return a;
  62. }


airwill 发表于 2014-7-31 11:30 | 显示全部楼层
你可以先测量一下电压, 具体数值和 ADC 结果对比.
如果结果正好是 2倍关系, 很可能是通信时序里的脉冲边沿搞错了
 楼主| assange 发表于 2014-7-31 12:11 | 显示全部楼层
airwill 发表于 2014-7-31 11:30
你可以先测量一下电压, 具体数值和 ADC 结果对比.
如果结果正好是 2倍关系, 很可能是通信时序里的脉冲边沿 ...

测过了,试过对多个值测量都有2倍的偏差
xyz549040622 发表于 2014-8-1 08:17 | 显示全部楼层
抓你的时钟的波形看看,是不是正好对应的
 楼主| assange 发表于 2014-8-1 21:18 | 显示全部楼层
xyz549040622 发表于 2014-8-1 08:17
抓你的时钟的波形看看,是不是正好对应的

没有逻辑分析仪:(
mmuuss586 发表于 2014-8-2 15:37 | 显示全部楼层
单端还是差分输入啊?
差分的话刚好是2倍;
接个直流的输入,用万用表测试下就知道是不程序问题了;
 楼主| assange 发表于 2014-8-2 20:31 | 显示全部楼层
mmuuss586 发表于 2014-8-2 15:37
单端还是差分输入啊?
差分的话刚好是2倍;
接个直流的输入,用万用表测试下就知道是不程序问题了; ...

单端信号,v+输入 v-接地,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部