专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
分享TI LM3S811开发板使用心得 之高精度采集卡制作
2019-08-06 16:38
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
7141
19
1028
本帖最后由 lilihua0721 于 2011-11-30 21:51 编辑
以下是我使用
TI MCU制作高精度采集卡的全部资料
,包括硬件搭建原理图、软见工程文件,液晶资料及ADS1211资料,详情请参考附件。
分别放在以下连续的8个楼层中,有不足的地方请大家指教!
效果图展示:
一、
基于
LM3S811
与
ADS1211
数据采集卡设计硬件部分(全部电路请参考附件)
对于硬件我是采用以前的做的一块
ADS1211
采集卡板跳线来完成实验的,目前并没有针对
LM3S811
设计
PCB
板,在这里给出测试原理图。
1、
电源部分及
ADS1211
的外围电路设计:
在测量过程中,电源是影响测量精度大的因素,所以电源必须要稳定。
以下是我设计的电源部分及
ADS1211
的外围电路设计。
2、
ADS1211
差分输入信号的隔离:
采用了
LM324
用于电压跟随,在此没有做放大(测试差分输入电压为
0~5V
)
具体如下图:
3
、串口通信电路:
考虑到通讯的距离及稳定性采用了
MAX232
转换为
RS232
电平,
具体参考如下:
3、
LM3S811
与
ADS
板接口连接:
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
lilihua0721
2019-08-07 02:59
本帖最后由 lilihua0721 于 2011-11-27 21:09 编辑
/******************************************************************************
函数名
: void ADConversion_test(INT8U chn)
功
能
:
测试
24
位
AD
转换器的采样精度
说
明
:
由于采集输入端电压范围为
0~5V
,
5V
对应的满量程为
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;
}
加载中...
查看其它19个回答
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
/******************************************************************************
函数名: void ADConversion_test(INT8U chn)
功 能: 测试24位AD转换器的采样精度
说 明: 由于采集输入端电压范围为0~5V,5V对应的满量程为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;
}
一周热门 更多>