七、使用模数转换
计算机是二进制设备,它的数字式数据由一连串的O和1组成,要把它们组织在一起才能形成有意义的信息。
但实际世界是模拟的,数据基本上可以是任何数值,即在“无”和“极大”之间的千千万万的数值。
模数转换系统接收模拟信息,并把它翻译成数字式,即适合于机器人需要的格式。您可以用来连接到机器人的许多传感器在本质上是模拟式的。这包括温度传感器、话筒和其他的声音换能器、可变输出的触觉反馈(模感)传感器、位置电势计(如肘节角度传感器)、光检测器等。您可以把任何模数转换连至机器人。
1.模数转换如何工作
模数转换( ADC)就是把模拟值转变成二进制等效值。在大多数情况下,小的模拟值(如弱光照在光检测器上)可能只有很小的二进制等效值,如“1”或“2”。但是,大的模拟值可能有很大的二进制等效值,如“255”或更大。ADC电路要把模拟值的小变化转换为稍微不同的二进制数。需要产生不同二进制数的模拟信号的变化越小,ADC电路的“分辨率”就越高。转换的分辨率取决于电压范围(最常见为O~5伏)和用作二进制数的位数。
假设信号的电压范围为10伏,用8位(即1个字节)来表示这个电压的各种电平。8位有256个可能的组合,这意味着10伏的电压范围将用256个不同的二进制数值来代表。10伏和8位的转换表明ADC系统的分辨率为0 039伏(39毫伏)每级。显然,电压范围越小或位数越多,转换分辨率就越高。例如,10位转换有1024个可能的位组合,即大约0.009伏(9毫伏)每级。
2.逐次逼近式ADC原理
模数转换器的结构有许多种,包括逐次逼近式、单斜率、△一∑式和闪速式。最常用的结构可能是逐次逼近式,它以系统化的“20个问题”逐次用2除电压区间,每次都使可能的结果趋近答案。
ADC中的比较器电路确定输入电压是高于还是低于内部的基准值。如果高于,则ADC“分出”一组二进制数值;如果低于,则ADC分出另一组二进制值。
虽然这听起来像是一个绕来绕去的方法,但整个转换过程只需几微秒。
逐次逼近法(和一些其他ADC方案)的一个缺点是,如果在转换完成之前输入值已发生改变,则转换结果是不准确的。因此,大多数现代模数转换器采用内部的“采样保持”电路(通常是准确的电容和电阻)来临时存储取样值,直到转换完成为止。
3.模数转换IC
您可以用分立逻辑芯片来组装模数转换器电路——基本上是由许多比较器组合在一起。但比较容易的方法是使用专用的ADC集成电路。这些芯片不但转换方法不同(如逐次逼近法等),而且形式多种多样。
■单输入或多输入。单输入ADC芯片如ADC0804只能接收一个模拟输入。多输入ADC芯片如ADC0809或ADC0817可以接收多于1个(通常为4、8或16个)的模拟输入。ADC芯片上的控制电路使您可以选择您要转换的任一输入。
■位分辨率。基本的ADC芯片具有8位分辨率(以前讲过的ADC08xx集成电路都是8位)。10位和12位芯片可以达到更高的分辨率。16位模数转换器IC很少,但它们没有广泛应用于机器人。最常用的一种12位ADC芯片是Ll℃1298.它可以把输入电压(通常为O~5伏)转换为4096位。
■并行输出或串行输出。并行输出的ADC为每一位提供单独的数据线(10位和12位转换器仍可能只有8位数据线,转换后的数据必须分两段读出)。串行输出的ADC只有一个输出端每次发送1位的数据。在使用输入/输出线很少的微控制器时,串行输出ADC正好合乎需要。在最常见的方案中,在微控制器或计算机上运行的程序按照时钟的节奏每次处理一个数据位,最后输出转换后的数值。ADC08XX芯片配备并行输出,12位的LTC1298配备串行输出。
4.集成微控制器内置ADC
许多微控制器和单板计算机都内置了一个或多个模数转换器。与单独把ADC芯片与机器人连接在一起相比,这样做节省了时间和费用,也不会遇到麻烦。因为所有数据操作都在内部完成,所以您不必考虑ADC芯片是以串行或并行方式提供。您只需告诉系统读取模拟输入,它就把所得的数字结果告诉您。
从缺点上说,大多数位于微控制器上的ADC与单独的ADC相比一般功能比较有限。例如,您可以对大多数单独的ADC设定一个特定的电压范围,如2至4.5伏,而不是通常的0至5伏;接着把全部的位区间(8位、10位、12位等)应用于这个狭窄的电压范围。由于相同的位数被用于较小的电压范围,所以分辨率自然提高。微控制器和计算机中内置的大多数ADC无法改变电压区间,限定区间的转换必定精确度较差。此外,您虽然无法改变微控制器或计算机内置ADC的分辨率。但如果芯片采用8位分辨率,而您需要10位或12位,您可以另外增加独立的转换器。
5.取样电路
下图是使用ADC0809的基本电路,其中有8个模拟输入,并提供8位的转换分辨率。您想测试的输入可以由3位的控制输入来选择-000代表测试模拟输入,001代表测试模拟输入2,其余类推。请注意,约500kHz的时基可以来自陶瓷谐振器或其他的时钟源,或来自阻容( RC)时间常数。如果您需要精密的模数转换,您应当选用非RC电路的更精确时钟。
下图表示流行的ADC0804的引脚图,这是只有一个模拟输入的8位逐次逼近或模数转换集成电路。