﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>甘立平的博客</title>
	<atom:link href="http://www.mydev.cn/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mydev.cn</link>
	<description>学习、记录、总结</description>
	<lastBuildDate>Tue, 21 Feb 2012 17:52:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>仪表放大器与运算放大器的区别是什么？</title>
		<link>http://www.mydev.cn/2012/02/21/%e4%bb%aa%e8%a1%a8%e6%94%be%e5%a4%a7%e5%99%a8%e4%b8%8e%e8%bf%90%e7%ae%97%e6%94%be%e5%a4%a7%e5%99%a8%e7%9a%84%e5%8c%ba%e5%88%ab%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f/</link>
		<comments>http://www.mydev.cn/2012/02/21/%e4%bb%aa%e8%a1%a8%e6%94%be%e5%a4%a7%e5%99%a8%e4%b8%8e%e8%bf%90%e7%ae%97%e6%94%be%e5%a4%a7%e5%99%a8%e7%9a%84%e5%8c%ba%e5%88%ab%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 17:52:14 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[电路设计]]></category>
		<category><![CDATA[运放]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=62</guid>
		<description><![CDATA[仪表放大器是一种具有差分输入和相对参考端单端输出的闭环增益单元。大多数情况下，仪表放大器的两个输入端阻抗平衡并且阻值很高，典型值≥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）时， 它对差分信号增加相同的增益，也对共模信号增加相同的增益。也就是说，上述电路相对于原电路共模抑制比并没有增加。 下面，要开始最巧妙的变化了！看电路先： [...]]]></description>
			<content:encoded><![CDATA[<p>仪表放大器是一种具有差分输入和相对参考端单端输出的闭环增益单元。大多数情况下，仪表放大器的两个输入端阻抗平衡并且阻值很高，典型值≥109 Ω。其输入偏置电流也应很低，典型值为 1 nA至 50 nA。与运算放大器一样，其输出阻抗很低，<br />
在低频段通常仅有几毫欧（mΩ）。运算放大器的闭环增益是由其反向输入端和输<br />
出端之间连接的外部电阻决定。与放大器不同的是，仪表放大器使用一个内部反馈电阻网络，它与其信号输入端隔离 。对仪表放大器的两个差分输入端施<br />
加输入信号，其增益既可由内部预置，也可由用户通过引脚连接一个内部或者外部增益电阻器设置，该增益电阻器也与信号输入端隔离。</p>
<p>专用的仪表放大器价格通常比较贵，于是我们就想能否用普通的运放组成仪表放大器？答案是肯定的。使用三个普通运放就可以组成一个仪用放大器。电路如下图所示：<a href="http://www.zdh1909.com/html/xuekezhishi/modianshudian/14021924722_2.html"><img src="http://space.ednchina.com/Upload/Blog/2008/6/14/1922e330-d6b0-4357-8001-e114a1ce6c39.JPG" alt="点击浏览下一页" border="0" /></a></p>
<p>输出电压表达式如图中所示。</p>
<p>看到这里大家可能会问上述表达式是如何导出的？ 为何上述电路可以实现仪表放大器？下面我们就将探讨这些问题。在此之前，我们先来看如下我们很熟悉的差分电路：</p>
<p><a href="http://www.zdh1909.com/html/xuekezhishi/modianshudian/14021924722_2.html"><img src="http://space.ednchina.com/Upload/Blog/2008/6/14/9a49b00a-b4ad-4fa8-a67d-d92b4c50f16f.JPG" alt="点击浏览下一页" border="0" /></a></p>
<p>如果R1 ＝ R3，R2 ＝ R4，则VOUT = (VIN2—VIN1)(R2/R1)<br />
这一电路提供了仪表放大器功能，即放大差分信号的同时抑制共模信号，但它也有些缺陷。首先，同相输入端和反相输入端阻抗相当低而且不相等。在这一例子中VIN1反相输入阻抗等于 100 kΩ，而VIN2同相输入阻抗等于反相输入阻抗的两倍，即200 kΩ。因此，当电压施加到一个输入端而另一端接地时，差分电流将会根据输入端接收的施加电压而流入。（这种源阻抗的不平衡会降低电路的CMRR。）</p>
<p>另外，这一电路要求电阻对R1 /R2和R3 /R4的比值匹配得非常精密，否则，每个输入端的增益会有差异，直接影响共模抑制。例如，当增益等于 1 时，所有电阻值必须相等，在这些电阻器中只要有一只电 阻 值 有 0.1% 失 配 ， 其CMR便 下 降 到 66 dB（2000:1）。同样，如果源阻抗有 100 Ω的不平衡将使CMR下降 6 dB。</p>
<p>为解决上述问题，我们在运放的正负输入端都加上电压跟随器以提高输入阻抗。如下图所示：<br />
<a href="http://www.zdh1909.com/html/xuekezhishi/modianshudian/"><img src="http://space.ednchina.com/Upload/Blog/2008/6/14/432d825a-3cdb-45dd-a8a4-0cf434e0ce66.JPG" alt="点击浏览下一页" border="0" /></a></p>
<p>以<br />
上前置的两个运放作为电压跟随器使用，我们现在改为同相放大器，电路如下所示：</p>
<p><a href="http://www.zdh1909.com/html/xuekezhishi/modianshudian/"><img src="http://space.ednchina.com/Upload/Blog/2008/6/14/9859b09c-e9b4-4bd0-9d8c-02ea4b90c6d5.JPG" alt="点击浏览下一页" border="0" /></a></p>
<p>输出电压表达式如上图所示。上图所示的电路增加增益（A1 和 A2）时，<br />
它对差分信号增加相同的增益，也对共模信号增加相同的增益。也就是说，上述电路相对于原电路共模抑制比并没有增加。</p>
<p>下面，要开始最巧妙的变化了！看电路先：</p>
<p><a href="http://www.zdh1909.com/html/xuekezhishi/modianshudian/"><img src="http://space.ednchina.com/Upload/Blog/2008/6/14/582716f5-8e8a-4bcc-9e85-114763854e3b.JPG" alt="点击浏览下一页" border="0" /></a></p>
<p>这种标准的三运放仪表放大器电路是对带缓冲减法器电路巧妙的改进。像前面的电路一样，上图中A1 和A2 运算放大器缓冲输入电压。然而，在这种结构中，单个增益电阻器RG连接在两个输入缓冲器的求和点之间，取代了带缓冲减法器电路的R6和R7。由于每个放大器求和点的电压等于施加在各自正输入端的电压，因此，整个差分输入电压现在都呈现在RG两端。因为输入电压经过放大后（在A1 和A2的输出端）的差分电压呈现在R5，RG和R6这三只电阻上，所以差分增益可以通过仅改变RG进行调整。</p>
<p>这种连接有另外一个优点：一旦这个减法器电路的增益用比率匹配的电阻器设定后，在改变增益时不再对电阻匹配有任何要求。如果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）〕倍！<br />
在理论上表明，用户可以得到所要求的前端增益（由RG来决定），而不增加共模增益和误差，即差分信号将按增益成比例增加，而共模误差则不然，所以比率〔增益（差分输入电压）/（共模误差电压）〕将增大。因此CMR理论上直接与增益成比例增加，这是一个非常有用的特性。<br />
最后，由于结构上的对称性，输入放大器的共模误差，如果它们跟踪，将被输出级的减法器消除。这包括诸如共模抑制随频率变换的误差。上述这些特性便是这种三运放结构得到广泛应用的解释。</p>
<p>到这里，我们导出了这个经典电路的；来龙去脉： 差分放大器&#8211;&gt;前置电压跟随器&#8211;&gt;电压跟随器变为同相放大器&#8211;&gt;三运放组成的仪用放大器。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/21/%e4%bb%aa%e8%a1%a8%e6%94%be%e5%a4%a7%e5%99%a8%e4%b8%8e%e8%bf%90%e7%ae%97%e6%94%be%e5%a4%a7%e5%99%a8%e7%9a%84%e5%8c%ba%e5%88%ab%e6%98%af%e4%bb%80%e4%b9%88%ef%bc%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>google真高级</title>
		<link>http://www.mydev.cn/2012/02/21/google%e7%9c%9f%e9%ab%98%e7%ba%a7/</link>
		<comments>http://www.mydev.cn/2012/02/21/google%e7%9c%9f%e9%ab%98%e7%ba%a7/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 13:55:01 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[其他]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=59</guid>
		<description><![CDATA[@商业价值杂志：Google Books扫描了几十万本纸质书，它是如何完成数字化，以利于复制、供人检索的？原来是Google实验室项目reCAPTCHA在帮忙，扫描后的图片被裁减成一个个单词片段，用于网站防止机器注册时显示的验证码：人们在输入验证码的同时不知不觉就完成了图书数字化过程。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 看完没想通它是怎么实现的，于是狗了一下，下面是维基百科的解释： 为了验证人类所输入的文字是正确的，而不是随意输入，有两个字会被显示出来；一个是光学文字辨识软件无法辨别的字，另一个是一个已经知道正确答案的字。如果使用者正确的回答出已知正确答案的字，那么就假设所输入的另一个光学辨识软件无法辨识的字是认真的检视后被输入而非随便输入。 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 难怪google的验证码那么难认啊～]]></description>
			<content:encoded><![CDATA[<p>@商业价值杂志：Google Books扫描了几十万本纸质书，它是如何完成数字化，以利于复制、供人检索的？原来是Google实验室项目reCAPTCHA在帮忙，扫描后的图片被裁减成一个个单词片段，用于网站防止机器注册时显示的验证码：人们在输入验证码的同时不知不觉就完成了图书数字化过程。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
看完没想通它是怎么实现的，于是狗了一下，下面是维基百科的解释：<br />
为了验证人类所输入的文字是正确的，而不是随意输入，有两个字会被显示出来；一个是光学文字辨识软件无法辨别的字，另一个是一个已经知道正确答案的字。如果使用者正确的回答出已知正确答案的字，那么就假设所输入的另一个光学辨识软件无法辨识的字是认真的检视后被输入而非随便输入。</p>
<div><img src="http://img1.douban.com/view/group_topic/large/public/27629423-1.jpg" alt="" /></div>
<div></div>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
难怪google的验证码那么难认啊～</p>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/21/google%e7%9c%9f%e9%ab%98%e7%ba%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>《电子仿真软件》(Multisim 11.0)1.1 下载 安装</title>
		<link>http://www.mydev.cn/2012/02/21/%e3%80%8a%e7%94%b5%e5%ad%90%e4%bb%bf%e7%9c%9f%e8%bd%af%e4%bb%b6%e3%80%8bmultisim-11-01-1-%e4%b8%8b%e8%bd%bd-%e5%ae%89%e8%a3%85/</link>
		<comments>http://www.mydev.cn/2012/02/21/%e3%80%8a%e7%94%b5%e5%ad%90%e4%bb%bf%e7%9c%9f%e8%bd%af%e4%bb%b6%e3%80%8bmultisim-11-01-1-%e4%b8%8b%e8%bd%bd-%e5%ae%89%e8%a3%85/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 04:09:44 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[工具]]></category>
		<category><![CDATA[仿真]]></category>
		<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=55</guid>
		<description><![CDATA[&#160; 补丁与汉化下载： Multisim+11.0加破解及汉化补丁]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>补丁与汉化下载：</p>
<p><a href="http://www.mydev.cn/2012/02/21/%e3%80%8a%e7%94%b5%e5%ad%90%e4%bb%bf%e7%9c%9f%e8%bd%af%e4%bb%b6%e3%80%8bmultisim-11-01-1-%e4%b8%8b%e8%bd%bd-%e5%ae%89%e8%a3%85/multisim11-0%e5%8a%a0%e7%a0%b4%e8%a7%a3%e5%8f%8a%e6%b1%89%e5%8c%96%e8%a1%a5%e4%b8%81/" rel="attachment wp-att-56">Multisim+11.0加破解及汉化补丁</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/21/%e3%80%8a%e7%94%b5%e5%ad%90%e4%bb%bf%e7%9c%9f%e8%bd%af%e4%bb%b6%e3%80%8bmultisim-11-01-1-%e4%b8%8b%e8%bd%bd-%e5%ae%89%e8%a3%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4-20mA电流环工作原理</title>
		<link>http://www.mydev.cn/2012/02/18/4-20ma%e7%94%b5%e6%b5%81%e7%8e%af%e5%b7%a5%e4%bd%9c%e5%8e%9f%e7%90%86/</link>
		<comments>http://www.mydev.cn/2012/02/18/4-20ma%e7%94%b5%e6%b5%81%e7%8e%af%e5%b7%a5%e4%bd%9c%e5%8e%9f%e7%90%86/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 05:08:33 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[应用开发]]></category>
		<category><![CDATA[电路设计]]></category>
		<category><![CDATA[工业应用]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=43</guid>
		<description><![CDATA[在工业现场，用一个仪表放大器来完成信号的调理并进行长线传输，会产生以下问题：第一，由于传输的信号是电压信号，传输线会受到噪声的干扰；第二，传输线的分布电阻会产生电压降；第三，在现场如何提供仪表放大器的工作电压也是个问题。 为了解决上述问题和避开相关噪声的影响，我们用电流来传输信号，因为电流对噪声并不敏感。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的信号。 图1(略) 电桥传感器的大多数应用是用于测量压力。在一个实际电路中，如果惠斯登电桥每条臂上的电阻为2k，那么无论从激励电压端或差分输出端看进去，它的等效电阻都是2k。在没有压力的时候，它的电桥是平衡的，输出电压为0。当施加压力时，由于电桥失衡，会产生一个差分电压，差分电压便会反映这个压力的大小。 满度和色调是压力传感器的两个主要技术指标，现实世界里使用着的传感器都存在着一定的非线性，它的输出电压会随着温度的变化而变化。输出电压随温度的变化不是线性的，满度和色调都具有这种性质。 4～20mA的传感器信号调理解决方案 4～20mA电流环在结构上由两部分即变送器和接收器组成，变送器一般位于现场端、传感器端或模块端，而接收器一般在PLC和计算机端，它一般在控制器内。 二线制4～20mA电路应用，其工作电源和信号共用一根导线，工作电源由接收端提供。为了避免50/60Hz的工频干扰，采用电流来传输信号。二线制方案需要考虑的主要问题：确定所用接收器的数量，当有多个接收器时，它将要求变送器拥有一个较低的工作电源电压。另外一种考虑是降低回路电流在接收端的压降。 二线制方案设计需要考虑： （1）电路环中的接收器的数量：更多的接收器将要求变送器有较低的工作电压； （2）变送器所必需的工作电压要有一定的余量； （3）决定传感器的激励方法是电压还是电流。 图2(略) 图2为TI提供的带有电压调节和参考电路的二线制方案。图中XTR115/116是用于4～20mA信号的精密的信号转换器，它包含有5V电压的稳压电路，可以向外部电路供电。一个精密的片上基准电压可以用于电压偏置或者传感器的激励。 三线制4～20mA电路在设计上是由变送器端提供工作电源，为避免50/60Hz的工频干扰，采用电流来传输信号。XTR调节器和现场的负载共用一个地接。方案设计需要考虑： （1）电流环路中的接收器的数量； （2）更多的接收器要求变送器拥有更高的工作电压； （3）保证变送器所必需的工作电压，并应该有一定的余量。 TI提供的三线制的变送器应用方案如图3所示，图中XTR110是一个用于模拟信号传送的精密的电压-电流转换器，它可以将0～5V或0～10V的输入电压直接转换到4～20mA、0～20mA、5～25mA的输出信号。XTR110含有精密的电阻网络，以适应不同的输入输出要求。一个10V的电压参考可以用于驱动外部电路。 图3(略) 4～20mA的校正 传统的4～20mA校正，要求特殊的夹具固定，需要特别的激光或手动电阻器调整，而调整是相互影响的，需要一个测试、调整，再测试、再调整的过程，调整次数和范围有限。电子器件和传感器调整起来不够方便。 现代的数字化4～20mA校正，它允许电子器件和传感器在封装之后进行调整；可通过计算机计算出校正系数来简化数值调整；可以有无限的调整次数，并且有很好的分辨率和较宽的调整范围；调整过程中不存在相互影响；电子器件和传感器可以很方便地调整。 XTR108是TI提供的校正4～20mA的解决方法。它具有480A的电流参考，它提供RTD的非线性校正，不需要外加可调电阻器。XTR108的特点有： （1）具有传感器的线性化电路； （2）数字校正。通过SPI接口可以直接对XTR108设置，通过SPI接口可直接编程EEPROM； （3）自动稳零的可编程增益的应用放大器的增益范围为6.26～400倍； （4）RTD激励的可编程电流的分辨率为1.54 A； （5）校正参数存储在外接的EEPROM中； （6）可编程的过量程和欠量程的输出。 此外，TI还提供一款桥路传感器的数字校正解决方案-PGA309，它是专为压力桥路传感器设计的可编程模拟信号调节器。它模拟放大器传感信号并提供对色调电压和满度电压的数字校正，由于避免了手动调整而获得了长期的稳定性，并将输出电压信号转换成4～20mA的输出。 问答选编 问：电流变送器与普通的电流霍尔传感器有什么不同？ 答：霍尔传感器是传感器件，而电流变送器是将传感器产生的信号直接转换为4~20mA的电流信号进行传输，因此它们两个一个是传感器，另一个是电流变送器。 问：4~20mA信号是否存在温漂？如何解决？ 答：实际上，4~20mA信号内部是用集成电路芯片来制作的。集成电路芯片随着温度的变化在遇到放大器、电压到电流的转换时，会存在温漂，但这种温漂如果在TI的PGA309中则是可以解决的，因为PGA309中采用的是零漂移的仪表放大器作为前置放大，同时PGA309中还有温度的校准，它是每采集一个温度点来查表，进行温度满度或色调电压的校准，从而解决温度的漂移问题。 问：应该采取哪些措施实现4～20mA变送器的信号隔离？ 答：对4~20mA变送器的安全隔离可以有两种方法：一是变送器端的隔离，一是接收端的隔离。现在若有24V电压供给一个XTR115的芯片，XTR115内部可以将24V电压直接转换为一个5V稳压电压输出，对这个5V的稳压电压进行展波，经过一个脉冲电压器由此可以向前面提供一个隔离电源，然后再把模拟信号转换成数字信号，再经过一个隔离以后再提供给XTR115，再进行长线传输，这个时候就完成了模拟信号到4~20mA环路里面的隔离。如果对4~20mA变送器不进行隔离的话，也可以在接收端加一个RCV420将电流转换成电压，再经过一个ISO124隔离放大器进行隔离，同时再经过一个DC/AC转换器向电路进行退电供电，这样也能完成对4～20mA变送器信号的隔离。 问：变送器传输过来的信号应该怎么处理？是不是先要经过电流到电压的变化然后再到ADC？对ADC的选择有什么特殊的考虑？ 答：变送器传输的信号主要是一个电流信号，如果要采集它，一般要经过电流到电压的转换，这个TI　有一个RCV420可以实现转换。对于ADC的选择，主要根据对信号精度的要求来考虑。 问：接收二线制4~20mA信号与三线制4~20mA信号，在接收方式和信号处理上有何不同？要注意些什么问题？ 答：在接收方式上，如果是二线制4~20mA信号，由接收端向SPI端提供电源，通过电源线经过4~20mA信号线来提供电源。三线制4～20mA信号是由发生端（SPI）来提供电源的，所以说它们提供的电源是不同的，一个是由接收端而另一个是从远端来提供电源的。 它们在信号处理上都要将电流信号转换成电压信号，然后再经过AD转换器，这时候就牵扯到一个怎样向二线制变送器提供电源的问题。一般在工业上，它们会加一个推电器，就是在接收端同时提供一个24V的电源，通过4~20mA电流线向远端进行供电。 问：现在市场上的变送器是否有数字输出接口？比如RS-485或者RS-232？ 答：现在市场上的变送器通常用标准的485或232通讯接口来传输，这个产品其实早在10年前就有了，它们把现场的信号模拟成传感器的信号，直接传数字量，然后经过485进行传输，这是比较多的。如果你是用TI的芯片，比如MSC12XX，它内置的8052\8952里面带16位或24位AD转换器及通信接口输出，如果用它来做的话，很容易把它做成一个485或232通信接口的数字变送器芯片。 问：在4~20mA变送器的信号传输过程中，如何有效地防止各类电磁、过电压对于接收装置造成的干扰？在系统故障状态，是否具有事故信息追忆功能？ 答：如果有电磁干扰，首先说电磁的发射，当传感器接入的时候，如果具有很高的输入阻抗的时候，有可能产生电磁干扰，可以加一些电阻电容进行滤波，TI在这方面有一些应用电路的介绍可供大家参考。过电压的时候，4~20mA的长线输出的时候，可以借助36V的稳压块来进行过电压保护，如果极性接反的时候，可以在输入回路里加一个整流桥堆来对极性进行调整。 问：如何将接收端的电流转换成电压以便于ADC转换？主要是精度方面，是否能给一个具体例子？ 答：如果将4~20mA电流转换成电压再经过ADC转换时，TI有一个专用芯片RCV420，它里面采用的是一个精密的电子网络还有一个精密比例的运算放大器和一个精密的基准电压器，即10V的基准电压，这个10V基准电压大概是5个或10个TTN的温度系数，用这个片子就可以很精确地将前面的4~20mA电流转换成一个电压输出了。 问：有没有串行接口出来就是4~20mA？最好能出来0~20mA，类似于ADI的AD420，但AD420太贵，而且外围东西太多。 答：也可以用TI的产品来完成这个功能。用一个XTR110，它是一个很廉价的电压到电流的转换，前面或者用一个DA转换器，或者用一个PWM的信号来完成DA转换。将FSK信号直接经过一个电阻接到XTR115的输入端，这样就可以满足HART协议来替换AD420，这时的成本应该是很低的，应用也很方便。 问：使用4~20mA变送器时，是否需要通过控制器对其进行编程？ 答：TI变送器电流环有几类产品，有的可以通过控制器进行编程校正，也有的可以通过模拟的、通过外部设置来进行校正。 [...]]]></description>
			<content:encoded><![CDATA[<p>在工业现场，用一个仪表放大器来完成信号的调理并进行长线传输，会产生以下问题：第一，由于传输的信号是电压信号，传输线会受到噪声的干扰；第二，传输线的分布电阻会产生电压降；第三，在现场如何提供仪表放大器的工作电压也是个问题。<br />
为了解决上述问题和避开相关噪声的影响，我们用电流来传输信号，因为电流对噪声并不敏感。4～20mA的电流环便是用4mA表示零信号，用20mA表示信号的满刻度，而低于4mA高于20mA的信号用于各种故障的报警。<br />
4～20mA电流环有两种类型：二线制和三线制。当监控系统需要通过长线驱动现场的驱动器件如阀门等时，一般采用三线制变送器，这里XTR位于监控的系统端，由系统直接向XTR供电，供电电源是二根电流传输线以外的第三根线。二线系统是XTR和传感器位于现场端，由于现场供电问题的存在，一般是接收端利用4～20mA的电流环向远端的XTR供电，通过4～20mA来反映信号的大小。<br />
4～20mA产品的典型应用是传感和测量应用，见图1。在工业现场有许多种类的传感器可以被转换成4～20mA的电流信号，TI拥有一些很方便的用于RTD和电桥的变送器芯片。由于TI的变送器芯片含有通用的功能电路比如电压激励源、电流激励流、稳压电路、仪表放大器等，所以可以很方便地把许多传感器的信号转化为4～20mA的信号。</p>
<p><span id="more-43"></span><br />
图1(略)<br />
电桥传感器的大多数应用是用于测量压力。在一个实际电路中，如果惠斯登电桥每条臂上的电阻为2k，那么无论从激励电压端或差分输出端看进去，它的等效电阻都是2k。在没有压力的时候，它的电桥是平衡的，输出电压为0。当施加压力时，由于电桥失衡，会产生一个差分电压，差分电压便会反映这个压力的大小。<br />
满度和色调是压力传感器的两个主要技术指标，现实世界里使用着的传感器都存在着一定的非线性，它的输出电压会随着温度的变化而变化。输出电压随温度的变化不是线性的，满度和色调都具有这种性质。</p>
<p><strong>4～20mA的传感器信号调理解决方案</strong><br />
4～20mA电流环在结构上由两部分即变送器和接收器组成，变送器一般位于现场端、传感器端或模块端，而接收器一般在PLC和计算机端，它一般在控制器内。<br />
二线制4～20mA电路应用，其工作电源和信号共用一根导线，工作电源由接收端提供。为了避免50/60Hz的工频干扰，采用电流来传输信号。二线制方案需要考虑的主要问题：确定所用接收器的数量，当有多个接收器时，它将要求变送器拥有一个较低的工作电源电压。另外一种考虑是降低回路电流在接收端的压降。<br />
二线制方案设计需要考虑：<br />
（1）电路环中的接收器的数量：更多的接收器将要求变送器有较低的工作电压；<br />
（2）变送器所必需的工作电压要有一定的余量；<br />
（3）决定传感器的激励方法是电压还是电流。<br />
图2(略)<br />
图2为TI提供的带有电压调节和参考电路的二线制方案。图中XTR115/116是用于4～20mA信号的精密的信号转换器，它包含有5V电压的稳压电路，可以向外部电路供电。一个精密的片上基准电压可以用于电压偏置或者传感器的激励。<br />
三线制4～20mA电路在设计上是由变送器端提供工作电源，为避免50/60Hz的工频干扰，采用电流来传输信号。XTR调节器和现场的负载共用一个地接。方案设计需要考虑：<br />
（1）电流环路中的接收器的数量；<br />
（2）更多的接收器要求变送器拥有更高的工作电压；<br />
（3）保证变送器所必需的工作电压，并应该有一定的余量。<br />
TI提供的三线制的变送器应用方案如图3所示，图中XTR110是一个用于模拟信号传送的精密的电压-电流转换器，它可以将0～5V或0～10V的输入电压直接转换到4～20mA、0～20mA、5～25mA的输出信号。XTR110含有精密的电阻网络，以适应不同的输入输出要求。一个10V的电压参考可以用于驱动外部电路。<br />
图3(略)</p>
<p><strong>4～20mA的校正</strong><br />
传统的4～20mA校正，要求特殊的夹具固定，需要特别的激光或手动电阻器调整，而调整是相互影响的，需要一个测试、调整，再测试、再调整的过程，调整次数和范围有限。电子器件和传感器调整起来不够方便。<br />
现代的数字化4～20mA校正，它允许电子器件和传感器在封装之后进行调整；可通过计算机计算出校正系数来简化数值调整；可以有无限的调整次数，并且有很好的分辨率和较宽的调整范围；调整过程中不存在相互影响；电子器件和传感器可以很方便地调整。<br />
XTR108是TI提供的校正4～20mA的解决方法。它具有480A的电流参考，它提供RTD的非线性校正，不需要外加可调电阻器。XTR108的特点有：<br />
（1）具有传感器的线性化电路；<br />
（2）数字校正。通过SPI接口可以直接对XTR108设置，通过SPI接口可直接编程EEPROM；<br />
（3）自动稳零的可编程增益的应用放大器的增益范围为6.26～400倍；<br />
（4）RTD激励的可编程电流的分辨率为1.54 A；<br />
（5）校正参数存储在外接的EEPROM中；<br />
（6）可编程的过量程和欠量程的输出。<br />
此外，TI还提供一款桥路传感器的数字校正解决方案-PGA309，它是专为压力桥路传感器设计的可编程模拟信号调节器。它模拟放大器传感信号并提供对色调电压和满度电压的数字校正，由于避免了手动调整而获得了长期的稳定性，并将输出电压信号转换成4～20mA的输出。</p>
<p><strong>问答选编</strong><br />
问：电流变送器与普通的电流霍尔传感器有什么不同？<br />
答：霍尔传感器是传感器件，而电流变送器是将传感器产生的信号直接转换为4~20mA的电流信号进行传输，因此它们两个一个是传感器，另一个是电流变送器。<br />
问：4~20mA信号是否存在温漂？如何解决？<br />
答：实际上，4~20mA信号内部是用集成电路芯片来制作的。集成电路芯片随着温度的变化在遇到放大器、电压到电流的转换时，会存在温漂，但这种温漂如果在TI的PGA309中则是可以解决的，因为PGA309中采用的是零漂移的仪表放大器作为前置放大，同时PGA309中还有温度的校准，它是每采集一个温度点来查表，进行温度满度或色调电压的校准，从而解决温度的漂移问题。<br />
问：应该采取哪些措施实现4～20mA变送器的信号隔离？<br />
答：对4~20mA变送器的安全隔离可以有两种方法：一是变送器端的隔离，一是接收端的隔离。现在若有24V电压供给一个XTR115的芯片，XTR115内部可以将24V电压直接转换为一个5V稳压电压输出，对这个5V的稳压电压进行展波，经过一个脉冲电压器由此可以向前面提供一个隔离电源，然后再把模拟信号转换成数字信号，再经过一个隔离以后再提供给XTR115，再进行长线传输，这个时候就完成了模拟信号到4~20mA环路里面的隔离。如果对4~20mA变送器不进行隔离的话，也可以在接收端加一个RCV420将电流转换成电压，再经过一个ISO124隔离放大器进行隔离，同时再经过一个DC/AC转换器向电路进行退电供电，这样也能完成对4～20mA变送器信号的隔离。<br />
问：变送器传输过来的信号应该怎么处理？是不是先要经过电流到电压的变化然后再到ADC？对ADC的选择有什么特殊的考虑？<br />
答：变送器传输的信号主要是一个电流信号，如果要采集它，一般要经过电流到电压的转换，这个TI　有一个RCV420可以实现转换。对于ADC的选择，主要根据对信号精度的要求来考虑。<br />
问：接收二线制4~20mA信号与三线制4~20mA信号，在接收方式和信号处理上有何不同？要注意些什么问题？<br />
答：在接收方式上，如果是二线制4~20mA信号，由接收端向SPI端提供电源，通过电源线经过4~20mA信号线来提供电源。三线制4～20mA信号是由发生端（SPI）来提供电源的，所以说它们提供的电源是不同的，一个是由接收端而另一个是从远端来提供电源的。<br />
它们在信号处理上都要将电流信号转换成电压信号，然后再经过AD转换器，这时候就牵扯到一个怎样向二线制变送器提供电源的问题。一般在工业上，它们会加一个推电器，就是在接收端同时提供一个24V的电源，通过4~20mA电流线向远端进行供电。<br />
问：现在市场上的变送器是否有数字输出接口？比如RS-485或者RS-232？<br />
答：现在市场上的变送器通常用标准的485或232通讯接口来传输，这个产品其实早在10年前就有了，它们把现场的信号模拟成传感器的信号，直接传数字量，然后经过485进行传输，这是比较多的。如果你是用TI的芯片，比如MSC12XX，它内置的8052\8952里面带16位或24位AD转换器及通信接口输出，如果用它来做的话，很容易把它做成一个485或232通信接口的数字变送器芯片。<br />
问：在4~20mA变送器的信号传输过程中，如何有效地防止各类电磁、过电压对于接收装置造成的干扰？在系统故障状态，是否具有事故信息追忆功能？<br />
答：如果有电磁干扰，首先说电磁的发射，当传感器接入的时候，如果具有很高的输入阻抗的时候，有可能产生电磁干扰，可以加一些电阻电容进行滤波，TI在这方面有一些应用电路的介绍可供大家参考。过电压的时候，4~20mA的长线输出的时候，可以借助36V的稳压块来进行过电压保护，如果极性接反的时候，可以在输入回路里加一个整流桥堆来对极性进行调整。<br />
问：如何将接收端的电流转换成电压以便于ADC转换？主要是精度方面，是否能给一个具体例子？<br />
答：如果将4~20mA电流转换成电压再经过ADC转换时，TI有一个专用芯片RCV420，它里面采用的是一个精密的电子网络还有一个精密比例的运算放大器和一个精密的基准电压器，即10V的基准电压，这个10V基准电压大概是5个或10个TTN的温度系数，用这个片子就可以很精确地将前面的4~20mA电流转换成一个电压输出了。<br />
问：有没有串行接口出来就是4~20mA？最好能出来0~20mA，类似于ADI的AD420，但AD420太贵，而且外围东西太多。<br />
答：也可以用TI的产品来完成这个功能。用一个XTR110，它是一个很廉价的电压到电流的转换，前面或者用一个DA转换器，或者用一个PWM的信号来完成DA转换。将FSK信号直接经过一个电阻接到XTR115的输入端，这样就可以满足HART协议来替换AD420，这时的成本应该是很低的，应用也很方便。<br />
问：使用4~20mA变送器时，是否需要通过控制器对其进行编程？<br />
答：TI变送器电流环有几类产品，有的可以通过控制器进行编程校正，也有的可以通过模拟的、通过外部设置来进行校正。<br />
问：如何用PWM信号控制4～20mA电流？<br />
答：用PWM信号控制4～20mA电流很常用，通常采用一个单片机放在前面对传感器进行测量，测量好后把模拟信号转换成数字信号，但是它内部不包含DA转换器，它是用一个PWM信号来输出。像TI的XTR115芯片，它包含一个典型电路：把PWM信号经整流滤波后直接输出一个4~20mA的信号。因此直接使用TI的XTR115或XTR116即可完成电路的控制。<br />
问：是否有办法从4~20mA线缆中取电，同时又不影　响模拟信号的转换和采集结果？<br />
答：如果是二线制的时候，因为是通过电源来向远端的SPI芯片来进行供电的，若采用的是XTR115或其他XTR芯片，可以把24V电源转换成一个稳压电源的信号，一般都是5.1V的信号，使用5.1V的信号对前面的芯片进行供电，这时候应该没有这种问题。TI的XTR芯片专门考虑了这个问题，所以在芯片内部提供了一组稳压电源来提供前面的电路供电，而不会影响模拟信号的转换和采集结果。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/18/4-20ma%e7%94%b5%e6%b5%81%e7%8e%af%e5%b7%a5%e4%bd%9c%e5%8e%9f%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wheatstone桥梁</title>
		<link>http://www.mydev.cn/2012/02/17/wheatstone%e6%a1%a5%e6%a2%81/</link>
		<comments>http://www.mydev.cn/2012/02/17/wheatstone%e6%a1%a5%e6%a2%81/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 11:50:42 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[电路设计]]></category>
		<category><![CDATA[传感器]]></category>
		<category><![CDATA[测量]]></category>
		<category><![CDATA[电桥]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=38</guid>
		<description><![CDATA[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 所以， 二者择一地，如果 R1, R2和 R3 被知道，但 R2 不是可调整的，电压或潮流流经米可以使用计算价值 Rx使用 Kirchhoff的电路法律 (亦称Kirchhoff的规则)。 这个设定频繁地得用于 应变仪 并且 抵抗温度探测器 测量，因为它通常是更加快速的读电压电平米比调整抵抗到零电压。 内容 1 派生 2 意义 3 根本桥梁的修改 4 参见 5 外部链接 派生 首先， Kirchhoff的第一个规则 在连接点使用发现潮流 B 并且 D: 然后， Kirchhoff的第二规则 为发现电压使用在圈 ABD 并且 BCD: 桥梁是平衡的和 Ig = 0，因此第二套等式可以被重写如下： 然后，等式被划分并且被重新整理，给： 从第一个规则， I3 = Ix 并且 I1 = I2. 期望值 Rx 现在被知道给如下： 如果全部四电阻器价值和电源电压(vs)被知道，电压横跨桥梁(v)能通过制定出电压发现从其中每一 分压器 并且减去一从其他。 等式为此是： 这可以被简化： 意义 Wheatstone桥梁说明区别测量的概念，可以是极端准确的。 变异在Wheatstone桥梁可以用于测量 电容, 感应性, 阻抗 并且其他数量，例如相当数量可燃烧的气体在一个样品，与 测爆计. 凯尔文双重桥梁 从Wheatstone桥梁特别地适应了为测量非常低抵抗。 一“凯尔文四分之一桥梁”也被开发了。 它被推理“四分之三的桥梁”可能存在; 然而，这样桥梁将相同地起作用与凯尔文双重桥梁。 概念被扩大了 交变电流 测量 詹姆斯干事麦克斯韦 1865年和进一步改善 阿伦Blumlein 在大约1926年。 根本桥梁的修改 Wheatstone桥梁是根本桥梁，但有可以是定制的各种各样的种类抵抗的其他修改，当根本性Wheatstone桥梁不是适当的时。 某些修改是： Karey孵育滑导线桥梁 凯尔文Varley幻灯片 凯尔文双重桥梁 麦克斯韦桥梁 参见 电子门户 应变仪 电位器 分压器 欧姆计 抵抗温度探测器 麦克斯韦桥梁 外部链接 efunda Wheatstone文章 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Wheatstone桥梁</strong> 是a <a title="测量仪器" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Measuring_instrument">测量仪器</a> 发明 <a title="Samuel猎人Christie" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Samuel_Hunter_Christie">Samuel猎人Christie</a> 在 <a title="1833" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/1833">1833</a> 并且由先生改善和通俗化 <a title="查尔斯Wheatstone" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Charles_Wheatstone">查尔斯Wheatstone</a> 在 <a title="1843" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/1843">1843</a>. 它用于测量未知数<a title="电阻" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Electrical_resistance">电阻</a> 通过平衡a的二条腿 <a title="桥式电路" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Bridge_circuit">桥式电路</a>一条腿，其中包括未知的组分。 它的操作于是相似的 <em>原始</em> <a title="电位器" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Potentiometer">电位器</a> 除了在电位器巡回使用的米是敏感的 <a title="电流计" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Galvanometer">电流计</a>.</p>
<p>在电路在右边， <em>R</em><sub><em>x</em></sub> 是将被测量的未知的抵抗; <em>R</em><sub>1</sub>, <em>R</em><sub>2</sub> 并且 <em>R</em><sub>3</sub> 是已知的抵抗和抵抗电阻器 <em>R</em><sub>2</sub> 是可调整的。 如果二抵抗的比率在知道的腿(<em>R</em><sub>2</sub> / <em>R</em><sub>1</sub>) 与比率是相等的二在未知的腿 (<em>R</em><sub><em>x</em></sub> / <em>R</em><sub>3</sub>)然后 <a title="电压" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Voltage">电压</a> 在二中点之间(<strong>B</strong> 并且 <strong>D</strong>)将是零和没有 <a title="潮流(电)" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Electric_current">当前</a> 将流经 <a title="电流计" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Galvanometer">电流计</a> <em>v</em><sub><em>g</em></sub>. <em>R</em><sub>2</sub> 变化，直到这个情况被到达。 当前方向是否表明 <em>R</em><sub>2</sub> 太高或太低。</p>
<p>查出零的潮流可以做对极端高精确度(参见 <a title="电流计" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Galvanometer">电流计</a>). 所以，如果 <em>R</em><sub>1</sub>, <em>R</em><sub>2</sub>并且 <em>R</em><sub>3</sub> 为高精密度所知，然后 <em>R</em><sub><em>x</em></sub> 能被测量对高精密度。 非常零钱 <em>R</em><sub><em>x</em></sub>打乱平衡和欣然被查出。</p>
<p>在平衡，比率 <em>R</em><sub>2</sub> / <em>R</em><sub>1</sub> = <em>R</em><sub><em>x</em></sub> / <em>R</em><sub>3</sub></p>
<p>所以，</p>
<p><span id="more-38"></span></p>
<p>二者择一地，如果 <em>R</em><sub>1</sub>, <em>R</em><sub>2</sub>和 <em>R</em><sub>3</sub> 被知道，但 <em>R</em><sub>2</sub> 不是可调整的，电压或潮流流经米可以使用计算价值 <em>R</em><sub><em>x</em></sub>使用 <a title="Kirchhoff的电路法律" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Kirchhoff's_circuit_laws">Kirchhoff的电路法律</a> (亦称Kirchhoff的规则)。 这个设定频繁地得用于 <a title="应变仪" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Strain_gauge">应变仪</a> 并且 <a title="抵抗温度探测器" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Resistance_thermometer">抵抗温度探测器</a> 测量，因为它通常是更加快速的读电压电平米比调整抵抗到零电压。</p>
<table id="toc" summary="内容">
<tbody>
<tr>
<td>
<div id="toctitle">
<h2>内容</h2>
</div>
<ul>
<li><a href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Wheatstone_bridge#Derivation">1 派生</a></li>
<li><a href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Wheatstone_bridge#Significance">2 意义</a></li>
<li><a href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Wheatstone_bridge#Modification_of_the_fundamental_bridge">3 根本桥梁的修改</a></li>
<li><a href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Wheatstone_bridge#See_also">4 参见</a></li>
<li><a href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Wheatstone_bridge#External_links">5 外部链接</a></li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><a id="Derivation" name="Derivation"></a></p>
<h2>派生</h2>
<p>首先， <a title="Kirchhoff的电路法律" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Kirchhoff's_circuit_laws#Kirchhoff.27s_Current_Law_.28KCL.29">Kirchhoff的第一个规则</a> 在连接点使用发现潮流 <strong>B</strong> 并且 <strong>D</strong>:</p>
<dl>
<dd></dd>
<dd></dd>
</dl>
<p>然后， <a title="Kirchhoff的电路法律" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Kirchhoff's_circuit_laws#Kirchhoff.27s_Voltage_Law_.28KVL.29">Kirchhoff的第二规则</a> 为发现电压使用在圈 <strong>ABD</strong> 并且 <strong>BCD</strong>:</p>
<dl>
<dd></dd>
<dd></dd>
</dl>
<p>桥梁是平衡的和 <em>I</em><sub><em>g</em></sub> = 0，因此第二套等式可以被重写如下：</p>
<dl>
<dd></dd>
<dd></dd>
</dl>
<p>然后，等式被划分并且被重新整理，给：</p>
<dl>
<dd></dd>
</dl>
<p>从第一个规则， <em>I</em><sub>3</sub> = <em>I</em><sub><em>x</em></sub> 并且 <em>I</em><sub>1</sub> = <em>I</em><sub>2</sub>. 期望值 <em>R</em><sub><em>x</em></sub> 现在被知道给如下：</p>
<dl>
<dd></dd>
</dl>
<p>如果全部四电阻器价值和电源电压(<em>v</em><sub><em>s</em></sub>)被知道，电压横跨桥梁(<em>v</em>)能通过制定出电压发现从其中每一 <a title="分压器" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Voltage_divider">分压器</a> 并且减去一从其他。 等式为此是：</p>
<dl>
<dd></dd>
</dl>
<p>这可以被简化：</p>
<dl>
<dd></dd>
</dl>
<p><a id="Significance" name="Significance"></a></p>
<h2>意义</h2>
<p>Wheatstone桥梁说明区别测量的概念，可以是极端准确的。 变异在Wheatstone桥梁可以用于测量 <a title="电容" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Capacitance">电容</a>, <a title="感应性" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Inductance">感应性</a>, <a title="电子阻抗" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Electrical_impedance">阻抗</a> 并且其他数量，例如相当数量可燃烧的气体在一个样品，与 <a title="测爆计" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Explosimeter">测爆计</a>. <a title="凯尔文双重桥梁" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Kelvin_bridge">凯尔文双重桥梁</a> 从Wheatstone桥梁特别地适应了为测量非常低抵抗。 一“凯尔文四分之一桥梁”也被开发了。 它被推理“四分之三的桥梁”可能存在; 然而，这样桥梁将相同地起作用与凯尔文双重桥梁。</p>
<p>概念被扩大了 <a title="交变电流" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Alternating_current">交变电流</a> 测量 <a title="詹姆斯干事麦克斯韦" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/James_Clerk_Maxwell">詹姆斯干事麦克斯韦</a> 1865年和进一步改善 <a title="阿伦Blumlein" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Alan_Blumlein">阿伦Blumlein</a> 在大约1926年。</p>
<p><a id="Modification_of_the_fundamental_bridge" name="Modification_of_the_fundamental_bridge"></a></p>
<h2>根本桥梁的修改</h2>
<p>Wheatstone桥梁是根本桥梁，但有可以是定制的各种各样的种类抵抗的其他修改，当根本性Wheatstone桥梁不是适当的时。 某些修改是：</p>
<ul>
<li>Karey孵育滑导线桥梁</li>
<li>凯尔文Varley幻灯片</li>
<li><a title="凯尔文双重桥梁" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Kelvin_bridge">凯尔文双重桥梁</a></li>
<li><a title="麦克斯韦桥梁" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Maxwell_bridge">麦克斯韦桥梁</a></li>
</ul>
<p><a id="See_also" name="See_also"></a></p>
<h2>参见</h2>
<div>
<table>
<tbody>
<tr>
<td></td>
<td><em><strong><a title="门户：电子" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Portal:Electronics">电子门户</a></strong></em></td>
</tr>
</tbody>
</table>
</div>
<ul>
<li><a title="应变仪" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Strain_gauge">应变仪</a></li>
<li><a title="电位器" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Potentiometer">电位器</a></li>
<li><a title="分压器" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Voltage_divider">分压器</a></li>
<li><a title="欧姆计" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Ohmmeter">欧姆计</a></li>
<li><a title="抵抗温度探测器" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Resistance_thermometer">抵抗温度探测器</a></li>
<li><a title="麦克斯韦桥梁" href="http://www.multilingualarchive.com/ma/enwiki/zh_cn/Maxwell_bridge">麦克斯韦桥梁</a></li>
</ul>
<p><a id="External_links" name="External_links"></a></p>
<h2>外部链接</h2>
<ul>
<li><a title="http://www.efunda.com/designstandards/sensors/methods/wheatstone_bridge.cfm" href="http://www.efunda.com/designstandards/sensors/methods/wheatstone_bridge.cfm" rel="nofollow">efunda Wheatstone文章</a></li>
<li><a title="http://books.google.com/books?id=z3lKAAAAMAAJ" href="http://books.google.com/books?id=z3lKAAAAMAAJ" rel="nofollow">测量电阻方法- Edwin F。 northrup 1912年，全文在Google预定</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/17/wheatstone%e6%a1%a5%e6%a2%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MODBUS RTU协议简介</title>
		<link>http://www.mydev.cn/2012/02/05/modbus-rtu%e5%8d%8f%e8%ae%ae%e7%ae%80%e4%bb%8b/</link>
		<comments>http://www.mydev.cn/2012/02/05/modbus-rtu%e5%8d%8f%e8%ae%ae%e7%ae%80%e4%bb%8b/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 16:29:56 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[应用开发]]></category>
		<category><![CDATA[MODBUS RTU]]></category>
		<category><![CDATA[单片机]]></category>
		<category><![CDATA[工控]]></category>
		<category><![CDATA[通信技术]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=33</guid>
		<description><![CDATA[Modbus协议最初由Modicon公司开发出来，在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分，现在Modbus已经是工业领域全球最流行的协议。 此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备，包括PLC，DCS，智能仪表等都在使用Modbus协议作为他们之间的通讯标准。 有了它，不同厂商生产的控制设备可以连成工业网络，进行集中监控。 Modbus协议包括ASCII、RTU、TCP等，并没有规定物理层。 此协议定义了控制器能够认识和使用的消息结构，而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。 Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式，数据通讯采用Maser/Slave方式，Master端发出数据请求消息，Slave端接收到正确消息后就可以发送数据到Master端以响应请求；Master端也可以直接发消息修改Slave端的数据，实现双向读写。 Modbus协议需要对数据进行校验，串行协议中除有奇偶校验外，ASCII模式采用LRC校验，RTU模式采用16位CRC校验，但TCP模式没有额外规定校验，因为TCP协议是一个面向连接的可靠协议。 另外，Modbus采用主从方式定时收发数据，在实际使用中如果某Slave站点断开后（如故障或关机），Master端可以诊断出来，而当故障修复后，网络又可自动接通。因此，Modbus协议的可靠性较好。 对于Modbus的ASCII、RTU和TCP协议来说，其中TCP和RTU协议非常类似，只要把RTU协议的两个字节的校验码去掉，然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。因此这里只介绍一下Modbus的ASCII和RTU协议。 MODBUS ASCII 协议和 MODBUS RTU 协议比较表 协议 开始标记 结束标记 校验 传输效率 程序处理 ASCII : (冒号) CR,LF LRC 低 直观,简单 RTU 无 无 CRC 高 稍复杂 通过比较可以看到,ASCII协议和RTU协议相比,ASCII协议拥有开始和结束标记,因此在进行程序处理时能更加方便,由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是它传输的都是可见的ASCII字符，RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输”F”和”9&#8243;的ASCII码0&#215;39和0&#215;46两个字节，这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。 MODBUS功能码简介： 功能码 名称 功能说明 01 读取线圈状态 取得一组逻辑线圈的当前状态(ON/OFF) 02 读取输入状态 取得一组开关输入的当前状态(ON/OFF) 03 读取保持寄存器 读取一个或多个保持寄存器 04 读取输入寄存器 读取一个或多个随机寄存器 05 强置单线圈 强置一个逻辑线圈的通断 [...]]]></description>
			<content:encoded><![CDATA[<div id="headerbox">
<p>Modbus协议最初由Modicon公司开发出来，在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分，现在Modbus已经是工业领域全球最流行的协议。<br />
此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备，包括PLC，DCS，智能仪表等都在使用Modbus协议作为他们之间的通讯标准。<br />
有了它，不同厂商生产的控制设备可以连成工业网络，进行集中监控。</p>
<p>Modbus协议包括ASCII、RTU、TCP等，并没有规定物理层。<br />
此协议定义了控制器能够认识和使用的消息结构，而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。<br />
Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式，数据通讯采用Maser/Slave方式，Master端发出数据请求消息，Slave端接收到正确消息后就可以发送数据到Master端以响应请求；Master端也可以直接发消息修改Slave端的数据，实现双向读写。</p>
<p>Modbus协议需要对数据进行校验，串行协议中除有奇偶校验外，ASCII模式采用LRC校验，RTU模式采用16位CRC校验，但TCP模式没有额外规定校验，因为TCP协议是一个面向连接的可靠协议。<br />
另外，Modbus采用主从方式定时收发数据，在实际使用中如果某Slave站点断开后（如故障或关机），Master端可以诊断出来，而当故障修复后，网络又可自动接通。因此，Modbus协议的可靠性较好。</p>
<p>对于Modbus的ASCII、RTU和TCP协议来说，其中TCP和RTU协议非常类似，只要把RTU协议的两个字节的校验码去掉，然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。因此这里只介绍一下Modbus的ASCII和RTU协议。</p>
<table width="600" cellspacing="1" cellpadding="3" bgcolor="#999999">
<tbody>
<tr bgcolor="#CCCCFF">
<td colspan="6" align="center"><strong>MODBUS ASCII 协议和 MODBUS RTU 协议比较表</strong></td>
</tr>
<tr bgcolor="#FFFFFF">
<td>协议</td>
<td>开始标记</td>
<td>结束标记</td>
<td>校验</td>
<td>传输效率</td>
<td>程序处理</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>ASCII</td>
<td>: (冒号)</td>
<td>CR,LF</td>
<td>LRC</td>
<td>低</td>
<td>直观,简单</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>RTU</td>
<td>无</td>
<td>无</td>
<td>CRC</td>
<td>高</td>
<td>稍复杂</td>
</tr>
</tbody>
</table>
</div>
<div>
<p><span id="more-33"></span>通过比较可以看到,ASCII协议和RTU协议相比,ASCII协议拥有开始和结束标记,因此在进行程序处理时能更加方便,由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是它传输的都是可见的ASCII字符，RTU传输的数据每一个字节ASCII都要用两个字节来传输,比如RTU传输一个十六进制数0xF9,ASCII就需要传输”F”和”9&#8243;的ASCII码0&#215;39和0&#215;46两个字节，这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。</p>
<p><img src="http://www.deyunme.com/images/CometTiny.gif" alt="" width="30" height="30" align="absmiddle" /><span>MODBUS功能码简介：</span></p>
<table width="100%" cellspacing="1" cellpadding="3" bgcolor="#999999">
<tbody>
<tr bgcolor="#FFFFFF">
<td width="65">功能码</td>
<td width="160">名称</td>
<td>功能说明</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>01</td>
<td>读取线圈状态</td>
<td>取得一组逻辑线圈的当前状态(ON/OFF)</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>02</td>
<td>读取输入状态</td>
<td>取得一组开关输入的当前状态(ON/OFF)</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>03</td>
<td>读取保持寄存器</td>
<td>读取一个或多个保持寄存器</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>04</td>
<td>读取输入寄存器</td>
<td>读取一个或多个随机寄存器</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>05</td>
<td>强置单线圈</td>
<td>强置一个逻辑线圈的通断</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>06</td>
<td>预置单寄存器</td>
<td>把具体值装入一个保持寄存器</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>07</td>
<td>读取异常状态</td>
<td>取得8个内部线圈的通断状态，这8个线圈的地址由控制器决定</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>08</td>
<td>回送诊断校验</td>
<td>把诊断校验报文送从机,以对通信处理进行评鉴</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>09</td>
<td>编程(只用于484)</td>
<td>使主机模拟编程器作用,修改PC从机逻辑</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>10</td>
<td>控询(只用于484)</td>
<td>可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,功能码才发送</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>11</td>
<td>读取事件计数</td>
<td>可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其它应答产生通信错误时</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>12</td>
<td>读取通信事件记录</td>
<td>可使主机检索每台从机的ModBus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>13</td>
<td>编程(184/384 484 584)</td>
<td>可使主机模拟编程器功能修改PC从机逻辑</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>14</td>
<td>探询(184/384 484 584)</td>
<td>可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,功能码才得发送</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>15</td>
<td>强置多线圈</td>
<td>强置一串连续逻辑线圈的通断</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>16</td>
<td>预置多寄存器</td>
<td>把二进制值装入一串连续的保持寄存器</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>17</td>
<td>报告从机标识</td>
<td>可使主机判断编址从机的类型及该从机运行指示灯的状态</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>18</td>
<td>(884和MICRO 84)</td>
<td>可使主机模拟编程功能，修改PC状态逻辑</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>19</td>
<td>重置通信链路</td>
<td>发生非可修改错误后,是从机复位于已知状态,可重置顺序字节</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>20</td>
<td>读取通用参数(584L)</td>
<td>显示扩展存储器文件中的数据信息</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>21</td>
<td>写入通用参数(584L)</td>
<td>把通用参数写入扩展存储文件，或修改之</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>22-64</td>
<td>保留作扩展功能备用</td>
<td>-</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>65-72</td>
<td>保留以备用户功能所用</td>
<td>留作用户功能的扩展编码</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>73-119</td>
<td>非法功能</td>
<td>-</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>120-127</td>
<td>保留</td>
<td>留作内部作用</td>
</tr>
<tr bgcolor="#FFFFFF">
<td>128-255</td>
<td>保留</td>
<td>用于异常应答</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/05/modbus-rtu%e5%8d%8f%e8%ae%ae%e7%ae%80%e4%bb%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AVR单片机外部RC振荡器电路</title>
		<link>http://www.mydev.cn/2012/02/05/avr%e5%8d%95%e7%89%87%e6%9c%ba%e5%a4%96%e9%83%a8rc%e6%8c%af%e8%8d%a1%e5%99%a8%e7%94%b5%e8%b7%af/</link>
		<comments>http://www.mydev.cn/2012/02/05/avr%e5%8d%95%e7%89%87%e6%9c%ba%e5%a4%96%e9%83%a8rc%e6%8c%af%e8%8d%a1%e5%99%a8%e7%94%b5%e8%b7%af/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 14:19:49 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[单片机设计]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[RC]]></category>
		<category><![CDATA[时钟]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=31</guid>
		<description><![CDATA[XTAL1与VCC之间接一颗5K-100K的电阻，单片机就可起振工作。]]></description>
			<content:encoded><![CDATA[<p>XTAL1与VCC之间接一颗5K-100K的电阻，单片机就可起振工作。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/05/avr%e5%8d%95%e7%89%87%e6%9c%ba%e5%a4%96%e9%83%a8rc%e6%8c%af%e8%8d%a1%e5%99%a8%e7%94%b5%e8%b7%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ICC里面把数组放在一个固定FLASH地址</title>
		<link>http://www.mydev.cn/2012/02/05/icc%e9%87%8c%e9%9d%a2%e6%8a%8a%e6%95%b0%e7%bb%84%e6%94%be%e5%9c%a8%e4%b8%80%e4%b8%aa%e5%9b%ba%e5%ae%9aflash%e5%9c%b0%e5%9d%80/</link>
		<comments>http://www.mydev.cn/2012/02/05/icc%e9%87%8c%e9%9d%a2%e6%8a%8a%e6%95%b0%e7%bb%84%e6%94%be%e5%9c%a8%e4%b8%80%e4%b8%aa%e5%9b%ba%e5%ae%9aflash%e5%9c%b0%e5%9d%80/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 12:47:11 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[单片机设计]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[ICC]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=28</guid>
		<description><![CDATA[#pragma abs_address:0x0050 const unsigned char table[6]={1,2,3,4,5,6}; #pragma end_abs_address 数组将会从指定的地址开始存储]]></description>
			<content:encoded><![CDATA[<pre class="wp-code-highlight prettyprint">
#pragma abs_address:0x0050
const unsigned char table[6]={1,2,3,4,5,6};
#pragma end_abs_address
</pre>
<p>数组将会从指定的地址开始存储</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/05/icc%e9%87%8c%e9%9d%a2%e6%8a%8a%e6%95%b0%e7%bb%84%e6%94%be%e5%9c%a8%e4%b8%80%e4%b8%aa%e5%9b%ba%e5%ae%9aflash%e5%9c%b0%e5%9d%80/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AVR 矩阵键盘程序源代码(有连续按键功能)</title>
		<link>http://www.mydev.cn/2012/02/05/avr-%e7%9f%a9%e9%98%b5%e9%94%ae%e7%9b%98%e7%a8%8b%e5%ba%8f%e6%ba%90%e4%bb%a3%e7%a0%812%e6%9c%89%e8%bf%9e%e7%bb%ad%e6%8c%89%e9%94%ae%e5%8a%9f%e8%83%bd/</link>
		<comments>http://www.mydev.cn/2012/02/05/avr-%e7%9f%a9%e9%98%b5%e9%94%ae%e7%9b%98%e7%a8%8b%e5%ba%8f%e6%ba%90%e4%bb%a3%e7%a0%812%e6%9c%89%e8%bf%9e%e7%bb%ad%e6%8c%89%e9%94%ae%e5%8a%9f%e8%83%bd/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 11:23:36 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[单片机设计]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[键盘]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=21</guid>
		<description><![CDATA[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 &#38;lt;avr/io.h&#38;gt; #include &#38;lt;util/delay.h&#38;gt; #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__ */ Keyboard.c /********** AVR 矩阵键盘扫描程序 ********* * 版本.........: 2.0 * 作者.........: 陈利栋 * 目标.........: AVR * 文件名.......: Keyboard.c * 编译器.......: AVR GCC 20100110 * 开发环境.....: AVR Studio V4.18 * 创建时间.....: 2010.09.12 * 最后修改.....: 2010.09.29 *****************************************/ #include &#34;Keyboard.h&#34; unsigned char _key_last = KEY_NULL; unsigned int  _key_count = 0; unsigned int  _key_continue_count = 0; unsigned char key_continue_flag = 0; unsigned char KeyScan(void) { unsigned char temp = 0; KEYBOARD_DDR = 0x0f; KEYBOARD_PORT = 0xf0; _delay_us(10); temp = KEYBOARD_PIN; KEYBOARD_DDR = 0xf0; KEYBOARD_PORT = 0x0f; _delay_us(10); temp &#124;= KEYBOARD_PIN; if (temp != _key_last) { _key_count++; [...]]]></description>
			<content:encoded><![CDATA[<p>Keyboard.h</p>
<pre class="wp-code-highlight prettyprint">
/********** 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 &amp;lt;avr/io.h&amp;gt;
#include &amp;lt;util/delay.h&amp;gt;

#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__ */
</pre>
<p><span id="more-21"></span></p>
<p>Keyboard.c</p>
<pre class="wp-code-highlight prettyprint">
/********** AVR 矩阵键盘扫描程序 *********
* 版本.........: 2.0
* 作者.........: 陈利栋
* 目标.........: AVR
* 文件名.......: Keyboard.c
* 编译器.......: AVR GCC 20100110
* 开发环境.....: AVR Studio V4.18
* 创建时间.....: 2010.09.12
* 最后修改.....: 2010.09.29
*****************************************/
#include &quot;Keyboard.h&quot;

unsigned char _key_last = KEY_NULL;
unsigned int  _key_count = 0;

unsigned int  _key_continue_count = 0;
unsigned char key_continue_flag = 0;

unsigned char KeyScan(void)
{
unsigned char temp = 0;

KEYBOARD_DDR = 0x0f;
KEYBOARD_PORT = 0xf0;
_delay_us(10);
temp = KEYBOARD_PIN;

KEYBOARD_DDR = 0xf0;
KEYBOARD_PORT = 0x0f;
_delay_us(10);
temp |= KEYBOARD_PIN;

if (temp != _key_last)
{
_key_count++;
if (_key_count &amp;gt;= KEY_READY_COUNT)
{
_key_last = temp;
_key_count = 0;
return _key_last;
}
key_continue_flag = 0;
}
else
{
if (temp != 0xff)
{
_key_continue_count++;
if (key_continue_flag == 0)
{
if (_key_continue_count &amp;gt;= KEY_CONTINUE_START_COUNT)
{
key_continue_flag = 1;
_key_continue_count = 0;
return temp;
}
}
else
{
if (_key_continue_count &amp;gt;= KEY_CONTINUE_RUNNING_COUNT)
{
_key_continue_count = 0;
return temp;
}
}
}
_key_count = 0;
}

return KEY_NULL;
}

unsigned char GetKeyValue(void)
{
switch (KeyScan())
{
  case KEY_NULL: return KEY_NULL;
  case 0x77: return '1';
  case 0x7B: return '2';
  case 0x7D: return '3';
  case 0x7E: return 'A';
  case 0xB7: return '4';
  case 0xBB: return '5';
  case 0xBD: return '6';
  case 0xBE: return 'B';
  case 0xD7: return '7';
  case 0xDB: return '8';
  case 0xDD: return '9';
  case 0xDE: return 'C';
  case 0xE7: return '*';
  case 0xEB: return '0';
  case 0xED: return '#';
  case 0xEE: return 'D';
  default  : return KEY_NULL;
}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/05/avr-%e7%9f%a9%e9%98%b5%e9%94%ae%e7%9b%98%e7%a8%8b%e5%ba%8f%e6%ba%90%e4%bb%a3%e7%a0%812%e6%9c%89%e8%bf%9e%e7%bb%ad%e6%8c%89%e9%94%ae%e5%8a%9f%e8%83%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C/C++语言中Static的作用详述</title>
		<link>http://www.mydev.cn/2012/02/04/cc%e8%af%ad%e8%a8%80%e4%b8%adstatic%e7%9a%84%e4%bd%9c%e7%94%a8%e8%af%a6%e8%bf%b0/</link>
		<comments>http://www.mydev.cn/2012/02/04/cc%e8%af%ad%e8%a8%80%e4%b8%adstatic%e7%9a%84%e4%bd%9c%e7%94%a8%e8%af%a6%e8%bf%b0/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 05:40:21 +0000</pubDate>
		<dc:creator>lyping</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[语言]]></category>

		<guid isPermaLink="false">http://www.mydev.cn/?p=18</guid>
		<description><![CDATA[在C语言中，static的字面意思很容易把我们导入歧途，其实它的作用有三条。 （1）先来介绍它的第一条也是最重要的一条：隐藏。 当我们同时编译多个文件时，所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话，我举例来说明。我们要同时编译两个源文件，一个是a.c，另一个是main.c。 下面是a.c的内容 char a = &#8216;A&#8217;; // 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 &#60;stdio.h&#62; int fun(void){ static int count = 10; //事实上此赋值语句从来没有执行过 [...]]]></description>
			<content:encoded><![CDATA[<p>在C语言中，static的字面意思很容易把我们导入歧途，其实它的作用有三条。<br />
（1）先来介绍它的第一条也是最重要的一条：隐藏。<br />
当我们同时编译多个文件时，所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话，我举例来说明。我们要同时编译两个源文件，一个是a.c，另一个是main.c。<br />
下面是a.c的内容<br />
char a = &#8216;A&#8217;; // global variable<br />
void msg()<br />
{<br />
printf(“Hello\n”);<br />
}<br />
下面是main.c的内容<br />
int main(void)<br />
{<br />
extern char a; // extern variable must be declared before use<br />
printf(“%c “, a);<br />
(void)msg();<br />
return 0;<br />
}<br />
程序的运行结果是：<br />
A Hello<br />
你可能会问：为什么在a.c中定义的全局变量a和函数msg能在main.c中使用？前面说过，所有未加static前缀的全局变量和函数都具有全局可见性，其它的源文件也能访问。此例中，a是全局变量，msg是函数，并且都没有加static前缀，因此对于另外的源文件main.c是可见的。<br />
如果加了static，就会对其它源文件隐藏。例如在a和msg的定义前加上static，main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量，而不必担心命名冲突。Static可以用作函数和变量的前缀，对于函数来讲，static的作用仅限于隐藏，而对于变量，static还有下面两个作用。<br />
（2）static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化，也是唯一的一次初始化。共有两种变量存储在静态存储区：全局变量和static变量，只不过和全局变量比起来，static可以控制变量的可见范围，说到底static还是用来隐藏的。虽然这种用法不常见，但我还是举一个例子。<br />
＃i nclude &lt;stdio.h&gt;<br />
int fun(void){<br />
static int count = 10; //事实上此赋值语句从来没有执行过<br />
return count&#8211;;<br />
}<br />
int count = 1;<br />
int main(void)<br />
{<br />
printf(“global\t\tlocal static\n”);<br />
for(; count &lt;= 10; ++count)<br />
printf(“%d\t\t%d\n”, count, fun());<br />
return 0;<br />
}<br />
程序的运行结果是：<br />
global local static<br />
1 10<br />
2 9<br />
3 8<br />
4 7<br />
5 6<br />
6 5<br />
7 4<br />
8 3<br />
9 2<br />
10 1<br />
（3）static的第三个作用是默认初始化为0。其实全局变量也具备这一属性，因为全局变量也存储在静态数据区。在静态数据区，内存中所有的字节默认值都是0&#215;00，某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵，我们可以一个一个地把所有元素都置0，然后把不是0的几个元素赋值。如果定义成静态的，就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用，但又觉得每次在字符数组末尾加&amp;rsquo;\0&amp;rsquo;太麻烦。如果把字符串定义成静态的，就省去了这个麻烦，因为那里本来就是&amp;rsquo;\0&amp;rsquo;。不妨做个小实验验证一下。<br />
＃i nclude &lt;stdio.h&gt;<br />
int a;<br />
int main(void)<br />
{<br />
int i;<br />
static char str[10];<br />
printf(“integer: %d; string: (begin)%s(end)”, a, str);<br />
return 0;<br />
}<br />
程序的运行结果如下<br />
integer: 0; string: (begin)(end)<br />
最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏，其次因为static变量存放在静态存储区，所以它具备持久性和默认值0。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mydev.cn/2012/02/04/cc%e8%af%ad%e8%a8%80%e4%b8%adstatic%e7%9a%84%e4%bd%9c%e7%94%a8%e8%af%a6%e8%bf%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

