关 闭

新闻中心

EEPW首页 > 安全与国防 > 设计应用 > 基于AD7888的度激光器监测系统的设计

基于AD7888的度激光器监测系统的设计

作者:时间:2008-07-16来源:网络收藏

  在的研制中,实时监测的工作状态是需要重点关注的问题。本系统实现了温度控制系统、激光管工作电流、工作电压、激光器光功率的实时精确监测,以及激光器工作状态数据的存储和数据串行上传的功能。其中电流设定值和实际工作电流的观测可以更好地确定激光器的工作状态。系统结构图如图1所示。

  

  

  图1 系统结构框图

  本系统的实时监测是利用AD模数转化器实现的。对于AD芯片的选择,需要综合设计诸项因素,系统技术指标、成本、功耗、安装等,最主要的依据还是速度、精度以及需要的通路。由于系统采样的数据是缓慢变化的信号,所以速度的要求不高,主要是精度的要求和多通路的要求,所以选择了美国模拟器件AD公司推出的一款8路单端模拟输入的12位模数转换器AD7888,VREF(+)为+5V时,其精度能达到1/212×5V=0.00122V,完全满足系统设计的需要。LCD使用OCM4×16,4行16字符的液晶显示模块,使用两个按键控制不同监测数据之间的切换。数据存储器使用的是AT28C256,容量为256MB,在EEPROM中将存储器分为8个区域,按照实时时钟的节拍存储上传给PC的。在PC端可以远程直接监控激光器的工作状态。与PC间的数据通信采用的是串行方式,从MCU的TX和RX端CMOS电平到PC的标准RS232电平的转换器件选用Maxim公司的MAX232。由于MCU的外围器件比较多,以及考虑了以后的扩展,这里使用了CPLD芯片进行了器件片选的地址译码和液晶屏的控制信号的生成。

  AD7888的特点

  AD7888是美国模拟器件AD公司推出的一款高速低功耗12位模数转换器,可以在+2.7~+5.25V单电源模式下工作,见图2。其最大转换速率可达到125k SPS。AD7888的输入采样/保持电路在500ns内获取一个信号,采用单端采样模式,包含8个单端模拟输入,从AIN1到AIN8,模拟输入电压从0~VREF。AD7888内部具有用做A/D转换的换的2.5V源,REFIN/REFOUT管脚允许用户访问这个基准。另外,该管脚也可以使用外部,范围从1.2V到VDD。CMOS的制造工艺确保了低功率消耗,正常工作时为2mW,掉电状态下为3μW。该器件采用16脚SOIC和TSSOP外形封装。可以选择多种电源管理模式(包括数据转换后自动处于掉电模式),与多种串行接口兼容,如SPI/QSPI/MICOWIRE/DSP。AD7888引脚功能及符号说明见图3、表1、表2。

  

  

  图2 AD7888模数转换器

  

  图3 控制器位功能描述

  表1 AD7888模数转换器管脚

  

  表2 引脚符号及说明

  

  在AD7888中,控制寄存器是8位的只写寄存器。数据在时钟周期信号的上升沿从AD7888的DIN引脚载入,在此同时获取外部模拟量转换的结果。每次数据的传输需要准备16个连续时钟信号。数据只能在片选信号下降沿之后的前8个时钟脉冲的上升沿装入控制寄存器。

  串行接口:

  在图4中显示了详细的串行接口时序图,串行时钟提供了转换时序,且控制AD7888转换信息的输入输出。

  CS初始化数据传送和转换处理。在其下降沿之后的1.5个时钟周期开始采样输入信号,这段时间表示为tACQ(获取时间)。这是从DIN输出到控制寄存器的MSB位为DONTC一个原因。在自动下获取时间必须要虑及5μs的唤醒时间。整个转换过程还需要14.5个时钟周期来完成。上升沿之后,总线返回高阻状态。如果继续保持低电平,则准备新一轮的转换。

  进行采样的输入通道的选择是提前写入控制寄存器的,因此在转换时,用户必须提前写入以备通道的转换。也就是说,在进行当前转换时,用户就必须提前写入通道的地址以备下次转换使用。设计中初始化时,先做一次写控制寄存器的操作,将需要转换的通道信息写入控制寄存器中。

  写信息到控制寄存器应该在数据传送的前8个SCLK上升沿进行。控制寄存器经常在数据传送发生时进行写操作。从器件中读数据时用户必须经常仔细地在PIN线上设置正确的信息。

  接口与驱动

  串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种。SPI总线是一种三线同步总线,因其硬件功能很强,所以其实现软件就相当简单。AD7888与多种串行接口兼容,可以根据使用的控制芯片在设计中灵活的使用,从经济的角度出发选择普通的MCU芯片AT89S52,使用程序可方便地实现对SPI总线的控制。

  

  

  图4 串行接口时序图

  AD7888与MCU之间的接口关系如图5所示。为了能够获得稳定的数据,AD7888与MCU之间加入光隔离器。光隔离器件采用的是隔离电压高、速度快、性强的6N137。由于6N137的速度快,编程中不需要进行延时就能满足光隔离器的电平建立时间。试验表明通过光隔离器,获得的稳定数据能够增加3~4位(二进制位)。AD7888的CS接地,使AD888始终工作在SPI接口模式。对每个接口模块的控制是通过74LSl25的三态允许端来实现的。对其中一个SPI接口操作时,使其74LSl25处于选通状态,而其他SPI接口的74LSl25处于高阻状态。这样可实现微处理器单独对一个接口进行操作,而不影响其他接口。CPU通过对三态缓冲器74LSl25控制,可实现多个接口共用相同的数据线。AD7888所采样的七路电压信号经过分压以后电压都在2.5V以内,所以这里可以直接使用芯片内置的+2.5V参考电压,在程序中必须将控制器的REF位置清为“0”。

  

  图5 AD7888与MCU

  子程序入口参数Adcaddres通过设置控制寄存器来修改采样通道和工作模式

  

  

   int get_ad( char Adcaddres)

  //写入控制字和读出转换数据

  {

   char i,j;

  unsigned char Strdatah,Strdatal,Tempdata;

  unsigned int Strdata;

  Tempdata=0×0;

  Strdatah=0×0;

  Strdatal=0×0;

  Strdata=0;

  Ad_cs(0);

  //使能AD7888片选有效

  Ad_sclk=1;

  for(i=0;i8;i++)

  //前8个时钟周期进行控制寄存器的写入

  {

  //和读出上次转换的高4位数据

  Ad_din=(bit)( Adcaddres (0×80>>i));

  //先移出最高位

  Ad_sclk=0;

  for(j=0;j2;j++);

  Ad_sclk=1;

  for(j=0;j2;j++);

  Strdatah=Ad_dout;

  Strdatah=Strdatah(7-i);

  Tempdata=Tempdata | Strdatah;

  }

  Strdatah=Tempdata;

  Tempdata=0×0;

  for(i=0;i8;i++)

  //从AD7888中读取低8位采样码

  {

  Ad_sclk=0;

  for(j=0;j2;j++);

  Ad_sclk=1;

  Strdatal=Ad_dout;

  Strdatal=Strdatal(7-i);

  Tempdata=Tempdata | Strdatal;

  for(j=0;j2;j++);

  }

  Strdatal=Tempdata;

  Strdata=(Strdatah*256 +Strdatal)0x0fff;

  //去除高四位的无效数据”0”,防止误码出现

  Ad_cs(1);

  //使能AD7888片选无效,降低功耗

  return(Strdata);

  }

  程序中把写控制寄存器通知采样某通道和读出上次转换的高位有效数据同时进行,提高了转换的速度,使应用程序编程更加高效。

  当电源不稳定或者电路出现干扰的时候,AD7888输出的采出码将出现波动,使得采样效果变差,这时可以在读数据时采用防脉冲干扰移动平均值法,即加入后置滤波器,使效果得以改善。下面是相关的程序。

  子程序入口参数Adcaddres通过设置控制寄存器来修改采样通道进行

  #define LEN 18

  //采样数组的长度

  #define SHIFT 4

  //LEN = 2^SHIFT+2

  unsigned int szlb(unsigned char Adcaddres) {

  unsigned char pdat;

  //移动指针

  unsigned char pmax,pmin;

  //记录数据表中最大值和最小值的位置,在一般的数据采集系

  unsigned char i;

  //统中,数据的长度>=8,

  unsigned int datas[LEN];

  //因此用指针记录而不是直接记录最大值和最小值

  unsigned int average=0;

  //清零,用来计算平均值

  pmax=0;

  pmin=0;

  for ( pdat=0;pdatLEN;pdat++)

  //采样所得数据存入数据表中

  {

  datas[pdat] = get_ad(Adcaddres);

  DelayMs(0×06);

  }

  for(i=0;iLEN;i++)

  average+=datas[i];

  //求所有数据总和

  /******去除被认为是脉冲的数据*******/

  for ( i=LEN;i>0;i--)

  {

  if(datas[i-1]>datas[pmax])

  //记录数组中最大值的下标

  pmax=i-1;

  if(datas[i-1]datas[pmin])

  //记录数组中最小值的下标

  pmin=i-1;

  }

  average=average-datas[pmax]-datas[pmin];

  //减去脉冲

  return (average>>SHIFT);

  //求算术平均值

  }

  设计中需要注意的问题

  单片机连接多个外围芯片时需要注意几个问题,首先要保证这几个外设的使能有效信号绝对区分开来,通过CPLD译码产生片选来激活不同的外设,否则多个外设的数据就会同时出现在数据总线上,造成数据冲突,接受错误,其次要从地址上区分开对外部设备寄存器的读写操作,同一时刻不能对多个外设进行读或写操作。

  由于AD7888是高分辨率的ADC,因而电源的耦合电路尤为重要。因此在印制电路板设计时,应对所有的模拟电源输入加一级去耦电路,即用10μF钽电容和0.1μF陶瓷电容并联到地。这些去耦电路的元件应尽可能靠近芯片的电源引脚,这样才能获得更好的去耦效果,并消除引线过长带来的干扰。

  本系统介绍的技术已在度激光器多路监测中得到了应用,它不但提高了系统抗干扰性和数据的测量精度,而且由于结构简单也给维护带来了便利。



评论


相关推荐

技术专区

关闭