[经验知识] 【秀出我的 Linear模拟设计方案】+ LTC2440

[复制链接]
 楼主| sunmeat 发表于 2014-9-11 15:54 | 显示全部楼层 |阅读模式
LTC2440是Linear公司的一款24位的AD,常用于数字万用表的设计上面,官网据说可以达到6位半的精度,实际没有测试使用过那么多,但是一般高精度的测量足够了,网上也有很成熟的方案。
LTC2440最重要的特点是转换速度快,它采用了能实现可变速度和分辨率(且没有等待时间)的专有结构,通过一个简单的串行接口即可实现了10种不同的速度/分辨率组合,准确度(偏移量、满量程、线性度、漂移)和电源功耗与速度选择无关。既然无延迟,转换期间改变速度/分辨率并不降低性能。
LTC2440的接法也很简单,采用三线或者四线的接口与MCU连接就可以操作。官方给的连接电路图如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| sunmeat 发表于 2014-9-11 15:54 | 显示全部楼层
本帖最后由 sunmeat 于 2014-9-11 15:57 编辑

void GET_LTC2440(void)
{
unsigned int i;
long int m,n;  

while(BUSY){;}
CS=0;
SCK=0;

EOC=SD0;
SDO=0;   
delayus();
SCK=1;
delayus();
      
SCK=0;
delayus();
DMY=SD0;   
SDO=1;   
SCK=1;
delayus();
      
SCK=0;
delayus();
SIG=SD0;  //SIG: AD值的符号位(1正0负)
SCK=1;
delayus();
      
SCK=0;
delayus();
  ADC_24=0X000000;
for(i=0;i<24;i++)
  {
      ADC_24=ADC_24<<1;
      if(SD0){ADC_24+=1;}     
      SCK=1;
      delayus();
      SCK=0;
      delayus();           
  }
   
  for(i=0;i<5;i++) //再输出5个脉冲,丢弃最后5个Bit
   {
   SCK=1;   
   delayus();
   SCK=0;
   delayus();         
   }

CS=1;
   }

void LTC2440_INIT(void)
{
  DDRA|=0x05;  //SCK CS为输出 BUSY SM0为输入
  PORTA.1=1;       //上拉有效
  CS=1;
  PORTA.3=1;
  SCK=0;
  }   
mmuuss586 发表于 2014-9-11 19:06 | 显示全部楼层

活动时间结束了吧;
lz80650904 发表于 2015-10-22 10:36 | 显示全部楼层
楼主,你好!我在用LTC2440上遇到些问题,向你请教下:
我采用你文中的时序时,读回的数据与DATASHEET描述的范围不一致;从示波器显示的值,前5位均为0,已不在此数据范围内了.以下是文中的时序,波形见示波器附图
uint32_t LTC2440_GetVal(void)
{
                        //unsigned int i;
                        //long int m,n;  
                        uint8_t i,sign=0;
                        uint32_t val=0;
                        while(BUSY){;}
                        CS_L;
                        SCK_L;
                        Delay();
                        if(GETSDO)                //EOC!=0
                        {
                                        CS_H;
                                        SCK_L;
                                        return 0x80000000;
                        }
                        SCK_H;
                        Delay();       
                        SCK_L;
                        Delay();
                        if(GETSDO)                //DMY!=0
                        {
                                        CS_H;
                                        SCK_L;
                                        return 0x80000000;
                        }   
                        SCK_H;
                        Delay();
                        SCK_L;
                        Delay();
                        if(GETSDO)       
                        {
                                        sign=1;
                        }   
                        SCK_H;
                        Delay();
                        SCK_L;
                        Delay();
                        for(i=0;i<24;i++)
                        {
                                        val=val<<1;
                                        if(GETSDO)
                                        {
                                                        val+=1;
                                        }     
                                        SCK_H;
                                        Delay();
                                        SCK_L;
                                        Delay();         
                        }
                                 
                  for(i=0;i<5;i++) //再输出5个脉冲,丢弃最后5个Bit
                        {
                                SCK_H;   
                                Delay();
                                SCK_L;
                                Delay();        
                        }

                        CS_H;
                                 
                        if(sign)
                                        val|=(1<<29);
                                 
                        return val;
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

208

主题

2132

帖子

13

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

208

主题

2132

帖子

13

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