摘要:介绍了基于AD1671 芯片设计的数据采集电路,该电路具有查询、中断和DMA 三种数据传输功能,并且采用8253 定时脉冲和端口写两种A/D 启动方式,适合于不同的应用场合。 关键词:A/D 转换 8253 定时器 DMA 方式 随着科学技术的发展,计算机在测量与控制中的应用日益广泛。为了使外部世界的模拟信号与计算机接口,需要进行模/数转换,该转换一般通过A/D 芯片来完成。目前市场上出现了各种A/D 芯片,且各种A/D 芯片具有不同的控制方式和应用条件。对于高速数据采集,最大采样频率取决于A/D 的转换时间以及数据的传输时间。提高最大采样频率可通过缩短A/D 的转换时间或提高数据的传输速度来实现。如果与PC 机接口,数据的传输速度决定于PC 机的主频以及数据的传输方式,常用的有查询和中断方式,若采用DMA 传输方式则可进一步提高数据的传输速度。本文选取AD1674 芯片,设计具有查询、中断和DMA 三种数据传输方式的数据采集电路。该电路既可以采用定时器定时,通过8253 定时器的控制设置可变的采样变(步进间隔为1μs),获得高准确的采样间隔;也可以采用软件定时,通过端口写启动A/D 来实现。在时序方面,该电路解决了A/D 控制信号与计算机时序匹配问题,可能与高档PC 机进行接口。 1 硬件设计 1.1 AD1674 接口电路 文献[1]详细介绍了AD1674 芯片的性能和控制信号的时序。在完全受控方式下,最好是用逻辑控制信号CE 启动数据读或A/D 转换;在CE 有效时,片选信号CS 应有效,并且控制信号R/C 和A0 已确定,只有满足这种时序,AD1674 才能正常工作。 1.2 A/D 转换及数据的读时序 对A/D 接口电路而言,只有PC 机的时序与AD1674 的要求时序匹配才能保证电路的正常工作。该电路的A/D 转换及数据的读时序如图1 所示。
A 在/D 转换时,8253 的定时脉冲或端口写脉冲QD 经过延时和调节定时宽度后,使A/D 的使能控制CE 开始启动A/D转换。同时QD 宽度为1μs 的低电平脉冲(在端口写启动方式下,1μs 的低脉冲是由端口写脉冲经调节定时宽度后获得)使R/C的转换有效,A0 及片选CS 可在A/D 转换前设置为有效。当读取A/D 转换后的数据时,端口读信号或DMA 读信号D 直接使A/CD 的使能控制CE 启动数据读,此时R/C=1,R/C 的读有效,开始12 位数据的读取。当A0=0 时,读取高八位数据;当A0=1 时,读取数据低四位,读完后A0=0,准备下一次A/D 转换。可见该时序既能与PC 机接口,又能使AD1674 正常工作。 1.3 A/D 转换及数据读取的实现电路 本电路的AD1674 工作在完全受控方式。A/D 转换为12 位,而转换后数据分两次读取,即先读数据的高八位,后读数据的低四位。 1.3.1 A/D 转换的启动方式 A/D 转换的启动方式有两种:8253 定时器硬件启动和写端口软件启动。 8253 定时器启动方式应用于对数据采集的时隔要求准确的场合,该方式是利用8253 的定时脉冲启动A/D 转换,通过8253 数据总线缓冲器(端口地址为&0X23F)输出鉴别通道的计数初值,通过向6 位锁存器74LS174(端口地址为&0X23B)写入控制字设定8253 的控制字以及A/D 片选控制位。6 位锁存 器数据位定义说明如下: A1A0=00:&0X23D 口输出的数据为计数器0 的计数值。 A1A0=01:&0X23F 口输出的数据为计数器1 的计数值。 A1A0=10:&0X23F 口输出的数据为计数器2 的计数值。 A1A0=11:&0X23F 口输出的数据为计数器8253 的方式字。 G0&G1=1:起动计数器0 和计数器1;G0&G=0:禁止计数器0 和计数器1。 CS=1:选中A/D 芯片CS=0;不选中A/D 芯片。 具体的实现电路如图2 所示。首先将8253 定时通道0 与通道1 串联起来定时,通道0 的时钟输入CLK0 的频率是2MHz,工作在方式3(方波比率发生器)下,通道0 的输出OUT0 为频率1MHz 的方波,作为通道1 的输入时钟CLK1。通道1 设定为方式2,即通道1 的输出OUT1 从输出开始一直维持高电平,计数回零后,输出为低电平并自动重新装入原计数值,低电平维持一个时钟周期后,输出恢复高电平并重新作减法计数。输出OUT1 分为两路信号,一路通过与门U18A 输出,作为AD1674 的R/C 控制信号;另一路经过单稳触发器U24 延时和调节定时宽度后,再通过或门U15C 输出作为AD1674 的CE控制信号。当OUT1 输出宽度为1μs 的低电平脉冲时,一方面使控制信号R/C 的转换有效,同时经延时和调节定时宽度后,使A/D 的使能控制CE 开始启动A/D 转换。因此在装入计数初值以后,只要设置6位锁存器U8 的控制字,就可利用8253 定时器启动A/D。
写启动A/D 方式应用于软件定时,即通过对端口(地址为&0X23D)写来触发A/D 转换。如图2 所 示,端口写信号一方面经过单稳触发器U6A 调节定时宽度(宽度为1μs)后,作为AD1674 的R/C 控制信号,同时经过另一单稳触发器U24 延时和调节定时宽度后,再通过或门U15C 输出作为AD1674 的CE控制信号。 可见两种启动A/D 转换的过程相似。相比较而言,前者的采样间隔是由8253 定时脉冲的周期决定 的,属于可编程定时器方式定时,共特点是采样间隔准确;后者则由相邻两次写端口(地址为 &0X23D)的时间差决定采样间隔,为软件定时方式,特点是灵活方便。 1.3.2 A/D 转换数据的读取方式 在数据采集系统中,计算机读取A/D 转换数据的方式一般有三种,即查询、中断和DMA 方式。其中查询方式就是通过查询标志位来判断A/D 是否转换完毕,如果A/D 转换完毕则读入转换的数据。这种方式下CPU 主动查询,通过CPU 读取A/D 转换的数据,故实现的硬件电路简单,但数据读取速度慢,同时在WINDOWS 的多任务执行方式下,存在着A/D 转换数据不能及时读入的问题。中断方式是利用A/D 转换完毕的标志位触发一硬中断,然后中断管理器向CPU 提出中断申请。在中断允许的情况下,执行中断服务程序读入转换的数据。这种方式实现的硬件电路也比较简单,但中断服务程序的介入,引起 数据采集程序的断点的不可预测性,这样会导致数据采集程序的失控。DMA 方式利用A/D 转换完毕的 标志位向DMA 控制器提出DMA 申请,当DMA 控制器从CPU 取得总线控制权时,接口便与内存之间直接地进行数据交换(不经过CPU)。这种方式下,由于不经过CPU 读入数据,故提高了数据传输速度。同时由于A/D 转换器主动申请数据传输,而DMA 申请比外设中断申请的优先级高,A/D 转换数据能够及时读入,系统性能也得到了提高,但实现的硬件电路较前两种方式复杂。 本电路设计有查询、中断和DMA 三种数据传输方式。通过一拨码盘开关来选择不同的的传输方式。如图3 所示,当A/D 转换完毕时,标志位STS 由高电平变为低是电平,从而引起D 触发器U20A 触发,U20A 的输出Q 由低电平变成高电平。当拨码盘开关S1 选择为查询方式时,该U20A 的输出Q 通过一个三态门(端口地址为&0X23F)与数据线D6 相连,提供计算机查询;在中断方式下,该U20A 的输出Q 直接与硬中断引脚IRQ2 相连,当Q 由低电平变成高电平时,引起计算机中断。在前两种方式下,通过软件编程,向一锁存器U22 的最低位写入0 或1,选择读取A/D 转换数据的高八位或低四位,且由专门的端口(地址为&0X23D)读取A/D 转换的数据。实现的硬件电路简单。而在DMA 方式下,通过 应答信号DACK1 寻址,并不由专门的端口读取A/D 转换的数据,故选择A/D 转换数据的高八位或低四 位的功能必须由硬件电路来实现,比较而言,电路更复杂一些。 下面介绍DMA 方式下的具体实现电路。DMA 请求电路由两个D 触发器组成,当A/D 转换完毕时,U20A 的输出Q 由低电平变成高电平,DRQ1=1,DMA 通道1 发出请求,DRQ1 被认可后进行两次DMA传输。在第一次DMA 传输期间,触发器U20B 的输出Q 为低电平,A/D 转换数据的高八位传输到指定内存单元。在第一次DMA 传输结束时,DACK1 由低电平变成高电平,触发器U20B 的输出为高电平,但触发器U20A 的输出Q 仍然是高电平,该电平申请第二次DMA 传输。在第二次DMA 传输期间,触发器U20B 的输出为高电平,A/D 转换数据的低四位传输到指定的内存单元。当第二次DMA 传输结束时,DACK1 由低电平变成高电平,使触发U20B 输出低电平,同时触发器U20A 的输出Q 变为低电平,DRQ1=0 变为低电平,DRQ1=0,DMA 通道1 的请求被撤销,结束一次A/D 转换12 位数据传输过程。 2 软件设计 该接口电路支持各种带有口指令操作的高级语言和8086/8088 汇编语言。以下就以Turbo C 为例对 相应的部分编程,经供参考。 2.1 A/D 编程 该编程适合于中断或查询方式下的编程,端口地址=0x238~0x23f。 outportb(0x23c,0x00); /*初始化清零*/ outportb(0x23a,0x00); /*选择传输高8 位数据并为A/D 转换作准备*/ { }; /*启动A/D 并检查A/D 是否转换完毕*/ dh=inportb(0x23d); /*输入高八位数据*/ outporth(0x23a,0x01); /*选择传输低四位数据*/ dl=inportb(0x23d); /*输入低四位数据*/ outportb(0x23a,0x00); /*选择传输高8 位数据并为A/D 转换作准备*/ dl=dl>>4; dh1=dh; dl=(dh1<<4)+dl; dh=dh>>4; /*将高八位低四位数据转化为高四位低八位数据*/ d=dh*256+dl; /*拼合12 位数据*/ u=(d-2047)*10.0/4096; /*转换电压值*/ 2.2 写启动和查询方式的编程 outportb(0x23d,0x00); /*写启动A/D 转换*/ if(inporth(0x23e)&0x80);/*D7=1 则A/D 转换完毕*/ 2.3 8253 定时器编程 outportb(0x23b,0x03); /*set 8253 timer into writing mode word state*/ outportb(0x23f,0x36); /*set 0 channel working with mode 3*/ outportb(0x23f,0x74); /*set 1 channel working with mode 2*/ outportb(0x23b,0x00); /*set to write data to 0 Channel mode */ outportb(0x23f,0x02); /*write low data to 0 channel*/ outportb(0x23f,0x00); /*write high data to 0 channel*/ outportb(0x23b,0x01); /*set to write data to 1 channel*/ outportb(0x23f,LC1); /*write low data to 1 channel*/ outportb(0x23f,HC1); /*write high data to 1 channel*/ outportb(0x23b,0x0c); /*启动CH0,CH1 工作*/ 其中采样频率决写入计数器1 的计数值。 2.4 DMA 方式下PC 主机中8237A DMA 控制器编程 8237A DMA 控制器具有4 个DMA 通道,该接口电路使用通道1。 outportb(0x0x,0x05); /*mask DMA channel 1*/ outportb(0x0c,0x00); /*clear byet pointer flip*/ outportb(0x0b,0x55); /*write mode word.demand mode,address tincrease,autoinitialization,write trasfer and select 1*/ outportb(0x83,SEG); /*write page number*/ outportb(0x02,LA); /*write low 8 bit address*/ outportb(0x02,HA); /*write hige 8 bit address*/ outportb(0x03,LC); /*write low 8 bit count data*/ outportb(0x03,HC); /*write hige 8 bit count data* outportb(0x03,0x01); /*clear mask bit of DMA channel*/ 其中写入11 口的数值应按照具体的工作方式来确定,写入131 口的页地址SEG 取20 位绝对地址的最高4 位的数值,而将低16 位地址的数值写入地址寄存器。写基值字节计数寄存器的字节总数值应为需要传输的字节数减1。 2.5 中断服务程序的编写以有中断向量的装入 void interrupt int9() /*中断服务程序*/ { disable(); ah5=inportb(0x23d); /*输入高八位数据*/ outportb(0x23a,0x01); /*选择传输低四位数据*/ dl5=inportb(0x23d); /*输入低四位数据*/ outportb(0x23a,0x00); /*选择传输高8 位数据并为A/D 转换作准备*/ outportb(0x23c,0x00); /*A/D 转换完毕的标志位清零*/ outportb(0x20,0x20); enable(); } void stall 1(void interrupt(*faddr)()) { disable(); setvect(INT1,faddr); /*装入中断服务程序*/ enable(); } 本文介绍一种基于AD1674 设计的接口电路,该电路具有查询、中断和DMA 三种数据传输功能,同时采用8253 定时脉冲或端口写两种A/D 启动方式。其中DMA 方式实现了数据的快速传输,而两种A/D 启动方式将会使采样率的设定更加灵活。应用本文原理设计的可插入通用PC 机的数据采集板已用于我们的高频多谱勒和到达角探测分析系统中,取得了满意的效果。这些设计方法和原理在其它实际数据采集系统的设计过程中,也会具有重要的参考价值。
|