专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
分享TI LM3S811开发板使用心得 之高精度采集卡制作
2019-08-06 16:38
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
7244
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-06 19:32
本帖最后由 lilihua0721 于 2011-11-27 20:57 编辑
一、
基于
LM3S811
与
ADS1211
数据采集卡设计软件部分
(
完整工程文件请参照附件工程文件
)
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
颜 {MOD}对指定区域进行填充
说
明
:
清液晶指定区域
输
入:
usColor
填充颜 {MOD}
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);
//
发送填充颜 {MOD}
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);
}
}
加载中...
查看其它19个回答
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
一、基于LM3S811与ADS1211数据采集卡设计软件部分(完整工程文件请参照附件工程文件)
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颜 {MOD}对指定区域进行填充
说 明: 清液晶指定区域
输 入:usColor填充颜 {MOD}
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);
//发送填充颜 {MOD}
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);
}
}
一周热门 更多>