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. [学习笔记]Javascript可选的分号

    1.前言 由于Javascript有自动识别一句语句的结尾,但是缺少必要分号作为结尾符,会降低代码的可读性和整洁性.通过javascript权威指南By淘宝前端团队译,这分号还算比较好玩的. 2.样例 ...

  2. Numpy详解

    NumPy 简介 Python并没有提供数组功能.虽然列表可以完成基本的数组功能,但它不是真正的数组,而且在数据量比较大时,使用列表的速度会很慢.为此,Numpy提供了真正的数组功能,以及对数据进行快 ...

  3. Redhat5_linux 系统环境下 oracl11g的安装教程图解

    linux_oracl11g 安装步骤 操作系统的安装敬请参考此文:VM 安装 linux Enterprise_R5_U4_Server_I386_DVD教程图解 设置linux服务器的静态地址请参 ...

  4. 测试开发之前端——No7.HTML5中的鼠标事件

    鼠标事件 由鼠标或相似的用户动作触发的事件. 适用于所有 HTML 5 元素: 属性 值 描述 onclick script 当单击鼠标时运行脚本 ondblclick script 当双击鼠标时运行 ...

  5. XHR简介

    在XHR诞生前,网页要获取客户端和服务器的任何状态更新,都需要刷新一次,在XHR诞生后就可以完全通过JS代码异步实现这一过程.XHR的诞生也使最初的网页制作转换为开发交互应用,拉开了WEB2.0的序幕 ...

  6. SQL开发测试使用基础

    目录 一.客户端配置与使用    1.oracle(PLSQL Developer)    2.hive(hive cli)及命令    3.postgre(pgAdmin)   二.注意事项及基础 ...

  7. CentOS7图形界面与命令行界面切换

    1.如果在命令行模式,按Ctrl+Alt+F1,可以进入图形界面: 2.如果在图形界面下,按:Ctrl+Alt+F2,可以进入命令行模式:

  8. cf796d 树,bfs好题!

    绝对是好题,把所有警察局放入队列然后开始广搜,如果碰到了vis过的顶点,但是那条边没有访问过,那么这条边就可以删掉 另外广搜的vis标记是在入队时就打的,, #include<bits/stdc ...

  9. pytest七:assert断言

    断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试 pass,不符合预期那就测试 failed py ...

  10. 使用super调用父类的构造方法

    package com.bjpowernode.t02inheritance.c09; /* * 使用super调用父类的构造方法 */public class TestSuper02 { publi ...