好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

嵌入式系统开发课程多路数据采集系统设计样本.docx

11页
  • 卖家[上传人]:碎****木
  • 文档编号:229361661
  • 上传时间:2021-12-25
  • 文档格式:DOCX
  • 文档大小:136.70KB
  • / 11 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 多路数据采集系统设计.061 题目规定所设计数据采集系统,共有 16 路信号输入,每路信号都是 0~10mV,每秒钟采集一遍,将其数据传给上位PC 计算机,本采集地址为 50H规定多路模仿开关用 4067, A/D 转换用 ADC0809,运算放大器用 OP07,单片机用 89C51,芯片用 MAX232设计其电路原理图,用 C51 语言编制工作程序2 总体方案设计依照题目规定,传感器一方面采集 16 路信号,然后被多路模仿开关 4067 选通某一路信号,接着通过信号调理电路,由A/D 转换器进行模/数转换后发送给单片机,之后通过 MAX232 由 RS232 串口进行通讯,最后将数据传递到上位 PC 计算机因而, 数据采集系统重要涉及如下几种重要环节:2.1 信号选通环节由于题目规定采集信号路数达到了 16 路,每一路信号流通路线均相似如果为每路信号都设立相应放大、A/D 转换单元,成本将大幅度提高因而可以接入一种多路模仿开关 4076,轮流选通每一路信号,实现多路信号共用一种运算放大器和A/D 转换单元,即减少了成本,又简化了电路4067 为 16 路模仿开关,其内部涉及一种 16 选 1 译码器和被译码输出所控制 16 个双向模仿开关。

      当禁止端 INH 置 0 时,在 I/N0-I/N15 中被选中某个输入端与输出公共端 X 接通,外部地址输入端A、B、C、D 决定了被选通端;当INH 置 1 时,所有模仿开关均处在断路状态2.2 信号调理电路为了以便信号进一步传播和解决,普通均要在传感器输出端接入信号调理电路, 对传感器输出信号进行变换、隔离、放大、滤波等解决此处信号波动范畴只有 0~ 10mV,属于薄弱信号,需要进行放大解决按照题目规定,本文设计系统选用运算放大器 OP07OP07 是一种高精度单片运算放大器,其输入失调电压和漂移值均很低, 适合用作前级放大器2.3 A/D 转换器由于单片机只能解决数字信号,因此需要接入 A/D 转换器将模仿信号转换成数字信号本文采用题目提供 ADC0809,它可以和单片机直接通讯ADC0809 由一种 8 路模仿开关、一种地址锁存与译码器、一种 A/D 转换器和一种三态输出锁存器构成多路开关可选通 8 个模仿通道,容许 8 路模仿量分时输入,共用 A/D 转换器进行转换三态输出锁器用于锁存 A/D 转换完数字量,当 OE 端为高电平时,才可以从三态输出锁存器取走转换完数据此处采用中断方式使数据在单片机与ADC0809 之间进行互换,端口地址为FF50H; P0 口和WR 信号共同生成单片机启动转换信号;为了在启动转换同步选通通道,将通道地址锁存信号 ALE 与 START相连;把 P0 口和 RD 同步处在有效位组合信号与 A/D 转换器输出信号 OE 相连,那么通道地址选取和数据输出共用一种地址,但是两者不同步浮现;转换结束信号 EOC 通过非门后接至 89C51 INT1 端。

      2.4 串口发送电路RS232 是用正负电压来表达逻辑状态,与 TTL 以高低电平表达逻辑状态规定不同为了可以同计算机接口或终端 TTL 器件连接,必要在 RS232 与 TTL 电路之间进行电平转换本文选用题目提供 MAX232 芯片完毕 TTL,EIA 双向电平转换2.5 系统原理框图PC 上位计算机16 路模仿信号输入多路模仿开关(4067)运算放大器(OP07)A/D 转换器(ADC0809)单片机(89C51)通信模块(MAX232、RS232)图 1 系统原理框图3 电路原理图依照上文论述设计方案原理,可以设计相应硬件电路图,如错误!未找到引用源图 2 电路原理图4 程序设计方案依照前文所述,要实现题目规定,系统程序要包括3 个重要模块,即初始化系统、A/D 转换模块以及数据通信模块程序总体流程图如错误!未找到引用源系统初始化A/D转换系统中断数据通信图 3 程序总体流程图系统初始化完毕以及选通某一路模仿信号时,单片机启动 A/D 转换器,对信号进行读取、存储操作当上位机发出祈求且规定地址为 50H 时,单片机进入中断解决子程序,上传数据4.1 系统初始化重要完毕定期器,串行通信,中断有关设立。

      1) 定期器 T0 工作于模式 1,充当 16 位定期器,计数初值 4C00H(相应50ms),便于实现 1s 巡回采样;定期器T1 工作于模式 2,充当波特率发生器,计数初值FDH, SMOD=0,得到波特率为 9.6K2) 串行通信 SMOD 置 1,容许单片机接受信号3) 使能定期器T0、外中断1、串行通信中断其中,T0 中断完毕 1s 巡回采样, 外中断 1 完毕 A/D 转换,串行通信中断完毕与上位机通信4.2 A/D 转换(1)用 P1.4 作为 4067 使能控制;用 P1.0、P1.1、P1.2、P1.3 组合状态作为 4067通道地址选取信号2) 用 P2.7 作为 A/D 转换器使能控制,数据从 IN0 输入,地址映射为 7FF0H3) 通过外部中断 1 巡回采集 16 路信号,并存入从 50H 开始后续单元里4.3 数据通信当数据转换完毕后,由单片机向上位机发送联系信号AAH,然后等待上位机返回应答信号:如果应答信号为 BBH,则向上位机发送数据;反之则继续发送联系信号, 并等待应答为了避免意外状况导致死循环,因此加入了 1s 超时验证,以保证下一次巡回采样得以顺利进行。

      5 源程序代码/********************************************************************* Filename:program.c* Programmer:李博********************************************************************//***************************头文献**********************************/ #include "reg52.h"#include "absacc.h"/**************************宏定义***********************************/ #define uchar unsigned char#define IN0 XBYTE[0x7FF0] #define P27 P2^7//定义 ADC0809IN0 口地址//P2.7 口,作为 ADC0809 使能信号(低电平有效)#define channel P1 /*P1.4 作为 4067 使能信号(低电平有效),P1.0、P1.1、P1.2、P1.3 作为通道选取*/#define E4067 p1^4 //4067 使能控制端口(低电平有效)/**************************全局变量***********************************/ uchar data *result=0X50; //A/D 转换成果存入 0X50 及其后续地址单元uchar T0_count; //定期器 T0 计数,实现 1s 延时/*********************系统初始化函数 initial()***************************/ void initial(){/**************************定期器初始化*******************************/ TMOD=0X21; /*定期器 T0 工作于模式 1,充当 16 位定期器;T1工作于模式 2,充当波特率发生器*/TL0=0X00 ; //定期器 T0 计数初值设为 4C00H(相应 50ms) TH0=0X4C;TL1=0XFD; //定期器 T1 计数初值设为 FDH,SMOD=0,相应波特率 9.6K TH1=0XFD;T0_count=20 ; // 运用 1s=50ms20, 实现 1s 延时程序/**************************串行通信初始化*****************************/ SMOD=0X00 ; //波特率 SMOD=0SCON=0X50 ; //工作于方式 1,使能接受(REN==1)/**************************中断初始化*********************************/IT1=1; IE=0X96; TR0=1; TR1=1;}//设立外中断 1 中断祈求信号为下降沿//容许中断:定期器T0、外中断 1、串行通信//启动 T0//启动 T1/***************************************************************************************** AD 转换函数 ADC0809()***************************************************************************************************/ void ADC0809(){channel=0X00 ; //使能 4067,同步选取到channel1 sbit ADC_flag; /*标志位:中断响应前为 0,循环等待转换uchar i; for(i=0;i<16;i++){ADC_flag=0; IN0=0;转换结束;转换结束后,进入中断,置 1*///中断响应前为 0,以便循环等待转换结束//通过 P2.7==0 和WR 启动 ADwhile(!ADC_flag); /*AD 转换结束后,进入中断程序, 执行,flag 置 1,跳出循环,继续执行下面语句*/*(result+i)=IN0; //把转换成果存入 89C51RAM 中channel=i; //选中下一路通道}p27=1; E4067=1;}//4067 不使能,A/DC 不使能/****执行完后,channel=15,result 仍指向 50H,4067 不使能,ADC 不使能**********//******************************************************************************************串行通信函数 RS232()**********************************************************************。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.