国产的高精度ADC HX711 CS1237 TM7707等如何选型

目录

名词解释

数据输出速率

建立时间

ADC转换周期

CS1237转换速度与有效位数的关系

TM7707测试代码



最近小伙伴们咨询我,国产很多高精度的ADC,如何选型使用呢?这里我们主要讨论几款24位差分输入。

ADC/DAC相关名词解释

  • ADC输入范围
  • ADC转换速度
  • ADC稳定位数

在我们选的时候主要考虑上面三个参数

ADC参数对比
型号供电范围输入范围输出速率建立时间PGA时钟单价(元)
Hx711

10Hz/80Hz32,64 和 128内/外2.32
cs1237

VDD:3.0~5.5V

Ref外部:1.5~VDD+0.1

与增益有关

10Hz 40Hz 640Hz 1.28kHz

 

1 2 64 128
内/外1.3
tm7707

VDD2.7~5.25

Ref内/外;

1~1.75 @3.3
1~3.5 @5V

与增益无关

 

500Hz最大双通道约160mS1, 2 ,4 ,8 ,16, 32, 64, 1283.46

名词解释

数据输出速率

 这里很多人第一次看数据输出速率,很容易理解成是SPI这种接口CLK的频率,这样是错误的。

这里的ADC输出速率是指ADC的转换速率。

这里的SPI clk 要>2KHZ

建立时间

这里的重点是要知道什么情况会发生建立时间

  • 电源上电/掉电
  • 通道切换
  • PGA/速率切换

ADC转换周期

        转换周期也可以看作量化时间,可以简单看作 输出速率*位数

        如24位ADC ,输出速率1khz

        Tconvert ≈ 1ms *24 = 24ms

CS1237转换速度与有效位数的关系

有效分辨率的方只与AD速率和电源压值有关,计算方法为:AD速率增大倍数为增大2^1有效位降低0.5位,2^2为有效位降低2*0.5=1倍

 

 1.28Khz 有效精度 = 20@5V - 7*0.5 = 16.5位

TM7707测试代码

下面这段代码是官方手册中的代码。

// MCU: AT89S52
// Target : TM7707
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char 
#define uint unsigned int
sbit SCLK=P1^0;
sbit DIO=P1^1;
sbit RESET=P1^2;
sbit CS=P1^3;
sbit DRDY=P1^4;
uchar *intp;
uchar idata date8[180];
void write_byte1(uchar date) //写一字节数据 
{ 
    uchar i;
    CS=0; //CS 拉低,
    for(i=0;i<8;i++) 
    { 
         SCLK=0; //SCLK 拉低准备写数据
        _nop_();
         if(date&0x80) 
            DIO=1; 
        else
            DIO=0; 
        SCLK=1; //SCLK 拉高,写入一位数据 
        Date<<=1;
    }
     CS=1; //写完一个字节后 CS 拉高。
}
uchar read_byte1 ( ) //读一字节数据 
{
    uchar j,b1;
    CS=0; 
    for(j=0;j<8;j++) 
    {
        SCLK=0; 
         b1=(b1<<1)|DIO; 
        SCLK=1; 
    } 
    return b1;
}
void save_data(void) 
{
    uchar i0,i1;
    intp=date8;
    for(i0=0;i0<60;i0++)
    {
         while(DRDY); //等待 DRDT 为低时,可读出数据 
         write_byte1(0x38); //向通信寄存器写入数据,选择通道 1 作为有效,将下一个操作设为读数据            寄存器。
         for(i1=0;i1<3;i1++) //连续存储一个数据。
         {
            *intp=read_byte1();
             intp++;
         }
         CS=1;
     } 
}
void init( ) //初始化
{ 
    RESET=1;
    SCLK=1;
    CS=1;
    DRDY=1;
}
void main(void) //主函数
{
    init();
    write_byte1(0X10); //向通信寄存器写数据,选择通道 1 作为有效通道,将下一个操作设为对设置寄存器进行写操作。
    write_byte1(0X20); //对设置寄存器写操作,选择 16 倍增益,无 BUF 缓冲器,双极性。
    write_byte1(0X50); //向通信寄存器写数据,选择通道 1 作为有效通道,将下一个操作设为对滤波低寄存器进行写操作。
    write_byte1(0X00); //向滤波低寄存器写入 0X00。
    write_byte1(0X20); //向通信寄存器写数据,选择通道 1 作为有效通道,将下一个操作设为对滤波高寄存器进行写操作。
    write_byte1(0X0F); //向滤波高寄存器写入 0X0F。
    save_data(); //MCU 连续存储 24 位数据 60 个。
    while(1); //循环等待。
}

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值