打印

分享TI LM3S811开发板使用心得 之高精度采集卡制作

[复制链接]
8228|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lilihua0721 于 2011-11-30 21:51 编辑

   以下是我使用TI MCU制作高精度采集卡的全部资料,包括硬件搭建原理图、软见工程文件,液晶资料及ADS1211资料,详情请参考附件。
分别放在以下连续的8个楼层中,有不足的地方请大家指教!
效果图展示:



一、基于LM3S811ADS1211数据采集卡设计硬件部分(全部电路请参考附件)
对于硬件我是采用以前的做的一块ADS1211采集卡板跳线来完成实验的,目前并没有针对LM3S811设计PCB板,在这里给出测试原理图。
1、电源部分及ADS1211的外围电路设计:
在测量过程中,电源是影响测量精度大的因素,所以电源必须要稳定。
以下是我设计的电源部分及ADS1211的外围电路设计。

2、ADS1211差分输入信号的隔离:
采用了LM324用于电压跟随,在此没有做放大(测试差分输入电压为0~5V
具体如下图:


3、串口通信电路:
考虑到通讯的距离及稳定性采用了MAX232转换为RS232电平,
具体参考如下:

3、LM3S811ADS板接口连接:

串口屏数据手册及使用说明.pdf

1.48 MB

24位AD转换器ads1211.pdf

1.29 MB

相关帖子

沙发
lilihua0721|  楼主 | 2011-11-27 18:29 | 只看该作者
本帖最后由 lilihua0721 于 2011-11-27 20:57 编辑

一、基于LM3S811ADS1211数据采集卡设计软件部分(完整工程文件请参照附件工程文件)

ADS1211读写流程
1、mian.c

#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "ADS1211U.h"
#include "Type.h"
#include <stdio.h>
#include <string.h>
#include <math.h>

double UVal;//计算电压值,
char str[60];//存放显示字符串
INT32U ADdata; //24 AD转换器采集到的AD
INT32U  Value; //存放转换电压值放大10000倍的结果
INT16U  integer=0;// 待转换为字符串整数部分
INT16U  decimal=0;// 待转换为字符串小数部分
INT8U i=0; // 记录当前显示通道

#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif

/**************************************************************************************
函数名: void UARTIntHandler(void)
  : 接受中断处理
  : 从接受FIFO中取出数据然后发送出去
  入:无

  出:无
  他:无
**************************************************************************************/

void UARTIntHandler(void)
{
INT32U ulStatus;

//
获取中断状态

ulStatus = UARTIntStatus(UART0_BASE, true);

//
清中断

UARTIntClear(UART0_BASE, ulStatus);

//
查接受FIFO是否存在数据

while(UARTCharsAvail(UART0_BASE))

{
//
从接受FIFO接受到数据后然后通过发送FIFO发送出去

UARTCharPutNonBlocking(UART0_BASE, UARTCharGetNonBlocking(UART0_BASE));

}

}
/*****************************************************************************
函数名: CreanLcd(INT16U
usColor,INT16U X0,INT16U Y0,INT16U X1,INT16U Y1)

  : 清指定区域的,用usColor颜色对指定区域进行填充
  : 清液晶指定区域
  入:usColor填充颜色
      X0 Y0第一点左上坐标
               X1
Y1
第一点右下坐标

  出:无
  他:无
*******************************************************************************/
void CreanLcd(INT16U
usColor,INT16U X0,INT16U Y0,INT16U X1,INT16U Y1)

{
INT8U
CmdData[6]={0xAA,0x64,0xCC,0x33,0xC3,0x3C};

INT8U
i=0;

//
发送帧头

for(i=0;i<2;i++)

{

UARTCharPutNonBlocking(UART0_BASE, CmdData);

}

SysCtlDelay(2*SysCtlClockGet()/3000);

//
发送填充颜色

UARTCharPutNonBlocking(UART0_BASE, usColor>>8);

UARTCharPutNonBlocking(UART0_BASE, usColor);

SysCtlDelay(2*SysCtlClockGet()/3000);

//
发送左上LCD地址

UARTCharPutNonBlocking(UART0_BASE, X0>>8);

UARTCharPutNonBlocking(UART0_BASE, X0);

UARTCharPutNonBlocking(UART0_BASE, Y0>>8);

UARTCharPutNonBlocking(UART0_BASE, Y0);

SysCtlDelay(2*SysCtlClockGet()/3000);

//
发送右下LCD地址

UARTCharPutNonBlocking(UART0_BASE, X1>>8);

UARTCharPutNonBlocking(UART0_BASE, X1);

UARTCharPutNonBlocking(UART0_BASE, Y1>>8);

UARTCharPutNonBlocking(UART0_BASE, Y1);

SysCtlDelay(2*SysCtlClockGet()/3000);

//
发送帧尾及校验位

for(i=2;i<6;i++)

{

UARTCharPutNonBlocking(UART0_BASE, CmdData);

SysCtlDelay(SysCtlClockGet()/3000);

}

}

使用特权

评论回复
板凳
lilihua0721|  楼主 | 2011-11-27 18:29 | 只看该作者
本帖最后由 lilihua0721 于 2011-11-27 20:58 编辑

/**************************************************************************
函数名: void UARTSend(const INT8U *pucBuffer, INT32U ulCount,INT16U XAddr, INT16U YAddr)
  : 清指定区域的,用usColor颜色对指定区域进行填充
  : 清液晶指定区域
  入:pucBuffer 字符串指针
ulCount
字符串个数

XAddr
YAddr
显示地址

  出:无
  他:无
*****************************************************************************/
void UARTSend(const INT8U *pucBuffer, INT32U ulCount,INT16U XAddr, INT16U YAddr)
{
INT8U
CmdData[6]={0xAA,0x54,0xCC,0x33,0xC3,0x3C};

INT8U
i=0;

//
发送帧头

for(i=0;i<2;i++)

{

UARTCharPutNonBlocking(UART0_BASE, CmdData);

}

SysCtlDelay(2*SysCtlClockGet()/3000);

//
发送写入LCD地址

UARTCharPutNonBlocking(UART0_BASE, XAddr>>8);

UARTCharPutNonBlocking(UART0_BASE, XAddr);

UARTCharPutNonBlocking(UART0_BASE, YAddr>>8);

UARTCharPutNonBlocking(UART0_BASE, YAddr);

SysCtlDelay(2*SysCtlClockGet()/3000);

//
发送显示内容

while(ulCount--)

{

UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++);

SysCtlDelay(SysCtlClockGet()/3000);

}

//
发送帧尾及校验位

for(i=2;i<6;i++)

{

UARTCharPutNonBlocking(UART0_BASE, CmdData);
SysCtlDelay(SysCtlClockGet()/3000);
}

}

使用特权

评论回复
地板
lilihua0721|  楼主 | 2011-11-27 18:29 | 只看该作者
本帖最后由 lilihua0721 于 2011-11-27 21:09 编辑

/******************************************************************************
函数名: void ADConversion_test(INT8U chn)
  : 测试24AD转换器的采样精度
  : 由于采集输入端电压范围为0~5V5V对应的满量程为0x7FFFFF
        故:差分输入电压值为:U = (5*AD)/0x7FFFFF ,可以知道U必然
              小于5V,乘10000后必然小于0xFFFF,所以执行以下操作不会越界

integer=(INT16U)(Value/10000);
//
取字符串的整数部分
decimal=(INT16U)(Value%10000);
//
取字符串的小数部分
  入:无
  出:无
  他:无
*****************************************************************************/
void ADConversion_test(INT8U chn)
{
if(chn>=4)

{

return ; //
通道有误,返回!

}

memset(str,0,60);

ADdata = ADCave_ADS1211(chn,3);

UVal=ADdata;

UVal=UVal*5;

UVal=UVal/0x7FFFFF;

Value = (INT32U)(UVal*10000);
//
double型数据强制转换为32位整型数据,并放大

//10000
integer=(INT16U)(Value/10000);
//
取字符串的整数部分

decimal=(INT16U)(Value%10000);
//
取字符串的小数部分

if(chn==0)

{

//
清显示区,显示第一通道时清显示区域(不是整个屏幕)

CreanLcd(0xFFFF,0x00,0x50,0x1C2,0xE0);

if(decimal<10)

sprintf(str,
第一通道检测:AD:0x%x 电压值:%d.000%dV",ADdata,integer,decimal);

else if(decimal<100)

sprintf(str,"
第一通道检测:AD:0x%x 电压值:%d.00%dV",ADdata,integer,decimal);

else if(decimal<1000)

sprintf(str ,"
第一通道检测:AD:0x%x 电压值:%d.0%dV",ADdata,integer,decimal);

else

sprintf(str ,"
第一通道检测:AD:0x%x 电压值:%d.%dV",ADdata,integer,decimal);

//
发送给串口屏进行显示

UARTSend((INT8U *)str, strlen(str),0x00,0x50);

}

else if(chn==1)

{
if(decimal<10)

sprintf(str,
第二通道检测:AD:0x%x 电压值:%d.000%dV",ADdata,integer,decimal);

else if(decimal<100)

sprintf(str,"
第二通道检测:AD:0x%x 电压值:%d.00%dV",ADdata,integer,decimal);

else if(decimal<1000)

sprintf(str ,"
第二通道检测:AD:0x%x 电压值:%d.0%dV",ADdata,integer,decimal);

else

sprintf(str ,"
第二通道检测:AD:0x%x 电压值:%d.%dV",ADdata,integer,decimal);

//
发送给串口屏进行显示

UARTSend((INT8U *)str, strlen(str),0x00,0x70);

}

else if(chn==2)

{

if(decimal<10)

sprintf(str,
第三通道检测:AD:0x%x 电压值:%d.000%dV",ADdata,integer,decimal);

else if(decimal<100)

sprintf(str,"
第三通道检测:AD:0x%x 电压值:%d.00%dV",ADdata,integer,decimal);

else if(decimal<1000)

sprintf(str ,"
第三通道检测:AD:0x%x 电压值:%d.0%dV",ADdata,integer,decimal)

else

sprintf(str ,"
第三通道检测:AD:0x%x 电压值:%d.%dV",ADdata,integer,decimal);

//
发送给串口屏进行显示

UARTSend((INT8U *)str, strlen(str),0x00,0x90);

}

else if(chn==3)

{

if(decimal<10)

sprintf(str,
第四通道检测:AD:0x%x 电压值:%d.000%dV",ADdata,integer,decimal);

else if(decimal<100)

sprintf(str,"
第四通道检测:AD:0x%x 电压值:%d.00%dV",ADdata,integer,decimal);

else if(decimal<1000)

sprintf(str ,"
第四通道检测:AD:0x%x 电压值:%d.0%dV",ADdata,integer,decimal);

else

sprintf(str ,"
第四通道检测:AD:0x%x 电压值:%d.%dV",ADdata,integer,decimal);

//
发送给串口屏进行显示

UARTSend((INT8U *)str, strlen(str),0x00,0xb0);

}

integer=0;

decimal=0;

}

使用特权

评论回复
5
nongfuxu| | 2011-11-27 20:04 | 只看该作者
高精度是ADS1211吧,与LM3S811有什么关系.
ADS1211与任何一个单片机都完成同样功能--->高精度数据采集卡.

使用特权

评论回复
6
lilihua0721|  楼主 | 2011-11-27 20:43 | 只看该作者
/**************************************************************************************
函数名: void JtagWait(void)
功  能: 防止JTAG死锁
说  明: 防止JTAG死锁
输  入:无      
输  出:无
其  他:无
**************************************************************************************/

void JtagWait(void)
{
        /**********JTAG防止死锁*************/
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);              //使能外设GIOPC
           GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4); //设置USER按键所在管脚
//为输入
if (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4) == 0x00) //若复位时按下USER按
//键,则进入
    {
        for (;;);                                         //死循环,以等待JTAG连接
    }
    SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOC);         //禁止USER按键所在的GPIO端口
}
/*****************************************************************************
函数名: int main(void)
功  能: 测试24位AD转换器 、LM3S811串口通信
说  明: 显示采集差分输入AD值并显示其对应的电压值,然后通过串口与串口液晶屏相连
输  入:无      
输  出:无
其  他:初始化可分为以下步骤:
                1:防止JTAG死锁
                2:配置系统时钟,保证板子能正常工作起来
                3:使能GPIO端口外设,也就是开GPIO功能。
                4:初始化24位 AD转换器。
                5:使能串口引脚并初始化串口波特率为 115,200, 8-N-1
                6:采样AD值并转换为相应的电压
*****************************************************************************/
int main(void)
{
        /**********JTAG防止死锁*************/
    JtagWait();                                           //JTAG防止死锁
  
           /***********配置系统时钟 *********/
    SysCtlClockSet(SYSCTL_SYSDIV_1 |                                           //不分频
                                   SYSCTL_USE_OSC  |                                           //系统时钟设置
                                   SYSCTL_OSC_MAIN |                                          //采用主振荡器
                   SYSCTL_XTAL_6MHZ);                                          //外接6MHz晶振

           /*********** 配置与ADS1211通讯接口 *********/
     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);              //使能GPIOD
           GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_4 | GPIO_PIN_5);       
//设置pin4、pin5为输出引脚
     GPIOPinTypeGPIOInput( GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7);
        //设置pin6、pin7为输入引脚

           /*********** 初始化ADS1211 24位AD转换器 *********/
         Ads1211Init();

           /***********  配置串口 *********/
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    IntMasterEnable();
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);               
//设置 GPIO A0 and A1 为串口引脚
UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,                       
//设置串口波特率为 115,200, 8-N-1
                        (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                         UART_CONFIG_PAR_NONE));
    // 使能接受中断及超时中断
    IntEnable(INT_UART0);
    UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);
    while(1)
    {
           //循环采集通道1、2、3、4的AD值,然后显示在串口液晶屏上
           for(i=0;i<4;i++)
           {
             ADConversion_test(i);          
           }
           //延时2S
           SysCtlDelay(2000*SysCtlClockGet()/3000);
    }
}

使用特权

评论回复
7
lilihua0721|  楼主 | 2011-11-27 20:43 | 只看该作者
本帖最后由 lilihua0721 于 2011-11-27 21:04 编辑

2、        ADS1211.c

#include "Type.h"         
#include "ADS1211U.h"         
#include "driverlib/sysctl.h"

/******************************
函数名: void Ads1211Init(void)
功  能: 初始化ADS1211U
说  明: 无
输  入:无
输  出:无
返  回:无
其  他:无
******************************/
void Ads1211Init(void)
{
   while(!ADS1211_DRDY());   
   while(ADS1211_DRDY());
//   delay5us(5) ;   
   /* 设置INSR写入4字节命令字CMR */
   WriteAds1211(0x64);         
   /* 设置输出REF及设置双极性 */
   WriteAds1211(0x52);           
   /* 选择半自动校准模式,增益PGA为1,通道3 */
   WriteAds1211(0x22);         
   /* 根据抽取率=fxin*TMR/(Fdata*512);计算抽取率 */
   WriteAds1211(0x81);         
   /* TMR设置为8;Fdata为1000;Fxin为10M,得到抽取率为312.5  20位有效位 */
   WriteAds1211(0x38);        
}

/************************************
函数名: void WriteAds1211(INT8U Dat)
功  能: 向ADS1211写入1字节数据
说  明: 无
输  入:Dat
输  出:无
返  回:无
其  他:无
*************************************/
void WriteAds1211(INT8U Dat){
  INT8U i,tmp;
  
  /* 移位 */
  tmp = Dat;
  for(i= 0;i< 8;i++){
    /* 模拟时钟高并保持一段时间 */
    ADS1211_SCLK_1();
        SysCtlDelay(2000*SysCtlClockGet()/30000);
    /* 获取数据 */
    if(tmp & 0x80)  ADS1211_SDIO_1();
    else            ADS1211_SDIO_0();
    /* 模拟时钟低并保持一段时间 */
    ADS1211_SCLK_0();
        SysCtlDelay(2000*SysCtlClockGet()/30000);
    /* 移位 */
    tmp <<= 1;
  }
}

/****************************************************
函数名: INT8U AdsReadData(tU32 *Dat,INT8U chn)
功  能: 读取ADS1211转换数据
说  明: 读取转换数据通过 Dat 进行返回
输  入:chn:通道号  0->3
输  出:Dat
返  回:0:成功
        1:失败
其  他:无
****************************************************/
INT8U AdsReadData(INT32U *Dat,INT8U chn)
{
  INT8U   i = 0;
  INT32U  Chr=0;  

  if(chn>3) return 1;
  while(!ADS1211_DRDY());     
  while(ADS1211_DRDY());
  WriteAds1211(0x05);
  switch (chn)
  {
    case 0:  
      WriteAds1211(0x20);
      break;
    case 1:
      WriteAds1211(0x21);                              
      break;           
    case 2:  
      WriteAds1211(0x22);
      break;   
    case 3:  
      WriteAds1211(0x23);
      break;   
    default:
      break;
  }
  while(!ADS1211_DRDY());   
  while(ADS1211_DRDY());
  WriteAds1211(0xc0);   // 读DOR寄存器中3个字节
  for(i=0;i<24;i++)
  {    // 读取数据
    ADS1211_SCLK_1();
        SysCtlDelay(2000*SysCtlClockGet()/30000);
    Chr <<= 1;
    ADS1211_SCLK_0();
        SysCtlDelay(2000*SysCtlClockGet()/30000);
    Chr += ADS1211_SDOUT()?1:0;
  }
  ADS1211_SCLK_0();          // ADS1211的SCLK清零
//  (*(INT32U_UNION*)&Chr).sBYTE.BHH = 0;
  *Dat =Chr;
  return 0 ;  
}
/**********************************************
函数名: void ADCmid(void)
功  能: 1路A/D转换函数(中值滤波)
说  明: 获取通道channel中值滤波后的A/D转换结果,
        返回该通道中值滤波后的A/D转换结果
输  入:channel: 通道号  0->3      
输  出:无
返  回:中值AD
其  他:无
***********************************************/
INT32U ADCmid_ADS1211(INT8U chn){
  INT32U i,j,k,tmp;
  
  tmp =0;
  if((!AdsReadData(&i,chn))&&
      (!AdsReadData(&j,chn))&&
      (!AdsReadData(&k,chn)))
  {
    if(i > j)
        {
      tmp = i;
      i   = j;
      j   = tmp;
    }
    if(k>i)
        {
      if (k >j)
             tmp = j;
      else      
             tmp = k;
    }
    else
        {
      tmp = i;
    }
  }            
  return tmp;
}

/**************************************
函数名: void ADCave(void)
功  能: 1路A/D转换函数(均值滤波)
说  明: 通道channel进行n次中值滤波,
        求和再作均值,得出均值滤波结
        果并返回该通道均值滤波后的A/D
        转换结果   
输  入:chn:通道号  0->3     
        n:中值滤波次数
输  出:无
返  回:无
其  他:均值AD
**************************************/
INT32U ADCave_ADS1211(INT8U chn,INT8U n)
{
  INT8U    i=0;
  INT32U   j=0;
  
  for (i=0; i<n; i++)
  {
    j += ADCmid_ADS1211(chn);
  }
  j = j/n;
  return j;
}
1、
ADS1211.h
部分

#ifndef _ADS1211U_H
#define _ADS1211U_H

#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "Type.h"

/* AD采集芯片端口定义 */
#define ADS1211_SCLK_1() (GPIOPinWrite(GPIO_PORTD_BASE,
                                                  GPIO_PIN_4, GPIO_PIN_4))
#define ADS1211_SCLK_0()(GPIOPinWrite(GPIO_PORTD_BASE,
                                                 GPIO_PIN_4,~GPIO_PIN_4))
#define ADS1211_SDIO_1() (GPIOPinWrite(GPIO_PORTD_BASE,
                                               GPIO_PIN_5, GPIO_PIN_5))
#define ADS1211_SDIO_0() (GPIOPinWrite(GPIO_PORTD_BASE,
                                                  GPIO_PIN_5,~GPIO_PIN_5))

#define  ADS1211_SDOUT() (GPIOPinRead(GPIO_PORTD_BASE,
                                                GPIO_PIN_6))
#define  ADS1211_DRDY() (GPIOPinRead(GPIO_PORTD_BASE,  GPIO_PIN_7))
/* 函数接口 */
void Ads1211Init(void) ;
void WriteAds1211(INT8U Dat);
INT8U AdsReadData(INT32U *Dat,INT8U chn);
INT32U ADCmid_ADS1211(INT8U chn) ;
INT32U ADCave_ADS1211(INT8U chn,INT8U n) ;
#endif
2、Type.h部分

#ifndef _TYPE_H
#define _TYPE_H
/* 类型定义 */
typedef unsigned char INT8U;/* 无符号8位数*/
typedef signed charINT8S;/* 有符号8位数*/
typedef unsigned short int INT16U;/* 无符号16位数 */
typedef signed short int INT16S; /* 有符号16位数 */
typedef unsigned long intINT32U;/* 无符号32位数 */
typedef signed long int INT32S;/* 有符号32位数 */
typedef float FP32; /* 单精度浮点数 */
typedef double FP64; /* 双精度浮点数 */
typedef unsigned char tBoolean;
#endif

使用特权

评论回复
8
lilihua0721|  楼主 | 2011-11-27 20:45 | 只看该作者
本帖最后由 lilihua0721 于 2011-11-28 18:35 编辑

三、        基于LM3S811与ADS1211数据采集卡设计效果展示(同向端接3.3V,反向端接0V)





四、        24位AD转换器ADS1211介绍
虽然LM3S811已经有AD转换功能,在一般精度要求不高的情况下,使用LM3S811自带的AD转换模块很方便,特别是TI提供的库用的很爽,呵呵,纯属个人观点!
但是有些时候对采集数据精度要求较高,采用LM3S811自带的AD模块就显得很吃力了,在此给大家介绍TI的一款24位AD转换器。
ADS1211特点如下:
(1)Δ-∑型A/D转换器。
(2)可编程设置采样速率。
(3)最低功耗为1.4mW。
(4)差分输入。
(5)SPI兼容SSI接口。
(6)具有芯片自校准功能。
(7)采样数据输出速率在10Hz时有效分辨率可达到20位,采样数据输出速率在1000Hz时有效分辨率可达16位。
(8)可使用内部或外部的参考电压。
(9)具有可编程的增益放大器。
ADS1211含有一个四通道多路开关,为24脚DIP或SOIC封装。其结构如图1所示,其内部由可编程增益放大器(PGA)、二阶Δ-∑调制器、调制控制单元、可编程数字滤波器、微控制器单元、寄存器组(指令寄存器、命令寄存器、数据寄存器、校准数据寄存器)、一个串行接口、一个时钟电路和一个内部2.5V电压基准等组成。
我在此就总结一句话:测量精度高!
其它不多做介绍,因为附件文档很详细,需要使用的朋友直接参考附件就可以了!

使用特权

评论回复
9
chain1987| | 2011-11-27 22:29 | 只看该作者
:victory:

使用特权

评论回复
10
alnjby| | 2011-11-28 08:04 | 只看该作者
谢谢分享,不错哦,支持!!!











南京耳鼻喉医院
武警南京医院

使用特权

评论回复
11
淼淼一江| | 2011-11-28 08:29 | 只看该作者
厉害!而且大气!佩服,佩服!

使用特权

评论回复
12
greenbug| | 2011-11-28 09:07 | 只看该作者
感谢楼主的分享,楼主很厉害。但是有个问题,LM324好像不是R-R的,您这个采集大约1V以下的低压估计会有问题。

使用特权

评论回复
13
greenbug| | 2011-11-28 09:11 | 只看该作者
不知道楼主有没有实验下采集1v以下的低压的结果。希望和您讨论下

使用特权

评论回复
14
tianm| | 2011-11-28 10:58 | 只看该作者
请问你的液晶是什么型号 分辨率很高啊

使用特权

评论回复
15
bd7qwmcu| | 2011-11-28 13:21 | 只看该作者
强烈顶楼主,谢谢分享

使用特权

评论回复
16
lilihua0721|  楼主 | 2011-11-28 14:43 | 只看该作者
14# tianm
呵呵,用的是周立功的4.3的串口屏

使用特权

评论回复
17
lilihua0721|  楼主 | 2011-11-28 14:45 | 只看该作者
13# greenbug
以前设计时用来检测小电阻的,实际测量的就是小电压,测量精度挺高的

使用特权

评论回复
18
lilihua0721|  楼主 | 2011-11-28 14:48 | 只看该作者
13# greenbug 以前设计时用来检测小电阻的,实际测量的就是小电压,测量精度挺高的,就是ads1211太贵了!!!

使用特权

评论回复
19
muayuan521| | 2011-11-28 14:59 | 只看该作者
感谢,正需要这样的资料!

使用特权

评论回复
20
stupidone| | 2011-11-28 16:11 | 只看该作者
厉害

使用特权

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

本版积分规则

6

主题

470

帖子

2

粉丝