基于单片机的数据采集系统

这篇具有很好参考价值的文章主要介绍了基于单片机的数据采集系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘 要:本文以AT89C51单片机为核心,设计一个基于单片机的数据采集系统。系统可以采集16路模拟量,精度为12位,16路开关量和2路脉冲量,并将采集到的数据每隔一分钟通过串口发送到PC机。

关键字:AT89C51;数据采集;串口通讯

1 概述

在工业控制系统中,除了控制单元和执行单元外,还必须有反馈环节。在反馈环节中,最重要的就是对数据的采集。一般的工业控制中,数据有很多种形式,最常见的有电流电压的模拟量、以二进制形式输入的开关量以及以脉冲形式输入的脉冲信号。

本文设计一数据采集系统系统,系统以AT89C51单片机为核心,AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,1个全双工串行通信口[1],AT89C51可以按照常规方法进行编程,也可以在线编程,这给开发带来方便。

如图1所示为设计的系统原理框图。系统选择一个串行的A/D转换芯片,用模拟开关作扩展,两个模拟开关即可扩展成16路的模拟量输入。开关量的采集可以直接用单片机的I/O,用两个并口即可完成16路的开关量采集。如图所示,AT89C51单片机还有两个外部中断接口,即可用来测量脉冲量的输入,采集其输入频率。单片机可以通过串口与上位PC机进行通讯,把采集到的数据发送到上位机上。

图1 系统原理图

2 硬件电路设计

系统硬件可以分成四个部分,分别为模拟量采集电路、开关量采集电路、脉冲量采集电路以及单片机与PC的串口通讯电路。下面分别作简单的介绍。

2.1 模拟量采集电路

模拟量的采集要用到A/D转换芯片,而且精度为12位,这里选择MAX1241 A/D转换器。MAX1241是一种低功耗、低电压的12位逐次逼近型ADC,最大非线性误差小于1LSB,转换时间9ms,内置快速采样/保持电路。MAX1241采用三线式串行接口,与单片机的接线简单,如图2所示[3]。图中两个电容是去藕电容,用以对电源进行滤波。Vi是采集电压的输入端,Vref是A/D转换器的参考电压。一般情况下可以接单片机的电源。

图2 MAX1241与单片机的接线图

系统要求对16路的模拟量进行采集,因此,只有一个A/D转换器就不够的,但如果用多个A/D转换器一方面会造成资源浪费,成本加大,另一方面单片机的I/O也不够,因此这里用两个8路模拟开关进行扩展,扩展成16路。如图1的原理图所示,系统选用两个CD4051模拟开关[3],并用单片机的四个I/O口控制两个模拟开关的通道选择端,在采集过程中,选择不同的通道进行数据采集。

2.2 开关量采集电路

对开关量的采集电路相对比较简单,因为开关量的状态只有0和1两种,所以只要用两个单片机的并口就可以了,这里用的是P0口和P2口。但是有一点需要说明的是: 由于AT89C51单片机的P0口内部没有上拉电阻,所以在电路中必须加入外部上拉电阻,阻值可以是4.7K~10K。而P2口内部自带上拉电阻,所以不需外加上拉电阻。采集输入电路如图1系统原理图所示。

2.3 脉冲量采集电路

脉冲量信号是周期变化的信号,AT89C51单片机有两个外部中断INT0和INT1接口,利用这两个外部中断输入接口,可以对脉冲量信号进行测量,脉冲信号可以直接送到单片机的外部中断接口,也可以进行适当的整形后再送到单片机的外部中断接口,如加入带施密特功能的反向器74LS14。也可以用比较器进行整形,这样使单片机的采集测量更加可靠,更加精确。

2.4 通讯电路

该系统没有设计数据的显示系统,所以把采集到的数据发送到上位PC机上,与PC进行通讯。因为单片机与PC机的电平是不一样的,因此两者要进行数据交换,必须采用相应的电平转换电路。用得最多的就是RS232通讯方式,采用MAX232芯片即可完成。简单的电路如图3所示。

图3 通讯电路

3 软件设计

根据设计要求,按照实现功能的分类,软件部分主要完成四项任务:系统初始化、数据采集、数据处理、向PC机发送数据。在数据处理中,需要进行大量浮点数的乘除法和正弦、余弦运算,因此数据处理部分采用C语言编写,在Keil环境中模块化编程,充分利用C语言强大的计算能力。在数据采集部分中,MAX1241对时序要求比较严格,采用汇编语言实现,所有功能模块均为独立的C文件或ASM文件。而实现C语言和汇编语言的混合编程[2]是软件设计中的难点和关键之一。在设计中,汇编语言采用单独的文件,通过寄存器传递函数参数。程序流程图如图4所示。

这里给出MAX1214的控制程序,是用汇编语言编写,控制子程序完成一次A/D转换和输入,输入数据存放于R0,R1寄存器。

;寄存器及端口定义:

CS: BIT P1.0 ;片选信号位

DOUT: BIT P1.2    ;串行数据输入位

SCLK: BIT P1.1 ;驱动时钟位

DATA_BH: EQU R0 ;高字节数据存储单元

DATA_BL: EQU R1 ;低字节数据存储单元

CONT_H: EQU R0 ;高位取数计数器

CONT_L: EQU R1 ;低8位取数计数器

SADC_R: XRL A,A ;清A

MOV CONT_H,#04H ;高8位计数

MOV CONT_L,#08H ;低8位计数

CLR SCLK ;SCLK置“0”

CLR CS ;选中1241,启动转换

SADC END:JNB DOUT,SADC_ END ;检测A/D转换结束

READ_H: SETB SCLK ;

CLR SCLK ;产生一个驱动时钟

MOV C,DOUT ;输入一位数据

RLC A ;数据移位至ACC.0

DJNZ CONT_H,READ_H ;高 4位输入结束判别

MOV DATA_BH,A ;高 4位数据送寄存器

READ_L: SETB SCLK

CLR SCLK ;产生一个驱动时钟

MOV C,DOUT ;输入一位数据

RLC A ;数据移位置ACC.0

DJNZ CONT_L,READ_L ;低8位输入结束判别

MOV DATA_BL,A ;低8位数据送寄存器

SETB SCLK

CLR SCLK ;清 DOUT输出

SETB CS ;撤消片选

RET

图4 软件程序流程图

4 结束语

该系统以AT89C51单片机为核心,可以对16路模拟量、16路数字开关量和两路脉冲量进行采集,模拟量采集精度达到12位,在实际应用中,可以对电压信号进行直接采集,如果要对传感器的标准电流量进行采集时,还需加入采样电阻,把电流转换成电压后进行采集。对采集的脉冲量的频率取决于单片机的时钟频率,一般不能高于单片机的运行时钟,如单片机用12MHz的晶振,则采集的脉冲频率只能低于12MHz。本系统在实际应用中已调试通过,采集的数据精度高,速度快。

参考文献

[1]孙涵芳.单片机原理及应用(修订版)北.京航空航天大学出版社,1996年.

[2]马忠梅.单片的C语言应用程序设计(第三版).北京航空航天大学出版社,2003年.

[3]于海生.微型计算机控制技术.北京:清华大学出版社,1999年.文章来源地址https://www.toymoban.com/news/detail-495705.html

到了这里,关于基于单片机的数据采集系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 基于51单片机和proteus的电流采集系统

    基于51单片机和proteus的电流采集系统

    此系统是基于51单片机和proteus的仿真设计,功能如下: 1. LCD1602实时显示获取到电流值及设定值。 2. 按键可调整电流设定值。 3. 电流值过高则蜂鸣器报警。 4. 指示灯指示电流及系统状态。 5. 系统信息可通过串口实时更新。 功能框图如下: Proteus仿真界面如下: 下面就各个模

    2024年02月16日
    浏览(14)
  • 74-基于stm32单片机农业蔬菜大棚温湿度光照采集控制系统(程序+原理图+元件清单全套资料)...

    74-基于stm32单片机农业蔬菜大棚温湿度光照采集控制系统(程序+原理图+元件清单全套资料)...

    资料编号:074 功能介绍:采用stm32单片机作为主控CPU,采用DHT11传感器采集温湿度,采用光敏传感器采集光照强度,通过按键设置温湿度、光照的阈值,当温度高于设置值,继电器开启散热,当湿度低于设置值,继电器开启加湿,当光敏值大于设置值,蜂鸣器进行报警提醒,

    2024年02月12日
    浏览(35)
  • 基于51单片机的电压采集(ADC0804)

    基于51单片机的电压采集(ADC0804)

    1.ADC0804简介 工作电压:+5V,即VCC=+5V。 模拟转换电压范围:0~+5V,即0≤Vin≤+5V。 分辨率:8位,即分辨率为1/(2^8)=1/256,转换值介于0~255之间。 转换时间:100us(fCK=640KHz时)。 转换误差:±1LSB。 参考电压:2.5V,即Vref/2=2.5V。 Vin(+)、Vin(-):两个模拟信号输入端,可以接

    2023年04月08日
    浏览(8)
  • 基于51单片机的电压采集(ADC0809)

    基于51单片机的电压采集(ADC0809)

    1.ADC0809简介 IN0~IN7 : 8路模拟量输入端; D0~D7:8位数字量输出端; ADDA、ADDC、ADDC:3位地址输入线,用于选择8路模拟通道中的一路; ALE:地址锁存允许信号,输入,高电平有效; START:A/D转换启动信号,输入,高电平有效; EOC:A/D转换结束信号,输出。当启动转换时,高引脚为低电

    2023年04月18日
    浏览(8)
  • [免费开源]基于freescale单片机的心电信号采集与处理

    [免费开源]基于freescale单片机的心电信号采集与处理

     本文的工程可访问:https://gitee.com/pidanQwQ/dsp    (包含两套不同的方案,可自行下载对比)  或者在CSDN中(仅一套):【免费】基于Freescal单片机的心电信号采集与处理资源-CSDN文库 功能要求: ⑴实现ADS1292获取心电信号原始数据,并能通过串口或其他接口传输到PC电脑; ⑵实现

    2024年01月21日
    浏览(21)
  • 基于单片机的温室环境数据监测系统的设计

    基于单片机的温室环境数据监测系统的设计

    收藏和点赞,您的关注是我创作的动力   与农业发达国家相比,我国的农业科技方面还处于刚刚起步的状态,多数自动化农业设备仍然使用在科研方。目前在温室环境数据监测方面,自动化设备比较落后。本文介绍了以STM32F103RCT6微控制器为核心,结合多种外设进行设计的温

    2024年03月21日
    浏览(13)
  • 基于GD32单片机的12位ADC压力采集(50kg压力),附源码和原理图

    基于GD32单片机的12位ADC压力采集(50kg压力),附源码和原理图

    上位机监测到的ADC采集到的数据,该处采集的电压值是3.287mv,电压及压力值如下图:  示波器采集的电压值:3.26V,与上述单片机采集的数值基本一致 上位机监测到的ADC采集到的数据,该处采集的电压值是2.454mv,电压及压力值如下图:  示波器采集的电压值:2.50V,与上述单

    2024年04月22日
    浏览(20)
  • STM32单片机三线制PT100温度采集控制系统LCD12864显示器

    STM32单片机三线制PT100温度采集控制系统LCD12864显示器

    功能介绍:    

    2024年02月15日
    浏览(13)
  • 基于FPGA的数据采集系统 ADDA采集 采集卡

    基于FPGA的数据采集系统 ADDA采集 采集卡

    基于FPGA的数据采集系统 ADDA采集 采集卡 采用FPGA与ADC设计一个可以在200K Hz采样率情况下以16bits精度同时对8通道的模拟信号进行采集的采集系统。 基于FPGA的数据采集系统ADD采集卡是一种高效的数据采集设备。采用FPGA与ADC设计的这种设备可以在200 KHz采样率情况下以16位精度同

    2024年02月03日
    浏览(13)
  • 单片机开发|基于单片机的婴儿睡眠监测系统设计

    单片机开发|基于单片机的婴儿睡眠监测系统设计

    作者简介:全栈开发工程,从事Java、Python、前端、小程序方面的开发和研究,对大数据应用与开发比较感兴趣, 主要内容:Java项目、前端项目、Python项目、小程序开发、大数据项目、单片机 收藏点赞不迷路  关注作者有好处 文末获取源码   感谢您的关注,请收藏以免忘记

    2024年02月10日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包