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 R 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. Android命令Monkey压力测试,详解

    一.Monkey 是什么?Monkey 就是SDK中附带的一个工具. 二.Monkey 测试的目的?:该工具用于进行压力测试. 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出 ...

  2. 使用swiper.js实现移动端tab切换

    在项目中遇到的,要实现tab切换,我用的是swiper.js 官网:http://www.swiper.com.cn/api/start/new.html <!DOCTYPE html> ...

  3. Application.ProcessMessages; 的重要性

    https://files.cnblogs.com/files/del88/登陆光标_悬赏50元.zip ----------------------------------------------- ...

  4. PHP 中解析 url 并得到 url 参数

    这里介绍两种对url操作的方法: 1.拿到一个完整url后,如何解析该url得到里面的参数. /** * 解析url中参数信息,返回参数数组 */ function convertUrlQuery($ ...

  5. 【C++ Primer 第11章 练习答案】2. 关联容器操作

    11.3.1节练习 [练习11.16]代码 map<int, int> m; auto iter = m.begin(); iter ->second = ;

  6. HDU 3746 将字符串的全部字符最少循环2次需要添加的字符数

    Sample Input3aaaabcaabcde Sample Output025 题目大意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数.例子:abcabc 已经循环2次,添 ...

  7. IEnumerable和IEnumerator接口

    我们先思考几个问题:1.为什么在foreach中不能修改item的值?(IEnumerator的Current为只读)2.要实现foreach需要满足什么条件?(实现IEnumerator接口来实现的 ...

  8. canvas放射粒子效果

    这个也是别人的代码,就不多介绍了 写了些注释 body { overflow:hidden; margin:0; padding:0; background-color:#222222 } </ ...

  9. Linux 文件系统与挂载详解

    https://blog.csdn.net/baidu_34051990/article/details/60963947

  10. 求链表的倒数第m个元素

    法一: 首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第m个,转换为正数第n-m+1个,接下去遍历一次就可以得到结果. 不过这种方法需要对链表进行两次遍历,第一次遍历用于求解单链表的长度,第二 ...