0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于ADC0809与51单片机组的16通道数据采集系统

h1654155282.3538 来源:Chip37 作者:Chip37 2021-02-14 17:40 次阅读

在日常实验中,经常使用单片机系统实现数据采集功能,即实现实验数据连续精确的数模转换。ADC0809是该类单片机数据采集系统中使用最为频繁的数模转换芯片之一。但是,在许多介绍ADC0809芯片的文献中,该数模转换芯片使用时往往还需要较多的辅助芯片,硬件电路和软件编写都比较复杂,相应成本偏高。因此本文给出一种方法,只需2片ADC0809数模转换芯片、1片741s74触发器芯片,就能实现简洁、快捷、精确的16通道实时数据采集。

1.硬件介绍

ADC0809是一个典型的8位8通道逐次逼近式数模转换芯片,可实现8路模拟信号的分时采集,外接时钟频率一般不高于640KHz,一次数据转换时间大约为100us。ADC0809数据采集方式有3种:延时,查询,中断。它们在电路连接和程序编写中都有所不同。在实验中可以选择其中的一种或多种,本文中的电路连接和程序都采用查询方式。ADC0809为一种输出型芯片,管脚A,B,C为地址,用于选通IN0~IN7上的一路模拟量输入。通常单片机通过A,B,C将二进制的3位地址数据输入到ADC0809中,ADC0809采集相应通道的数据并通过8位数据线传回到单片机中。引脚A,B,C选择通道的二进制地址数据如表1所示。

o4YBAGARNU6AOOxAAABr1sLMmMo471.png

741s74是一种上升沿触发的边沿触发器,该芯片中包含2个相同的、相互独立的边沿触发D触发器电路。每一个D触发器的输出信号的频率为输入信号的频率的1/2,如果将2个D触发器串联,就可以形成一个四分频的延时器。

2.系统设计

2.1ADC0809与51单片机

在大多数文献中,ADC0809与51单片机连接方式分为3种,如图1~图3所示。

pIYBAGARNVaAFIDHAADwE8K6wrA511.png

图1连接方式1

o4YBAGARNV-AAy3zAADOWwPmUmA066.png

图2连接方式2

pIYBAGARNWiAFG6nAAC1Zpbc_6M365.png

图3连接方式3

3种连接方式都为连接1片ADC0809的数据采集电路图,除需要分频芯片外,还需要外加1片~2片其他的芯片,其中,图3只能适合使用1片ADC0809。如要连接多片ADC0809,则外加芯片更多。

图4为本次实验所设计的简单的连接方式,把第1片ADC0809的8位数据线与51单片机的一组I/O直接相连,取该组I/O的低3位为ADC0809采集通道的地址线。同理,第2片ADC0809的8位数据线与地址线同接在另一组I/O13中。这种连接方式可以省去外加的芯片,简化电路,减少了电路板的空间,节省成本。

pIYBAGARNXGAfvknAAA_hol3LG4667.png

图4ADC0809与51单片机的简单连接

2.2采样保持滤波电路

ADC0809对输入模拟量要求如下:信号单极性,电压范围为0~5;若信号太小,则必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持;为避免通道之间的信号相互干扰,在模拟电压信号进入ADC0809之前,先进行滤波处理。图5为在信号进入ADC0809之前进行的放大采样保持滤波处理,IN端接待采集的电流信号,OUT端接ADC0809的8个模拟电压信号输入口之一。如果待采集信号为电压信号,电阻R1要略去。

6

图5采样保持滤波电路

2.3时钟电路

ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,其正常工作频率为500kHz-640kHz。通常为ADC0809提供外部时钟信号有2种方式:(1)可以利用外部晶振频率为其单独提供;(2)可以借助单片机的时钟信号。很明显,第2种方式更为简单方便。51系列单片机的ALE脚在不访问片外程序存储器时,可作为对外输出的时钟信号,其提供时钟频率为2MHz。该时钟频率在经由741s74的2个D触发器进行四分频之后,转换为500kHz,符合ADC0809正常工作允许的频率范围。

3.程序设计

在图4的连接方式下,程序设计比较简单,只需按照“选通道一启动采集一等待转换结束一读数据”4个步骤循环进行,就可以依次读取到16个通道采集的数据。以下是以C语言为基础编写的采集程序的核心语句。

for(i=0;i《8;i++)

{

P2=0xf8+i;//通道地址

ST2=0;//启动采集

ST2=I;

ST2=0;

whiIe(EOc2==0);//等待转换完毕

OE2=l;

addata[i]=P2;//ADC0809的l通道~8通道的数据

OE2=0;

}

for(i=8;i《16;i++)

{

P0=0xf8+i;

STI=0;

STI=I;

ST1=0:

while(EOC1==O):

OE1=1;

ad_data[i]=P1;

P2=ad_data[i];//ADC0809的9通道~1O通道的数据

}

上述程序并没有设置采集频率,ADC0809的时钟频率是500kHz,转换一次需要64个时钟脉冲,即进行一次模数转换需要时间0.128ms。命令语句一行用时约2us,与转换时间相比可以忽略不计。由计算可知,1s内约可采集7812个数据。利用定时器或软件延时可以灵活控制数据采集的频率,理论上采样频率的范围可以控制在lHz~78l2Hz。在实际测试时,由于各方面的原因往往达不到理论结果,一般采用的范围为1Hz~50Hz时,采集结果最佳。

4.实验结果与分析

把一个可变电阻的电压输出端接在ADC0809的模拟通道上。在0~5V范围内调节可变电阻的电压输出值,检测采集系统的各个通道的采集结果,16个通道均能正常工作,误差范围为0-4%。根据分析,产生误差的原因有以下几方面:

(1)电源电压输入不稳定,导致ADC0809的供电电压不稳定,即ADC0809数模转换的参考电压值不稳定,影响了转换结果;

(2)电压表测试精度低,存在测试误差;

(3)虽然进行了滤波处理,但是不能完全消除待采集电压信号的干扰。

改进上述问题只能在最大程度上减小误差,不可能根本消除。例如,可以采取在电源输入端、输入电压端增加高精度滤波电路或用软件滤波等方法减小误差。

如果在实际中要用到多片ADC0809,还有一种电路连接方法,如把每一片ADC0809的数据输出线都连接在单片机的同一组I/O口上,并将ADC0809的引脚ST,EOC,OE连接在单片机相同的引脚上,但是每一片ADC0809的地址线A,B,C要分开连接在单片机不同的引脚上。

结束语

该系统采用ADC0809与单片机之间电路相连接的方法,与现有方法相比,其具有电路简单、制作成本低、程序编写简易、信号稳定等优点,可以实现16通道及更多通道的实时数据采集。实验结果表明,该系统采集精度较高,采集频率范围广,采集速度较快。由于采用的芯片等级较低,因此该系统的采集速率有限,这也是下一步需要改进的地方。
责任编辑人:CC

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 51单片机
    +关注

    关注

    269

    文章

    5649

    浏览量

    120700
  • ADC0809
    +关注

    关注

    3

    文章

    140

    浏览量

    38353
  • 数据采集系统

    关注

    4

    文章

    224

    浏览量

    30711
收藏 人收藏

    评论

    相关推荐

    数据采集---从基本的AD0809

    的硬件工程师的语言,它是语言,而不是一般意义上的专用软件,所以,LABVIEW逐渐成为工科院校学生的基本课程。数据采集是LV最擅长的领域,对于开发过单片机的人来说,数据采集是再熟悉不过的了,如果想真正
    发表于 07-13 17:41

    ADC0809理解NI板卡数据采集

    ADC0809就可以自动不断地采集数据。START每个时钟的下降沿,都会采集一个数据,如果需要采集1000个
    发表于 10-31 10:11

    求助,get adc0809(void)

    单片机控制ADC0809来实现数据采集,最后显示在液晶上,本人程序中getadc0809不会
    发表于 04-24 13:00

    51单片机 ADC0809 串行口通讯

    求救,!!!!利用51单片机采集ADC0809转换的三个通道数据并发送至上位机,C语言程序或源
    发表于 06-03 16:40

    多路数据采集系统

    请教一下:8通道的信号怎么确定是要放大还是衰减?用89C51ADC0809是否能进行对模拟型号的采集51
    发表于 04-25 13:55

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

    我要做一个8路数据采集系统,是用51单片机做主芯片,请问一下用ADC0809转换芯片时如何接外围元件?信号跟转换芯片之间要如何连接呢?
    发表于 04-25 18:53

    如何才能将ADC0809变成三位十进制的呢?

    ADC0809实现八通道数据采集,请问ADC0809采集到的数据是八位二进制的,如何才能将他变
    发表于 08-26 04:06

    ADC0809是什么?有何功能

    项目中由于单片机开发板自带的ADC模块不够用,单片机自带的ADC模块是XPT2046,只有一个外部模拟输入信号通道,不能够满足我的需求,所以
    发表于 07-20 06:30

    如何用ADC0809实现八通道采集

    1.ADC0809的概述ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通
    发表于 12-09 06:58

    如何去实现基于32单片机16通道ADC数据采集

    基于32单片机16通道ADC数据采集这个部分的内容,是作为外部模拟量部分的采集工作,按照任务
    发表于 01-05 08:30

    adc0809引脚图及功能详解,adc080951单片机连接电路分析

    adc0809是CMOS单片型逐次逼近式A/D转换器,adc0809引脚有28条,采用双列直插式封装.Madc0809单片机连接电路主要涉
    发表于 09-13 16:54 9.1w次阅读
    <b class='flag-5'>adc0809</b>引脚图及功能详解,<b class='flag-5'>adc0809</b>与<b class='flag-5'>51</b><b class='flag-5'>单片机</b>连接电路分析

    adc0809单片机连接图(附程序)

    adc0809单片机连接图(附程序)
    发表于 04-22 09:17 92次下载

    ADC080951单片机的连接方式

    模数转换器定位为单片机的外部RAM单元,因此与单片机的连接就有很多种。大体上说ADC0809在整个单片机系统中是作为外部RAM的一个单元定位
    发表于 11-22 15:18 6.7w次阅读
    <b class='flag-5'>ADC0809</b>与<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的连接方式

    ADC0809的使用

    。分辨率8位,精度7位,带8个模拟量输入通道,有通道地址译码锁存器,输出带三态数据锁存器。启动信号为脉冲启动方式,最大可调节误差为±1LSB。ADC0809内部没有时钟电路,故CLK时
    发表于 11-10 13:06 52次下载
    <b class='flag-5'>ADC0809</b>的使用

    通过模数转换芯片ADC080951单片机实现简易电压表仿真

    通过ADC080951单片机实现简易电压表仿真
    发表于 11-23 16:20 46次下载
    通过模数转换芯片<b class='flag-5'>ADC0809</b>和<b class='flag-5'>51</b><b class='flag-5'>单片机</b>实现简易电压表仿真