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

2019-08-06 16:38发布

本帖最后由 lilihua0721 于 2011-11-30 21:51 编辑

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


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

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

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

3、LM3S811ADS板接口连接: 接口部分.JPG

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
lilihua0721
2019-08-07 02:59
本帖最后由 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;

}

一周热门 更多>