图1中的电压-时间ADC非常简单,但动态范围却很宽。假设它与10MHz计数器/定时器一起使用,其分辨率在输入为0V时约为10µV/计数,在输入为1kV时约为100mV/计数,并且它永远不会超出范围。提供这种数十测量跨度的简单技巧是利用RC计时网络固有的对数行为。
下面是它的工作原理。
图1:U1与R1、R2和C1配合使用,以对数方式数字化0kV至1kV输入,同时仅占用一个微控制器I/O引脚。
在转换之间,U1的复位引脚4由连接的GPIO引脚或U1本身保持低电平有效。在这种自复位模式下使用555并不常见,但在这里却非常方便。这可将C1保持在零或非常接近零的位置,因为引脚7的开漏FET的Ron通常只有15欧姆。
当I/O引脚被编程为输出并脉冲高电平时,转换开始,覆盖U1引脚3(输出)并释放复位,如图2所示。然后,I/O引脚立即变为三态并重新编程为输入,门控内部计数器/定时器外设以测量转换时间T。
由于U1的引脚2(触发器)保持低电平,复位结束时引脚3也被设置为高电平并释放引脚7,从而使C1开始正向上升。当引脚5上的电压达到2.048V(阈值)时,转换完成,转换所需的时间T即为转换结果。引脚5达到阈值电压时,引脚3(输出)变为低电平,从而使引脚4(复位)和GPIO变为低电平,后者是微处理器的“转换完成”状态位。同时,引脚7被驱动为低电平,对C1进行放电。此过程在大约12µs内完成,使转换器为下一个周期做好准备。
图2:单个通用三态I/O引脚用于控制和测量U1的超时。该引脚被编程为输出,并发出正脉冲以启动转换,然后三态用于定时器输入。当Vin=0时,转换时间(T)为10毫秒,当Vin=1kV时,转换时间(T)减少到大约100微秒。
T与Vin的关系由下式给出:
T = C1(R1||R2)*Loge ((0.209Vin + 3.234) / (0.209Vin + 1.1919))
= 10.0ms*Loge ((0.209Vin + 3.234) / (0.209Vin + 1.1919))
图3中绘制了Vin=10mV至1kV的曲线。
图3:Vin从0.01V至1000V的转换时间(T),以毫秒为单位。
要从T采集中恢复Vin,请执行以下操作:
Vin = (3.234 – 1.1919e(T/10.0ms))/(0.209(e(T/10.0ms) – 1))
最后,这里有一些现实问题。
您可能想知道为什么R1被显示为四个1M电阻的串联,而不是单个4M元件。需要4M的答案很明显,因为1kV是个很高的电压,而不太明显的是电阻器(有点像电容器)是具有额定电压的,而额定电压为1kV的电阻器不是很常见。
(原文刊登于EDN美国版,参考链接:Microvolts to kilovolts in milliseconds with one I/O pin,由Ricardo Xie编译)