Voltage Translation for Analog to Digital Interface

孕龙逻辑分析仪 ZeroPlus Logic Analyzer

How to modify analog output range of Arduino Due

In today's microcontroller market, most of the Analog to Digital converters

are only able to accept voltages from the Vcc of the device to ground.

But what if you want to measure a bipolar signal?

This short tutorial plans to show you a simple but effective method

to interface a bipolar voltage to any single polarity input.

On the left is the ideal basic circuit for interfacing.

vi is the input voltage,  vo is the voltage sent to the ADC,

vr is a reference voltage used for setting the center or zero input voltage,

and R1 and R2 are used for input scaling and current limiting

to bring the input voltage into the range of the ADC.

On the left are the 5 formulas needed to determine the values of vr and R2.
R1 will be chosen initially as we will see in an example below.  
 
As you can see in formulas I,III,IV, and V, 
the term is the voltage divider ratio of the resistors calculated by formula II.
Now that I have my basic circuit, and the required formulas, let's now create a useful example.
        In this example, my parameters will be as follows:        
        - Input impedance of at least 1Mohm.
        - vin = +/- 12V
        - vo = 0-5V 
        So when vin = 12v, vo = 5v
                       vin = -12v, vo = 0v
                       vin = 0v, vo = 2.5v

To begin, I need to calculate the value of R 

This will be the scaling factor applied to the incoming voltage.
To do this, I take the vo range and divide it by the vin range. In this case, 
        R = 5/24 = .2083 [ 12v - -12v = 24v ]
 
Next I will calculate the value of R2.
Because I want an input impedance of at least 1Mohm, I will use 1M as R1.
Using formula V, the value for R2 is:

R2 = (R * R1)/(1-R) = (.2083 * 1M)/(1-.2083) = 208,300/.7917 = 263,104 ohms.

Next I need to calculate the value of vr.
    Using the case of vin = 12, vo = 5, and using formula III:

vr = (vo - R * vi)/(1 - R) = (5 - .2083 * 12)/(1 - .2083) = 2.5004/.7917 = 3.158v 

I now have the 3 values required for my design.
    R1 = 1M
    R2 = 263,104
    vr = 3.158v

I can now plug these numbers into formula I
and calculate the three input voltages of +12, 0, and -12 and verify that the design is correct.

vo (vin=+12) = R(vi - vr) + vr = .2083(12 - 3.158) + 3.158 =  5.000
    vo (vin= 0)    = .2083(0 - 3.158) + 3.158 =  2.500
    vo (vin=-12)  = .2083(-12 - 3.158) + 3.158 = 0

    To the left is a practical circuit to interface to an ADC. The features are:
    - A diode and zener diode used to protect the ADC input from overvoltage.
    - R2 is composed of a fixed value, and a trim pot to dial in the correct value.
    - A trim pot connected to the non inverting input of an op amp in a voltage follower configuration for setting vr.  

To calibrate the circuit, adjust the op amp trim pot for an output voltage of vr as calculated above.
Next, input a voltage to vi and calculate what the vo should be,
and adjust the R2 trim pot until that voltage is achieved.

Note:
Generally, zener diodes will always have some current flow.
This will adversely affect the accuracy of the ADC measurements as well as the linearity. 
A method of switching in the zener when max voltage is reached would be preferable,
but would increase the part count.

Now I have a working circuit, but the last thing to calculate is the maximum and minimum input voltages.

This will be determined by the two diodes and using formula IV.
The maximum input voltage will occur when the zener diode goes into breakdown regulation.
If we assume a zener voltage of 5.1v, the maximum input voltage is:

vi = ((vo - vr)/R) + vr = ((5.1 - 3.158)/.2083) + 3.158 = 12.481v
  
The minimum input voltage will occur when the diode is forward biased.

Assuming a forward voltage of 0.7v, the minimum input voltage is:

vi = ((-0.7 - 3.158)/.2083) + 3.158 = -15.363v  

Effective input impedance can be calculated as follows:

zin = vin(R1 + R2)/(vin - vr)

This is a varying quantity depending on vin.

 

Voltage Translation for Analog to Digital Interface ADC的更多相关文章

  1. Fully Digital Implemented Delta-Sigma Analog to Digital Converter

    http://www.design-reuse.com/articles/14886/fully-digital-implemented-delta-sigma-analog-to-digital-c ...

  2. Analog/digital converter (ADC)

    1.ADC1 and ADC2 are 10-bit successive approximation Anolog to Digital Converters. 所谓successive appro ...

  3. STM8S——Analog/digital converter (ADC)

    1.ADC1 and ADC2 are 10-bit successive approximation Anolog to Digital Converters. 所谓successive appro ...

  4. DG449 High Voltage Single SPDT Analog Switch in SOT23-8

    DESCRIPTION The DG449 is a dual supply single-pole/double-throw (SPDT) switches. On resistance is 38 ...

  5. How to modify analog output range of Arduino Due

    Voltage Translation for Analog to Digital Interface ADC How to modify analog output range of Arduino ...

  6. 孕龙逻辑分析仪 ZeroPlus Logic Analyzer

    Voltage Translation for Analog to Digital Interface ADC http://openschemes.com/2010/03/23/zeroplus-l ...

  7. quick start guide for XMEGA ADC

    This is the quick start guide for the Analog to Digital Converter (ADC), with step-by-step instructi ...

  8. BOOST Converter Analog/Digital Adjusted Output Voltage TPS61045 MAX1932

    DIGITALLY ADJUSTABLE BOOST CONVERTER The TPS61045 is a high frequency boost converter with digitally ...

  9. Digital Adjustment of DC-DC Converter Output Voltage in Portable Applications

    http://pdfserv.maximintegrated.com/en/an/AN818.pdf http://www.maximintegrated.com/app-notes/index.mv ...

随机推荐

  1. centos6.7安装系统后看不到网卡无法配置IP的解决办法

    新安装centos6.7后发现/etc/sysconfig/network-scripts目录下没有eth0的网卡配置,通过ifconfig可以看到eth0的硬件地址 于是新建网卡输入一下内容 # c ...

  2. 通达OA2008从windows环境移植到linux部署手册

    通达OA2008从windows环境移植到linux中(centos5.5及以上版本) OA系统拓扑图: 环境搭建(安装lamp环境) 1.安装xampp集成lamp包xampp-linux-1.6. ...

  3. Linux中断处理(二)

    与Linux设备驱动中中断处理相关的首先是申请与释放IRQ的API request_irq()和free_irq(),request_irq()的原型为:int request_irq(unsigne ...

  4. 【必备】史上最全的浏览器 CSS & JS Hack 手册

    [必备]史上最全的浏览器 CSS & JS Hack 手册   浏览器渲染页面的方式各不相同,甚至同一浏览器的不同版本(“杰出代表”是 IE)也有差异.因此,浏览器兼容成为前端开发人员的必备技 ...

  5. vue2的缓存问题(非原创)

    keep-alive是vue内置的一个组件,可以使被它包含的组件处于保留状态,或避免被重新渲染. 用法: 运行结果描述: input输入框内,路由切换输入框内部的内容不会发生改变. 常见的用法:(下图 ...

  6. WCF服务寄宿Windows

    windows服务的介绍 Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合.它没有用户界面,并且也不会产生任何可视输出.任何用户消息都会被写进Windows事件日志.计 ...

  7. System.getenv()和System.getProperty() 的区别

    1.System.getenv() 方法是获取指定的环境变量的值.它有两种方法,一种是接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null.另外一种是不接受参数,那么返回的是 ...

  8. 实现与JS相同的Des加解密算法【转】

    Java代码 import java.util.ArrayList; import java.util.List; /** * DES加密/解密 * * @Copyright Copyright (c ...

  9. webstrom的热更新没效果

    webstorm保存的时候会先保存到临时文件中,其实并没有真正保存,要在setting->stystem settings下的“use save write”去掉

  10. gulp初探

    很多人都在用grunt和gulp,我现在连github都不用..为了说自己是个前端,还是搞搞gulp吧 nodejs很多人都会安装,这个不是问题 npm模块现在好像是自带的..我忘了.. 先全局安装下 ...