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. [学习笔记]JS计数器,闭包和localStorage

    1.前言 Javascript也算用了挺久了,为了得到一个变量,类似Java的静态变量的功能,我想到了很早以前学习JS的闭包,还有做俄罗斯方块的排行榜用到LocalStorage技术,所以想总结一下, ...

  2. Python-HTML CSS题目

    一.简答1.手写html模板,并解释模板每个标签的作用 <!doctype html> 文件类型html <html>页面根 <head>后勤内容 <meta ...

  3. ubuntu预装的是vim tiny版本

    可以安装vim full版本,在full版本下键盘正常,安装好后同样使用vi命令.安装vim: ubuntu预装的是vim tiny版本,而需要的是vim full版本.执安装vim full版本:$ ...

  4. Lavarel - 模块间复用代码

    代码复用在项目中早晚会遇到,这不在用 Laravel 给博客增加 Feed 订阅功能 就到了需要将生成网页 description 的函数提取出来,在文章显示与 Feed 生成的两个 Controll ...

  5. hdu1828 扫描线计算周长

    和扫描线计算面积差不多,新加了lbd,rbd线段树来标记区间的左右两侧是否被填充(左右边界是否存在),numbd线段树统计区间有多少边 /*数据弱不用离散化,但是要处理一下坐标*/ #include& ...

  6. Fiddler抓包3-查看get与post请求

    前言 前面两篇关于Fiddler抓包的一些基本配置,配置完之后就可以抓到我们想要的数据了,接下来就是如何去分析这些数据. 本篇以博客园的请求为例,简单分析get与post数据有何不一样,以后也能分辨出 ...

  7. python 全栈开发,Day27(复习, defaultdict,Counter,时间模块,random模块,sys模块)

    一.复习 看下面一段代码,假如运行结果有问题,那么就需要在每一步计算时,打印一下结果 b = 1 c = 2 d = 3 a = b+c print(a) e = a + d print(e) 执行输 ...

  8. jquery的clone方法应用于textarea和select的bug修复不能copy值,clone id重复的解决

    textarea和select的值clone的时候会丢掉,在clone的时候将val再重新赋值一下,如果知道这个了就简单了, 测试发现,textarea和select的jquery的clone方法有问 ...

  9. 云平台Linux主机安装流程

    ==一.安装包===================================================================================如果是1+2主机安装 ...

  10. .NetCore下利用Jenkins如何将程序自动打包发布到Docker容器中运行

    说道这一块纠结了我两天时间,感觉真的很心累,Jenkins的安装就不多说了 这里我们最好直接安装到宿主机上,应该pull到的jenkins版本是2.6的,里面很多都不支持,我自己试了在容器中安装的情况 ...