cpubbs 日志(4) - cpubbs虚拟仪器论坛 - cpubbs论坛免费虚拟仪器博客 labview虚拟仪器讨论区 - cpubbs论坛 虚拟仪器论坛|labview论坛|labwindows论坛|vi|cvi|数据采集卡|入门教程|初学|软件下载|虚拟仪器免费博客|虚拟仪器电子商务|虚拟仪器商城|虚拟仪器人才中心|图形化单片机编程cpuview|虚拟仪器在线商城 - Powered by X-Space
cpubbs论坛,专业的labview,labwindows,虚拟仪器数据采集卡交流论坛,免费博客,人才中心,电子商贸,欢迎您的光临!

发布新日志

  • Keil uVision2为单个.c文件创建.lib库文件[转贴]

    2007-04-11 23:16:26

    原贴地址:http://www.mcublog.com/blog/user1/11514/archives/2006/17462.html

    Keil uVision2为单个.c文件创建.lib库文件

    By  ben 发表于 2006-10-31 18:51:00 

     将工程某个.c生成的.obj copy到 c51\bin目录下 也即lib51所在的目录,利用lib51.exe的create先生成一个空的.lib 文件,然后用add命令 ,将.obj文件加到用create命令生成的.lib文件里,就可以生成想要的lib文件了。
    举个例子,在我的工程里有个Adjust.c文件,我编译整个工程,就生成一个Adjust.obj文件,我将Adjust.obj文件copy到 c51\bin目录下 也即lib51所在的目录,打开lib51.exe
    在*后面输入 create  Adjust.lib  ,2)* add Adjust.obj  to  Adjust.lib。
    就可以了,
  • 市电欠压、过压自动保护器[转载]

    2007-04-11 16:09:25


     

    作者:陈致健 班级:03电信2班 栏目:学生制作 推荐度:★★★★★ 更新时间:2005-07-20

        当今人类社会中,科学技术越来越发达,电子产品越来越多,越来越精密,要在相对稳定的电压电流下工作,使用寿命才不会缩短。但市电又并不是十分稳定,经常产生浪涌电流,浪涌电流会对电器造成极大的危害,为了避免这些问题,做了一个小制作——市电欠压、过压自动保护器。

        该保护器有自动保护功能,当市电电源低于或高于设定的电压时,保护器将自动切断电源,使正在使用的电器得到保护并发出断续的报警声和灯光指示。

        保护器的电路使用了一块六施密特触发器集成电路CD4584B,其中触发器1 、2组成了输入电压检测电路,其输入端分别与由R1、RP1和R2、 RP2组成的电路接于整流器的正负两端。电位器RP1和RP2用来设定过压或欠压的保护范围。触发器4组成一个频率为2Hz 的超低频振荡器,它受控于VD4。触发器6组成一个频率为 800Hz 的音频振荡器,它受控于VD3 。当市电电压在正常的范围时,调节RP1使触发器 1 输入端电压低于它的翻转阀值,使其输出为高电平;调节RP2使触发器 2 输入端电压高于它的翻转阀值,使其输出为低电平,经触发器反相后为高电平。此时发光二极管LED1和LED2均不亮,VD1及VD2均处于截止状态,电路中的 A 点为高电平,从而使VT1导通,继电器K1得电工作,其常开触点K1闭合,使供电插座可向外供电。与此同时,VD4导通,使触发器 4 输入端被钳位于高电平,超低频振荡器停振,触发器 4 输出低电平,经触发器 5 反相后成为高电平,故由触发器 6 组成的音频振荡器也停振,蜂鸣器 HTD 不发声响,整个电路处于正常供电输出状态。

        当市电电压超出设定的电压上限范围时,触发器 1 输入端电压高于阀值电压,触发器发生翻转,其输出变为低电平,此时发光二极管LED1点亮,发出过压的灯光报警信号。与此同时,VD1导通,使电路中 A 点电位为低电平,VT1被截止,继电器K1停止工作,其触点K1-1释放,切断了供电插座的输出电源。同时VD4截止,超低频振荡器起振工作,触发器 4 的输出调制音频振荡器进行间歇式振荡,使蜂鸣器发出断续的蜂鸣声,起到过压的声报警功能。

        若市电电压低于设定的电压下限范围时触发器 2 的输入端电压将低于阀值电压,使其翻转,触发器 2 的输出变为低电平,此时发光二极管 LED2点亮并发出欠压的灯光报警信号。与此同时,VD2导通,同样也使电路中 A 点的电位成为低电平,VT1被截止,继电器K1也同样停止工作,其触点K1-1被释放,从而切断供电插座的输出电压。同时,由于VD4的截止,同样使超低频振荡器和音频振荡器起振工作,蜂鸣器 HTD 发出断续的报警声。

        电路中的C5给VT1增加了延时功能,可防止由于市电瞬间的变化而引起供电的误动作。

  • 比尔·盖茨的做人十理

    2007-04-06 15:05:04

       ——世界最受尊敬“商业领袖”的人生体验



    盖茨的业界地位仅次于杜拉克



    据权威英国《金融时报》调查:全球25个国家的1000位CEO、基金经理认为:微软仍是最受尊敬的公司,并在企业创新投资价值两项中排名第一。



    调查结果发现:商界舵手最重要的表现,是越来越注重领导的创新能力。在企业增长方面的突出表现,是稳中求胜的理念转而改为主动出击的新思维。



    今天的比尔·盖茨成为最受尊敬的商界领袖,其地位和影响力仅次于世界管理学之父杜拉克。



    盖茨先生在一次讲话中,语重心长地讲了他的十条忠告,相信会对大家有所启发。



    盖茨的十条“金口玉言”



    1 . 社会充满不公平现象。你先不要想去改造它,只能先适应它。(因为你管不了它)。



    2 . 世界不会在意你的自尊,人们看的只是你的成就。在你没有成就以前,切勿过分强调自尊。(因为你越强调自尊,越对你不利)。



    3 . 你只是中学毕业,通常不会成为CEO,直到你把CEO职位拿到手为止。(直到此时,人们才不会介意你只是中学毕业)。



    4 . 当你陷入人为困境时,不要抱怨,你只能默默地吸取教训。(你要悄悄地振作起来,重新奋起)。



    5 . 你要懂得:在没有你之前,你的父母并不像现在这样“乏味”。你应该想到,这是他们为了抚养你所付出的巨大代价。(你永远要感恩和孝敬他们,才是硬道理)。



    6 . 在学校里,你考第几已不是那么重要,但进入社会却不然。不管你去到哪里,都要分等排名。(社会、公司要排名次,是常见的事,要鼓起勇气竞争才对)。



    7 . 学校里有节假日,到公司打工则不然,你几乎不能休息,很少能轻松地过节假日。(否则你职业生涯中一起跑就落后了,甚至会让你永远落后)。



    8 . 在学校,老师会帮助你学习,到公司却不会。如果你认为学校的老师要求你很严格,那是你还没有进入公司打工。因为,如果公司对你不严厉,你就要失业了。(你必须清醒地认识到:公司比学校更要严格要求自己)。



    9 . 人们都喜欢看电视剧,但你不要看,那并不是你的生活。只要在公司工作,你是无暇看电视剧的。(奉劝你不要看,否则你走上看电视连续剧之路,而且看得津津有味,那你将失去成功的资格)。



    10 . 永远不要在背后批评别人,尤其不能批评你的老板无知、刻薄和无能。(因为这样的心态,会使你走上坎坷艰难的成长之路)。
  • MessageBox的完整使用 (转载)

    2007-04-06 12:48:16

    MessageBox的完整使用
    原贴地址:http://www.tianyablog.com/blogger/post_show.asp?BlogID=80680&PostID=1870171
    作者:hokyo 提交日期:2005-5-30 8:28:00
    昨天碰巧在瀚海星云的VC版有人问MessageBox的完整用法,现在把它一起写出来。

  • 线性光耦原理与电路设计

    2007-04-01 16:36:51

    来源:21IC中国电子网  作者:佚名

     

    1. 线形光耦介绍

    光隔离是一种很常用的信号隔离形式。常用光耦器件及其外围电路组成。由于光耦电路简单,在数字隔离电路或数据传输电路中常常用到,如UART协议的20mA电流环。对于模拟信号,光耦因为输入输出的线形较差,并且随温度变化较大,限制了其在模拟信号隔离的应用。

    对于高频交流模拟信号,变压器隔离是最常见的选择,但对于支流信号却不适用。一些厂家提供隔离放大器作为模拟信号隔离的解决方案,如ADI的AD202,能够提供从直流到几K的频率内提供0.025%的线性度,但这种隔离器件内部先进行电压-频率转换,对产生的交流信号进行变压器隔离,然后进行频率-电压转换得到隔离效果。集成的隔离放大器内部电路复杂,体积大,成本高,不适合大规模应用。

    模拟信号隔离的一个比较好的选择是使用线形光耦。线性光耦的隔离原理与普通光耦没有差别,只是将普通光耦的单发单收模式稍加改变,增加一个用于反馈的光接受电路用于反馈。这样,虽然两个光接受电路都是非线性的,但两个光接受电路的非线性特性都是一样的,这样,就可以通过反馈通路的非线性来抵消直通通路的非线性,从而达到实现线性隔离的目的。

    市场上的线性光耦有几中可选择的芯片,如Agilent公司的HCNR200/201,TI子公司TOAS的TIL300,CLARE的LOC111等。这里以HCNR200/201为例介绍

    2. 芯片介绍与原理说明

    HCNR200/201的内部框图如下所示

    其中1、2引作为隔离信号的输入,3、4引脚用于反馈,5、6引脚用于输出。1、2引脚之间的电流记作IF,3、4引脚之间和5、6引脚之间的电流分别记作IPD1和IPD2。输入信号经过电压-电流转化,电压的变化体现在电流IF上,IPD1和IPD2基本与IF成线性关系,线性系数分别记为K1和K2,即

    K1与K2一般很小(HCNR200是0.50%),并且随温度变化较大(HCNR200的变化范围在0.25%到0.75%之间),但芯片的设计使得K1和K2相等。在后面可以看到,在合理的外围电路设计中,真正影响输出/输入比值的是二者的比值K3,线性光耦正利用这种特性才能达到满意的线性度的。

    HCNR200和HCNR201的内部结构完全相同,差别在于一些指标上。相对于HCNR200,HCNR201提供更高的线性度。

    采用HCNR200/201进行隔离的一些指标如下所示:

    * 线性度:HCNR200:0.25%,HCNR201:0.05%;

    * 线性系数K3:HCNR200:15%,HCNR201:5%;

    * 温度系数: -65ppm/oC;

    * 隔离电压:1414V;

    * 信号带宽:直流到大于1MHz。

    从上面可以看出,和普通光耦一样,线性光耦真正隔离的是电流,要想真正隔离电压,需要在输出和输出处增加运算放大器等辅助电路。下面对HCNR200/201的典型电路进行分析,对电路中如何实现反馈以及电流-电压、电压-电流转换进行推导与说明。

    3. 典型电路分析

    Agilent公司的HCNR200/201的手册上给出了多种实用电路,其中较为典型的一种如下图所示:

    图2

    设输入端电压为Vin,输出端电压为Vout,光耦保证的两个电流传递系数分别为K1、K2,显然,,和之间的关系取决于和之间的关系。

    将前级运放的电路提出来看,如下图所示:

    设运放负端的电压为,运放输出端的电压为,在运放不饱和的情况下二者满足下面的关系:

    Vo=Voo-GVi  (1)

    其中是在运放输入差模为0时的输出电压,G为运放的增益,一般比较大。

    忽略运放负端的输入电流,可以认为通过R1的电流为IP1,根据R1的欧姆定律得:

    通过R3两端的电流为IF,根据欧姆定律得:

    其中,为光耦2脚的电压,考虑到LED导通时的电压()基本不变,这里的作为常数对待。

    根据光耦的特性,即

        K1=IP1/IF  (4)

    将和的表达式代入上式,可得:


        上式经变形可得到:

    将的表达式代入(3)式可得:

    考虑到G特别大,则可以做以下近似:

    这样,输出与输入电压的关系如下:

    可见,在上述电路中,输出和输入成正比,并且比例系数只由K3和R1、R2确定。一般选R1=R2,达到只隔离不放大的目的。

    4. 辅助电路与参数确定

    上面的推导都是假定所有电路都是工作在线性范围内的,要想做到这一点需要对运放进行合理选型,并且确定电阻的阻值。

    4.1 运放选型

    运放可以是单电源供电或正负电源供电,上面给出的是单电源供电的例子。为了能使输入范围能够从0到VCC,需要运放能够满摆幅工作,另外,运放的工作速度、压摆率不会影响整个电路的性能。TI公司的LMV321单运放电路能够满足以上要求,可以作为HCNR200/201的外围电路。

    4.2 阻值确定

    电阻的选型需要考虑运放的线性范围和线性光耦的最大工作电流IFmax。K1已知的情况下,IFmax又确定了IPD1的最大值IPD1max,这样,由于Vo的范围最小可以为0,这样,由于

    考虑到IFmax大有利于能量的传输,这样,一般取

    另外,由于工作在深度负反馈状态的运放满足虚短特性,因此,考虑IPD1的限制,

    这样,

    R2的确定可以根据所需要的放大倍数确定,例如如果不需要方法,只需将R2=R1即可。

    另外由于光耦会产生一些高频的噪声,通常在R2处并联电容,构成低通滤波器,具体电容的值由输入频率以及噪声频率确定。

    4.3 参数确定实例

    假设确定Vcc=5V,输入在0-4V之间,输出等于输入,采用LMV321运放芯片以及上面电路,下面给出参数确定的过程。

    * 确定IFmax:HCNR200/201的手册上推荐器件工作的25mA左右;

    * 确定R3:R3=5V/25mA=200;

    * 确定R1:;

    * 确定R2:R2=R1=32K。

    5. 总结

    本文给出了线性光耦的简单介绍以及电路设计、参数选择等使用中的注意事项与参考设计,并对电路的设计方法给出相应的推导与解释,供广大电子工程师参考。

    http://www.21ic.com/news/n8591c67.aspx

  • 平平淡淡才是真

    2007-03-21 23:20:22

    平平淡淡才是真
     

    我们知道,所有划过的火柴都只有瞬间的美丽, 
    所有的心动都会慢慢沉淀下来。 
    夫妻结合,犹如一支筷子找到了另一支筷子, 
    从此桕互依伴,形影不离,共尝酸甜苦辣,同担生活艰辛。 
     

    其实,婚姻生活本来就应该是平淡的,平淡的就是幸福的。

    相爱是一种缘分,人海茫茫中两个人相遇,这本身就是上帝的恩赐。 
    相爱更是—种付出,是无怨无悔心甘情愿地为心爱的人付出一切。 


    相爱的时候彼此互相吸引,当我们享受了爱带来的甜蜜和浪漫后, 
    一切都将归于平淡, 
    回到现实,我们会被生活中的柴米油盐和家务事缠绕着, 
    这时,我们也许会怀疑爱情是否已经结束了


    婚姻是一杯白开水,恬淡,隽永,可是有时候加一点糖,会更好喝


     婚姻的滋味的确如喝白开水,淡而无味。 
    恋爱时朦胧月光下制造的那一堆一堆的甜言蜜语已经灰飞烟灭, 
    取而代之的是女人日以继夜的唠叨和男人默不作声的对抗 
     


    爱情归于平淡后的生活是朴实无华的, 
    但它却像炉火,能给你一生的温暖。 
    没有耀眼的光芒,没有炙烈的火焰, 
    但它却让你心静如水,让你舒适,能陪着你熬过无数个漫漫冬夜。 
    所有的激情最终都会归于一种平淡, 
    睿智的人都愿守着这一炉暖融融的火享受温馨而平淡的生活。 

     

    年年岁岁花徊似,岁岁年年人不同。 
    守住属于自己的—份平淡的生活,你就是—个幸福的人了。

  • 在成功的道路上,你没有耐心去等待成功的到来,那么,你只好用一生的耐心去面对失败。

    2007-03-19 16:58:13

    看到一个朋友的QQ签名不错,记下来,觉得很有道理:

    在成功的道路上,你没有耐心去等待成功的到来,那么,你只好用一生的耐心去面对失败。

  • 这就是底价

    2007-03-19 13:53:13

    他拼命地工作,拼命地节衣缩食,数十年下来,从伦勃朗、毕加索到其他著名画家的作品,他是应有尽有。

        他早年丧妻,仅有一子。儿子长大后成了一名收藏家。父亲对此感到十分自豪。

        时光流逝,这个国家突然卷入了一场战争。儿子参军去了。

        一天,父亲收到一封信,信上说:“我们很抱歉地通知您,令郎在战斗中牺牲了。”

        儿子的死无疑是一个重大打击,父亲一下子苍老了许多。圣诞节到了,但父亲一点心情也没有,甚至连床都懒得起,因为他实在无法想象,没有儿子的圣诞节该怎么过?

        就在这天,门铃响了,打开门,只见一个年轻人拿着个小包站在那里。

        “先生,也许您不认识我。我就是您儿子牺牲时背着的那个伤兵。”说到这里,年轻人的眼圈红了,“我不是个有钱人,没有什么值钱的东西送给您,以感谢您儿子对我的救命之恩。我记得您儿子说过您爱好艺术,虽然我不是个了不起的艺术家,但我还是为他画了幅肖像,希望您收下。”

        父亲接过包裹,一层一层打开来,然后一步一步走上楼,来到画室,取下了壁炉前伦勃朗的画,然后挂上他儿子的肖像。父亲泪流满面地对年轻人说:“孩子,这是我最珍贵的收藏。对我来说,它比我家任何一件作品都值钱!”

        父亲与年轻人吃了顿饭,一起过了圣诞节,然后年轻人就走了。

        一年后,忧郁不乐的父亲终于去世了。他收藏的所有艺术品都要拍卖。

        拍卖会于圣诞节举行。世界各地的博物馆长和私人收藏家纷纷赶来,他们急切地想在这场拍卖会上投标。

        拍卖师站起来说:“感谢各位光临!现在开始拍卖:第一件拍卖品是我身后这幅肖像画。”后排有人大声叫喊:“这不过是老人儿子的画像。我们跳过这个,直接进入名画拍卖吧!”拍卖师解释:“不行,先得拍卖完了这幅画像,其他才能继续。”

        会场静下来了。拍卖师说:“起价100美元。谁愿意投标?”没人答话。

        他又问:“有人愿意出50美元吗?”还是没人答话。

        他继续问:“有人愿意出40美元吗?”仍然没有人吭声。

        拍卖师看起来神情有些沮丧,连声音都有些颤抖了,他问:“是不是没人愿意对这幅画投标?”

        就在这时,一个老人站起来说:“先生,10美元可以吗?你瞧,10美元是我的全部家当了。我是收藏家的邻居,我认识这个孩子,我是看着他长大的。说实话,我确实很喜欢他,我想买这幅画,10美元可以吗?”

        拍卖师说:“可以。10美元,一次;10美元,两次,成交!”

        人群中立即爆发出一阵欢呼,人们议论纷纷:“嘿,伙计,现在终于进入正题了。”

        拍卖师立即说:“再次感谢各位的光临!很高兴各位能来参加这个拍卖会。今天的拍卖会到此结束!”人们似乎被激怒了:“这什么意思?你还要拍卖其他作品呢!”

        拍卖师神情严肃地说:“很抱歉,各位,拍卖会已经结束了。根据那位父亲的遗嘱,谁买了他儿子的画像,谁就拥有他所有的藏品。这就是底价!”
     
  • [转]改变人生的32句励志名言

    2007-03-18 22:06:35

    1、大多数人想要改造这个世界,但却罕有人想改造自己。

        2、积极的人在每一次忧患中都看到一个机会,而消极的人则在每个机会都看到某种忧患。
     
        3、莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法)

        4、伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。

        5、世上没有绝望的处境,只有对处境绝望的人。  

        6、当你感到悲哀痛苦时,最好是去学些什么东西。学习会使你永远立于不败之地。

        7、世界上那些最容易的事情中,拖延时间最不费力。

        8、人之所以能,是相信能。

        9、一个有信念者所开发出的力量,大于99个只有兴趣者。

        10、每一发奋努力的背后,必有加倍的赏赐。

        11、人生伟业的建立,不在能知,乃在能行。

        12、任何的限制,都是从自己的内心开始的。

        13、含泪播种的人一定能含笑收获。

        14、欲望以提升热忱,毅力以磨平高山。

        15、一个能从别人的观念来看事情,能了解别人心灵活动的人永远不必为自己的前途担心。

        16、一个人最大的破产是绝望,最大的资产是希望。

        17、不要等待机会,而要创造机会。

        18、如果寒暄只是打个招呼就了事的话,那与猴子的呼叫声有什么不同呢?事实上,正确的寒暄必须在短短一句话中明显地表露出你对他的关怀。

        19、昨晚多几分钟的准备,今天少几小时的麻烦。

        20、做对的事情比把事情做对重要。

        21、人格的完善是本,财富的确立是末。

        22、没有一种不通过蔑视、忍受和奋斗就可以征服的命运。

        23、行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。

        24、没有天生的信心,只有不断培养的信心。

        25、只有一条路不能选择——那就是放弃的路;只有一条路不能拒绝——那就是成长的路。

        26、人性最可怜的就是:我们总是梦想着天边的一座奇妙的玫瑰园,而不去欣赏今天就开在我们窗口的玫瑰。

        27、征服畏惧、建立自信的最快最确实的方法,就是去做你害怕的事,直到你获得成功的经验。

        28、失败是什么?没有什么,只是更走近成功一步;成功是什么?就是走过了所有通向失败的路,只剩下一条路,那就是成功的路。

        29、让我们将事前的忧虑,换为事前的思考和计划吧!
      
        30、再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。

        31、任何业绩的质变都来自于量变的积累。

        32、成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。 
  • 深圳今天第一次听到蝉叫,呵呵!2007-03-16-14:46

    2007-03-16 14:46:38

    深圳今天第一次听到蝉叫,呵呵!2007-03-16-14:46!
  • DLL学习---转载 [vc]

    2007-03-05 15:19:35

    由于学习DLL时,没有例子的帮助是很难了解DLL的精髓,现在我想做一个例子来介绍:
    一、在DLL里面加一个函数:fun(double a,double b)
    //这里我懒得打字,就剽窃别人(很多人,在此谢谢了)的一部分过来:
    //////////////////////////////////////////////////////////////////
    1、静态加载DLL方法:
         函数的定义和使用方法:

      第一步:

       运行AppWizard,定义项目名为mydll,选择MFC AppWizard(dll),而不是MFC AppWizards(exe)。

      第二步:

       在这个例子中,只有一个AppWizard屏幕出现,选择MFC扩
    展DLL(MFC Extension DLL (using shared MFC DLL),点击FINISH生成工程。

      第三步:

       点击File中的New,选择C/C++ Header File,File Name中输入dll,点击OK,创建dll.h。
    输入extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3); ,保存。

      第四步:

       点击File中的New,选择C++ Source File,File Name中输入dll,点击OK,创建dll.cpp。输入

      #include "stdafx.h"
      #include "dll.h"
      extern "C" __declspec(dllexport) int fun(int x1,int x2,int x3)
       {
        return x1+x2+x3;
       }

      编译生成mydll.dll和mydll.lib。

      第五步:

      选择Project 中Add To Project 中的New , 重新生成一个工程,选择MFC AppWizards(exe),项目名
    为mydlltest , 选择Single Document ,点击FINISH,生成一个新的工程。选择菜单中
    的Project Set as Active Project mydlltest ,将mydlltest设为当前活动工程。

      第六步:

      拷贝…\mydll\debug\mydll.dll 到 ..\mydlltest\debug\下,拷贝…\mydll\debug\mydll.lib到…\mydlltest\目录下。

      第七步:

      在mydlltestView.cpp中的#endif下添加

      extern "C" __declspec(dllimport) int fun(int x1,int x2,int x3);

      在void CMydlltestView::OnDraw(CDC* pDC)中添加代码如下:

      void CMydlltestView::OnDraw(CDC* pDC)
       {
        CMydlltestDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        // TODO: add draw code for native data here
        int x=fun(1,2,3);
        CString str;
        str.Format("%d",x);
        pDC->TextOut(10,10,str);
       }

      第八步:

      在WorkSpace中的mydlltest files上点击右键,选择Add files to Project ,将mydll.lib添加到工程。
    好了,我们的工作做完了,运行一下看看吧!
    ///////////////////////////////////////////////////////////
    2、动态加载DLL:

    从以上的第六步开始:

    在void CMydlltestView::OnDraw(CDC* pDC)中添加代码如下:
    void CMydlltestView::OnDraw(CDC* pDC)
       {
        CMydlltestDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        // TODO: add draw code for native data here
    int x;
    typedef int(*padd)(int x1,int x2,int x3);
    HINSTANCE hdll;
    padd add;
    hdll = LoadLibrary("mydll.dll");
    add =(padd)GetProcAddress(hdll,"fun");
    x = add(2,6,5);
    CString str;
    str.Format("%d",x);
    pDC->TextOut(10,10,str);

    }

    在WorkSpace中的mydlltest files上点击右键,选择Add files to Project ,将mydll.lib添加到工程。
    好了,我们的工作做完了,运行一下看看吧!



    本文引用通告地址: http://blog.csdn.net/sgnah/services/trackbacks/330837.aspx

    Win32下动态链接库(DLL)编程原理的深探

    主题:DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来
    实现的,因此掌握它、应用它是非常重要的。
    动态链接库不仅可以作为一个运行模块,包括函数代码,而且可以包含程序以外的任何数据
    或资源(位图、图标等等)。动态链接库就是给应用程序提供函数或者资源。
    DLL是一种磁盘文件(通常带有DLL扩展名),它由全局数据、服务函数和资源组成,
    在运行时被系统加载到进程的虚拟空间中,成为调用进程的一部分。在运行时,只有当EXE
    程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。每个进程都复
    制了自己的读/写全局变量。如果想要与其它进程共享内存,必须使用内存映射文件或者声
    明一个共享数据段。DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。
    DLL文件中包含一个导出函数表。这些导出函数由它们的符号名和称为标识号的整数与外界联系起来。


    导入导出函数:
    在DLL代码中,必须像下面这样明确声明导出函数:
    __declspec(dllexport) int MyFunction(int n);
    但也可以在模块定义(DEF)文件中列出导出函数,不过这样做常常引起更多的麻烦。在应用程序方面,要
    求像下面这样明确声明相应的输入函数:
    __declspec(dllimport) int MyFuncition(int n); (这是隐式链接dll)
    仅有导入和导出声明并不能使应用程序内部的函数调用链接到相应的DLL文件上。应用程序的项目必须为
    链接程序指定所需的输入库(LIB文件)。而且应用程序事实上必须至少包含一个对DLL函数的调用。
    隐式链接和显式链接dll

    显式:typedef double(SQRTPROC)(double);

    HINSTANCE hInstance; //设置全局变量用于存储DLL句柄
    SQRTPROC* pFunction; 第二个变量ShowMe是指向DLL,库中函数的指针
    VERIFY(hInstance=::LoadLibrary("c:\\winnt\\system32\\mydll.dll"));
    VERIFY(pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"SquareRoot"));
    double d=(*pFunction)(81.0);//调用该DLL函数
    隐式: 程序员通过静态链接方式编译生成应用程序时,应用程序中的调用函数与LIB文件中导出符号相
    匹配,这些符号或标识号进入到生成的EXE文件中.
    隐式链接和显式链接dll的区别:
    在隐式链接方式中,所有被应用程序调用的DLL文件都会在应用程序EXE文件加载时被加载在到内存中;但
    如果采用显式链接方式,程序员可以决定DLL文件何时加载或不加载。

    DLLMAIN函数:
    当Windows加载DLL模块时调用这一函数。系统首先调用全局对象的构造函数,然后调用全局函数DLLMain。
    DLLMain函数不仅在将DLL链接加载到进程时被调用,在DLL模块与进程分离时(以及其它时候)也被调用。
    进程中的每个DLL模块被全局唯一的32字节的HINSTANCE句柄标识。进程自己还有一个HINSTANCE句柄。所
    有这些模块句柄都只有在特定的进程内部有效,它们代表了DLL或EXE模块在进程虚拟空间中的起始地址。
    寻找DLL的路径:
    Windows将遵循下面的搜索顺序来定位DLL:
    1. 包含EXE文件的目录,
    2. 进程的当前工作目录,
    3. Windows系统目录,
    4. Windows目录,
    5. 列在Path环境变量中的一系列目录。


    要点:

    一:DLL文件的省缺名称是与工程名一致的(也是在.DEF文件中LIBRARY 之后的名字),不要试图在制作完毕之后通
    过简单的修改.DLL文件的文件名来改变它,这会导致使用该DLL的应用程序错误.

    DLL中定义有两种函数:
    导出函数(exportfunction): 可以被其他模块调用
    内部函数(internalfunction): 只能在DLL内部使用

    基于MFC的DLL不适用与制作读取二进制文件的DLL (不易移植,无法正确读取与DOS应用程序共享的二进制文件)
    基于API的DLL可以正确读取在DOS环境中创建的二进制文件.
    纯标准函数dll可以在很多平台使用!(移植性最强)
    为了让其它语言使用:除非你绝对需要使用C++编码,否则我还是推荐使用C来写DLL。
    VC下的DLL类型:
    Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一
    般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。LL,

    Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的。明显的特点是
    在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上
    的。但静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。

    Extension DLL:用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类
    型的动态连接库,可以用来输出一个从MFC所继承下来的类。Extension DLL使用MFC的
    动态连接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。
    用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类型的动态连接库,可以用
    来输出一个从MFC所继承下来的类。它输出的函数仅可以被使用MFC且动态链接到MFC的应用
    程序使用。可以从MFC继承你所想要的、更适于你自己用的类,并把它提供给你的应用程序。
    你也可随意的给你的应用程序提供MFC或MFC继承类的对象指针。Extension DLL使用MFC的动
    态连接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。Extension DLLs 和
    Regular DLLs不一样,它没有一个从CWinApp继承而来的类的对象,所以,你必须为自己DllMain
    函数添加初始化代码和结束代码。
    和规则DLL相比,有以下不同:

    1、它没有一个从CWinApp派生的对象;
    2、它必须有一个DllMain函数;
    3、DllMain调用AfxInitExtensionModule函数,必须检查该函数的返回值,如果返回0,DllMmain也返回0;
    4、如果它希望输出CRuntimeClass类型的对象或者资源(Resources),则需要提供一个初始化函数来创建一个CDynLinkLibrary对象。并且,有必要把初始化函数输出;
    5、使用扩展DLL的MFC应用程序必须有一个从CWinApp派生的类,而且,一般在InitInstance里调用扩展DLL的初始化函数。

    所有从DLL输出的函数应该以如下语句开始:
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
    此语句用来正确地切换MFC模块状态。

    在制作DLL时,VC++对函数的省缺声明是"__cedcl",也就是说,如果你在声明你的函数时不作特殊声明的话,你
    制作的DLL将只能被C/C++调用,如果你想用其他开发语言(比如VB5.0)调用它就会报错,即使调用方法完全正确.

    二:声明类型详解:

    三:制DLL所要的文件:
    模 块 定 义 文 件(.DEF) 是 由 一 个 或 者 多 个 用 于 描 述DLL 属 性 的 模 块 语 句 组 成
    的 文 本 文 件, 每 个.DEF 文 件 至 少 必 须 包 含 以 下 模 块 定 义 语 句:
    第 一 个 语 句 必 须 是LIBRARY 语 句, 指 出DLL 的 名 字。
    EXPORTS 语 句 列 出 被 导 出 函 数 的 名 字。
    可 以 使 用DEscrīptION 语 句 描 述DLL 的 用 途( 此 句 可 选)。
    ";" 对 一 行 进 行 注 释( 可 选)
    实 现 文 件(.cpp 文 件 为 例)
    实 现 入 口 表 函 数 的.cpp 文 件 中, 包 含DLL 入 口 点 处 理 的API 函 数 和 导 出 函 数 的 代 码。

    四:
    介绍Non-MFC DLLs的编写方法:如果用VC的向导那就很方便了!
    写法:
    BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,

    LPVOID lpReserved)

    {

    switch( ul_reason_for_call ) {

    case DLL_PROCESS_ATTACH:

    .......

    case DLL_THREAD_ATTACH:

    .......

    case DLL_THREAD_DETACH:

    .......

    case DLL_PROCESS_DETACH:

    .......

    }

    return TRUE;

    }
    每一个DLL必须有一个入口点,这就象我们用C编写的应用程序一样,
    必须有一个WINMAIN函数一样。
    在这个示例中,DllMain是一个缺省的入口函数,你不需要编写自己
    的DLL入口函数,并用linker的命令行的参数开关/ENTRY声明。用这个缺
    省的入口函数就能使动态连接库被调用时得到正确的初始化,当然了,你
    不要在初始化的时候填写使系统崩溃的代码了。
    参数中,hMoudle是动态库被调用时所传递来的一个指向自己的句柄
    (实际上,它是指向_DGROUP段的一个选择符)
    ul_reason_for_call是一个说明动态库被调原因的标志。当进程或线程
    装入或卸载动态连接库的时候,操作系统调用入口函数,并说明动态连接库
    被调用的原因。它所有的可能值为:
    DLL_PROCESS_ATTACH: 进程被调用
    DLL_THREAD_ATTACH: 线程被调用
    DLL_PROCESS_DETACH: 进程被停止
    DLL_THREAD_DETACH: 线程被停止
    lpReserved是一个被系统所保留的参数。
    入口函数已经写了,余下的也不难,你可以在文件中加入你所想要输
    出的函数或变量或c++类等

    五:纯资源DLL的编写

    纯资源的DLL就是只包含资源的DLL,例如:图标,位图,字符串,声音,
    视频,对话框等。使用纯资源DLL可以节约可执行文件的大小,可以被所有的应
    用程序所共享,从而提高系统性能。纯资源DLL的编写比普通的DLL要简单的多,
    首先创建一个WIN32 DLL工程,不是MFC的DLL,然后创建一个资源文件 *.RC,添
    加到资源DLL的工程中去。然后添加一个初始化DLL的原文件。
    #include <windows.h>
    extern "C"
    BOOL WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID )
    {
        return 1;
    }
    这是纯资源DLL所必须需的代码,保存这个文件为*.CPP。编译这个资源DLL。
    在应用程序显示的调用这个DLL,使用LoadLibrary函数装入资源DLL,
    FindResource和LoadResource来装入各种资源,或者使用下列的特定的资源装入函数:

    FormatMessage
    LoadAccelerators
    LoadBitmap
    LoadCursor
    LoadIcon
    LoadMenu
    LoadString
    当资源使用结束,你的应用程序须调用FreeLibrary函数来释放资源。
    下面就讲一下如何调用编写好的资源DLL
    首先在应用程序中声明一个DLL的句柄,HINSTANCE m_hLibrary;在OnCreate( )函数
    中调用LoadLirbrary( ),在OnDestory( )中调用FreeLibrary()。下载一个工程文件看一看,就什么都搞定了。
    关于约定:

    六、关于约定:(此要点六zz rivershan(原作))

    动态库输出函数的约定有两种:调用约定和名字修饰约定。

    1)调用约定(Calling convention):决定函数参数传送时入栈和出栈的顺序,由调用者还是被调用者把参数弹出栈,以及编译器用来识别函数名字的修饰约定。

    函数调用约定有多种,这里简单说一下:

       1、__stdcall调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。

        _stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。

        2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。

        _cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。是MFC缺省调用约定。

        3、__fastcall调用约定是“人”如其名,它的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修饰约定方面,它和前两者均不同。

        _fastcall方式的函数采用寄存器传递参数,VC将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。   

        4、thiscall仅仅应用于“C++”成员函数。this指针存放于CX寄存器,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。

        5、naked call采用1-4的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。naked call不产生这样的代码。naked call不是类型修饰符,故必须和_declspec共同使用。

        关键字 __stdcall、__cdecl和__fastcall可以直接加在要输出的函数前,也可以在编译环境的Setting...\C/C++ \Code Generation项选择。当加在输出函数前的关键字与编译环境中的选择不同时,直接加在输出函数前的关键字有效。它们对应的命令行参数分别为/Gz、/Gd和/Gr。缺省状态为/Gd,即__cdecl。

        要完全模仿PASCAL调用约定首先必须使用__stdcall调用约定,至于函数名修饰约定,可以通过其它方法模仿。还有一个值得一提的是WINAPI宏,Windows.h支持该宏,它可以将出函数翻译成适当的调用约定,在WIN32中,它被定义为__stdcall。使用WINAPI宏可以创建自己的APIs。

    2)名字修饰约定

    1、修饰名(Decoration name)

    “C”或者“C++”函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函数定义或者原型时生成的字符串。有些情况下使用函数的修饰名是必要的,如在模块定义文件里头指定输出“C++”重载函数、构造函数、析构函数,又如在汇编代码里调用“C””或“C++”函数等。

    修饰名由函数名、类名、调用约定、返回类型、参数等共同决定。

    2、名字修饰约定随调用约定和编译种类(C或C++)的不同而变化。函数名修饰约定随编译种类和调用约定的不同而不同,下面分别说明。

        a、C编译时函数名修饰约定规则:

     __stdcall调用约定在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参数的字节数,格式为_functionname@number

     __cdecl调用约定仅在输出函数名前加上一个下划线前缀,格式为_functionname。
      
     __fastcall调用约定在输出函数名前加上一个“@”符号,后面也是一个“@”符号和其参数的字节数,格式为@functionname@number。

        它们均不改变输出函数名中的字符大小写,这和PASCAL调用约定不同,PASCAL约定输出的函数名无任何修饰且全部大写。

        b、C++编译时函数名修饰约定规则:

    __stdcall调用约定:
              1、以“?”标识函数名的开始,后跟函数名;
              2、函数名后面以“@@YG”标识参数表的开始,后跟参数表;
              3、参数表以代号表示:
                 X--void ,
                 D--char,
                 E--unsigned char,
                 F--short,
                 H--int,
                 I--unsigned int,
                 J--long,
                 K--unsigned long,
                 M--float,
                 N--double,
                 _N--bool,
                 ....
                 PA--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一个“0”代表一次重复;
              4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;
              5、参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束。

        其格式为“?functionname@@YG*****@Z”或“?functionname@@YG*XZ”,例如
              int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z
              void Test2()                       -----“?Test2@@YGXXZ

    __cdecl调用约定:
     规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YA”。

    __fastcall调用约定:
     规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的“@@YG”变为“@@YI”。

        VC++对函数的省缺声明是"__cedcl",将只能被C/C++调用.
       
        extern "C" {void  __declspec(dllexport) __cdecl Test(int var);}
    其输出函数名为:Test
     
     MFC提供了一些宏,就有这样的作用。

    AFX_CLASS_IMPORT:__declspec(dllexport)
     
    AFX_API_IMPORT:__declspec(dllexport)
     
    AFX_DATA_IMPORT:__declspec(dllexport)
     
    AFX_CLASS_EXPORT:__declspec(dllexport)
     
    AFX_API_EXPORT:__declspec(dllexport)
     
    AFX_DATA_EXPORT:__declspec(dllexport)
     
    AFX_EXT_CLASS: #ifdef _AFXEXT
        AFX_CLASS_EXPORT
        #else
        AFX_CLASS_IMPORT
     
    AFX_EXT_API:#ifdef _AFXEXT
        AFX_API_EXPORT
        #else
        AFX_API_IMPORT
     
    AFX_EXT_DATA:#ifdef _AFXEXT
         AFX_DATA_EXPORT
         #else
         AFX_DATA_IMPORT

     像AFX_EXT_CLASS这样的宏,如果用于DLL应用程序的实现中,则表示输出(因为_AFX_EXT被定义,通常是在编译器的标识参数中指定该选项/D_AFX_EXT);如果用于使用DLL的应用程序中,则表示输入(_AFX_EXT没有定义)。

     要输出整个的类,对类使用_declspec(_dllexpot);要输出类的成员函数,则对该函数使用_declspec(_dllexport)。如:

    class AFX_EXT_CLASS CTextDoc : public CDocument
    {
     …
    }

    extern "C" AFX_EXT_API void WINAPI InitMYDLL();

     这几种方法中,最好采用第三种,方便好用;其次是第一种,如果按顺序号输出,调用效率会高些;最次是第二种。




    本文引用通告地址: http://blog.csdn.net/sgnah/services/trackbacks/333928.aspx

  • AD器件一览表 [转贴]

    2007-02-24 16:46:55

    ADI 四象限乘法DAC
    型号
    后缀
    引脚
    封装
    位数
    电源电压(V)
    电源电流(mA)
    输出信号(电压/电流)
    线性(LSBs)
    外部基准
    接口方式
    缓冲器
    说 明
    零售价(元)
    8DAC
    AD5300B
    RM
    8
    μSOIC
    8
    +2.7~5.5
    0.15
    0~+VDD(V)
    1
    +VDD
    SPI
    1
    真正的单电源,Rail to Rail输出
    26.00
    AD7523
    JN
    16
    DIP
    8
    +5
    1
    I
    1/2
    ±VREF
    P8
    -
    CMOS,8位乘法DAC
    28.00
    AD7524
    JN
    16
    DIP
    8
    +5
    1
    I
    1/2
    ±VREF
    P8
    1
    CMOS,带缓冲,8位DAC
    36.00
    10DAC
    AD7533
    KN
    16
    DIP
    10
    +15
    2
    I
    1/2~2
    ±VREF
    P10
    0
    CMOS,单片,10位DAC
    42.00
    AD5310B
    RM
    8
    μSOIC
    10
    +2.7~5.5
    0.15
    0~+VDD(V)
    1
    +VDD
    SPI
    1
    真正的单电源,Rail to Rail输出
    36.00
    AD7397
    AN
    24
    DIP
    10
    +2.7~5.5
    0.1
    0~+VDD(V)
    1
    +VREF
    P12
    2
    3V单电源,并行输入,10位DAC
    68.00
    12DAC
    AD7541A
    KN
    18
    DIP
    12
    +5~+16
    2
    I
    1/2
    ±VREF
    P12
    -
    CMOS,μP兼容,12位DAC
    88.00
    AD7545
    KN
    20
    DIP
    12
    +5
    2
    I
    1/2
    ±VREF
    P12
    1
    CMOS,12位DAC
    88.00
    AD7845
    JN
    24
    DIP
    12
    ±5
    ±5
    V
    1/2~1
    ±VREF
    P12
    1
    12位DAC(兼容MAX502)
    91.80
    AD7564
    BN
    44
    DIP
    12
    +5
    1.75
    I
    1/2
    4路±VREF
    S
    2
    低功耗,四路12位DAC
    198.00
    AD7393
    AN
    20
    DIP
    12
    2.7
    0.1
    +1.2(V)
    1.6
    +1.2(内部)
    P10
    2
    3V单项电源,并行输入
    58.00
    AD7394
    AN
    14
    DIP
    12
    +2.7
    0.2
    +VREF(V)
    1
    +VREF
    SPI
    2
    3V单电源,两通道,12位DAC
    98.00
    AD5320B
    RM
    8
    μSOIC
    12
    +2.7~5.5
    0.15
    0~+VDD(V)
    1
    +VDD
    SPI
    1
    真正的单电源,Rail to Rail,
    48.00
    14DAC
    AD7538
    JN
    24
    DIP
    14
    +12/15
    2
    I
    1
    ±VREF
    P14
    2
    LC2MOS,μP兼容,14位DAC
    138.00
    16位(Σ-Δ型输出)DAC
    AD420
    AN
    24
    DIP
    16
    +24
    4.2
    I(0~20/0~24/4~20 mA), V(0~5V)
    -
    内或外
    SPI/ Microwire
    -
    最大工作电压可达32V工业级
    148.00
    AD421
    BN
    16
    DIP
    16
    +3/+5
    0.75
    I(4~20mA)
     
    内或外
    SPI
    -
    电流环输出高速单路16位DAC
    148.00
    双极性输出DAC
    型号
    后缀
    引脚
    封装
    位数
    电源电压(V)
    电源电流(mA)
    VEE
    (V)
    IEE
    (mA)
    电压输出(V)
    电流输
    (mA)
    总线性误差LSBs
    内部基准(V)
    接口方式
    缓冲器数
    说明
    零售价(元)
    AD7225
    KN
    24
    DIP
    8
    +15
    10
    -5
    9
    ±5
    5
    ±2
    4路VREF(外)
    P8
    2
    四通道8位DAC(兼容MAX505)
    118.00
    AD7226
    KN
    20
    DIP
    8
    +12~+15
    13
    -5
    11
    ±5
    5
    ±2
    1路VREF(外)
    P8
    1
    四路8位DAC(兼容MAX506)
    118.00
    AD7243
    AN
    16
    DIP
    12
    +15
    9
    -15
    2
    +5
    5
    ±1
    +5
    S
    1
    片内基准,串行12位DAC
    108.00
    AD7840
    JN
    24
    DIP
    14
    +5
    14
    -5
    6
    ±3
    5
    ±2
    +3
    P14
    2
    片内基准,并行14位DAC
    158.00
    Σ-Δ音频DAC
    型号
    后缀
    引脚
    封装
    位数
    D/A
    通道数
    采样频率(kHz)
    电源
    串行接口
    THD+N 1kHz(dB)
    SNR
    (dB)
    插补滤波器
    采样率
    说明
    零售价(元)
    AD1855
    JRS
    28
    SSOP
    16/24
    2
    96
    +5V(75mA)
    SPI(I2C/DSP)
    -97
    96
    64
    96kHz,立体声,音频DAC
    78.00
    AD1853
    JRS
    28
    SSOP
    24
    2
    96/192
    +5V
    SPI
    -105
    115
    -
    可接收16/18/20/24位的数据
    128.00
    TI D/A转换器
    器件
    后缀
    管脚
    分辩率(Bits)
    输出
    类型
    通道数
    基准
    建立时间(μs)
    电源电压(V)
    最小转换率(MSPS)
    最大功耗(mW)
    说 明
    零售价(元)
    串行输入DA
    TLC5620
    CN/CD
    14
    8
    V
    4
    外部
    10
    5
    0.1
    10
    带缓冲的基准输入,2种输出幅度可选
    17.50
    TLV5620
    CN
    14
    8
    V
    4
    外部
    10
    2.7~5.5
    0.1
    10
    带缓冲的基准输入,2种输出幅度可选
    28.00
    TLV5620
    CD
    14
    8
    V
    4
    外部
    10
    2.7~5.5
    0.1
    10
    带缓冲的基准输入,2种输出幅度可选
    29.98
    TLC5628
    CN/CDW
    16
    8
    V
    8
    外部
    10
    5
    0.1
    20
    2路带缓冲的基准输入,2种输出幅度可选
     
    ADI AD转换器
     
    型号
    后缀
    引脚
    封装
    位数/通道/TH
    电源(V)
    输入信号范围(V)
    采样频率(kHz)
    线性度(±Bits)
    内部电压基准
    接口方式
    说 明
    零售价(元)
     
    8ADC
     
    AD7574
    JN
    24
    DIP
    8/1/-
    5
    0~VREF
    60
    7/8
    No
    P8
    CMOS,μP兼容,8位ADC
    88.00
     
    AD7820
    KN
    20
    DIP
    8/1/-
    5
    0~VREF
    700
    1
    No
    P8
    带采样保持ADC(替换MAX154)
    98.00
     
    AD7821
    KN
    20
    DIP
    8/1/-
    5
    0~VREF
    1000
    1
    No
    P8
    带采样保持ADC(替换MX7821KN)
    108.00
     
    12ADC
     
    AD7874
    AN
    28
    DIP
    12/1/-
    ±5
    ±10
    100
    1/2~1
    +3V
    P12
    LC2MOS,4通道,12位ADC
    458.00
     
    AD7878
    JN
    28
    DIP
    12/1/-
    ±5
    ±3
    100
    1/2
    +3V
    P12
    LC2MOS,DSP接口,12位ADC
    458.00
     
    AD7888
    AR
    16
    SOIC
    12/1/-
    5
    0~VREF
    125
    1~2
    +2.5V
    SPI
    2.7~5.25V,8通道低功耗12位ADC
    68.00
     
    AD7895
    AN3
    8
    DIP
    12/1/-
    5
    ±2.5
    200
    1
    +2.5V(外)
    S
    串行12位,3.8μs,ADC,8脚封装
    89.00
     
    AD7862
    AN10
    28
    DIP
    12/1/-
    5
    ±10
    250
    1~2
    +2.5V
    P12
    4通道双12位ADC
    188.00
     
    AD7572A
    JN03
    24
    DIP
    12/1/-
    5,-12
    0~+5
    300
    1/2~1
    -5.0V
    P8/12
    高速ADC兼容MAX162BCNG
    168.00
     
    AD9221
    AR
    28
    SOIC
    12/1/-
    5
    0~VDD
    1.5M
    1
    +1.0V
    P12
    1.5Msps 12位ADC
    138.00
     
    AD9225
    ARS
    28
    SSOP
    12/1/-
    5
    0~VDD
    25M
    1
    +1.0V
    P12
    25Msps 12位ADC
    258.00
     
    14ADC
     
    AD9241
    AS
    44
    MQFP
    14/1/-
    5
    0~VDD
    1.25M
    1
    +1V
    P14
    1.25Msps,单片14位ADC
    244.00
     
    AD9243
    AS
    44
    MQFP
    14/1/-
    5
    0~VDD
    3M
    1
    +3V
    P14
    3Msps,单片14位ADC
    328.00
     
    16ADC
     
    AD7723
    BS
    44
    PQFP
    16/1/-
    5
    ±4/5~+5/±10
    600
    NS
    +2.5V
    P16/S
    CMOS Σ-Δ,16位ADC
    408.00
     
    AD974
    AN
    28
    DIP
    16/1/-
    5
    0~+4/0~+5/±10
    200
    2~3
    +2.5V
    S
    4通道, 16位数据采集系统
    418.00
     
    AD976A
    AN
    28
    DIP
    16/1/-
    5
    ±10
    200
    1+ 1/2~3
    +2.5V
    P8/P16
    BiCMOS 16位ADC
    368.00
     
    AD976
    CN
    28
    DIP
    16/1/-
    5
    ±10
    100
    1 +1/2~3
    +2.5V
    P8/P16
    BiCMOS 16位ADC
    228.00
     
    特殊AD(子系统)
     
    AD7777
    AN
    28
    DIP
    10/4/2
    5
    VBIASVSWING
    380
    1
    +2.0
    P10
    4通道,高速ADC,两个通道同步采样
    158.00
     
    AD7861
    AP
    44
    PLCC
    11/7/4
    5
    +2.5
    200
    2
    +2.5
    P12
    11位,7通道ADC,4通道同步采样
    168.00
     
    AD7853L
    AN
    24
    DIP
    12/1/-
    3/5
    ±VREF/2,0~VREF
    100
    1/2~1
    +2.5
    S
    3V~5V,低功耗,12位ADC
    138.00
     
    AD7853
    AN
    24
    DIP
    12/1/-
    3/5
    ±VREF/2,0~VREF
    200
    1/2~1
    +2.5
    S
    3V~5V,单电源,12位ADC
    118.00
     
    AD7824
    KN
    28
    DIP
    8/4/-
    5
    +2.5
    1000
    1
    +5V(外)
    P8
    高速,4通道,8位ADC
    98.00
     
    AD7891
    AP1
    44
    PLCC
    12/8/-
    5
    ±5, ±10
    500
    1
    +2.5(外)
    S/P12
    8CH,并行/串行,12位数据采集系统
    248.00
     
    Σ—△ADC (可与变换/传感器直接接口,软件可编程滤波器,—3dB截止&更新频率)
     
    型号
    后缀
    引脚
    封装
    位数
    电源
    V)
    输入时钟(MHz)
    采样频率
    精度 (最大/最小位数)
    线性
    (LSBs)
    说 明
    零售价(元)
     
    AD7705
    BN
    16
    DIP
    16
    3/5
    1/2.46
    fCLK/512
    16/10
    0.003
    串行,两通道,16位ADC,可编程增益1~128
    68.00
     
    AD7714
    AN5
    24
    DIP
    24
    5
    1/2.46
    fCLK/512
    21.5/11
    0.0015
    串行,5通道,24位ADC,可编程增益1~128
    158.00
     
    AD7730
    BN
    24
    DIP
    24
    5
    4.92
    fCLK/16
    18/14.5
    0.0015
    串行,两通道,桥式变换,24位ADC,可编程前端放大器增益
    158.00
     
    AD7731
    BN
    24
    DIP
    24
    5
    4.92
    fCLK/16
    19/11
    0.0015
    低噪声,24位Σ-ΔADC,可编程前端放大器增益
    158.00
     
    电度表专用芯片
     
    型号
    后缀
    引脚
    封装
    输入
    电源(V)
    读误(%)
    PGA增益
    段出错率(%)
    基准源
    fCLK(MHz)
    说 明
    零售价
     
    AD7751
    BN
    24
    DIP
    3
    5
    0.2
    1,2,8,16
    0.2
    内部2.5V
    3.58
    带防盗功能电量测量IC
     
    AD7755
    BN
    24
    DIP
    2
    5
    0.2
    1,2,8,16
    0.05
    内部2.5V
    3.58
    IEC521/1036标准,电量计量IC
     
    AD7756
    BN
    20
    DIP
    2
    5
    0.2
    1,2,8,16
    0.05
    内部2.5V
    1~4
    SPI串行接口电量计量IC
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 目前常用AD/DA芯片简介 [转贴]

    2007-02-24 16:44:28

    目前生产AD/DA的主要厂家有ADI、TI、BB、PHILIP、MOTOROLA等,武汉力源公司拥有多年从事电子产品的经验和雄厚的技术力量支持,已取得排名世界前列的模拟IC生产厂家ADI、TI公司代理权,经营全系列适用各种领域/场合的AD/DA器件。
    1. AD公司AD/DA器件
        AD公司生产的各种模数转换器(ADC)和数模转换器(DAC)(统称数据转换器)一直保持市场领导地位,包括高速、高精度数据转换器和目前流行的微转换器系统(MicroConvertersTM )。
        1)带信号调理、1mW功耗、双通道16位AD转换器:AD7705
        AD7705是AD公司出品的适用于低频测量仪器的AD转换器。它能将从传感器接收到的很弱的输入信号直接转换成串行数字信号输出,而无需外部仪表放大器。采用Σ-Δ的ADC,实现16位无误码的良好性能,片内可编程放大器可设置输入信号增益。通过片内控制寄存器调整内部数字滤波器的关闭时间和更新速率,可设置数字滤波器的第一个凹口。在+3V电源和1MHz主时钟时, AD7705功耗仅是1mW。AD7705是基于微控制器(MCU)、数字信号处理器(DSP)系统的理想电路,能够进一步节省成本、缩小体积、减小系统的复杂性。应用于微处理器(MCU)、数字信号处理(DSP)系统,手持式仪器,分布式数据采集系统。
        2)3V/5V CMOS信号调节AD转换器:AD7714
        AD7714是一个完整的用于低频测量应用场合的模拟前端,用于直接从传感器接收小信号并输出串行数字量。它使用Σ-Δ转换技术实现高达24位精度的代码而不会丢失。输入信号加至位于模拟调制器前端的专用可编程增益放大器。调制器的输出经片内数字滤波器进行处理。数字滤波器的第一次陷波通过片内控制寄存器来编程,此寄存器可以调节滤波的截止时间和建立时间。AD7714有3个差分模拟输入(也可以是5个伪差分模拟输入)和一个差分基准输入。单电源工作(+3V或+5V)。因此,AD7714能够为含有多达5个通道的系统进行所有的信号调节和转换。AD7714很适合于灵敏的基于微控制器或DSP的系统,它的串行接口可进行3线操作,通过串行端口可用软件设置增益、信号极性和通道选择。AD7714具有自校准、系统和背景校准选择,也允许用户读写片内校准寄存器。CMOS结构保证了很低的功耗,省电模式使待机功耗减至15μW(典型值)。
        3)微功耗8通道12位AD转换器:AD7888
        AD7888是高速、低功耗的12位AD转换器,单电源工作,电压范围为2.7V~5.25V,转换速率高达125ksps,输入跟踪-保持信号宽度最小为500ns,单端采样方式。AD7888包含有8个单端模拟输入通道,每一通道的模拟输入范围均为0~Vref。该器件转换满功率信号可至3MHz。AD7888具有片内2.5V电压基准,可用于模数转换器的基准源,管脚REF in/REF out允许用户使用这一基准,也可以反过来驱动这一管脚,向AD7888提供外部基准,外部基准的电压范围为1.2V~VDD。CMOS结构确保正常工作时的功率消耗为2mW(典型值),省电模式下为3μW。
        4)微功耗、满幅度电压输出、12位DA转换器:AD5320
        AD5320是单片12位电压输出D/A转换器,单电源工作,电压范围为+2.7V~5.5V。片内高精度输出放大器提供满电源幅度输出,AD5320利用一个3线串行接口,时钟频率可高达30MHz,能与标准的SPI、QSPI、MICROWIRE和DSP接口标准兼容。AD5320的基准来自电源输入端,因此提供了最宽的动态输出范围。该器件含有一个上电复位电路,保证D/A转换器的输出稳定在0V,直到接收到一个有效的写输入信号。该器件具有省电功能以降低器件的电流损耗,5V时典型值为200nA。在省电模式下,提供软件可选输出负载。通过串行接口的控制,可以进入省电模式。正常工作时的低功耗性能,使该器件很适合手持式电池供电的设备。5V时功耗为0.7mW,省电模式下降为1μW。
        5)24位智能数据转换系统MicroConvertersTM:ADuC824
        ADuC 824是MicroConvertersTM系列的最新成员,它是AD公司率先推出的带闪烁电可擦可编程存储器〔Flash/EEPROM)的 Σ-Δ转换器。它的独特之处在于将高性能数据转换器,带程序和数据闪烁存储器及8位微控制器集中在一起。当您为满足工业、仪器仪表和智能传感器接口应用要求选择高精度数据转换时,ADuC824是一种完整的高精度数据采集片上系统。
    2. TI公司AD/DA器件
        美国德州仪器公司是一家国际性的高科技产品公司,是全球最大半导体产品供应商之一,一九九八年半导体产品销量名列全球第五,其中DSP产品销量全球排名第一,模拟产品位于全球第一。
        1)TLC548/549
        TLC548和TLC549是以8位开关电容逐次逼近A/D转换器为基础而构造的CMOS A/D转换器。它们设计成能通过3态数据输出与微处理器或外围设备串行接口。TLC548和TLC549仅用输入/输出时钟和芯片选择输入作数据控制。TLC548的最高I/OCLOCK输入频率为2.048MHz,而TLC549的I/OCLOCK输入频率最高可达1.1MHz。
        TLC548和TLC549的使用与较复杂的TLC540和TLC541非常相似;不过,TLC548和TLC549提供了片内系统时钟,它通常工作在4MHz且不需要外部元件。片内系统时钟使内部器件的操作独立于串行输入/输出端的时序并允许TLC548和TLC549象许多软件和硬件所要求的那样工作。I/OCLOCK和内部系统时钟一起可以实现高速数据传送,对于TLC548为每秒45,500次转换,对于TLC549为每秒40,000次的转换速度。
        TLC548和TLC549的其他特点包括通用控制逻辑,可自动工作或在微处理器控制下工作的片内采样-保持电路,具有差分高阻抗基准电压输入端,易于实现比率转换(ratiometricconversion)、定标(scaling)以及与逻辑和电源噪声隔离的电路。整个开关电容逐次逼近转换器电路的设计允许在小于17μs的时间内以最大总误差为±0.5最低有效位(LSB)的精度实现转换。
        2)TLV5616
        TLV5616是一个12位电压输出数模转换器(DAC),带有灵活的4线串行接口,可以无缝连接TMS320、SPI、QSPI和Microwire串行口。数字电源和模拟电源分别供电,电压范围2.7~5.5V。输出缓冲是2倍增益rail-to-rail输出放大器,输出放大器是AB类以提高稳定性和减少建立时间。rail-to-rail输出和关电方式非常适宜单电源、电池供电应用。通过控制字可以优化建立时间和功耗比。
        3)TLV5580
        TLV5580是一个8位80MSPS高速A/D转换器。以最高80MHz的采样速率将模拟信号转换成8位二进制数据。数字输入和输出与3.3VTTL/CMOS兼容。由于采用3.3V电源和CMOS工艺改进的单管线结构,功耗低。该芯片的电压基准使用非常灵活,有片内和片外部基准,满量程范围是1Vpp到1.6Vpp,取决于模拟电源电压。使用外部基准时,可以关闭内部基准,降低芯片功耗。
  • AD/DA的分类与主要技术指标 [转贴]

    2007-02-24 16:41:03

    1. AD转换器的分类
        下面简要介绍常用的几种类型的基本原理及特点:积分型、逐次逼近型、并行比较型/串并行型、Σ-Δ调制型、电容阵列逐次比较型及压频变换型。

        1)积分型(如TLC7135)

        积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。其优点是用简单电路就能获得高分辨率, 但缺点是由于转换精度依赖于积分时间,因此转换速率极低。初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。

        2)逐次比较型(如TLC0831)

        逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时价格很高。

        3)并行比较型/串并行比较型(如TLC5510)

        并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频AD转换器等速度特别高的领域。
        串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为 Half flash(半快速)型。还有分成三步或多步实现AD转换的叫做分级(Multistep/Subrangling)型AD,而从转换时序角度又可称为流水线(Pipelined)型AD,现代的分级型AD中还加入了对多次转换结果作数字运算而修正特性等功能。这类AD速度比逐次比较型高,电路规模比并行型小。

        4)Σ-Δ(Sigma/FONT>delta)调制型(如AD7705)

        Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。

        5)电容阵列逐次比较型

        电容阵列逐次比较型AD在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型。一般的电阻阵列DA转换器中多数电阻的值必须一致,在单芯片上生成高精度的电阻并不容易。如果用电容阵列取代电阻阵列,可以用低廉成本制成高精度单片AD转换器。最近的逐次比较型AD转换器大多为电容阵列式的。

        6)压频变换型(如AD650)

        压频变换型(Voltage-Frequency Converter)是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD 的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换。

    2. AD转换器的主要技术指标

        1)分辩率(Resolution) 指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2n的比值。分辩率又称精度,通常以数字信号的位数来表示。

        2)转换速率(Conversion Rate)是指完成一次从模拟转换到数字的AD转换所需的时间的倒数。积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转换的正确完成,采样速率(Sample Rate)必须小于或等于转换速率。因此有人习惯上将转换速率在数值上等同于采样速率也是可以接受的。常用单位是ksps和Msps,表示每秒采样千/百万次(kilo / Million Samples per Second)。

     3)量化误差(Quantizing Error) 由于AD的有限分辩率而引起的误差,即有限分辩率AD的阶梯状转移特性曲线与无限分辩率AD(理想AD)的转移特性曲线(直线)之间的最大偏差。通常是1 个或半个最小数字量的模拟变化量,表示为1LSB、1/2LSB。

        4)偏移误差(Offset Error) 输入信号为零时输出信号不为零的值,可外接电位器调至最小。

        5)满刻度误差(Full Scale Error) 满度输出时对应的输入信号与理想输入信号值之差。

        6)线性度(Linearity) 实际转换器的转移函数与理想直线的最大偏移,不包括以上三种误差。

        其他指标还有:绝对精度(Absolute Accuracy) ,相对精度(Relative Accuracy),微分非线性,单调性和无错码,总谐波失真(Total Harmonic Distotortion缩写THD)和积分非线性。

    3. DA转换器

        DA转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等进行分类。大多数DA转换器由电阻阵列和n个电流开关(或电压开关)构成。按数字输入值切换开关,产生比例于输入的电流(或电压)。此外,也有为了改善精度而把恒流源放入器件内部的。一般说来,由于电流开关的切换误差小,大多采用电流开关型电路,电流开关型电路如果直接输出生成的电流,则为电流输出型DA转换器,此外,电压开关型电路为直接输出电压型DA转换器。

        1)电压输出型(如TLC5620)

        电压输出型DA转换器虽有直接从电阻阵列输出电压的,但一般采用内置输出放大器以低阻抗输出。直接输出电压的器件仅用于高阻抗负载,由于无输出放大器部分的延迟,故常作为高速DA转换器使用。

        2)电流输出型(如THS5661A)

        电流输出型DA转换器很少直接利用电流输出,大多外接电流—电压转换电路得到电压输出,后者有两种方法:一是只在输出引脚上接负载电阻而进行电流—电压转换,二是外接运算放大器。用负载电阻进行电流—电压转换的方法,虽可在电流输出引脚上出现电压,但必须在规定的输出电压范围内使用,而且由于输出阻抗高, 所以一般外接运算放大器使用。此外,大部分CMOS DA转换器当输出电压不为零时不能正确动作,所以必须外接运算放大器。
    当外接运算放大器进行电流电压转换时,则电路构成基本上与内置放大器的电压输出型相同,这时由于在DA转换器的电流建立时间上加入了达算放入器的延迟,使响应变慢。此外,这种电路中运算放大器因输出引脚的内部电容而容易起振,有时必须作相位补偿。

        3)乘算型(如AD7533)

        DA转换器中有使用恒定基准电压的,也有在基准电压输入上加交流信号的,后者由于能得到数字输入和基准电压输入相乘的结果而输出,因而称为乘算型DA转换器。乘算型DA转换器一般不仅可以进行乘法运算,而且可以作为使输入信号数字化地衰减的衰减器及对输入信号进行调制的调制器使用。

        4)一位DA转换器

        一位DA转换器与前述转换方式全然不同,它将数字值转换为脉冲宽度调制或频率调制的输出,然后用数字滤波器作平均化而得到一般的电压输出(又称位流方式),用于音频等场合。

    4. DA转换器的主要技术指标:

        1)分辩率(Resolution) 指最小模拟输出量(对应数字量仅最低位为‘1’)与最大量
    (对应数字量所有有效位为‘1’)之比。

        2)建立时间(Setting Time) 是将一个数字量转换为稳定模拟信号所需的时间,也可以认为是转换时间。DA中常用建立时间来描述其速度,而不是AD中常用的转换速率。一般地,电流输出 DA建立时间较短,电压输出DA则较长。

    其他指标还有线性度(Linearity),转换精度,温度系数/漂移

  • 信号带宽与信道带宽[转贴]

    2007-02-24 13:49:53

    信号带宽是信号频谱的宽度,也就是信号的最高频率分量与最低频率分量之差,譬如,一个由数个正弦波叠加成的方波信号,其最低频率分量是其基频,假定为f =2kHz,其最高频率分量是其7次谐波频率,即7f =7×2=14kHz,因此该信号带宽为7f - f =14-2=12kHz。
        信道带宽则限定了允许通过该信道的信号下限频率和上限频率,也就是限定了一个频率通带。比如一个信道允许的通带为1.5kHz至15kHz,其带宽为13.5kHz,上面这个方波信号的所有频率成分当然能从该信道通过,如果不考虑衰减、时延以及噪声等因素,通过此信道的该信号会毫不失真。然而,如果一个基频为1kHz的方波,通过该信道肯定失真会很严重;方波信号若基频为2kHz,但最高谐波频率为18kHz,带宽超出了信道带宽,其高次谐波会被信道滤除,通过该信道接收到的方波没有发送的质量好;那么,如果方波信号基频为500Hz,最高频率分量是11次谐波的频率为5.5kHz,其带宽只需要5kHz,远小于信道带宽,是否就能很好地通过该信道呢?其实,该信号在信道上传输时,基频被滤掉了,仅各次谐波能够通过,信号波形一定是不堪入目的。

     通过上面的分析并进一步推论,可以得到这样一些结果:
    (1) 如果信号与信道带宽相同且频率范围一致,信号能不损失频率成分地通过信道;
    (2) 如果带宽相同但频率范围不一致时,该信号的频率分量肯定不能完全通过该信道(可以考虑通过频谱搬移也就是调制来实现);
    (3) 如果带宽不同而且是信号带宽小于信道带宽,但信号的所有频率分量包含在信道的通带范围内,信号能不损失频率成分地通过;
    (4) 如果带宽不同而且是信号带宽大于信道带宽,但包含信号大部分能量的主要频率分量包含在信道的通带范围内,通过信道的信号会损失部分频率成分,但仍可能被识别,正如数字信号的基带传输和语音信号在电话信道传输那样;
    (5) 如果带宽不同而且是信号带宽大于信道带宽,且包含信号相当多能量的频率分量不在信道的通带范围内,这些信号频率成分将被滤除,信号失真甚至严重畸变;
    (6) 不管带宽是否相同,如果信号的所有频率分量都不在信道的通带范围内,信号无法通过;
    (7) 不管带宽是否相同,如果信号频谱与信道通带交错,且只有部分频率分量通过,信号失真。
        另外,我们在分析在信道上传输的信号时,不能总是认为其带宽一定占满整个信道,比如频带传输;即使信号占据整个信道,也不一定总是把它想像成一个方波,它也可能是其它的波形,比如在一个单频的正弦波上寄载其它模拟信号或数字信号而形成的复合波形。我们再举一些实例,进一步明晰信号与信道的带宽问题。
        第一个例子仍是数字方波信号的基带传输(信号可能从零频率,也可能不是从零开始,直至某个较高的频率分量占满整个信道带宽,该较高频率分量通常由信道上限频率决定),我们知道,数字方波信号带宽可以无限,但信道带宽总是有限的,因此信道带宽限定了通过信道的信号带宽。如果信号基频和部分谐波能通过该信道,一般说来,接收到信号是可以被识别出的;如果信道的下限频率高于信号的基频,则基频甚至部分谐波被滤除,由于基频包含了信号的大部分能量(在时域图上反映出是所有叠加的信号波形中振幅最大的波形),因此接收到的信号难以识别。所以传输方波的信道要求其下限频率要低于信号的基频。
        第二个例子是电话信道,假定其频率范围从300~3300Hz,带宽为3kHz,而语音信号频谱则一般为100Hz~7kHz的范围。电话信道将语音信号频谱掐头去尾,因为语音信号的主要能量集中在中心的一些频率分量附近,所以通过电话信道传输的语音信号,虽有失真,但仍能分辨。
        第三个例子是电话线数字载波,即把数字信号调制到音频载波信号上,该载波是正弦波。电话线数据传输并不占满整个带宽,而是取中间部分频带,即600~3000Hz,带宽2400Hz。假定采用幅度调制(最简单的做法是通过在每个信号单元保留载波或除去载波来表示二进制的两种取值),如果采用全双工通信方式,则需将电话线数据信道一分为二,每个子信道各占1200Hz带宽,一个600~1800Hz,另一个1800~3000Hz;两个子信道的载波频率是各子信道中的中心频率,即分别为1200Hz和2400Hz,换句话说,每个中心频率两边各有一个600Hz的边带。
        数字调频术和调相技术更复杂些,在时域上看,它们的每个信号单元周期时间可以与调幅相同;但从频域上看,每个周期内使载波频率和相位随着所表示的数值变化而发生改变,信号相位的变化实际上在幅-频频域图上也表现为频率的变化。尤其是当每个信号单元包含多个比特的情况,会产生多个频率分量。对于每个信号单元包含1个比特的情况,数字调频的每个子信道需要两个不同的频率表示二进制数字,也就是说,在2400Hz带宽的数据信道上有四个中心频率以及它们的边带。也就是说,分为了四段频带,600~1200Hz、1200~1800Hz、1800~2400Hz、2400~3000Hz;中心频率分别为900Hz、1500Hz、2100Hz和2700Hz。
        第四个例子是无线调幅广播的模拟载波,即把语音、音乐等音频数据生成的原始电信号调制到具有某个广播频率的载波上(实际是频谱搬移,将相对较低的20Hz~20kHz频谱搬迁到较高300kHz~3MHz的频谱上)。无线信道利用的是自由空间,带宽似乎可以达到整个频谱,但实际上并非如此,首先,不同波段的频率需要不同的传播方式(地表导波、对流层散射、电离层反射、视线定向、空间转发)才能发挥最佳效率,不可能只采用一种传播方式使用如此广阔的频带;其次,频带跨度太大,不同频率分量传播的时延相差较远,不利于信号的正确识别和还原,数据率也因高低难以兼顾而受限;再则,无线信道是一种共享的公用广播信道,为了避免不同信源的相互干扰,在全球或者局部范围,必须进行信道分割与分配,分割出的每个信道根据不同的用途,其带宽相距很大,但不管多宽,都是很有限的;无论何种信号(即使理论上带宽无限的信号)在实际的传输中也不必一定要非常宽,也是允许损失一定频率成分的。无线调幅广播以载波频率为中心频率,将原始信号作为两个相同带宽的边带(上下边带)寄载到该载波上,调制后的该调幅信号总带宽为原始信号的2倍。

  • 金戒指威胁男性健康或影响性功能 [转贴]

    2007-02-18 22:56:17

    据国外媒体报道,一项最新研究显示,许多女性们所向往的订婚戒指很可能会对人体健康产生负面影响。然而有趣的是,这种影响居然仅局限于男性。
     
    专家们解释说,传统上被用来制造订婚戒指的黄金会对人体产生负面影响。这是因为,随着时间的推移,黄金会开始氧化并产生某些化合物。而这些化合物会对男性的性腺产生影响,并有可能诱发性功能紊乱。试验显示,即使是一毫克的金氧化物便足以损害到男性性腺的正常工作。

    与此同时,金的氧化物对女性的健康却不会起到负面影响。科学家们解释说,这主要是由于女性的性腺系统能够更好地抵御外界的影响,因此,金的氧化物不会对她们造成损害。

    现代科学研究所获取的大量成果显示,有许多传统或宗教方面的禁忌似乎都会使人受益。例如,伊斯兰教禁止男性佩带由黄金制成的饰品,但却并不禁止女性。现在,独立的科学家们已证明了这一宗教禁令的益处。尽管宗教方面的禁令主要是基于道德方面的原因,但现代科学却是实实在在地证明了其中所蕴藏的合理性。

    除此之外,专家们还建议,切不可将戒指戴得太紧。医生们有时会接待一些因戒指戴得太紧而就医的患者--他们常常会出现头痛和失眠的症状。

    医生们表示,戒指戴得太紧还有可能诱发神经根炎。据介绍,如果中指被戒指长时间的紧紧束缚,有可能会导致动脉硬化和高血压,而戴在小拇指上则可能诱发十二指肠发生病变。
  • 能使人长高”的神秘小岛[转载]

    2007-02-18 22:12:22

    马提尼克岛(法属) 首都:法兰西堡 面积1100平方公里 人口385600人(1995年中官方估计)。马提尼克岛位于加勒比海中央,是法国的海外省。

      岛上的居民身材长得很高,而从国外来的游客,只要住上一个时期,也会长高几厘米。由于岛的这种“秉性”,被人誉为:“能使人长高的岛”。

      每10年左右的时间,岛上便出现一种令人们迷惑不解的奇异现象:岛上居住的成年男女都长高了几厘米,成年男子平均身高达1.90米,成年女子平均身高也超过1.74米。岛上的青年男子如果身高不到1.8米,就会被同伴们耻笑为“矮子”。

      因此,马提尼克岛每年吸引了无数的旅游者前往,其中大部分是来自世界各地的矮个子。矮个子来到这个岛上住上一个时期,就会莫明其妙地长高几厘米,因此,人们称马提尼克岛为“矮子的乐园”。

      马提尼克岛位于安的列斯群岛中的向风群岛的最北部。是向风群岛中最大的、多火山的和风景如画的岛屿。当地语言:官方语言是法语。也普遍讲克里奥尔方言;宗教:大多数居民信仰罗马天主教。其实,不仅是人,就是连岛上的动物、植物和昆虫的增长也尤为迅速。岛上有蚂蚁、苍蝇、甲虫、蜥蜴和蛇等,从1948年起的10年左右时间都比通常增长了几倍,特别是该岛的老鼠、竟长得像猫一样大。

      马提尼克岛的斐尔坝拉人还有一个习俗——从不弯腰。即使最贵重的物品失落地上,他们也从不弯下腰去拾取,而是拔下插在背上的一个竹夹,挺着腰用竹夹夹取。

        斐尔坝拉人从不弯腰的习俗,据传说是因历史上受过异族的欺凌所致。17世纪中叶,马提尼克岛被法国侵略军占领,法国侵略军经常侮辱他们,把他们当牲口骑。为此,有一个叫耐特森的头人,在被一个法国侵略者当坐骑时,猛地跳起来,将他摔得很远,并发誓:“我们斐尔坝拉人要永远站着,不弯腰!”从此,这个民族就养成了不弯腰的习惯。
  • 爱情不是等你有空才珍惜[转贴]

    2007-02-17 16:31:22

       茫茫人海可以找到一个心爱的人,这是多么大的福气,或许没有你想像那么好,应该也不会糟糕到哪里,所以知福惜福好好珍惜,多说关怀话,少说责备话。
       如果你懂得珍惜,你会发现你获得的越来越多,如果你一昧追求,你会发现你失去的越来越快。
       爱情合理就好,不要委屈将就,不要相信完美的爱情,其实,你只要知道,彼此有缺点,一种纯朴的可爱就足够了。
       可以浪漫,但不要浪费;可以随时牵手,但不要随便分手。
       我们拥有一只鞋子的时候,才会明白失去另一只鞋子的滋味,失去的东西总是最好的,消逝的恋总是刻骨铭心的,珍惜或放下,都是生命中必经的过程。
       做好自己的本分,不要为了讨好别人改变自己。当然,也不要为了某些因素,固执不通。
       相爱的时候需要真诚,争执的时候需要沟通,生气的时候需要冷静,愉快的时候需要分享,指责的时候需要谅解,结婚的时候需要包容。
       一个人的生命里,擦肩而过的人有千千万万,有几个是知音?有几个是深爱自己的人?与其众里寻求千百回,不如疼惜眼前真情人。
       爱情再怎么坚固,总是无法承受忙碌的侵蚀,你忙的天荒地乱,你忙的忘记关心,你忙的身心疲惫,你忙的无所适从,我只想说:爱情不是等你有空才珍惜!
  • [转]我用一生说爱你

    2007-02-16 23:54:49

       5岁的时候,我说我爱你。
    你歪着脑袋,眨着水晶般的大眼睛,
    疑惑地问我:“什么意思呀?”



    15岁的时候,我说我爱你,
    你的脸红得像火烧云,头深深地低着,
    摆弄著衣襟,你好像在笑


    20岁的时候,我说我爱你,
    你把头靠在我的肩上,紧紧地挽住我的手臂, 像是下一秒我就会消失。
  • 了解PC音频的电器和声学参数(2)

    2007-01-17 18:37:08

    了解PC音频的电器和声学参数(2)

    二、声学性能相关参数

     

    对最终用户而言,在音频方面的体验很大程度上决定于PC系统的音箱、声卡或麦克风的质量好坏。这些产品都是系统内建传感器,所以有必要采取一定的方法对其质量高低进行评定。

    对于PC音频系统,主要有以下几个方面的参数影响其声学性能。

     

    -频率响应(Frequency Response)

    -总谐波失真(Total Harmonic Distortion)

    -扩音器输出功率

    -麦克风灵敏度

    -机械噪音

     

    下面我们将对这些参数作阐述并给出测试的方法,而大部分测试我们仅需用到一个已经校准并已知频率响应及失真的参考用麦克风以及一个声压级测量器(Sound Pressure Level Meter)。在测试中使用的是一种很常用的测试信号MLS(Maximum LengthSquence,最长序列信号),它可以克服房间对音波的反射以及驻波(Standing Waves)的影响。这是一种短频,类似噪音的信号,我们可以在待测设备的输出端捕获信号并实行FFT分析,由于信号在房间反射发生之前就已被捕获,所以可以消除该影响。而如果MLS中包含颤音(信号频率以一个平均值为中心呈周期性变化)则可以更有利于电平的设置。

     

    ●频率响应

    1.音箱的频率响应

    首先将一参考用的麦克风放置在待测音箱中心的0.5m处,然后回放粉红噪声测试信号并用声压级测量器设置测试的麦克风在90dB SPL的电平位置。接着回放MLS测试信号并用音频分析器在麦克风输出端捕获输出信号进行分析,绘制频率响应图示即可。

     

    2.PC麦克风的频率响应

    首先将参考用和待测的麦克风放在一起,然后将一只质量好的音箱放在距离麦克风中心大概0.5m左右的地方。首先向音箱中输入粉红噪音信号并用SPL测量器在参考用的麦克风中将电平设置在90dB SPL,然后调节待测麦克风的增益量直到产生-20dB的数字电平信号。接下来向音箱中输入MSL测试信号并同时在两个麦克风的输出端用音频分析器捕获信号,参考用的麦克风可直接连上音频分析器,而待测的麦克风则通过PC捕捉数据并转化为数字格式后输入音频分析器中,再分别计算由参考路径和待测麦克风所得到的频率响应。然后在参考用麦克风允许的响应范围内调整频率响应值,用待测麦克风的响应值减去调节过的响应值并输出最后结果。

     

    ●总谐波失真(Total Harmonic Distortion)

    1.音箱的总谐波失真

    将参考用的麦克风放在距离待测音箱中心0.5m左右的位置,回放粉红噪音信号并用声压级测量器在麦克风中调节电平为90dB SPL。回放由间隔小于一个八度音阶、从50Hz10kHz组成的一系列正弦波,或是回放复合的多音调测试信号,捕获麦克风的响应,过滤掉测试信号基波并将剩余的信号以原测试信号的振幅百分比形式表现出来,得到音箱的总谐波失真。该方法的前提是待测系统的本底噪音是远远小于谐波失真的,如若不然,各个谐波的振幅都需要单独测量,并以均方根和的形式再与原测试信号作比率得到结果。

     

    2.麦克风的总谐波失真

    通过一个已知的参考用麦克风作比较我们就能测量出麦克风的THD,但绝大多数的PC麦克风都用于语音,即使是廉价的驻极体麦克风(ElectretMicrophone)都拥有极低的失真度,因此大多数情况下我们没必要去测试PC麦克风的THD

     

    3.音箱的功率输出

    我们通常能在音箱的铭牌上看到最大电气功率限制,但这并非是音箱所能输出的最大声学功率限制。一个较为普遍的定义就是当音箱的失真度达到10(20dB)时,此时的输出为其最大输出功率。因此,相关测试方法也就和测试音箱的失真非常类似,所不同的是我们需要调节电平直到失真达到10%,然后通过SPL测量器记录此时的声音功率电平,从而得到箱的最大功率输出。该测试可以在997Hz或是在音频范围内的各个测试频率中进行。

     

    4.麦克风的灵敏度(Microphone Sensitivity)

    麦克风的灵敏度对应用有着重要的影响,通常我们将麦克风的灵敏度定义为驱动给定声压(单位dB)所需要的电压值,用Sv来表示。对于动态麦克风(Dynamic Mic)Sv能很好的工作;然而对驻极体麦克风而言其自身产生一道电流并导致相应的声压,Si。当我们需要用电压灵敏度Sv来与之匹配时就需要一个额外的负载电阻。但是这个电阻并非Mic的一部分而是装置MIC In(6中的Zi以及Rb)。如果驻极体麦克风的电压灵敏度(Sv)已经给出,那么就说明MIC IN接口的偏电阻Rb应为2 kΩ而麦克风的工作电压为2.0V

    Sv通常用dB V/XX来表示,此处的XX是某些参考数据,最常用的就是dB V/Pa,意即每一帕斯卡(Pa)所产生的dB V。用于灵敏度测试的测试频率应该是997Hz,典型的驻极体麦克风的灵敏度是Sv-45dB V/Pa,而对于动态麦克风则是Sv-56dB V/Pa。以驻极体MIC为例,每一帕斯卡的声压将能产生-45dB V或是5.62mVRMS。另一个常用的参考数据就是μbar1μbar1Pa20dB,因此上面驻极体MIC的例子也可以表示为-65dB V/μbar9就表示了两个参考数据Pa和μbar的关系。

    对于灵敏度的测试,其中一个方法是将待测MIC放在距离音箱高低音单元0.5m远的地方,向音箱输入经过调频的997Hz的测试信号,在距离音箱1m处用SPL测量器设定音箱输出为94dB SPL。将PC设置录音,使用带有限幅产生指示并能进行增益调节的软件,确保该软件能进行增益调节直到录制信号产生限幅,并且能设置使其非常接近满幅运行的程度,以此测量MIC的灵敏度。

     

    5.机械噪音(风扇、磁盘等)

    测量风扇的噪音需要使用声压级测量器在风扇出口0.5m处进行测量;测量硬盘噪音需要先让硬盘满幅运行某个大型程序,再在距离其0.5m左右的地方使用SPL测量仪进行测量,对光驱噪音的测量也是一样。

     

     

    本篇小结

     

    对于PC音频系统的电气和声学参数的介绍至此已告结束。在不了解这些基础知识之前,相信您看媒体上音频设备测试报告时,对于那些细节测试项目绝对是满头雾水—不知道为什么会有这样测试项目,更不了解这些测试项目说明了什么。现在,您会发现自己已经能读懂大多数的评测报告项目。但本篇只是告诉了您为什么需要这样做,至于如何做,请关注本专题的下篇。届时,我们还能接触到一些专业的测试设备和专用软件。

     

     

     

     

     

    相关知识点:

        1.clipping

    clipping,称作限幅,也叫削波,当要求设备输出超过其允许的输出功率时,便会使输出音频波形的顶部和底部变得平坦。就像将峰值给削平了似的。限幅会引入大量的失真,让人在音频峰值部分听到“嘎吱嘎吱”的声音。

     

    2.权重滤波器(Weighting Filter)

    众所周知,以人耳的听力敏感度无法感知所有的声音频率。对绝大部分人而言,耳朵最敏感的频率在1kHz5kHz之间。权重滤波器的作用就是尽量过滤掉人耳无法接收的频率而使声波频率尽量与人耳接收范围保持一致。在声压级的测量中就需要用到权重滤波器,其主要有3种过滤方式的曲线:AB以及C,这是根据不同的声音的响度大小作出的选择。C-weighting曲线几乎能过滤掉大部分的音频带宽(FR=+0,-3dB,从30Hz8kHz),主要使用在针对高音的测试中;B-weighting过滤曲线中间电平的声音,它的上限和C-weighting曲线一样而下限为120HzA-weighting曲线主要表现低电平信号,如背景噪音(Background Noise)A-weighting曲线如1所示,现在已经成为OSHA(职业安全与卫生管理局)倡议的用于测量所有信号电平中的噪音的一个标准。

    当然,也有其他的滤波器被用来测试音频性能的,比如The Sound Broadcast Industry就使用CCIR-468权重滤波器来测量噪音,曲线图如2所示。

    The Audio Engineering Society(AES)Dolby则使用CCIR-468的改进版本进行测量,称为CCIR-RMS。这种滤波器的0dB位置是2kHz而并非传统的1kHz,同时噪音测量的基础是基于RMS的。

    如果在测试中使用了权重滤波器,就必须将其在测试结果中清楚地指示出来:

    Line Level Analog Mixer DR90dB FS A

    此处的“A”后缀表示在测试中使用了A-weighting的权重滤波器,如果未使用,“A”就应该省略。同理,如果使用的是AES权重滤波器,上面的标识就应该为:

    Line Level Analog Mixer DR90dB FS CCIR-RMS

     

    3. 谐波和噪声

    理想的单频正弦交流电只有一个频率成分:基波。如果正弦波形不理想,或者干脆就是三角形波或方波,那么这时的频率成分除了基波外还有多种频率、不同强度的频率分量存在。这些频率分量就叫谐波。总谐波失真THD是指设备或元件工作时产生的总的谐波失真量。理想的放大器输入一个单频正弦信号,输出仍应是这个形状。但实际放大后,波形总有些不同,即产生失真,频率成分里出现了谐波分量。N指设备最终输出信号中混入的噪声,表现为嘶嘶的电流声和嗡嗡的交流声等无用的信号。理论上器件必然存在着噪声,工艺结构及元器件质量也会引起噪声。THDN就是综合考虑谐波失真以及噪声的一个音频系统参数。

     

    4. dB FS

    dB FS是音频测量的首选单位,表示“相对于满幅值的dB数”。对模拟输入及输出而言,首先需要测定的就是满幅值,而其余和模拟输入/输出相关的测定都是和已经测定的满幅值相关的。对数字输入输出测量,满幅值受限制于限定的运算位数(bit),在PC系统中所有的测试都基于16位,因此满幅值就限于±32767,这是16位运算所能达到的极限,但这只是在THDN小于-40dB的情况下得出的结果。如前面提到的一样,如果THDN大于-40dB,则必须将信号电平调至低于THDN达到-40dB的那个点,该点才是这种情况下真正的满幅值FS。如果系统达到了±32767的数字数据运行而THDN此时低于-40dB,则该参数就是相关dB FS测量的参考点,其计算公式如下:

    dB FS20Log[(Max-Min)/65536]dB

    这个术语在不同的测试中代表了不同的数值,以Line In的录音方式为例,“THDN(-3dB FS997Hz)=-83dB FS”指出了测试信号是997Hz的音波在相对于Line In满幅值为-3dB的状态下,其在Line In的录音过程中产生的THDN是相对于数字满幅值为-83dB的值。 注意在上述等式中左右的FS代表的意义是不一样的,假设在路径中的音量为0dB,那么数字信号代码数量就应该为±23197,也就是-3dB相对于满幅值的Line In,计算公式如下:

    20Log[(2319723197)/65536]20Log(46394/65536)20Log(0.7079)-3dB FS

     

    6. 关于“分贝(DECIBEL)

    DECIBEL”,“BEL”是根据著名科学家亚历山大·格雷厄姆·贝尔而命名的,这是两个能量的对数比率,通常表示为:

    belLog(P1/P2)

    因为bel是一个比较大的度量单位,为了扩大其应用,就产生了“分贝”的单位,缩写为“dB”,其意义是1bel1/10,计算公式是:

    dB10Log(P1/P2)

    虽然dB最初是一个应用于能量的比率,但是它也可以应用于度量电压、电流以及声压。比如根据“能量(功率)=电压×电流”的关系我们可以得到:

    dB=10Log(P1/P2)=10Log(V1)2/(V2)220Log(V1/V2)

    分贝和百分比是非常相近的度量单位,因为它们都是比率值,事实上在音频性能测试中的THD测试中还是更多的使用了百分比。二者的关系为:

    dB20Log(?%/100)

    通常情况下,dB和百分比都是针对输入信号的电平而言(但是这种说法并未得到普遍认可)。其中一个例子就是音量控制电平设置,就是针对输入到音箱的信号。百分比和dB的关系如1

    可见,如果将音量控制设置在0dB,那么输出的音量就和输入的音量完全一致(100)。将dB用于音频性能表述主要有两个原因,其一是人们更熟悉以dB形式来表示声音的大小;其二人耳所能接收的动态范围非常大,使用较小的dB能更方便地表现大范围内的数据。

    当描述DRTHD这些性能参数时,所用的参考标准都应该被注明。例如一个-3dB FS的输入信号产生0.01%的THDN,而另一个-60dB FS的输入信号产生5.6%的THDN,如果不给出参考电平,所得结果就会让人认为5.6%的性能比0.01%的性能要差,而实际上后者会优于前者。对于音频性能参数的描述的一个标准参照是满幅值(Full Scale Value),引用和前面相同的例子,但是我们将百分比转换为dB FS单位,就能得到以下结果:-3dB的输入信号产生了-83dB FSTHDN-60dB FS的输入信号产生了-85dBTHDN,可以明显看出后者优于前者,因为这是基于相同基准数比较的结果。满幅值是一个有效的参照,因为它体现的是系统所能控制运行的最大信号。

    同时,我们经常能够在dB的后面看到各种各样的后缀,分别表示不同的参考条件。以下是对这些后缀的一个简要的归纳。

    ·dBr

    dBr表示“相对于一个绝对参考值的dB数”,该单位通常被音频精度测试仪使用,用来说明测试是和某个特定值相关的。该参数一般由系统12输入,大多数情况下设置为测定好的满幅值,以便使dBr等于dB FS

    ·dB V

    dB V的意义是“相对于1伏特的dB数”因为除数是1,所以公式也就大大简化了dB V20Log?V/1V20Log(V)

    ·dB SPL

    dB SPL分贝级的声学声压级(SPL)测量,多用在声音传感器的测试中(如音箱和麦克风等)。作为SPL的参考值是20μPa,这是听力所能接收的最小极限。SPL的公式表达如下:

    dB SPL20Log[(Pa/20μPa)]

1244/7<1234567>
Open Toolbar