2012-02-21 5:52 电路设计
仪表放大器是一种具有差分输入和相对参考端单端输出的闭环增益单元。大多数情况下,仪表放大器的两个输入端阻抗平衡并且阻值很高,典型值≥109 Ω。其输入偏置电流也应很低,典型值为 1 nA至 50 nA。与运算放大器一样,其输出阻抗很低,
在低频段通常仅有几毫欧(mΩ)。运算放大器的闭环增益是由其反向输入端和输
出端之间连接的外部电阻决定。与放大器不同的是,仪表放大器使用一个内部反馈电阻网络,它与其信号输入端隔离 。对仪表放大器的两个差分输入端施
加输入信号,其增益既可由内部预置,也可由用户通过引脚连接一个内部或者外部增益电阻器设置,该增益电阻器也与信号输入端隔离。
专用的仪表放大器价格通常比较贵,于是我们就想能否用普通的运放组成仪表放大器?答案是肯定的。使用三个普通运放就可以组成一个仪用放大器。电路如下图所示:
输出电压表达式如图中所示。
看到这里大家可能会问上述表达式是如何导出的? 为何上述电路可以实现仪表放大器?下面我们就将探讨这些问题。在此之前,我们先来看如下我们很熟悉的差分电路:

如果R1 = R3,R2 = R4,则VOUT = (VIN2—VIN1)(R2/R1)
这一电路提供了仪表放大器功能,即放大差分信号的同时抑制共模信号,但它也有些缺陷。首先,同相输入端和反相输入端阻抗相当低而且不相等。在这一例子中VIN1反相输入阻抗等于 100 kΩ,而VIN2同相输入阻抗等于反相输入阻抗的两倍,即200 kΩ。因此,当电压施加到一个输入端而另一端接地时,差分电流将会根据输入端接收的施加电压而流入。(这种源阻抗的不平衡会降低电路的CMRR。)
另外,这一电路要求电阻对R1 /R2和R3 /R4的比值匹配得非常精密,否则,每个输入端的增益会有差异,直接影响共模抑制。例如,当增益等于 1 时,所有电阻值必须相等,在这些电阻器中只要有一只电 阻 值 有 0.1% 失 配 , 其CMR便 下 降 到 66 dB(2000:1)。同样,如果源阻抗有 100 Ω的不平衡将使CMR下降 6 dB。
为解决上述问题,我们在运放的正负输入端都加上电压跟随器以提高输入阻抗。如下图所示:

以
上前置的两个运放作为电压跟随器使用,我们现在改为同相放大器,电路如下所示:

输出电压表达式如上图所示。上图所示的电路增加增益(A1 和 A2)时,
它对差分信号增加相同的增益,也对共模信号增加相同的增益。也就是说,上述电路相对于原电路共模抑制比并没有增加。
下面,要开始最巧妙的变化了!看电路先:

这种标准的三运放仪表放大器电路是对带缓冲减法器电路巧妙的改进。像前面的电路一样,上图中A1 和A2 运算放大器缓冲输入电压。然而,在这种结构中,单个增益电阻器RG连接在两个输入缓冲器的求和点之间,取代了带缓冲减法器电路的R6和R7。由于每个放大器求和点的电压等于施加在各自正输入端的电压,因此,整个差分输入电压现在都呈现在RG两端。因为输入电压经过放大后(在A1 和A2的输出端)的差分电压呈现在R5,RG和R6这三只电阻上,所以差分增益可以通过仅改变RG进行调整。
这种连接有另外一个优点:一旦这个减法器电路的增益用比率匹配的电阻器设定后,在改变增益时不再对电阻匹配有任何要求。如果R5 = R6,R1= R3和R2 = R4,则VOUT = (VIN2-VIN1)(1+2R5/RG)(R2/R1)由于RG两端的电压等于VIN,所以流过RG的电流等于VIN/RG,因此输入信号将通过A1 和A2 获得增益并得到放大。然而须注意的是对加到放大器输入端的共模电压在RG两端具有相同的电位,从而不会在RG上产生电流。由于没有电流流过RG(也就无电流流过R5和R6),放大器A1 和A2 将作为单位增益跟随器而工作。因此,共模信号将以单位增益通过输入缓冲器,而差分电压将按〔1+(2 RF/RG)〕的增益系数被放大。这也就意味着该电路的共模抑制比相比与原来的差分电路增大了〔1+(2 RF/RG)〕倍!
在理论上表明,用户可以得到所要求的前端增益(由RG来决定),而不增加共模增益和误差,即差分信号将按增益成比例增加,而共模误差则不然,所以比率〔增益(差分输入电压)/(共模误差电压)〕将增大。因此CMR理论上直接与增益成比例增加,这是一个非常有用的特性。
最后,由于结构上的对称性,输入放大器的共模误差,如果它们跟踪,将被输出级的减法器消除。这包括诸如共模抑制随频率变换的误差。上述这些特性便是这种三运放结构得到广泛应用的解释。
到这里,我们导出了这个经典电路的;来龙去脉: 差分放大器–>前置电压跟随器–>电压跟随器变为同相放大器–>三运放组成的仪用放大器。
2012-02-21 1:55 其他
@商业价值杂志:Google Books扫描了几十万本纸质书,它是如何完成数字化,以利于复制、供人检索的?原来是Google实验室项目reCAPTCHA在帮忙,扫描后的图片被裁减成一个个单词片段,用于网站防止机器注册时显示的验证码:人们在输入验证码的同时不知不觉就完成了图书数字化过程。
—————————————–
看完没想通它是怎么实现的,于是狗了一下,下面是维基百科的解释:
为了验证人类所输入的文字是正确的,而不是随意输入,有两个字会被显示出来;一个是光学文字辨识软件无法辨别的字,另一个是一个已经知道正确答案的字。如果使用者正确的回答出已知正确答案的字,那么就假设所输入的另一个光学辨识软件无法辨识的字是认真的检视后被输入而非随便输入。
—————————————-
难怪google的验证码那么难认啊~
2012-02-18 5:08 应用开发, 电路设计
在工业现场,用一个仪表放大器来完成信号的调理并进行长线传输,会产生以下问题:第一,由于传输的信号是电压信号,传输线会受到噪声的干扰;第二,传输线的分布电阻会产生电压降;第三,在现场如何提供仪表放大器的工作电压也是个问题。
为了解决上述问题和避开相关噪声的影响,我们用电流来传输信号,因为电流对噪声并不敏感。4~20mA的电流环便是用4mA表示零信号,用20mA表示信号的满刻度,而低于4mA高于20mA的信号用于各种故障的报警。
4~20mA电流环有两种类型:二线制和三线制。当监控系统需要通过长线驱动现场的驱动器件如阀门等时,一般采用三线制变送器,这里XTR位于监控的系统端,由系统直接向XTR供电,供电电源是二根电流传输线以外的第三根线。二线系统是XTR和传感器位于现场端,由于现场供电问题的存在,一般是接收端利用4~20mA的电流环向远端的XTR供电,通过4~20mA来反映信号的大小。
4~20mA产品的典型应用是传感和测量应用,见图1。在工业现场有许多种类的传感器可以被转换成4~20mA的电流信号,TI拥有一些很方便的用于RTD和电桥的变送器芯片。由于TI的变送器芯片含有通用的功能电路比如电压激励源、电流激励流、稳压电路、仪表放大器等,所以可以很方便地把许多传感器的信号转化为4~20mA的信号。
(更多…)
2012-02-17 11:50 电路设计
Wheatstone桥梁 是a 测量仪器 发明 Samuel猎人Christie 在 1833 并且由先生改善和通俗化 查尔斯Wheatstone 在 1843. 它用于测量未知数电阻 通过平衡a的二条腿 桥式电路一条腿,其中包括未知的组分。 它的操作于是相似的 原始 电位器 除了在电位器巡回使用的米是敏感的 电流计.
在电路在右边, Rx 是将被测量的未知的抵抗; R1, R2 并且 R3 是已知的抵抗和抵抗电阻器 R2 是可调整的。 如果二抵抗的比率在知道的腿(R2 / R1) 与比率是相等的二在未知的腿 (Rx / R3)然后 电压 在二中点之间(B 并且 D)将是零和没有 当前 将流经 电流计 vg. R2 变化,直到这个情况被到达。 当前方向是否表明 R2 太高或太低。
查出零的潮流可以做对极端高精确度(参见 电流计). 所以,如果 R1, R2并且 R3 为高精密度所知,然后 Rx 能被测量对高精密度。 非常零钱 Rx打乱平衡和欣然被查出。
在平衡,比率 R2 / R1 = Rx / R3
所以,
(更多…)
2012-02-05 2:19 单片机设计
XTAL1与VCC之间接一颗5K-100K的电阻,单片机就可起振工作。
2012-02-05 12:47 单片机设计
#pragma abs_address:0x0050
const unsigned char table[6]={1,2,3,4,5,6};
#pragma end_abs_address
数组将会从指定的地址开始存储
2012-02-05 11:23 单片机设计
Keyboard.h
/********** AVR 矩阵键盘扫描程序 *********
* 版本.........: 2.0
* 作者.........: 陈利栋
* 目标.........: AVR
* 文件名.......: Keyboard.h
* 编译器.......: AVR GCC 20100110
* 开发环境.....: AVR Studio V4.18
* 创建时间.....: 2010.09.12
* 最后修改.....: 2010.09.29
*****************************************/
#ifndef __KEYBOARD_H__
#define __KEYBOARD_H__
#include <avr/io.h>
#include <util/delay.h>
#define KEYBOARD_PORT PORTA
#define KEYBOARD_DDR DDRA
#define KEYBOARD_PIN PINA
#define KEY_NULL 0xff
#define KEY_READY_COUNT 100 // 此值在不同环境下应适当调整(1 - 65535),值越小,灵敏度越高
#define KEY_CONTINUE_START_COUNT 20000 // 检测连续按键开始需要的次数,需要适当调整
#define KEY_CONTINUE_RUNNING_COUNT 1000 // 连续按键间隔需要的次数,需要适当调整
extern unsigned char key_continue_flag; // 连续按键标记
extern unsigned char GetKeyValue(void);
#endif /* __KEYBOARD_H__ */
(更多…)
2012-02-04 5:40 C语言
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。
(1)先来介绍它的第一条也是最重要的一条:隐藏。
当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。
下面是a.c的内容
char a = ‘A’; // global variable
void msg()
{
printf(“Hello\n”);
}
下面是main.c的内容
int main(void)
{
extern char a; // extern variable must be declared before use
printf(“%c “, a);
(void)msg();
return 0;
}
程序的运行结果是:
A Hello
你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。
如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。
(2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见,但我还是举一个例子。
#i nclude <stdio.h>
int fun(void){
static int count = 10; //事实上此赋值语句从来没有执行过
return count–;
}
int count = 1;
int main(void)
{
printf(“global\t\tlocal static\n”);
for(; count <= 10; ++count)
printf(“%d\t\t%d\n”, count, fun());
return 0;
}
程序的运行结果是:
global local static
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1
(3)static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0×00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加’\0’太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是’\0’。不妨做个小实验验证一下。
#i nclude <stdio.h>
int a;
int main(void)
{
int i;
static char str[10];
printf(“integer: %d; string: (begin)%s(end)”, a, str);
return 0;
}
程序的运行结果如下
integer: 0; string: (begin)(end)
最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。