第10章 AT89S52单片机与DAC、 ADC的接口 1
10.3 AT89S52单片机与12位D/A转换器AD667的接口设计 10.3.1 12位D/A转换器AD667简介 第10章 AT89S52单片机与DAC、ADC的接口 10.1 单片机扩展D/A转换器概述 10.2 单片机扩展并行8位DAC0832的设计 10.2.1 DAC0832简介 10.2.2 单片机与8位D/A转换器0832的接口设计 10.3 AT89S52单片机与12位D/A转换器AD667的接口设计 10.3.1 12位D/A转换器AD667简介 10.3.2 AD667与AT89S51单片机的接口设计 10.3.3 AD667使用中的技术细节 10.4 AT89S51与串行输入的12位D/A转换器AD7543的接 口设计 2
10.4.1 AD7543简介 10.4.2 单片机扩展AD7543的接口设计 10.5 单片机扩展A/D转换器概述 10.6 单片机扩展并行8位A/D转换器ADC0809 10.6.1 ADC0809简介 10.6.2 单片机与ADC0809的接口设计 10.7 AT89S52单片机扩展12位串行ADC-TLC2543的设计 10.7.1 TLC2543的特性及工作原理 10.7.2 单片机扩展TLC2543的设计 10.8 AT89S52与双积分型A/D转换器MC14433的接口 10.8.1 MC14433 A/D转换器简介
10.8.2 单片机与MC14433的接口设计 10.9 AT89S52单片机与V/F转换器的接口 10.9.1 用V/F转换器实现A/D转换的原理 10.9.2 常用V/F转换器LMX31简介 10.9.3 V/F转换器与单片机的接口设计 10.9.4 V/F转换的应用设计
内容概要 在单片机测控系统中,对非电物理量如温度、压力、流量等的测量,须经传感器先转换成连续变化的模拟电信号(电压或电流),然后再将模拟电信号转换成数字量后才能在单片机中进行处理。实现模拟量转换成数字量的器件称为ADC(A/D转换器)。单片机处理完毕的数字量,有时要根据控制需求转换为模拟信号输出。数字量转换成模拟量的器件称为DAC(D/A转换器)。本章从应用的角度,介绍典型的ADC、DAC芯片与AT89S52单片机的接口设计。
10.1 单片机扩展D/A转换器概述 单片机只能输出数字量,但是对于某些控制场合,常常需要输出模拟量,例如直流电动机的转速控制。下面介绍单片机如何扩展DAC。 目前集成化的DAC芯片种类繁多,设计者只需要合理选用芯片,了解它们的性能、引脚外特性以及与单片机的接口设计方法即可。由于现在部分单片机芯片中集成了DAC,位数一般在10位左右,且转换速度也很快,所以单片的DAC开始向高的位数和高转换速度上转变。而低端的并行8位DAC,开始面临被淘汰的危险,但是在实验室或涉及某些工业控制方面的应用,低端8位DAC以其优异的性价比还是具有较大的应用空间。 6
1.D/A转换器简介 购买和使用D/A转换器时,要注意有关D/A转换器选择的几个问题。 (1)D/A转换器的输出形式 D/A转换器有两种输出形式:电压输出和电流输出。电流输出的D/A转换器在输出端加一个运算放大器构成的I-V转换电路,即可转换为电压输出。 (2)D/A转换器与单片机的接口形式 单片机与D/A转换器的连接,早期多采用8位的并行传输的接口,现在除了并行接口外,带有串行口的D/A转换器品种也不断增多,目前多采用较为流行SPI串行接口。在选择单片D/A 7
转换器时,要根据系统结构考虑单片机与D/A转换器的接口形式。 2.主要技术指标 D/A转换器的指标很多,设计者最关心的几个指标如下。 (1)分辨率 分辨率指单片机输入给D/A转换器的单位数字量的变化,所引起的模拟量输出的变化,通常定义为输出满刻度值与2n之比(n为D/A转换器的二进制位数),习惯上用输入数字
量的位数表示。显然,二进制位数越多,分辨率越高,即D/A转换器输出对输入数字量变化的敏感程度越高。例如,8位的D/A转换器,若满量程输出为10V,根据分辨率定义,则分辨率为10V/2n,分辨率为10V/256=39.1mV,即输入的二进制数最低位数字量的变化可引起输出的模拟电压变化39.1mV,该值占满量程的0.391%,常用符号1LSB表示。 同理: 10位D/A转换 1 LSB=9.77mV=0.1%满量程 12位D/A转换 1 LSB=2.44mV=0.024%满量程 9
16位D/A转换 1 LSB=0.076mV=0.00076%满量程 使用时,应根据对D/A转换器分辨率的需要来选定D/A转换器的位数。 (2)建立时间 建立时间是描述D/A转换器转换速度的参数,用于表明转换时间长短。其值为从输入数字量到输出达到终值误差±(1/2)LSB(最低有效位)时所需的时间。电流输出的转换时间较短,而电压输出的转换器,由于要加上完成I-V转换的时间,因此建立时间要长一些。快速D/A转换器的建立时间可控制在1µs以下。 10
(3)转换精度 理想情况下,转换精度与分辨率基本一致,位数越多精度越高。但由于电源电压、基准电压、电阻、制造工艺等各种因素存在误差,严格地讲,转换精度与分辨率并不完全一致。两个相同位数的不同的DAC,分辨率则相同,但转换精度会有所不同。例如,由于制作工艺上的差异,某种型号的8位DAC精度为±0.19%,而另一种型号的8位DAC精度为±0.05%。 10.2 单片机扩展并行8位DAC0832的设计 美国国家半导体公司的DAC0832芯片是具有两级输入数据寄存器的8位DAC,它能直接与AT89S52单片机连接。 11
10.2.1 DAC0832简介 1.DAC0832芯片介绍 (1)DAC0832的特性 其主要特性如下。 ① 分辨率为8位。 ② 电流输出,建立时间为1µs。 ③ 可双缓冲输入、单缓冲输入或直接数字输入。 ④ 单一电源供电(+5V~+15V)。 (2)DAC0832的引脚及逻辑结构 DAC0832的引脚如图10-1所示,DAC0832的片内逻辑结构如图10-2所示。 12
图10-1 DAC0832的引脚 13
图10-2 DAC0832的逻辑结构
各引脚的功能如下。 DI0~DI7:8位数字信号输入端,与单片机的数据总线P0端口相连,用于接收单片机送来的待转换为模拟量的数字量,DI7为最高位。 ILE=1,CS*=0, WR1*=0时,即M1=1(LE1*=0),待转换的数字量被锁存到第一级“8位输入寄存器”中。 XFER*=0, WR2*=0时,即M3=1( LE2*= 0),待转换的第一级8位输入寄存器中数字量被锁存到第二级的“8位DAC寄存器”中,并经“8位D/A转换电路” 转换为电流输出。 IOUT1:D/A转换器电流输出1端,输入数字量全为“1”时,IOUT1最大,输入数字量全为“0”时,IOUT1最小。 15
IOUT2:D/A转换器电流输出2端,IOUT2 + IOUT1 = 常数。 Rfb:外部反馈信号输入端,内部已有反馈电阻Rfb,根据需要也可外接反馈电阻。 VCC:电源输入端,在+5V~+15V范围内。 DGND:数字信号地。 AGND:模拟信号地,最好与基准电压(为模拟信号)共地。 DAC0832内部的三部分电路如图10-2所示。“8位输入寄存器”用于存放单片机送来的数字量,使输入数字量得到缓冲和锁存,由LE1*=0(M1=1)加以控制;“8位DAC寄存器” 为第二级寄存器,由LE2*= 0(M3=1)控制,用于将“8位输入寄 16
存器”输出的数字量锁存,并送入“8位D/A转换电路” 转换,输出和数字量成正比的模拟电流。因此,DAC0832通常需要外接I-V转换的运算放大器电路,才能得到模拟输出电压。 10.2.2 AT89S52单片机与8位D/A转换器0832的接口设计 设计AT89S52单片机与DAC0832的接口电路时,常用单缓冲方式或双缓冲方式的单极性输出。 (1)单缓冲方式 单缓冲方式是指DAC0832内部的两个寄存器有一个处于直通方式,另一个处于受AT89S52单片机控制的锁存方式。在实际应用中,如果只有一路模拟量输出,或虽是多路模拟量输出
但并不要求多路输出同步的情况下,就可采用单缓冲方式。 单缓冲方式的接口电路如图10-3所示。 图10-3所示的是单极性模拟电压输出电路,由于DAC0832是8位(28=256)的D/A转换器,由基尔霍夫定律列出德方程组可解得DAC0832输出电压vo与输入数字量B的关系为: 显然,DAC0832输出的模拟电压vo的绝对值与输入的数字量B以及基准电压VREF成正比,且B为0时,vo也为0,B为255时,vo为最大的绝对值输出,且不会大于VREF 。 18
图10-3 单缓冲方式下AT89S52单片机与DAC0832的接口电路
图10-3中,DAC0832的WR2*和XFER*接地,故DAC0832第二级的“8位DAC寄存器”(见图10-2)工作于直通方式。“8位输入寄存器”受和端控制(ILE 已经为高),而且由译码器输入为FEH时,输出端为低来控制(也可由P2口的某一条口线来控制)。因此,AT89S51单片机执行如下两条指令就可在和上产生低电平信号,使DAC0832接收单片机送来的数字量。 20
【例10-1】 DAC0832用作波形发生器。试根据图10-3的电路,分别写出产生锯齿波、三角波和矩形波的程序段。 MOV R0,#0FEH ;DAC的8位输入寄存器端口地址FEH→R0 MOVX @R0,A ;AT89S51单片机将待转换的数字量送DAC, ;且和译码器FEH输出端有效 现举例说明单缓冲方式下DAC0832的应用。 【例10-1】 DAC0832用作波形发生器。试根据图10-3的电路,分别写出产生锯齿波、三角波和矩形波的程序段。 在图10-3中,运算放大器A输出端Vout直接反馈到Rfb,故这种接线产生的模拟输出电压是单极性的。 21
① 锯齿波的产生 ORG 2000H START: MOV R0,#0FEH ;DAC地址FEH→ R0 MOV A,#00H ;数字量→A LOOP: MOVX @R0,A ;数字量→D/A转换器 INC A ;数字量逐次加1 SJMP LOOP 当输入数字量从0开始,逐次加1进行D/A转换,模拟量与其成正比输出。当A = FFH时,再加1则溢出清0,模拟输出又为0,然后又重新重复上述过程,如此循环,输出的波形就是锯齿波,如图10-4所示。 22
实际上,每一上升斜边要分成256个小台阶,每个小台阶暂留时间为执行后三条指令所需要的时间。因此 “INC A”指令后插入NOP指令或延时程序,则可改变锯齿波频率。 图10-4 DAC0832产生的锯齿波输出 23
② 三角波的产生 输出的三角波如图11-5所示。 图11-5 DAC0832产生的三角波输出 参考程序如下。 24
③ 矩形波的产生 输出的矩形波如图10-6所示。 vO 25
图10-6 DAC0832产生的矩形波输出
输出的矩形波如图10-6所示。 DELAY1、DELAY2为两个延时程序,分别决定输出的矩形波高、低电平时的持续宽度。矩形波频率也可用延时方法改变。 27
(2)双缓冲方式 多路的D/A转换要求同步输出时,必须采用双缓冲同步方式。此方式工作时,数字量的输入锁存和D/A转换输出是分两步完成的。单片机必须通过LE1*来锁存待转换的数字量,通过LE2*来启动D/A转换(见图10-2)。 因此,双缓冲方式下,DAC0832应该为单片机提供两个I/O端口。AT89S52单片机和DAC0832在双缓冲方式下的连接如图10-7所示。 28
图10-7 单片机和两片DAC0832的双缓冲方式接口电路 29
由图10-7可见,译码器的FDH(即译码器输入为FDH时)和FEH分别为1#与2#DAC0832的第一级“8位输入寄存器”的端口地址,而FFH共同控制1#和2#DAC0832进行D/A转换的第二级“8位DAC寄存器”端口地址。 若把图10-7中DAC输出的模拟电压Vx和Vy来控制X-Y绘图仪,则应把Vx和Vy分别加到X-Y绘图仪的X通道和Y通道,而X-Y绘图仪由X、Y两个方向的步进电机驱动,其中一个电机控制绘笔沿X方向运动;另一个电机控制绘笔沿Y方向运动。 因此对X-Y绘图仪的控制有一基本要求:就是两路模拟信号 30
要同步输出,使绘制的曲线光滑。如果不同步输出,例如先输出X通道的模拟电压,再输出Y通道的模拟电压,则绘图笔先向X方向移动,再向Y方向移动,此时绘制的曲线就是阶梯状的。通过本例,也就不难理解为什么DAC设置双缓冲方式的目的所在。 【例10-2】设AT89S52单片机内部RAM中有两个长度为20的数据块,其起始地址为分别为addr1和addr2,根据图10-7,编写把addr1和addrr2中的数据从1#和2#DAC0832同步输出的程序。程序中addr1和addr2中的数据,即为绘图仪所绘制曲线的x、y坐标点。
由图10-7可知,DAC0832各端口地址为: FDH:1#DAC0832第一级“8位输入寄存器”的端口地址 FEH:2#DAC0832第一级“8位输入寄存器”的端口地址 FFH:1#和2#DAC0832共同的第二级“8位DAC寄存器”端口地址 程序首先使单片机工作寄存器0区的R1指向addr1;1区的R1指向addr2;0区工作寄存器的R2存放数据块长度;0区和1区工作寄存器区的R0指向DAC端口地址。参考程序如下: 32
33
3.DAC0832的双极性的电压输出 除了需要DAC0832为单极性模拟电压输出外,在有些场合则要求DAC0832双极性模拟电压输出,只需改变DAC0832的外部连线,即可实现双极性模拟电压输出,下面简单介绍。 34
在需要双极性电压输出的场合下,可以按照图10-8所示接线。图中,DAC0832 的8位数字量由单片机送来,A1和A2均为运算放大器,vo通过2R电阻反馈到运算放大器A2 的“-”输入端,G点为虚拟地,其他的电路连接如图10-8所示。由基尔霍夫定律列出的方程组可解得: 图10-8 双极性DAC的接法 35
由上式可知,当单片机输出给DAC0832的数字量B≥128时,即数字量最高位b7为“1” ,输出的模拟电压vo为正;当单片机输出给DAC0832的数字量B<128时,即数字量最高位为“0”,则vo的输出电压为负。 36
10.3 AT89S52单片机与12位D/A转换器AD667的接口设计 当8位DAC分辨率不够时,可采用高于8位分辨率的DAC,例如,10位、12位、14位和16位(例如AD669)的DAC。 AD667是一种分辨率为12位的并行输入、为双缓冲输入,电压输出型D/A转换器,建立时间≤3µs;通过改变片外引脚的连接连接,可输出模拟电压+5V、+10V、±2.5V、±5V和±10V;内含高稳定的基准电压源,可方便地与4位、8位或16位微处理器接口;双电源工作电压为±12V~±15V。 37
10.3.1 12位D/A转换器AD667简介 1.引脚介绍 AD667为标准28脚双列直插式封装,图10-9所示为双列直插式封装引脚图。
图10-9 AD667引脚图 39
表10-1为AD667的引脚功能说明 40
2. 内部功能结构 图10-10所示为AD667内部功能结构框图。 41
AD667的总线接口逻辑由4个独立的可寻址锁存器组成,其中第一级锁存器由3个4位的锁存器组成,第二级锁存器为1个“12位DAC锁存器”,可以直接从4位、8位或16位微处理器总线分一次或几次加载12位数字量;一旦数字量被装入第一级的12位(3个4位)输入数据锁存器,就可以控制把12位数字量一次送入第二级的“12位DAC锁存器”并输出,这种双缓冲结构可以避免仅一级寄存器时,3个4位锁存器的不同步的输入,而产生错误的“毛刺”模拟量输出。 4个锁存器由4个地址输入A0~A3以及共同控制,所有的控制信号都是低电平有效,对应关系如表10-2所示。 42
43
10.3.2 AD667与AT89S52单片机的接口设计 【例10-3】图10-11为AT89S51单片机与AD667的接口电路。 44
单片机把AD667所占的3个端口地址(第一级的低4位和中4位锁存器,高4位锁存器,第二级的12位锁存器)视为外部数据存储器的3个单元,对其进行选通,完成对AD667数据传送锁存及转换的功能。假定低8位数据存于20H单元,高4位数据存入21H的低4位,实现D/A转换的参考程序段: 45
上述程序中,待转换的12位数字量中的低8位数据,高4位数据已经被存于片内RAM的20H单元和21H的低4位。 10. 3 上述程序中,待转换的12位数字量中的低8位数据,高4位数据已经被存于片内RAM的20H单元和21H的低4位。 10.3.3 AD667使用中的技术细节 D/A转换器AD667配置灵活、性价比高,在实际使用中,有关的技术细节,还是需要了解并掌握的。 1. 模拟电压输出范围的配置 AD667通过片外引脚的不同电路连接,可获得不同的输出电压量程范围。单极性工作时,可以获得0~5V和0~10V的电压。双极性工作时,可获得±2.5V、±5V和±10V的电压。具体量程配置可由引脚1、2、3、9的不同连接实现,如表10-3 46
所示。由于AD667内置的量程电阻与其他元器件具有热跟踪性能,所以AD667的增益和偏置漂移非常小。 (1)单极性电压输出 图10-12为0~10V单极性电压输出电路原理图。 a. 电路调零 在电路运行之前,为保证转换精度,首先要进行电路调零和增益调节。 数字输入量全为“0”时,调节50kΩ电位器RP1,使其模拟电压输出端(VOUT)电压为0.000V。在大多数情况下,并不需要调零,只要把脚4与脚5相连(接地)即可。
图10-12 0~10V单极性电压输出的电路原理图
b.增益调节 数字输入量全为“1”时,调节100Ω电位器RP2,使其模拟电压输出为9. 9976V,即满量程的10 b.增益调节 数字输入量全为“1”时,调节100Ω电位器RP2,使其模拟电压输出为9.9976V,即满量程的10.000V减去1LSB(约为2.44mV)所对应的模拟输出量。 (2)双极性电压输出 图10-13所示为-5V~+5V双极性电压输出的电路图。建议任何未使用的数据和控制引脚最好与电源地相连,以改善抗噪声干扰特性。 AD667使用正逻辑的二进制输入编码,大于2.0V的输入电压表示逻辑“1”,而小于0.8V的输入电压表示逻辑“0”。 单极性输出时,输入编码采用直接二进制编码,全“0”数据输入000H产生零模拟输出;全“1”数据输入FFFH产生比满量程少1LSB的模拟输出。 50
图10-13 ±5V双极性电压输出电路原理图
双极性输出时,输入编码采用偏移二进制编码,数据输入为000H时,产生负的满量程输出;数据输入为FFFH时,产生比满量程少1LSB的模拟输出;数据输入为800H时,模拟输出为0。其中1LSB为最低位对应的模拟电压。双极性输出时输入与输出关系如图10-14所示。 图10-14 双极性输出与输入关系 52
输入数字量N与输出模拟电压VOUT的关系为 式中,VR为输出电压量程。 在电路运行之前,为保证转换精度,首先要进行偏置调节和增益调节。 a.偏置调节 数字输入量全为“0”时,调节100Ω的电位器RP1,使其模拟电压输出端电压为±5.000V。 b.增益调节 数字输入量全为“1”时,调节100Ω电位器RP2,使其模拟输出电压值为4.9976V,即正满量程电压输出5.000V减去1LSB(约为2.44mV)所对应的模拟输出量。
2. 内部/外部基准电压源的使用 AD667有内置低噪声基准电源,其绝对精度和温度系数都是通过激光修正的,具有长期的稳定性。片内基准电源可提供片内D/A转换器所需的基准电流,还可通过缓冲电路驱动外部电路,一般可向外部负载提供0.1mA的驱动电流。 3. 接地与动态电容的接法 AD667把模拟地AGND与电源地PGND分开,可以减少器件的低频噪声和增强高速性能。把地回路分开的目的是为了尽量减少低电平信号路径中的电流。AGND是输出放大器中的地端,应与系统中的模拟输出电压基准地直接相连,任何由
输出放大器驱动的负载都应该接在模拟地引脚上。电源地PGND可以与模拟电源的接地点就近连接。最后AGND与PGND在一点上进行连接,一般连接到电源地PGND上。 另外,AD667的电源引脚到模拟地引脚间应加上适当的去耦电容。 在输出放大器反馈电阻两端加一个20pF的小电容,可以明显改善输出放大器的动态性能。
10. 4 AT89S51与串行输入的12位D/A转换器AD7543的接口设计 10. 4 10.4 AT89S51与串行输入的12位D/A转换器AD7543的接口设计 10.4.1 AD7543简介 AD7543是美国AD公司的专为通用异步串行口(UART)设计的12位价廉的D/A转换器。AD7543可直接与AT89S52的串行口相连,其内部结构如图10-15所示。 AD7543片内由12位串行输入并行输出移位寄存器(寄存器A)和12位DAC输入寄存器(寄存器B)组成。在选通信号的前沿或后沿(可选择)定时把SRI引脚上的串行数据装入寄存器A,一旦寄存器A装满,在加载脉冲的控制下,寄存器A的数据 56
图10-15 AD7543的片内结构 57
便装入寄存器B中,并转换为模拟量输出。 AD7543的DIP封装形式的引脚如图10-16所示。 58
各引脚功能如下: OUT1:AD7543的电流输出引脚1。 OUT2:AD7543的电流输出引脚2。 AGND:模拟地。 STB1、STB2 、STB*、STB4:寄存器A的4个选通控制信号。 LD1*、LD2*:寄存器B加载1与加载2输入。当LD1*和LD2*为低电平时,寄存器A的内容送到寄存器B。 SRI:单片机输入到寄存器A的串行数据输入引脚。 DGND:数字地。 CLR*:寄存器B清除输入,用于异步地将寄存器B复位至000H。 VDD:+5V电源。 59
各引脚功能如下: OUT1:AD7543的电流输出引脚1。 OUT2:AD7543的电流输出引脚2。 AGND:模拟地。 STB1、STB2 、STB*、STB4:寄存器A的4个选通控制信号。 LD1*、LD2*:寄存器B加载1与加载2输入。当LD1*和LD2*为低电平时,寄存器A的内容送到寄存器B。 SRI:单片机输入到寄存器A的串行数据输入引脚。 DGND:数字地。 CLR*:寄存器B清除输入,用于异步地将寄存器B复位至000H。 VDD:+5V电源。 VREF:基准电压输入。 Rfb:DAC反馈电阻输入引脚。
10.4.2 AT89S52扩展AD7543的接口设计 【例10-4】 AT89S52与AD7543的接口电路如图10-17所示。 61
图10-17中的单片机串行口直接与AD7543相连,串行口选用方式0,其TXD端移位脉冲的负跳变将RXD输出的串行位数据移入AD7543,利用地址译码器的输出信号产生 ,从而将AD7543移位寄存器A中的内容移入到寄存器B中,并启动D/A转换。 由于AD7543的12位数据是高至低逐位串行输入的,而AT89S52的串行口方式0是低至高逐位串行输出的,因此在数据传输到AD7543之前必须重新装配。下面是单片机的驱动程序,假设AD7543的端口地址为“addrH”,数据缓冲器单元地址为dbufh(高4位)和dbufl(低8位)。 62
63
10.5 单片机扩展A/D转换器概述 A/D转换器(ADC)把模拟量转换成数字量,单片机才能进行数据处理。随着超大规模集成电路技术的飞速发展,大量结构不同、性能各异的A/D转换芯片应运而生。 1.A/D转换器简介 目前单片ADC芯片较多,对设计者来说,只需合理的选择芯片即可。现在部分的单片机片内也集成了A/D转换器,位数为8位、10位或12位,且转换速度也很快,但是在片内A/D转换器不能满足需要的情况下,还是需要外扩。因此,作为外部扩展A/D转换器的基本方法,还是应当掌握。 尽管A/D转换器的种类很多,但目前广泛应用在单片机应用 64
系统中的主要有逐次比较型转换器和双积分型转换器,此外Σ-Δ式转换器也逐渐得到重视和应用。 逐次比较型A/D转换器,在精度、速度和价格上都适中,是最常用的A/D转换器。双积分型A/D转换器,具有精度高、抗干扰性好、价格低廉等优点,与逐次比较型A/D转换器相比,转换速度较慢,近年来在单片机应用领域中已得到广泛应用。Σ-Δ式ADC具有积分式与逐次比较型ADC的双重优点。它对工业现场的串模干扰具有较强的抑制能力,不亚于双积分ADC,它比双积分ADC有较高的转换速度,与逐次比较型ADC相比,有较高的信噪比,分辨率高,线性度好。由于上述
优点,Σ-Δ式ADC也逐渐得到重视,已有多种Σ-Δ式A/D芯片可供用户选用。 A/D转换器按照输出数字量的有效位数分为4位、8位、10位、12位、14位、16位并行输出以及BCD码输出的位、位、位等多种。目前,除了并行的A/D转换器外,带有同步SPI串行接口的A/D转换器的使用也逐渐增多。串行接口的A/D转换器具有占用单片机的端口线少、 使用方便、接口简单等优点,已经得到广泛的使用。较为典型的串行A/D转换器为美国TI公司的TLC549(8位)、TLC1549(10位)以及TLC1543(10位)和TLC2543(12位)等。 66
A/D转换器按照转换速度可大致分为超高速(转换时间≤1ns)、高速(转换时间≤1µs)、中速(转换时间≤1ms)、低速(转换时间≤1s)等几种不同转换速度的芯片。目前许多新型的A/D转换器已将多路转换开关、时钟电路、基准电压源、二/十进制译码器和转换电路集成在一个芯片内,为用户提供了极大方便。 2.A/D转换器的主要技术指标 (1)转换时间或转换速率。转换时间是指A/D转换器完成一次转换所需要的时间。转换时间的倒数为转换速率。 (2)分辨率。分辨率是衡量A/D转换器能够分辨出输入模拟量最小变化程度的技术指标。分辨率取决于A/D转换器的位数,所以 67
习惯上用输出的二进制位数表示。例如,某型号A/D转换器的满量程输入电压为5V,可输出12位二进制数,即用212个数进行量化,分辨能力为1LSB,即5V/212=1.22mV,其分辨率为12位,或能分辨出输入电压1.22mV的变化。但是对于双积分型BCD码输出的A/D转换器MC14433,其满量程转换电压为2V档时,其输出的十进制数范围为0000~1999,能分辨出1mv的变化。如果把分辨率换算成二进制位数表示,位的A/D转换器(千位仅有0和1两个十进制数字,称其为半位,而百、十、个位均可能有10个十进制数字0~9出现,为完整的位,所以称其为三位半),其分辨率大约为11位,因为1999最接近于211=2048。 68
量化过程引起的误差称为量化误差。量化误差是由于有限位数字量对模拟量进行量化而引起的误差。量化误差理论上规定为一个单位分辨率的± 1/2LSB,提高A/D转换器的位数既可提高分辨率,又能够减少量化误差。 (3)转换精度。定义为一个实际A/D转换器与一个理想A/D转换器在量化值上的差值,可用绝对误差或相对误差表示。 要注意一个问题,两片具有相同位数的A/D转换器,它们的转换精度未必相同。 69
10.6 单片机扩展并行8位A/D转换器ADC0809 10.6.1 ADC0809简介 1.ADC0809功能及引脚 ADC0809是一种逐次比较型8路模拟输入、8位数字量并行输出的A/D转换器,其引脚见图10-18。 70
图10-18 ADC0809的引脚图 71
共28引脚,双列直插式封装。引脚功能如下: IN0~IN7:8路模拟信号输入端。 D0~D7:转换完毕的8位数字量输出端。 A、B、C与ALE:控制8路模拟输入通道的切换。A、B、C分别与单片机的三条地址线相连,三位编码对应8个通道地址端口。C、B、A = 000~111分别对应IN0~IN7通道的地址。各路模拟输入之间切换由软件改变C、B、A引脚的编码来实现。 OE、START、CLK:OE为输出允许端,START为启动信号输入端,CLK为时钟信号输入端。 VR(+)、VR(−):基准电压输入端。 72
2.ADC0809结构及转换原理 结构如图10-19所示。采用逐次比较法完成A/D转换,单一的+5V电源供电。片内带有锁存功能的8选1模拟开关,由C、B、A的编码来决定所选的通道。完成一次转换需100µs左右(转换时间与CLK脚的时钟频率有关),具有输出TTL三态锁存缓冲器,可直接连到单片机数据总线上。通过适当的外接电路,ADC0809可对0~5V的模拟信号进行转换。 73
图10-19 ADC0809结构框图 74
10.6.2.AT89S52单片机与ADC0809的接口设计 先了解单片机如何控制ADC开始转换,如何得知转换结束以及如何读入转换结果的问题。 单片机读取ADC的转换结果时,可采用查询和中断控制两种方式。 查询方式是在单片机把启动信号送到ADC之后,执行其他程序,同时对ADC0809的EOC脚不断进行检测,以查询ADC变换是否已经结束,如查询到变换已经结束,则读入转换完毕的数据。 中断控制方式是在启动信号送到ADC之后,单片机执行 75
其他程序。ADC0809转换结束并向单片机发出中断请求信号时,单片机响应此中断请求,进入中断服务程序,读入转换完毕的数据。 中断控制方式效率高,所以特别适合于转换时间较长的ADC。 1. 查询方式 【例10-5】单片机采用查询方式控制ADC0809进行A/D转换的接口设计与软件编程。 ADC0809与单片机的查询方式接口电路如图10-20所示。 76
图10-20 ADC0809与AT89S52查询式接口 77
图10-20所示的基准电压是提供给A/D转换器在转换时所需要的基准电压,这是保证转换精度的基本条件。基准电压要单独用高精度稳压电源供给,其电压的变化要小于1LSB。否则当被变换的输入电压不变,而基准电压的变化大于1LSB,也会引起A/D转换器输出的数字量变化。 由于ADC0809片内无时钟,可利用单片机提供的地址锁存允许信号ALE经D触发器二分频后获得,ALE引脚的频率是AT89S51单片机时钟频率的1/6(但要注意,每当访问外部数据存储器时,将少一个ALE脉冲)。如果单片机时钟频率采用6MHz,则ALE引脚的输出频率为1MHz,再二分频后 78
为500kHz,符合ADC0809对时钟频率的要求。当然,也可采用独立的时钟源输出,直接加到ADC的CLK脚。 由于ADC0809具有输出三态锁存器,其8位数据输出引脚D0~D7可直接与单片机的P0口相连。地址译码引脚C、B、A分别与地址总线的低三位A2、A1、A0相连,以选通IN0~IN7中的一个通道。 79
在启动A/D转换时,由单片机的写信号WR. 和P2 在启动A/D转换时,由单片机的写信号WR*和P2.7控制ADC的地址锁存和转换启动,由于ALE和START连在一起,因此ADC0809在锁存通道地址的同时,启动并进行转换。 在读取转换结果时,用低电平的读信号 和P2.7引脚经一级“或非门”后产生的正脉冲作为OE信号,用来打开三态输出锁存器。 下面的程序是采用软件延时的方式,分别对8路模拟信号轮流采样一次,并依次把结果转储到数据存储区的转换程序。 80
81
2. 中断方式 ADC0809与AT89S52单片机的中断方式接口电路只需要将图10-20所示的EOC引脚经过一“反门”连接到AT89S52单片机的外中断输入引脚INT1*即可。 采用中断方式可大大节省单片机的时间。当转换结束时,发出EOC脉冲向单片机提出中断申请,单片机响应中断请求,由外部中断1的中断服务程序读A/D结果,并启动ADC0809的下一次转换,外部中断1采用跳沿触发方式。 参考程序: 82
83
10.7 AT89S51扩展12位串行ADC-TLC2543的设计 TLC2543是美国TI公司分辨率为12位的串行SPI接口的A/D转换器,转换时间为10µs。TLC2543用4根线与单片机进行串行通信,这4根线分别是片选信号、I/O时钟、串行数据输入、串行数据输出。采用SPI接口的特点是快速、高效,操作起来比I2C要简单一些。由于TLC2543与单片机的接口电路简单,且价格适中,分辨率较高,因此在智能仪器仪表中有着较为广泛的应用。与TLC2543类似的串行SPI接口的A/D转换器还有:TLC1549(10位,转换时间≤21µs)与TLC549(8位,转换时间≤17µs)
10.7.1 TLC2543的特性及工作原理 TLC2543片内有1个14路模拟开关,用来选择11路模拟输入以及3路内部测试电压中的1路进行采样。为了保证测量结果的准确性,该器件具有3路内置自测试方式,可分别测试“REF+” 正基准电压值,“REF-”负基准电压值和“REF+/2”的值,TLC2543的模拟量输入范围为REF+~REF-,一般的输入模拟量变化范围为0~+5V,所以此时REF+脚接+5V,REF-脚接地。
1. TLC2543的引脚 TLC2543的引脚见图10-21,各引脚功能如下。 AIN0~AIN10:11路模拟量输入端。 CS* :片选端。 DATAINPUT:串行数据输入端。由4位的串行地址输入来选择模拟量输入通道。 DATA OUT:A/D转换结果的三态串行输出端。 为高时处于高阻抗状态, 为低时处于转换结果输出状态。 EOC:转换结束端。 I/O CLOCK:I/O时钟端。
图10-21 TLC2543引脚
REF+:正基准电压端。基准电压的正端(通常为Vcc)被加到REF+,最大的输入电压范围为加在本引脚与REF-引脚的电压差。 GND:地。
2. TLC2543工作过程 工作过程分为两个周期:I/O周期和实际转换周期。 (1)I/O周期 I/O周期由外部提供的I/O CLOCK定义,延续8、12或16个时钟周期,取决于选定的输出数据长度。器件进入I/O周期后同时进行两种操作。 ① TLC2543的工作时序如图10-22所示。在I/OCLOCK的前8个脉冲的上升沿,以MSB前导方式从DATAINPUT端输入8位数据到输入寄存器。其中前4位为模拟通道地址,控制14通道模拟多路器从11个模拟输入和3个内部自测电压中,选通1路
图10-22 TLC2543的工作时序
到采样保持器,该电路从第4个I/OCLOCK脉冲下降沿开始,对所选的信号进行采样,直到最后一个I/O CLOCK脉冲下降沿。I/O脉冲时钟个数与输出数据长度(位数)有关,输出数据的长度由输入数据的D3、D2可选择为8位、12位或16位。当工作于12位或16位时,在前8个脉冲之后,DATAINPUT无效。 ② 在DATA OUT端串行输出8位、12位或16位数据。当 保持为低时,第1个数据出现在EOC的上升沿,若转换由 控制,则第1个输出数据发生在 的下降沿。这个数据是前1次转换的结果,在第1个输出数据位之后的每个后续位均由后续的I/OCLOCK脉冲下降沿输出。
(2)转换周期 在I/O周期最后一I/OCLOCK脉冲下降沿后,EOC变低,采样值保持不变,转换周期开始,片内转换器对采样值进行逐次逼近式A/D转换,其工作由与I/OCLOCK同步的内部时钟控制。转换结束后EOC变高,转换结果锁存在输出数据寄存器中,待下一I/O周期输出。I/O周期和转换周期交替进行,从而可减少外部的数字噪声对转换精度影响。
3. TLC2543命令字 每次转换都必须向TLC2543写入命令字,以便确定被转换信号来自哪个通道,转换结果用多少位输出,输出的顺序是高位在前还是低位在前,输出结果是有符号数还是无符号数。命令字写入顺序是高位在前,格式如下: (1) 通道地址选择位用来选择输入通道。0000~1010分别是11路模拟量AIN0~AIN10的地址;地址1011、1100和1101所选择的自测试电压分别是((VREF+)-(VREF-))/2、VREF-、VREF+。1110是掉电地址,选
掉电后,TLC2543处于休眠状态,此时电流小于20µA。 (2)数据长度(D3~D2)位用来选择转换的结果用多少位输出。D3D2为x0:12位输出;D3D2为01:8位输出;D3D2为11:16位输出。 (3)数据的顺序位(D1)用来选择数据输出的顺序。D1=0,高位在前;D1=1,低位在前。 (4)数据的极性位(D0)用来选择数据的极性。D0=0,数据是无符号数;D0=1,数据是有符号数。
10.7.2 单片机扩展TLC2543的接口设计 介绍单片机与TLC2543接口设计及软件编程。 【例10-8】单片机扩展TLC2543的接口如图10-23所示,编写程序对某一模拟通道进行数据采集。 TLC2543使用串行SPI接口与单片机进行通信,由于AT89S52单片机不带SPI接口,须采用软件与单片机I/O口线相结合,来模拟SPI的接口时序。TLC2543的I/O CLOCK、DATA INPUT和端由AT89S52单片机的P1.0、P1.1和P1.3来控制。转换结果的输出数据(DATAOUT)由单片机的P1.2串行接收,AT89S52将命令字通过P1.1输入到TLC2543的输入寄存器中,启动A/D转换。
图10-23 单片机与TLC2543的SPI接口
下面的参考程序为单片机选择某一通道(例如AIN0通道)进行1次数据采集,A/D转换结果共12位,分两次读入。先读入TLC2543中的8位转换结果到单片机中,同时写入下一次转换的命令,然后再读入4位的转换结果到单片机中。注意:TLC2543在每次I/O周期读取的数据都是上次转换的结果,当前的转换结果要在下一个I/O周期中被串行移出。TLC2543A/D转换的第1次读数由于内部调整,读取的转换结果可能不准确,应丢弃。
TLC2543在A/D转换结束后“EOC”脚为高电平,经非门后,向单片机的外中断0发出中断请求,进入中断服务子程序,单片机从TLC2543三态输出端“DATA OUT”读取转换结果。 参考的子程序如下。
执行上述程序中的8次循环,执行“RRC A”指令8次,每次读入转换结果1位,然后送出ADCOMD单元中的下一次转换的命令字节“G7 G6 G5 G4 G3 G2 G1 G0”中的1位,进入TLC2543的输入寄存器。经8次右移后,8位A/D转换结果数据
“××××××××”读入累加器Acc中,上述的数据交换过程如图10-24所示。子程序中的4次循环,只是读入转换结果的4位数据,图中没有给出,读者可自行画出4次移位的过程。 图10-24 AT89S52单片机与TLC2543的8位数据交换示意图。 由本例可见,单片机与TLC2543的接口电路十分简单,只需用软件控制4条I/O脚按照规定的时序对TLC2543进行访问即可。
图10-24 AT89S52单片机与TLC2543的8位数据交换示意图
10.8 AT89S52与双积分型A/D转换器MC14433接口 目前,双积分型A/D转换器集成电路芯片很多,常见的有位A/D转换器MC14433和位A/D转换器ICL7135。双积分型ADC由于两次积分时间比较长,所以A/D转换速度慢,约1~10次/秒,但精度可以做得比较高;对周期变化的干扰信号积分为零,因此具有较好的抑制50Hz工频干扰的能力。因此双积分型ADC广泛用于在不要求高速转换以及工频干扰较为严重的场合。 103
10. 8. 1 MC14433 A/D转换器简介 被转换电压量程为199. 9mV或1 10.8.1 MC14433 A/D转换器简介 被转换电压量程为199.9mV或1.999V两档。转换完的数据以BCD码的形式分4次送出(最高位输出内容特殊,详见表10-3)。 引脚如图10-25所示。下面介绍各引脚的功能。 104
图10-25 MC14433引脚图 105
R1:积分电阻输入端,转换电压VX = 2V时, R1 = 470Ω ;VX = 200mV时,R1 = 27kΩ 。 (1)电源及共地端 VDD:主工作电源,+5V。 VEE:模拟部分的负电源端,接-5V。 VAG:模拟地端。 VSS:数字地端。 VR:基准电压输入端。 (2)外接电阻及电容端 R1:积分电阻输入端,转换电压VX = 2V时, R1 = 470Ω ;VX = 200mV时,R1 = 27kΩ 。 106
CLKI、CLKO:外接振荡器时钟调节电阻RC,RC一般取470Ω左右。 C1:积分电容输入端,C1一般取0.1F。 R1/C1:R1与C1的公共端 CLKI、CLKO:外接振荡器时钟调节电阻RC,RC一般取470Ω左右。 (3)转换启动/结束信号端 EOC:转换结束信号输出端,正脉冲有效。 DU:启动新的转换,若DU与EOC相连,每当A/D转换结束后,自动启动新的转换。 107
OR*:当|VX|>VR时,过量程OR*输出低电平。 (5)位选通控制端 (4)过量程信号输出端 OR*:当|VX|>VR时,过量程OR*输出低电平。 (5)位选通控制端 DS4~DS1:分别为个、十、百、千位输出的选通脉冲,正脉冲有效。DS1对应千位,DS4对应个位。每个选通脉冲宽度为18个时钟周期,两个相应脉冲之间间隔为2个时钟周期,如图10-26所示。 108
图10-26 MC14433选通脉冲时序图 109
(6)BCD码输出端 Q3~Q0:BCD码数据输出线。其中,Q3为最高位,Q0为最低位。当DS2、DS3和DS4选通期间,输出3位完整的BCD码数,但在DS1(千位)选通期间,即DS1=1期间,输出端Q3~Q0除了表示个位的0或1外,还表示被转换电压的正负极性(Q2=1为正)和欠量程或过量程,其具体含义见表10-3。 110
111
由表10-3可知: (1)Q3表示最高位千位(1/2位)。Q3 = 0对应“1”,反之对应“0”。 (2)Q2表示极性。Q2=1为正极性,Q2=0为负极性。 (3)Q0=1表示过量程或欠量程。当Q3=0时,表示过量程;当Q3 = 1时,表示欠量程。 112
10.8.2 MC14433与AT89S52单片机的接口 【例10-8】实现单片机与MC14433的接口设计与软件编程。 MC14433的A/D转换结果是动态分时输出的BCD码,Q0~Q3为千、百、十、个位的BCD码,而DS1~DS4分别为千、百、十、个位的选通信号,由于转换结果输出不是总线式的并行输出,因此AT89S52单片机只能通过并行I/O接口或扩展I/O接口与其相连。下面介绍MC14433与单片机P1口直接相连的接口电路,如图10-27所示。 113
图10-27 MC14433与AT89S52单片机的接口电路 114
图10-27所示的MC1403为+2.5V精密集成电压基准源,经电位器分压后作为A/D转换用基准电压。DU端与EOC端相连选择了连续转换方式,每次转换结果都送至输出寄存器。EOC是A/D转换结束的输出标志信号。单片机读取A/D转换结果可以采用中断方式或查询方式。采用中断方式时,EOC端与单片机外部中断输入端INT0*或INT1*相连。采用查询方式时,EOC端可与单片机的任意I/O口线相连。 若选用中断方式读取MC14433的结果,应选用跳沿触发方式。如果将A/D转换的结果存放到单片机内部RAM的20H、21H单元中,则数据存放的格式如图10-28所示。 115
图10-28 数据存放格式 读取A/D转换结果的程序设计 初始化程序首先是总中断允许,外部中断1中断请求允许,置外部中断1为跳沿触发方式。每次A/D转换结束,都向单片机请求中断,单片机响应中断,执行中断服务程序,读取A/D转换的结果。 参考程序如下: 116
117
118
MC14433外接的积分元件R1、C1(图10-27中的引脚4、5、6)大小和时钟有关,在实际应用中需加以调整,以得到正确的量程和线性度。积分电容也应选择聚丙烯电容。 119
10.9 AT89S52单片机与V/F转换器的接口 目前,利用A/D转换技术制成的各种测试仪器得到了广泛应用。在某些要求数据长距离传输,精确度要求较高的场合,采用一般的A/D转换技术有多不便,可使用V/F转换器代替A/D器件。 V/F转换器是把电压信号转变为频率信号的器件,有良好的精度、线性和积分输入特点,此外,它的应用电路简单,外围元件性能要求不高,适应环境能力强,转换速度不低于一般的双积分型A/D器件,且价格低,因此V/F转换技术广泛用于非快速的A/D转换过程中。 120
V/F转换是把电压信号转变为频率信号,再将该频率信号转换为数字信号,实质上是一种间接的A/D转换技术。 V/F转换器与单片机接口有以下特点: (1)接口简单、占用单片机硬件资源少。产生的频率信号可输入单片机的一根I/O口线或作为中断信号输入及计数信号输入等。 (2)抗干扰性能好。用V/F转换器实现A/D转换,就是频率计数的过程,相当于在计数时间内对频率信号进行积分,因而有较强的抗干扰能力。另外可采用光电耦合器连接V/F转换器与单片机之间的通道,实现光电隔离。 (3)便于远距离传输。可通过调制进行无线传输或光传输。 121
由于以上这些特点,V/F转换器适用于一些非快速而需进行远距离信号传输的A/D转换过程。另外,还可以简化电路、降低成本、提高性价比。 10.9.1 用V/F转换器实现A/D转换的原理 V/F转换工作原理为:单片机片内的计数器把V/F转换器输出的频率信号作为计数脉冲,进行定时计数。计数器的计数值与V/F转换器输出的脉冲频率信号之间的关系为: 122
上式中,D是计数器计得的值,T是已知的计数时间。只要知道了D值,再除以计数的时间T,就可求出V/F转换器的输出频率,从而知道输入电压V,实现了A/D转换。 10.9.2 常用V/F转换器LMX31简介 常用的通用型的V/F转换器为LM331,LM331适用于A/D转换器、高精度F/V变换器、长时间积分器、线性频率调制或解调器等电路。LM331的特性如下: 123
1.主要特性 (1)频率范围:1~100kHz; (2)低的非线性:±0 1.主要特性 (1)频率范围:1~100kHz; (2)低的非线性:±0.01%; (3)单电源或双电源供电; (4)单电源供电电压为+5V时,可保证转换精度; (5)温度特性:最大±50ppm/oC ; (6)低功耗:Vs=5V时为15mW 124
两种封装形式,其中的DIP封装如图10-29所示。 图10-29 LMX31封装图 2.电特性参数 (1)电源电压:+15V (2)输入电压范围:0~10V (3)输出频率:10Hz~11kHz (4)非线性失真:±0.03% 125
3.LMX31的V/F转换外部接线 LMX31的V/F转换外部接线如图10-30所示。 图10-30 LMX31外部接线图 126
10.9.3 V/F转换器与MCS-51单片机接口 被测电压转换为与其成比例的频率信号后送入计算机进行处理。 (1)V/F转换器可以直接与89S52单片机接口。接口较简单,频率信号接单片机的定时器/计数器输入端即可。如图10-31所示。 图10-31 V/F转换器与单片机接口 127
(2)在一些电源干扰大、模拟电路部分容易对单片机产生电气干扰等恶劣环境中,可采用光电隔离的方法使V/F转换器与单片机无电信号联系,如图10-32所示。 (3)当V/F转换器与单片机之间距离较远时需要采用驱动电路以提高传输能力。一般可采用串行通信的驱动器和接收器来实现。例如使用RS-422的驱动器和接收器时,允许最大传输距离为120m,如图10-33所示。其中SN75174/75175是 RS-422标准的四差分线路驱动/接收器。 128
图10-32 使用光电隔离器的接口 图10-33 利用串行通信器件的接口 129
(4)采用光纤或无线传输时,需配以发送、接收装置,如图10-34、图10-35所示。 图10-34 利用光纤进行传输的接口 图10-35 利用无线传输设备用作输入通道 130
10.9.4 V/F转换的应用设计 本例使用LM331和8031的内部定时器构成A/D转换电路,具有使用元件少、成本低、精度高的特点。 1. 接口电路 AT89S52与LM331的接口电路如图10-36所示。 V/F转换器最大输出频率为10kHz,输入电压范围为0~10V。由于本电路输出频率较低,如对脉冲计数则会降低精度,因此采用测周期的方法。V/F输出的频率经D触发器二分频后接INT0*,作为T0计数器的控制信号。 131
T0计数器置定时器状态,取方式1,将TMOD. 3(T0的GATE位)置1,这样就由INT0 T0计数器置定时器状态,取方式1,将TMOD.3(T0的GATE位)置1,这样就由INT0*和TR0来共同决定计数器是否工作。这种方法只能测量信号周期小于65535个机器周期的信号。 图10-36 AT89S52与LM331的接口电路 132
2. 软件设计 程序包括初始化和计数两部分。初始化程序要对定时器0进行状态设置,使其工作在定时器工作模式,方式1,并将GATE位置1。计数程序首先需判断 的电平,当其为低时,打开TR0位准备计数;当其变为高时,启动计数,再为低时停止计数并清TR0,取出数据,将T0的时间常数寄存器TH0、TL0清0,准备下一次计数。程序如下: 133
本程序将计数结果高位存B,低位存A,以便后期处理。 134