打印

RF电路的PCB设计技巧

[复制链接]
4303|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
老大的幸福|  楼主 | 2010-12-25 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RF电路的PCB设计技巧
  
如今PCB的技术主要按电子产品的特性及要求而改变,在近年来电子产品日趋多功能、精巧并符合环保条例。故此,PCB的精密度日高,其软硬板结合应用也将增加。
  PCB是信息产业的基础,从计算机、便携式电子设备等,几乎所有的电子电器产品中都有电路板的存在。随着通信技术的发展,手持无线射频电路技术运用越来越广,这些设备(如手机、无线PDA等)的一个最大特点是:第一、几乎囊括了便携式的所有子系统;第二、小型化,而小型化意味着元器件的密度很大,这使得元器件(包括SMD、SMC、裸片等)的相互干扰十分突出。因此,要设计一个完美的射频电路与音频电路的PCB,以防止并抑制电磁干扰从而提高电磁兼容性就成为一个非常重要的课题。
因为同一电路,不同的PCB设计结构,其性能指标会相差很大。尤其是当今手持式产品的音频功能在持续增加,必须给予音频电路PCB布局更加关注.据此本文对手持式产品RF电路与音频电路的PCB的巧妙设计(即包括元件布局、元件布置、布线与接地等技巧)作分析说明。

  1、元件布局
先述布局总原则:元器件应尽可能同一方向排列,通过选择PCB进入熔锡系统的方向来减少甚至避免焊接不良的现象;由实践所知,元器件间最少要有0.5mm的间距才能满足元器件的熔锡要求,若PCB板的空间允许,元器件的间距应尽可能宽。对于双面板一般应设计一面为SMD及SMC元件,另一面则为分立元件。

  1.1 把PCB划分成数字区和模拟区
  任何PCB设计的第一步当然是选择每个元件的PCB摆放位。我们把这一步称为“布板考虑“。仔细的元件布局可以减少信号互连、地线分割、噪音耦合以及占用电路板的面积。
  电磁兼容性要求每个电路模块PCB设计时尽量不产生电磁辐射,并且具有一定的抗电磁干扰能力,因此,元器件的布局还直接影响到电路本身的干扰及抗干扰能力,这也直接关系到所设计电路的性能。
  因此,在进行RF电路PCB设计时除了要考虑普通PCB设计时的布局外,主要还须考虑如何减小RF电路中各部分之间相互干扰、如何减小电路本身对其它电路的干扰以及电路本身的抗干扰能力。
由经验实所知,对于RF电路效果的好坏不仅取决于RF电路板本身的性能指标,很大部分还取决于与CPU处理板间的相互影响。由于RF电路包含数字电路和模拟电路,为了防止数字噪声对敏感的模拟电路的干扰,必须将二者分隔开,把PCB划分成数字区和模拟区有助于改善此类电路布局,显得尤为重要。

  1.2 需要防止RF噪声耦合到音频电路
虽然手持式产品的RF部分通常被当作模拟电路处理,许多设计中需要关注的一个共同问题是RF噪声,需要防止RF噪声耦合到音频电路,因RF噪声经过解调后产生可闻噪音。为了解决这个问题,需要把RF电路和音频电路尽可能分隔开。在将PCB划分成模拟、数字后,需要考虑模拟部分的元件布置。元件布局要使音频信号的路径最短,音频放大器要尽可能靠近耳机插孔和扬声器放置,使D类音频放大器的EMI辐射最小,耳机信号的耦合噪音最小。模拟音频信号源须尽可能靠近音频放大器的输入端,使输入耦合噪声最小。所有输入引线对RF信号来说都是一个天线,缩短引线长度有助于降低相应频段的天线辐射效应。

  2、元件布置应注意的问题与应用举例
  
2.1 布局中应注意的问题:
  认真分析电路结构。对电路进行分块处理(如高频放大电路、混频电路及解调电路等),尽可能将强电信号和弱电信号分开,在将数字信号电路和模拟信号电路分开后,也应注意将完成同一功能的电路应尽量安排在一定的范围之内,从而减小信号环路面积;各部分电路的滤波网络必须就近连接,这样不仅可以减小辐射,而且可以减少被干扰的几率及提高电路的抗干扰能力。
根据单元电路在使用中对电磁兼容性敏感程度不同进行分组。对于电路中易受干扰部分的元器件在布局时还应尽量避开干扰源(比如来自数据处理板上CPU的干扰等)。

  2.2 元件布置对音频信号影响的举例
  不合理的元件布局对音频信品质影响
  一个不合理的音频元件布局,比较严重的问题有二:其一是音频放大器离音频信号源太远,由于引线从嘈杂的数字电路和开关电路附近穿过,从而增加了噪音耦合的几率。较长的引线也增强了RF天线效应。如手机电话采用GSM技术,这些天线能够拾取GSM发射信号,并将其馈入音频放大器。几乎所有放大器都能一定程度上解调217Hz包络,在输出端产生噪音。糟糕时,噪音可能会将音频信号完全淹没掉,缩短输入引线的长度能够有效降低耦合到音频放大器的噪声.其二音频是放大器放距离扬声器和耳机插座太远。
如果音频放大器采用的是D类放大器,较长的耳机引线会增大该放大器的EMI辐射。这种辐射有可能导致设备无法通过当地政府制定的测试标准。较长的耳机和麦克风引线还会增大引线阻抗,降低负载能够获取的功率。最后,因为元件布置得如此分散,元件之间的连线将不得不穿过其它子系统。这不仅会增加音频部分的布线难度,也增大了其它子系统的布线难度。

不合理的元件布局示意对音频信品质影响

合理的元件布局对音频信号品质改善

相同元件的排列,重新排列的元件能够更有效地利用空间,缩短引线长度。注意,所有音频电路分配在耳机插孔和扬声器附近,音频输入、输出引线比上述方案短得多,PCB的其它区域没有放置音频电路。这样的设计能够全面降低系统噪音,减小RF干扰,并且布线简单。

合理的元件布局示意对音频信号品质改善

  3 、布线原则与技巧
在基本完成元器件的布局后,就可开始布线了。

  3.1 布线的基本原则
  在组装密度许可情况下后,尽量选用低密度布线设计,并且信号走线尽量粗细一致,有利于阻抗匹配。
对于RF电路,信号线的走向、宽度、线间距的不合理设计,可能造成信号信号传输线之间的交叉干扰。而信号通路对音频输出噪音和失真的影响非常有限,也就是说为了保证性能需要提供的折中措施很有限。音频放大器通常由电池直接供电,需要相当大的电流。如果使用长而细的电源引线,会增大电源纹波。与短而宽的引线相比,又长又细的引线阻抗较大,引线阻抗产生的电流变化会转变成电压变化,馈送到器件内部。为了优化性能,放大器电源应使用尽可能短的引线。应该尽可能使用差分信号。差分输入具有较高的噪声抑制,使得差分接收器能够抑制正、负信号线上的共模噪声。为充分利用差分放大器的优势,布线时保持相同的差分信号线对的长度非常重要,使其具有相同的阻抗,二者尽可能相互靠近使其耦合噪声相同。放大器的差分输入对抑制来自系统数字电路的噪声非常有效。另外,系统电源自身还存在噪声干扰,所以在设计RF电路PCB时一定要综合考虑,合理布线。

  3.2 布线技巧
布线时,所有走线应远离PCB板的边框(2mm左右),以免PCB板制作时造成断线或有断线的隐患。电源线要尽中能宽,以减少环路电阻,同时,使电源线、地线的走向和数据传递的方向一致,以提高抗干扰能力;所布信号线应尽可能短,并尽量减少过孔数目;各元器件间的连线越短越好,以减少分布参数和相互间的电磁干扰;对于不相容的信号线应量相互远离,而且尽量避免平行走线,而在正向两面的信号线应用互垂直;布线时在需要拐角的地址方应以135°角为宜,避免拐直角。

  4、接地
  在射频电路PCB设计中,电源线和地线的正确布线显得尤其重要,合理的设计是克服电磁干扰的最重要的手段。PCB上相当多的干扰源是通过电源和地线产生的,其中地线引起的噪声干扰最大。地线容易形成电磁干扰的主要原因于地线存在阻抗。当有电流流过地线时,就会在地线上产生电压,从而产生地线环路电流,形成地线的环路干扰。当多个电路共用一段地线时,就会形成公共阻抗耦合,从而产生所谓的地线噪声。因此,在对RF电路PCB的地线进行布线时应该做到:
  对电路进行分块处理,射频电路基本上可分成高频放大、混频、解调、本振等部分,要为各个电路模块PCB设计时提供一个公共电位参考点即各模块电路各自的地线,这样信号就可以在不同的电路模块PCB设计时之间传输。然后,汇总于射频电路PCB接入地线的地方,即汇总于总地线。由于只存在一个参考点,因此没有公共阻抗耦合存在,从而也就没有相互干扰问题。
  数字区与模拟区尽可能地线进行隔离,并且数字地与模拟地要分离,最后接于电源地。
  在空间允许的情况下,各模块之间最好能以地线进行隔离,防止相互之间的信号耦合效应。
  对于音频电路,接地对于是否能够达到音频系统的性能要求至关重要。任何系统中接地有两个重要考虑:首先它是流过器件的电流返回路径,其次是数字和模拟电路的参考电位。这里给出了适用于所有系统的技巧:
  为数字电路建立一个连续的地平面。地层的数字电流通过信号路径返回,该环路的面积应保持最小,以降低天线效应和寄生电感。确保所有数字信号引线具有对应的接地通路,这一层应该与数字信号引线覆盖相同的面积,具有尽可能少的断点。地层的断点,包括过孔,会使地电流流过更大的环路,因而产生更大的辐射和噪声。
  保证地电流隔离。数字电路和模拟电路的地电流要保持隔离,以阻止数字电流对模拟电路的干扰。为了达到这一目标,需要正确排列元件。如果把模拟电路布置在PCB的一个区域,把数字电路布置在另一区域,地电流会自然隔离开。最好使模拟电路具有独立的PCB分层。
  模拟电路采用星形接地。星形接地是将PCB的一点看作公共接地点,而且只有这一点被当作地电位,蜂窝电话中,电池地端通常被作为星形接地点,流入地平面的电流不会自动消失,所有地电流都将汇入到这个接地点。音频放大器吸收相当大的电流,这会影响电路本身的参考地和其它系统的参考地。为了解决这一问题,最好提供一个专用的返回回路桥接放大器的功率地和耳机插孔的地回路。注意,这些专用的回路不要穿越数字信号线,因为它们会阻碍数字返回电流。
最大化旁路电容作用。几乎所有器件都需要一个旁路电容,以提供电源不能提供的瞬态电流。这些电容需尽可能靠近电源引脚放置,以减少电容和器件引脚之间的寄生电感,电感会降低旁路电容的作用。

  5、结论
  以上设计良好的PCB是一件耗时,同时也是极具挑战性的工作,但这种投入也的确是值得的。好的PCB布局有助于降低系统噪音,提高RF信号的抑制能力,减小信号失真。好的PCB设计还会改善EMI性能,有可能需要更少的屏蔽。如果PCB不合理,会在测试阶段出现本来可以避免的问题。这时在采取措施的话,可能为时已晚,很难解决所面临的问题,需要投入更多的时间、花费更大的精力,有时还要添加额外的元件,增加系统成本和复杂性。

相关帖子

沙发
0中国芯0| | 2010-12-25 22:19 | 只看该作者
好长的一篇**,没看完

使用特权

评论回复
板凳
小云001| | 2010-12-26 09:53 | 只看该作者
2# 0中国芯0
为什么没看完呢?

使用特权

评论回复
地板
金鱼木鱼| | 2010-12-26 10:54 | 只看该作者
IAR中xcl及icf文件详解

链接器和链接器的配置
              2.1 EWARM 4.xx的链接器XLINK及其配置文件.xcl
              XLINK链接器可以把IAR汇编器或编译器所产生的可重定位的UBROF目标文件转换成针对目标处理器的机器码。XLINK一般通过外部链接器命令文件 (*.xcl)来配置,当然也可以在命令行中直接在xlink命令之后输入链接选项,或者也可以在XLINK_ENVPAR环境变量中设置链接选项。下面 介绍XCL文件中常用的链接选项,以便在版本迁移之前,确切地了解XCL文件的含义。
              2.2 XLINK选项
              下面介绍几个XCL文件中常见的链接器配置选项。更详细的内容请查阅XLINK的参考手册:IAR Linker and Library Tools Reference Guide。
-D -Dsymbol=value
作用:
使用-D选项可以定义一些纯粹的符号,一般用于声明常数。
参数:
symbol是未在其它地方定义过的外部符号,value是symbol所代表的值。例如:
就定义了2个标识了ROM起始和结束地址的符号,这样以后关于ROM地址的配置都可以直接使用这2个符号,使得配置文件的可读性增强。
-Z -Z [@] [(SPLIT-)type] segments [=|#] range [, range] …
作用:
使用-Z命令的目的是规定segments在存储空间中占据的位置和区间。如果链接器发现某个segment没有使用-Z,-b或者-P中的任何一个命令进行定义,则会报错。
参数:
@ 使用@参数,表示为segments分配空间时不考虑任何已经被使用的地址空间。这适用于当某些segments的地址空间需要发生重叠的情形。
type 参数type规定了segments的存储类型,默认为UNTYPED。表1列举了IAR的ARM C/C++编译器所支持的segments类型。
-Q -Q segment = initializer_segment
作用:
自动设置segment的拷贝初始化。链接器会产生一个新的initializer_segment(如CODE_ID),其内容与segment(如CODE_I)完全一致。相关的符号表和调试信息都会和segment相关联(如CODE_I)。initializer_segment的内容(通常在ROM中)必须在初始化阶段被复制到segment(通常在RAM中)。
-c -cprocessor
作用:
规定目标处理器的类型。如-carm。

              2.3 EWARM 5.xx的链接器ILINK及其配置文件.icf
EWARM 5.xx中的链接器称为ILINK。ILINK可以从ELF/DWARF格式的目标文件中提取代码和数据,并生成可执行映像。在EWARM 4.xx中,基本的代码和数据链接单元是segment,而对于ELF/DWARF格式而言,基本链接单元是section。ILINK根据ILINK Configuration File(*.icf)来分配这些sections。由于XLINK与ILINK是两个完全不同的链接器,所以XCL和ICF也是两种完全不同的配置文 件。下面简要介绍ICF文件的格式和内容,以协助用户完成版本迁移。
              2.4 ICF格式浅析

sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理解ICF文件的内容尤其重要。

一个标准的ICF文件可包括下面这些内容:
1.       可编址的存储空间(memory)
2.       不同的存储器地址区域(region)
3.       不同的地址块(block)
4.       Section的初始化与否
5.       Section在存储空间中的放置

下面介绍了几条ICF文件中常见的指令,详细内容请参考ILINK相关说明文档(EWARM_DevelopmentGuide.pdf):
define [ exported ] symbol name = expr;
作用:
指定某个符号的值。
参数:
exported 导出该symbol,使其对可执行镜像可用
name 符号名
expr 符号值
举例:
define symbol RAM_START_ADDRESS = 0x40000000;
define symbol RAM_END_ADDRESS = 0x4000FFFF;
define memory name with size = expr [, unit-size];
作用:
定义一个可编址的存储地址空间(memory)。
参数:
name memory的名称
expr 地址空间的大小
unit-size expr的单位,可以是位(unitbitsize),缺省是字节(unitbytesize)
举例:
define memory MEM with size = 4G;
define region name = region-expr;
作用:
定义一个存储地址区域(region)。一个区域可由一个或多个范围组成,每个范围内地址必须连续,但几个范围之间不必是连续的。
参数:
name region的名称
region-expr memory:[from expr { to expr | size expr}],可以定义起止范围,也可以定义起始地址和region的大小
举例:
define region ROM = MEM:[from 0x0 size 0x10000];
define region ROM = MEM:[from 0x0 to 0xFFFF];

define block name[ with param, param... ]
{
extended-selectors
};
作用:
定义一个地址块(block);它可以是个空块,比如栈、堆;也可以包含一系列sections。
参数:
name block的名称
param 可以是: size = expr (块的大小)
maximum size = expr (块大小的上限)
alignment = expr (最小对齐字节数)
fixed order (按照固定顺序放置sections)
extended-selector [ first | last ] { section-selector | block name | overlay name }
first 最先存放
last 最后存放
section-selector [ section-attribute ][ section sectionname ][object filename ]
section-attribute [ readonly [ code | data ] | readwrite [ code | data ] | zeroinit ]
sectionname section的名称
filename 目标文件的名称
即可以按照section的属性,名称及其所在目标文件的名称这三个过滤条件中,任意选取一个条件,或选取多个条件进行组合,来圈定所要求的sections。
name block或overlay的名称
举例:
define block HEAP with size = 0x1000, alignment = 4 { };
define block MYBLOCK1 = { section mysection1, section mysection2, readwrite };
define block MYBLOCK2 = { readonly object myfile2.o };
initialize { by copy | manually } [ with param, param... ]
{
section-selectors
};
作用:
初始化sections。
参数:
by copy 在程序启动时自动执行初始化。
manually 在程序启动时不自动执行初始化。
param 可以是: packing = { none | compress1 | compress2 | auto }
copy routine = functionname
packing表示是否压缩数据,缺省是auto。
functionname表示是否使用自己的拷贝函数来取代缺省函数。
section-selector 同上
举例:
initialize by copy { rw };

do not initialize
{
section-selectors
};
作用:
规定在程序启动时不需要初始化的sections。一般用于__no_init声明的变量段(.noinit)。
参数:
section-selector 同上
举例:
do not initialize { .noinit };
place at { address memory[: expr] | start of region_expr | end of region_expr }
{
extended-selectors
};
作用:
把一系列sections和blocks放置在某个具体的地址,或者一个region的开始或者结束处。
参数:
memory memory的名称
expr 地址值,该地址必须在memory所定义的范围内
region_expr region的名称
extended-selector 同上
举例:
place at start of ROM { section .cstart }; place at end of ROM { section .checksum }; place at address MEM:0x0 { section .intvec };
place in region-expr
{
extended-selectors
};
作用:
把一系列sections和blocks放置在某个region中。sections和blocks将按任意顺序放置。
参数:
region-expr region的名称
extended-selector 同上
举例:
place in ROM { readonly }; place in RAM { readwrite };
place in RAM { block HEAP, block CSTACK, block IRQ_STACK }; place in ROM { section .text object myfile.o }; place in ROM { readonly object myfile.o }; place in ROM { readonly data object myfile.o };

使用特权

评论回复
5
金鱼木鱼| | 2010-12-26 10:55 | 只看该作者
IAR用法点滴

程序固化后运行方式:
程序开始运行后需要将RW 和ZI段搬移到RAM中去,程序下载进Flash中以后,上电后是怎样将RW ZI断搬移到RAM中去的?注意IAR和ADS在进行完.s文件的初始化以后都不是直接跳转到main函数去执行,IAR是跳转到?main中而ADS是跳转到__main函数中,在这些函数中根据icf文件的配置,将RW和ZI段搬移到icf文件规定的RAM区域中。如果程序的运行时域是在片外RAM中,那程序是在什么时候对片外RAM控制器进行初始化呢?因为.s文件的开始部分是CODE RO的,不需要RAM空间,所以可以在.s文件中对片外RAM进行配置。还有一个问题,这个问题是在硬件设计时必须注意的,如果需要程序固化在外部Flash中,必须注意外接的Flash必须是片子上电后默认片外总线就支持的片子。
程序在RAM中调试的运行方式
为 了调试的方便,程序有时候是不需要下载进flash进行调试,而是直接在RAM中运行,将icf文件中的ROM 和RAM地址都设成硬件RAM的地址,将Flashloader的使能关掉,那么程序就运行在RAM中了。但是问题又产生了,因为有时我们想在外部RAM 中调试代码,所以片外RAM控制器需要在代码下载进RAM之前进行初始化,怎么能够实现呢?IAR是通过.mac文件实现的。在程序下载之前先执行了。 mac文件中的程序,下面是一个例子
execUserFlashInit()
{
    __writeMemory32(0x1000ffef, 0xffe00000 , "Memory");
    __writeMemory32(0x0f000114, 0xE002C014, "Memory");
}
该例子是lpc初始化外部RAM的例子。配置好了外部RAM就可以在里面跑代码了。
程序的IAR下载
1.       文件在片内Flash中下载运行
这是最简单也是最常用的方式,一般的ARM芯片都会带有片内Flash,IAR会通过Flashloader将二进制的可执行文件下载到Flash中。下载的方式如下:如果要将程序B下载到片子里,IAR先将一个程序A(IAR事先编好的程序)下载到片内的RAM中,然后利用这个程序A通过JTAG和Flashloader交互完成程序B的下载。
2.       文件在片外Flash中下载
IAR下载进RAM中的程序A必须支持片外的Flash,他能够完成片外Flash的擦除。往往这个程序需要自己写。像HJTAG的下载机制也是这样,HJTAG中列举了很多HJTAG支持的芯片,所谓支持就是HJTAG很有这些芯片的A程序。在HJTAG中必须要指定程序A将要下载到的RAM的地址,而且这个地址的RAM必须是可用的,比如如果用的片外SDRAM的话就必须初始化SDRAM控制器。这在HJTAG的Init Script中完成、在IAR的mac文件中完成。
3.       文件在片内RAM中下载 、文件在片外RAM中下载
由于这两种方式不需要Flashloader的参与,这时程序的加载时域和运行时域是相同的,程序运行后不涉及程序的搬移,所以只要给IAR指定运行时域的RAM地址就行了,如果是内部RAM,那非常省事,直接在icf文件中将地址都设置成内部RAM就行,如果是外部RAM那么在mac文件中初始化外部SDRAM控制器或者其他的RAM,然后IAR就可以完成将程序放在已经初始化好的外部RAM里,并运行。

使用特权

评论回复
6
金鱼木鱼| | 2010-12-26 10:56 | 只看该作者
IAR文件类型:.xcl .mac

xx_lnk_ram.xcl is a linker command file that allows to the test code to be targeted to the TMS470 Evaluation Board. This file basically indicates where code and data will be located in memory. Test code is assumed to be placed in RAM using a J-Tag emulator (in this case, a J-Link). Note that it’s assumed that the test code will run out of RAM. You should be able to relink the code using a different .XCL file to locate the code to the on-chip Flash.
xcl文件告知iar,Project分配的ram和rom空间有多大,开始与结束地址、堆栈等设置。它是xlink.exe运行时的参数。
实际调试程序时,遇到段定义的链接错误时,一般检查xcl文件是否设置好。
xxx_setup_ram.mac is a macro file that tells the debugger how to configure the memory map and various clock registers for the targeted chip prior to main() being called. This is necessary in order to mirror the RAM to address 0x00 which is where the interrupt vectors are located.
mac文件是在main调用之前,对芯片做初始化的宏定义,说明如何配置内存映射以及各种时钟寄存器。

使用特权

评论回复
7
金鱼木鱼| | 2010-12-26 10:56 | 只看该作者
iar 中mac文件中CheckRemap()分析
CheckRemap()
{
//* Read the value at 0x0
    __mac_i_hb=__readMemory32(0x00000000,"Memory"); //读出0x0000地址上的数据。
    __mac_i =__mac_i_hb+1; //加1后再写进去
    __writeMemory32(__mac_i,0x00,"Memory");
    __mac_pt =__readMemory32(0x00000000,"Memory");//再读出来。
    __writeMemory32(__mac_i_hb,0x00,"Memory");//数据还原
   
if (__mac_i_hb!= __mac_pt) //如不相等,就说明没有把读据写入flash了,就说明是remap了。
{
   __message "------------------------------- The Remap is done ----------------------------------------"; //打出信息
//*   Toggel RESET The remap
    __writeMemory32(0x00000001,0xFFFFFF00,"Memory");
  
} else { //如果相等就说明是写入ram了。
   __message "------------------------------- The Remap is NOT -----------------------------------------";
}
}
因为在arm中Flash不能通过str这样的程序写入数据,只能用jtag写入.先写0x0一个数,然后读出来,如果写成功,说明RAM映射在 0x0的位置,如果RAM不是映射到0x0的位置,肯定就写到flash里去了。这样写flash是写不进的。如果写不成功,就写映射寄存器

使用特权

评论回复
8
金鱼木鱼| | 2010-12-26 10:58 | 只看该作者
用IAR EWARM开发嵌入式系统时目标代码的链接与定位

摘 要 采用IAR EWARM集成开发工具进行ARM嵌入式系统开发,具有高效和灵活的特点,可以生成多种格式的目标文件。源程序经编译后生成包含数据或代码存储器逻辑映像 的数据段和代码段,必须经过合理的链接定位,才能保证最终目标代码能够下栽到系统的Flash内并正确运行。
  关键词 ARM嵌入式系统开发 IAR EWARM 编译器


1 数据段和代码段的作用
   IAR C/C-+编译器是一种具有世界先进水平的标准C/C-+编译器,支持符合ANSI C标准的C或C++编程语言。源程序经编译后生成包含数据或代码存储器逻辑映像的数据段和代码段。每个段都有一个段名和一个表示其存储器空间的段类型。段 类型CODE表示ROM中的执行代码,段类型CONST表示ROM中的数据,段类型DATA表示RAM中的数据。段名可与段类型相同,但其意义不一样,实 际使用时不能混淆。表l所列为IAR C/C++编译器所使用的各种段、段类型及其读/写属性说明。
1.1 数据段
  数据位于DATA段中,包括静态(static)存储器、堆栈(stack)、堆(heap)以及已定位的数据。DATA段可以带有后缀。例如,DATA_C用于常数数据,包括文字字符串;DATA_Z用于无初值或用0初值声明的静态和全局变量。
   全局变量或已声明的静态变量保存在静态存储器空间。已声明的静态变量有:初值为O或非0的变量、采用“@”或“#pragma”操作符定位了的变量、被 声明为“const”因而可在ROM中保存的变量,以及采用关键字“__no_init”定义不允许被初始化的变量等。
  堆栈用于为函数保存 局部变量及其他临时数据,是由堆栈指针寄存器SP指向的一段连续存储器。作为堆栈的数据段称为“CSTACK”。初始化模块cstartup将堆栈指针初 始化为指向CSTACK段的尾部。堆栈容量在很大程度上取决于具体程序操作细节。如果给定的堆栈容量太小,则会使堆栈中的数据发生覆盖而导致程序出错;如 果给定的堆栈容量太大,则会浪费RAM空间。ARM核处理器支持5种异常工作模式,每种模式都有自己的堆栈,用户应在启动代码中分别初始化各个堆栈指针, 并在链接器命令文件中进行段定位。
 

   堆用于保存动态分配数据。作为堆的数据段称为“HEAP”,它仪在使用动态存储器分配时才被包含到应用系统中。与CSTACK段类似,HEAP段容量的 大小需要视具体应用而定。使用标准输入/输出库时,应将HEAP容量设置为满足对标准输入/输出进行缓冲的要求,通常为512字节。
  明确指定了地址的变量将被定位在DATA_AC段或DATA_AN段。DATA_AC段用于初始化为常数的数据,DATA_AN段用于声明为“__no_init”的变量。
1.2 代码段
  代码段包括启动代码、普通代码和异常向最。
  启动代码位于ICODE段,包括系统启动(cstartup)、运行初始化(cmain)和系统终止(cexit)等代码。ICODE段必须被定  位在一段连续的存储器空间,链接器命令文件中不能采用-P命令选项来定位ICODE段。启动代码通过复位向量调用。
   普通代码位于CODE段,其中保存普通函数的执行代码。CODE段可以带有后缀,如CODE_I段保存由CODE_ID段初始化并在RAM中执行的代 码。与编译器对已初始化变量的处理类似,代码运行时将ROM存储器中初始化时段的内容复制到  RAM存储器中再执行。普通代码段还与符号及调试信息有 关。
  异常向量位于INTVEC段。如果在异常向量处使用跳转到异常句柄的指令(如B指令),则异常句柄必须位于跳转指令能够到达的范围之内,使用PC加载指令(如LDR PC指令)则不存在这个问题。


2 段在存储器中的定位
  IAR C编译器所生成的段需要通过XLINK链接器根据链接命令文件中一系列命令选项的规定在存储器中进行定位,才能保证目标代码的正常运行。链接命令文件是一种文本文件,以“.xcl”为扩展名,其中包含各种XLINK命令选项。
  最常用的命令选项有:CPU命令选项-C、常数定义命令选项D、段定位命令选项-Z或-P。
“-c”命令选项用于规定用户系统所采用的CPU,如:-carm。
“-D”命令选项用于规定存储器的起始和终止地址,如:
-DROMSTART=40000040
-DROMEND=40006FFF
“-D”命令选项也可用于定义堆栈长度或其他常数,如:
-D_CSTACK——STZE=2048
-D_IRQ_STACK_SIZE=5l2
“-Z”命令选项按段出现的顺序进行定位,对每个存储器范围要指定其终点,如:
-Z(CONST)MYSEGMENTA,MYSEGMENTB=008000-OFFFFF
两个不同类型的段如果不指定第2个段的范围,则可以定位在同一个存储器区域之内,如:
-Z(CONST)MYSEGMENTA=008000-0FFFFF
-Z(CODE)MYCODE
两段存储器范围可以覆盖,从而允许具有不同定位要求的段共享部分存储器空间,如:
-Z(CONST)MYSMALLSEGMENT=008000-000FFF
-Z(CONST)MYLARGESEGMENT=008000-OFFFFF
“-P”命令选项以非连续方式进行段定位,可充分利用存储器空间,如:
-P(DATA)MYDATA=100000-101FFF,110000-11lFFF
如果用户应用系统还有一段RAM位于存储器
0x10F000~Oxl0F7FF,只要将这段范围加到上述命令中即可:
-P(DATA)MYDATA=100000-10lFFF,10F00010F7FF,110000-11lFFF


3 链接命令文件应用举例
   链接器命令文件的作用足通知XLLINK链接器,根据文件中给定的命令选项在存储器中进行各种段定位;由于ARM核处理器的种类繁多,各处理器的存储器 配置也不尽相同,因此链接器命令文件通常需要根据具体应用系统硬件设计进行定制,以保证代码和数据在给定的存储器范围之内不发生越界而导致错误。
  下面以Philips公司的LPC2148 ARM核处理器芯片为例,说明如何定制XLINK链接命令文件。LPC2148具有32 KB片内SRAM和512 KB片内Flash,其存储器地址如下。
  片内Flash:0x00000000~Ox0007FFFF。
  片内SRAM:0x40000000~0x413007FFF。
  针对LPC2148所具有的存储器地址范围,可分别定制,在片内SRAM中或在片内Flash中,调试应用程序的XLINK链接命令文件。
  (1)在片内SRAM中调试应用程序的链接命令文件
 



(2)在片内Flash中调试应用程序的链接命令文件
  对上述链接命令文件进行适当修改后可以用于在LPC2148片内Flash中调试应用程序,主要是重新规定代码段和数据段的存储器地址,有时还要重新定义堆栈(stack)和堆(heap)的长度。下面仅列出修改后的部分,其他相同部分略去:




4 结论
   采用IAR EWARM集成环境开发ARM嵌入式系统,需要通过链接命令文件通知XLINK链接器如何对C编译器生成的代码和数据段进行链接和定位。用户需要熟悉所使 用ARM核处理器的SRAM和Flash存储器配置,并根据实际可用地址空间来确定采用哪些XLINK命令选项。只有采用合适命令选项对代码和数据段进行 正确定位,生成可靠的执行代码,最后将执行代码写入到Flash中,才能成功完成ARM嵌入式系统设计;否则,即使编写的C源程序再优化,也起不到其应有 的作用。

使用特权

评论回复
9
金鱼木鱼| | 2010-12-26 11:03 | 只看该作者
IAR  XCL是得自己写吗?

使用特权

评论回复
10
金鱼木鱼| | 2010-12-26 11:51 | 只看该作者
IAR的workspace文件组织

  初学者在开始的时候往往是先看别人的例程,但是在看例程的时候往往容易被项目中那么多的文件迷住了双眼,到底哪些文件是最重要的呢?下面我们一起从零开始自己动手建一个简单的项目,这样在看别人的项目时至少对一个项目到底包含了哪些文件做到心里有底。

  在初学IAR的时候,如果英文还可以的话,程序自带的USER GUIDE就是一个不错的教程。下面的例子就来源于其中的“Tutorials”。首先我们专门建立一个文件夹名字为"test",然后把\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation version\8051\tutor里的tutor.c, utilities.c, utilities.h三个文件复制到test文件夹,新建IAR项目,把其中的.c文件添加进项目里面(由于本文只针对性说明workspace的文件组织,并不是IAR的教程,有些细节就省略了)。我们似乎更习惯于项目里只有这三个文件,但实际上不是的,有很多我们不认识的文件,他们是何方神圣?先上图,然后一一道来。。。

  项目由两个.c文件和一个output文件夹组成,其中output文件夹中包括了程序的最终编译结果test.d51,点开这个文件,发现下面又有5个文件,tutor.r51, utilities.r51分别为两个.c文件编译出的相对目标文件,两个.xcl均为linker用的参数,另外一个.r51文件我也没花时间去研究,估计可能是"startup"一类,IAR为TI的MCU提供的底层驱动。

  每个.c文件下面都包括一个output文件夹与.h文件簇,output文件夹中有两个文件,一个是.r51一个是.pbi,其中.pbi文件是compiler的参数,r51文件与上述相同。下面重点说明下.h文件的构成,因为在编程中我们更关注的是.h与.c文件。

  我们只手工拷贝了utilities.h一个文件,可是为什么会有这么多我们不认识的呢?IAR的workspace有一个智能功能,那就是自己搜索.c文件中需要用到的.h文件并显示出来。以utilities.c下面的.h为例:打开utilities.c,我们可以看到文件中包含
#include <stdio.h>
#include "utilities.h"
所以workspace中有这两个文件就不足为奇了,我们做个小实验,删除#include "utilities.h"这一行,保存,看看发生什么了?"utilities.h"是不是不见了?再把这行加上去呢?~~~~好了,我们知道这两个.h的来源了,那stdarg.h和sysmac.h是哪来的呢?不急,打开stdio.h看看能不能找到答案呢?对了,在这里--#include "stdarg.h",再打开这个文件,是不是sysmac.h的老家也被我们找到了呢?至此,所有的.h文件原形毕露啦~~~(说明:在项目被编译过之后,编译前已经添加的.h文件就不会再被删除了,我也没明白why...)

现在回头看看整个项目的文件是不是爽了很多呢:victory:

使用特权

评论回复
11
金鱼木鱼| | 2010-12-26 12:16 | 只看该作者
IAR,怎样输出Hex文件??

使用特权

评论回复
12
金鱼木鱼| | 2010-12-26 12:43 | 只看该作者
IAR EWARM使用指南 (转贴)- xcl文件

之前用ADS1.2,支持的IC越来越少,转到IAR下,编译的时候有不少错误,找来一点资料就解决掉了,转过来

希望可以帮到有需要的人;

本指南介绍了IAR Embedded Workbench for ARM 4.xx版本和5.xx版本之间的主要区别,并列举了将在4.xx版本下创建的工程迁移到5.xx版本时所需进行的主要工作。用户一般只需按照说明进行改动,如遇到未在本指南中说明的特殊部份,可以查阅IAR Embedded Workbench for ARM 5.xx所带的Migration Guide(EWARM_MigrationGuide.pdf)(需要详细的文档,请发邮件至:sale@bmrtech.com


              1 迁移概述

              1.1 EWARM版本4.xx与5.xx的区别

              IAR EWARM在版本4.xx与5.xx之间的主要区别是建立目标代码所用的文件格式不同。在4.xx版本下,IAR使用的是私有的UBROF格式,而5.xx版本下使用的是业界标准格式ELF/DWARF。遵循ARM公司提出的ABI(Application Binary Interface)标准,EWARM 5.xx提供了目标文件级别的兼容性,即其它ABI兼容工具生成的目标库可以与EWARM生成的目标文件一起链接并调试;同时EWARM生成的目标库也能在其它ABI兼容工具里参与链接和调试,使得应用程序的开发更具灵活性。当然,这也意味着EWARM 5.xx里使用了全新版本的链接器ILINK来取代原先所用的XLINK,从而导致链接器配置文件也使用了新的格式:ICF,而不再是原先的XCL。关于这两种配置文件的格式和内容,下面还会详细介绍。

              1.2 迁移工作

              因为EWARM 4.xx和5.xx之间存在的上述差异,使得在4.xx版本下面创建的Project不能直接在5.xx版本中使用。对于EWARM的新用户,或者有经验的用户开发新的项目来说,首选的建议是基于5.xx中的相关例程来建立新的Project。如果在某些情况下,不得不基于以前在4.xx下所创建的Project进行工作,则一般来说可能会有以下几个方面需要修改:


1.    C/C++语言源代码

2.    汇编语言源代码

3.    链接器配置文件

4.    运行时环境和目标文件

5.    工程配置文件

对于具体的应用程序来说,通常并不是上面提到的每个部份都需要考虑。下面主要针对链接器配置文件的修改来介绍迁移过程中需要注意的内容。


              2 链接器和链接器的配置

              2.1 EWARM 4.xx的链接器XLINK及其配置文件.xcl

              XLINK链接器可以把IAR汇编器或编译器所产生的可重定位的UBROF目标文件转换成针对目标处理器的机器码。XLINK一般通过外部链接器命令文件(*.xcl)来配置,当然也可以在命令行中直接在xlink命令之后输入链接选项,或者也可以在XLINK_ENVPAR环境变量中设置链接选项。下面介绍XCL文件中常用的链接选项,以便在版本迁移之前,确切地了解XCL文件的含义。

              2.2 XLINK选项

              下面介绍几个XCL文件中常见的链接器配置选项。更详细的内容请查阅XLINK的参考手册:IAR Linker and Library Tools Reference Guide。

-D -Dsymbol=value

作用:

使用-D选项可以定义一些纯粹的符号,一般用于声明常数。

参数:

symbol是未在其它地方定义过的外部符号,value是symbol所代表的值。例如:

就定义了2个标识了ROM起始和结束地址的符号,这样以后关于ROM地址的配置都可以直接使用这2个符号,使得配置文件的可读性增强。

-Z -Z [@] [(SPLIT-)type] segments [=|#] range [, range] …

作用:

使用-Z命令的目的是规定segments在存储空间中占据的位置和区间。如果链接器发现某个segment没有使用-Z,-b或者-P中的任何一个命令进行定义,则会报错。

参数:

@ 使用@参数,表示为segments分配空间时不考虑任何已经被使用的地址空间。这适用于当某些segments的地址空间需要发生重叠的情形。

type 参数type规定了segments的存储类型,默认为UNTYPED。表1列举了IAR的ARM C/C++编译器所支持的segments类型。

-Q -Q segment = initializer_segment

作用:

自动设置segment的拷贝初始化。链接器会产生一个新的initializer_segment(如CODE_ID),其内容与segment(如CODE_I)完全一致。相关的符号表和调试信息都会和segment相关联(如CODE_I)。initializer_segment的内容(通常在ROM中)必须在初始化阶段被复制到segment(通常在RAM中)。

-c -cprocessor

作用:

规定目标处理器的类型。如-carm。


              2.3 EWARM 5.xx的链接器ILINK及其配置文件.icf

EWARM 5.xx中的链接器称为ILINK。ILINK可以从ELF/DWARF格式的目标文件中提取代码和数据,并生成可执行映像。在EWARM 4.xx中,基本的代码和数据链接单元是segment,而对于ELF/DWARF格式而言,基本链接单元是section。ILINK根据ILINK Configuration File(*.icf)来分配这些sections。由于XLINK与ILINK是两个完全不同的链接器,所以XCL和ICF也是两种完全不同的配置文件。下面简要介绍ICF文件的格式和内容,以协助用户完成版本迁移。

              2.4 ICF格式浅析


sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理解ICF文件的内容尤其重要。


一个标准的ICF文件可包括下面这些内容:

1.       可编址的存储空间(memory)

2.       不同的存储器地址区域(region)

3.       不同的地址块(block)

4.       Section的初始化与否

5.       Section在存储空间中的放置


下面介绍了几条ICF文件中常见的指令,详细内容请参考ILINK相关说明文档(EWARM_DevelopmentGuide.pdf):

define [ exported ] symbol name = expr;

作用:

指定某个符号的值。

参数:

exported 导出该symbol,使其对可执行镜像可用

name 符号名

expr 符号值

举例:

define symbol RAM_START_ADDRESS = 0x40000000;

define symbol RAM_END_ADDRESS = 0x4000FFFF;

define memory name with size = expr [, unit-size];

作用:

定义一个可编址的存储地址空间(memory)。

参数:

name memory的名称

expr 地址空间的大小

unit-size expr的单位,可以是位(unitbitsize),缺省是字节(unitbytesize)

举例:

define memory MEM with size = 4G;

define region name = region-expr;

作用:

定义一个存储地址区域(region)。一个区域可由一个或多个范围组成,每个范围内地址必须连续,但几个范围之间不必是连续的。

参数:

name region的名称

region-expr memory:[from expr { to expr | size expr}],可以定义起止范围,也可以定义起始地址和region的大小

举例:

define region ROM = MEM:[from 0x0 size 0x10000];

define region ROM = MEM:[from 0x0 to 0xFFFF];


define block name[ with param, param... ]

{

extended-selectors

};

作用:

定义一个地址块(block);它可以是个空块,比如栈、堆;也可以包含一系列sections。

参数:

name block的名称

param 可以是: size = expr (块的大小)

maximum size = expr (块大小的上限)

alignment = expr (最小对齐字节数)

fixed order (按照固定顺序放置sections)

extended-selector [ first | last ] { section-selector | block name | overlay name }

first 最先存放

last 最后存放

section-selector [ section-attribute ][ section sectionname ][object filename ]

section-attribute [ readonly [ code | data ] | readwrite [ code | data ] | zeroinit ]

sectionname section的名称

filename 目标文件的名称

即可以按照section的属性,名称及其所在目标文件的名称这三个过滤条件中,任意选取一个条件,或选取多个条件进行组合,来圈定所要求的sections。

name block或overlay的名称

举例:

define block HEAP with size = 0x1000, alignment = 4 { };

define block MYBLOCK1 = { section mysection1, section mysection2, readwrite };

define block MYBLOCK2 = { readonly object myfile2.o };

initialize { by copy | manually } [ with param, param... ]

{

section-selectors

};

作用:

初始化sections。

参数:

by copy 在程序启动时自动执行初始化。

manually 在程序启动时不自动执行初始化。

param 可以是: packing = { none | compress1 | compress2 | auto }

copy routine = functionname

packing表示是否压缩数据,缺省是auto。

functionname表示是否使用自己的拷贝函数来取代缺省函数。

section-selector 同上

举例:

initialize by copy { rw };


do not initialize

{

section-selectors

};

作用:

规定在程序启动时不需要初始化的sections。一般用于__no_init声明的变量段(.noinit)。

参数:

section-selector 同上

举例:

do not initialize { .noinit };

place at { address memory[: expr] | start of region_expr | end of region_expr }

{

extended-selectors

};

作用:

把一系列sections和blocks放置在某个具体的地址,或者一个region的开始或者结束处。

参数:

memory memory的名称

expr 地址值,该地址必须在memory所定义的范围内

region_expr region的名称

extended-selector 同上

举例:

place at start of ROM { section .cstart }; place at end of ROM { section .checksum }; place at address MEM:0x0 { section .intvec };

place in region-expr

{

extended-selectors

};

作用:

把一系列sections和blocks放置在某个region中。sections和blocks将按任意顺序放置。

参数:

region-expr region的名称

extended-selector 同上

举例:

place in ROM { readonly }; /* all readonly sections */ place in RAM { readwrite }; /* all readwrite sections */

place in RAM { block HEAP, block CSTACK, block IRQ_STACK }; place in ROM { section .text object myfile.o }; /* the .text section of myfile.o */ place in ROM { readonly object myfile.o }; /* all read-only sections of myfile.o */ place in ROM { readonly data object myfile.o }; /* all read-only data sections myfile.o */


3 其它

如果在EWARM 5.xx中直接打开4.xx所创建的工程文件,会有对话框询问是否自动将其转换成5.xx的工程文件;若选择OK,4.xx的工程文件会被转换成5.xx的工程文件,当然原来的4.xx工程文件也会自动生成一个备份。某些配置信息无法被自动带入5.xx的工程,如链接器配置文件的路径等,因此请仔细检查相关的编译、汇编或链接选项,确保它们具有正确的设置。各配置选项的含义可参阅EWARM_UserGuide.pdf的Part 7.


在EWARM 5.xx版本中,默认的程序入口符号(Program Entry)由原先的__program_start更改为__iar_program_start,因此对于旧的4.xx汇编代码而言,需要更改这个入口符号名;当然也可以在EWARM 5.xx的Linker配置选项中修改默认的Program Entry。

在EWARM 4.xx版本中,在Linker配置选项的Output和Extra Output选项卡中都可以选择生成除UBROF格式之外的其他格式输出文件。在EWARM 5.xx中,Linker只能生成ELF/DWARF格式的输出文件,若需要Motorola S-Record,Intel HEX或简单Binary等其它格式的文件,可在Output Converter配置选项中设置。

在从EWARM 4.xx向5.xx版本的迁移过程中,除了需要更改链接器配置文件之外,可能还需要根据应用程序的具体情况,对某些其它方面做小的修改,如C/C++源代码和汇编语言源代码等,必要时可以参考IAR Embedded Workbench for ARM 5.xx所带的Migration Guide(EWARM_MigrationGuide.pdf)。

使用特权

评论回复
13
金鱼木鱼| | 2010-12-26 14:05 | 只看该作者
三代示波器的比较

1946年霍华.卫林Howard Vollum先生等, Tektronix公司的创始人们制造了第一台商用示波器。从此示波器成为了电子工程师们的眼睛,透过它可以探索电子科技领域的无限未来……

        在这里,我们来谈谈传统模拟示波器( ART),数字存储示波器 DSO以及最新的,以数字荧光技术为核心的数字荧光示波器( DPO)。

        传统模拟示波器ART是第一代示波器产品,拥有极佳的“波形更新率”(约每秒超过二十万次),它仅仅在扫描的回扫时间及闭锁Hold off时间内不采样信号,因此又称为模拟实时示波器(Analog Real Time Oscilloscope)。在显示方面,CRT显示是靠电子束激发荧光屏上的荧光物质,因此模拟示波器除显示时间与振幅的关系外,尚可显示信号能量的变化,即振幅跟随时间的分布,这样,模拟示波器就能够清楚地辨别信号主体与噪声间的分别,尤其是在观察复杂动态的信号时,模拟示波器一度成为工程师的最爱。
        但是,模拟示波器有许多致命的缺点:由于CRT的萤光物质Phosphor会随时间逐渐消失,在观测低频信号时模拟示波器受仅能显示一个移动的亮点,而不能再现信号的轨迹;对于单次信号,如上电、复位信号,因为模拟示波器没有存储功能,所以不能让信号暂时停下来,工程师们只能走马观花地观察信号,如果信号再快些,将看不到信号;在触发方面,模拟示波器只有电平触发,而没有预触发和其它高级触发方式,这对于系统中多种异常信号是捕获不到的,并且不能看见事件发生前的信号情况;在测量方面,模拟示波器必须依赖屏幕上的刻度尺采用人工方式进行,会引进较大的人为误差;最最致命的是:随着电子科技的日新月异,“速度”便成为核心竞争力的来源,信号速度越快示波器所需的频宽也越高,而高频的模拟示波器的制作难度集中到“CRT”上,100M带宽以上的CRT其成本急剧提高,曾经有1GHz频宽的模拟示波器但它一半以上的成本来自CRT,其价格比目前3GHz频宽的数字示波器。还贵基于上述种种本质上的不足,工程师们不得不另结新欢,从而成就了数字存储示波器Digital Storage Oscilloscope的诞生。

        在1978年出现了数字储存示波器简称DSO,它是公认的第二代示波器产品。从结构上来看,如图一和图二,与模拟示波器相比,DSO增加了数字环节,数字环节加强了触发能力,增加了自动测量功能,并且能够存储捕获的信号,能轻松地制作文本档案。在显示方面,采用液晶显示器,解决了带宽对CRT的限制,并在显示器的寿命方面有很大提高。因此,DSO从根本上解决了模拟示波器的缺陷,为工程师提供了新的、高效率的测量工具。





        然而,我们在很多的工作台上仍然看到模拟示波器,甚至看到模拟示波器和数字模拟示波器同台表演的现象。为什么呢?

        从结构来讲,模拟示波器从信号采集一直到在CRT上显示出波形都是纯粹的模拟通道,仅仅在扫描的回扫时间及闭锁Hold off时间内不采样信号 ,因此,可以有很好的波形刷新率,一般在200,000次/秒左右;而数字存储示波器在采集信号后,要进行A/D转换、数据计算数据存储等一系列数据处理,即花费了毫秒级的时间后才进行波形再现,而且在数据处理时,仪器是不进行信号采集的,也就是说DSO有几个毫秒级的盲区,在这个盲区内出现的异常信号将被漏失。另外,在显示效果上,数字存储示波器只能两维(幅度、时间)地显示捕获的信号,而不能表达幅度随时间的变化频率,即没有灰度级变化的显示。

        所以,在波形捕获率和显示效果上,数字存储示波器相对模拟示波器有很大的差距,这个差距是本质的,是数字存储示波器自身不能解决的,因此,模拟示波器和数字存储示波器理所当然要同台竞技了。



        在以上的背景下,美国Tektronix公司推出了以数字荧光技术为核心的第三代示波器,数字荧光示波器(DPO)。

        数字荧光示波器是以三维数组的形式,即以幅度、时间以及振幅随时间变化的分布情况的三维信息进行数据采集、处理、存储以及显示,仪器在本质上有了明显的突破。它是一款纯数字的示波器,具有数字存储示波器DSO结构上的所有传统优点,如强大的触发、自动测量、波形存储、文档处理等功能。

        从结构上来说,如下图四,数字荧光示波器(DPO)将显示单元和数据处理单元形成并行的结构,中心处理器只作数据的数学处理,显示方面的处理由数字荧光单元完成。这样,示波器在处理器进行数据处理的同时,数字荧光单元也不停地工作,不断地刷新屏幕显示。也就是说,处理器从显示管理任务中解放出来,可以更专心的进行数据处理,从而提高了仪器对波形数据的处理能力;而在波形显示方面,有了以数字荧光单元为核心的专门通道。配合液晶显示器,波形的捕获率有了质的提高,目前最高已经达到400,000次/秒,终于又在波形刷新率方面超越了模拟实时示波器的极限;并且,数字荧光示波器的三维数组结构还能实现彩色亮度层次的荧光显示效果,即不仅能实现灰度级显示还能做到彩色显示。



        综上所述,数字荧光示波器在技术上已经把前两代示波器产品,数字模拟示波器和数字存储示波器的优点集中到一起,是名副其实的第三代示波器产品,并且数字荧光技术已经在中档产品中得到应用,例如Tektronix公司推出的TDS3000B系列示波器我们希望也相信会有越来越多的示波器产品运用到这样的技术,作为仪器仪表的供应商,我们由衷地祝愿每一名电子工程师都能使用上适合自己的测试工具!

使用特权

评论回复
14
nongfuxu| | 2010-12-26 14:36 | 只看该作者
保证地电流隔离
老大的幸福说得太精确了!
归纳
  1. 保证地电流隔离(传导)
  2.尽量减小电磁感应回路(辐射)
  3.高频走线尽可能短,尽可能等长度(时延及失真)
  4.地尽可能大,电源线多加点退耦C(阻抗小)
  5.长走线加阻抗匹配电阻(高频反射)

使用特权

评论回复
15
dsoyy| | 2010-12-26 16:18 | 只看该作者
RF电路的PCB设计技巧   ,下载下来,看了一遍不错,收藏

使用特权

评论回复
16
奔腾2.0| | 2010-12-26 18:38 | 只看该作者
:L

使用特权

评论回复
17
wateras| | 2013-12-26 18:28 | 只看该作者
谢谢分享正好需要

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

360

帖子

1

粉丝