最新日志

发表于:2008-5-31 12:50:13
标签:运放  选型  应用  

0

模拟运算放大器的原理、选用原则和实际应用1

1. 模拟运放的分类及特点
    模拟运算放大器从诞生至今,已有40多年的历史了。最早的工艺是采用硅NPN工艺,后来改进为硅NPN-PNP工艺(后面称为标准硅工艺)。在结型场效应管技术成熟后,又进一步的加入了结型场效应管工艺。当MOS管技术成熟后,特别是CMOS技术成熟后,模拟运算放大器有了质的飞跃,一方面解决了低功耗的问题,另一方面通过混合模拟与数字电路技术,解决了直流小信号直接处理的难题。
    经过多年的发展,模拟运算放大器技术已经很成熟,性能曰臻完善,品种极多。这使得初学者选用时不知如何是好。为了便于初学者选用,本文对集成模拟运算放大器采用工艺分类法和功能/性能分类分类法等两种分类方法,便于读者理解,可能与通常的分类方法有所不同。
1.1.根据制造工艺分类
    根据制造工艺,目前在使用中的集成模拟运算放大器可以分为标准硅工艺运算放大器、在标准硅工艺中加入了结型场效应管工艺的运算放大器、在标准硅工艺中加入了MOS工艺的运算放大器。按照工艺分类,是为了便于初学者了解加工工艺对集成模拟运算放大器性能的影响,快速掌握运放的特点。
    标准硅工艺的集成模拟运算放大器的特点是开环输入阻抗低,输入噪声低、增益稍低、成本低,精度不太高,功耗较高。这是由于标准硅工艺的集成模拟运算放大器内部全部采用NPN-PNP管,它们是电流型器件,输入阻抗低,输入噪声低、增益低、功耗高的特点,即使输入级采用多种技术改进,在兼顾起啊挺能的前提下仍然无法摆脱输入阻抗低的问题,典型开环输入阻抗在1M欧姆数量级。为了顾及频率特性,中间增益级不能过多,使得总增益偏小,一般在80~110dB之间。标准硅工艺可以结合激光修正技术,使集成模拟运算放大器的精度大大提高,温度漂移指标目前可以达到0.15ppm。通过变更标准硅工艺,可以设计出通用运放和高速运放。典型代表是LM324。
    在标准硅工艺中加入了结型场效应管工艺的运算放大器主要是将标准硅工艺的集成模拟运算放大器的输入级改进为结型场效应管,大大提高运放的开环输入阻抗,顺带提高通用运放的转换速度,其它与标准硅工艺的集成模拟运算放大器类似。典型开环输入阻抗在1000M欧姆数量级。典型代表是TL084。
在标准硅工艺中加入了MOS场效应管工艺的运算放大器分为三类,一类是是将标准硅工艺的集成模拟运算放大器的输入级改进为MOS场效应管,比结型场效应管大大提高运放的开环输入阻抗,顺带提高通用运放的转换速度,其它与标准硅工艺的集成模拟运算放大器类似。典型开环输入阻抗在10^12欧姆数量级。典型代表是CA3140。
    第二类是采用全MOS场效应管工艺的模拟运算放大器,它大大降低了功耗,但是电源电压降低,功耗大大降低,它的典型开环输入阻抗在10^12欧姆数量级。
第三类是采用全MOS场效应管工艺的模拟数字混合运算放大器,采用所谓斩波稳零技术,主要用于改善直流信号的处理精度,输入失调电压可以达到0.01uV,温度漂移指标目前可以达到0.02ppm。在处理直流信号方面接近理想运放特性。它的典型开环输入阻抗在10^12欧姆数量级。典型产品是ICL7650。
1.2.按照功能/性能分类
本分类方法参考了《中国集成电路大全》集成运算放大器。
按照功能/性能分类,模拟运算放大器一般可分为通用运放、低功耗运放、精密运放、高输入阻抗运放、高速运放、宽带运放、高压运放,另外还有一些特殊运放,例如程控运放、电流运放、电压跟随器等等。实际上由于为了满足应用需要,运放种类极多。本文以上述简单分类法为准。
需要说明的是,随着技术的进步,上述分类的门槛一直在变化。例如以前的LM108最初是归入精密运放类,现在只能归入通用运放了。另外,有些运放同时具有低功耗和高输入阻抗,或者与此类似,这样就可能同时归入多个类中。
通用运放实际就是具有最基本功能的最廉价的运放。这类运放用途广泛,使用量最大。
低功耗运放是在通用运放的基础上大降低了功耗,可以用于对功耗有限制的场所,例如手持设备。它具有静态功耗低、工作电压可以低到接近电池电压、在低电压下还能保持良好的电气性能。随着MOS技术的进步,低功耗运放已经不是个别现象。低功耗运放的静态功耗一般低于1mW。
精密运放是指漂移和噪声非常低、增益和共模抑制比非常高的集成运放,也称作低漂移运放或低噪声运放。这类运放的温度漂移一般低于1uV/摄氏度。由于技术进步的原因,早期的部分运放的失调电压比较高,可能达到1mV;现在精密运放的失调电压可以达到0.1mV;采用斩波稳零技术的精密运放的失调电压可以达到0.005mV。精密运放主要用于对放大处理精度有要求的地方,例如自控仪表等等。
高输入阻抗运放一般是指采用结型场效应管或是MOS管做输入级的集成运放,这包括了全MOS管做的集成运放。高输入阻抗运放的输入阻抗一般大于109欧姆。作为高输入阻抗运放的一个附带特性就是转换速度比较高。高输入阻抗运放用途十分广泛,例如采样保持电路、积分器、对数放大器、测量放大器、带通滤波器等等。
高速运放是指转换速度较高的运放。一般转换速度在100V/us以上。高速运放用于高速AD/DA转换器、高速滤波器、高速采样保持、锁相环电路、模拟乘法器、机密比较器、视频电路中。目前最高转换速度已经可以做到6000V/us。
宽带运放是指-3dB带宽(BW)比通用运放宽得多的集成运放。很多高速运放都具有较宽的带宽,也可以称作高速宽带运放。这个分类是相对的,同一个运放在不同使用条件下的分类可能有所不同。宽带运放主要用于处理输入信号的带宽较宽的电路。
高压运放是为了解决高输出电压或高输出功率的要求而设计的。在设计中,主要解决电路的耐压、动态范围和功耗的问题。高压运放的电源电压可以高于±20VDC,输出电压可以高于±20VDC。当然,高压运放可以用通用运放在输出后面外扩晶体管/MOS管来代替。
2. 运放的主要参数
本节以《中国集成电路大全》集成运算放大器为主要参考资料,同时参考了其它相关资料。
集成运放的参数较多,其中主要参数分为直流指标和交流指标。
其中主要直流指标有输入失调电压、输入失调电压的温度漂移(简称输入失调电压温漂)、输入偏置电流、输入失调电流、输入偏置电流的温度漂移(简称输入失调电流温漂)、差模开环直流电压增益、共模抑制比、电源电压抑制比、输出峰-峰值电压、最大共模输入电压、最大差模输入电压。
主要交流指标有开环带宽、单位增益带宽、转换速率SR、全功率带宽、建立时间、等效输入噪声电压、差模输入阻抗、共模输入阻抗、输出阻抗。
2.1  直流指标
输入失调电压VIO:输入失调电压定义为集成运放输出端电压为零时,两个输入端之间所加的补偿电压。输入失调电压实际上反映了运放内部的电路对称性,对称性越好,输入失调电压越小。输入失调电压是运放的一个十分重要的指标,特别是精密运放或是用于直流放大时。输入失调电压与制造工艺有一定关系,其中双极型工艺(即上述的标准硅工艺)的输入失调电压在±1~10mV之间;采用场效应管做输入级的,输入失调电压会更大一些。对于精密运放,输入失调电压一般在1mV以下。输入失调电压越小,直流放大时中间零点偏移越小,越容易处理。所以对于精密运放是一个极为重要的指标。

输入失调电压的温度漂移(简称输入失调电压温漂)αVIO:输入失调电压的温度漂移定义为在给定的温度范围内,输入失调电压的变化与温度变化的比值。这个参数实际是输入失调电压的补充,便于计算在给定的工作范围内,放大电路由于温度变化造成的漂移大小。一般运放的输入失调电压温漂在±10~20μV/℃之间,精密运放的输入失调电压温漂小于±1μV/℃。

输入偏置电流IIB:输入偏置电流定义为当运放的输出直流电压为零时,其两输入端的偏置电流平均值。输入偏置电流对进行高阻信号放大、积分电路等对输入阻抗有要求的地方有较大的影响。输入偏置电流与制造工艺有一定关系,其中双极型工艺(即上述的标准硅工艺)的输入偏置电流在±10nA~1μA之间;采用场效应管做输入级的,输入偏置电流一般低于1nA。

输入失调电流IIO:输入失调电流定义为当运放的输出直流电压为零时,其两输入端偏置电流的差值。输入失调电流同样反映了运放内部的电路对称性,对称性越好,输入失调电流越小。输入失调电流是运放的一个十分重要的指标,特别是精密运放或是用于直流放大时。输入失调电流大约是输入偏置电流的百分之一到十分之一。输入失调电流对于小信号精密放大或是直流放大有重要影响,特别是运放外部采用较大的电阻(例如10k?或更大时),输入失调电流对精度的影响可能超过输入失调电压对精度的影响。输入失调电流越小,直流放大时中间零点偏移越小,越容易处理。所以对于精密运放是一个极为重要的指标。

输入失调电流的温度漂移(简称输入失调电流温漂):输入偏置电流的温度漂移定义为在给定的温度范围内,输入失调电流的变化与温度变化的比值。这个参数实际是输入失调电流的补充,便于计算在给定的工作范围内,放大电路由于温度变化造成的漂移大小。输入失调电流温漂一般只是在精密运放参数中给出,而且是在用以直流信号处理或是小信号处理时才需要关注。

差模开环直流电压增益:差模开环直流电压增益定义为当运放工作于线性区时,运放输出电压与差模电压输入电压的比值。由于差模开环直流电压增益很大,大多数运放的差模开环直流电压增益一般在数万倍或更多,用数值直接表示不方便比较,所以一般采用分贝方式记录和比较。一般运放的差模开环直流电压增益在80~120dB之间。实际运放的差模开环电压增益是频率的函数,为了便于比较,一般采用差模开环直流电压增益。
共模抑制比:共模抑制比定义为当运放工作于线性区时,运放差模增益与共模增益的比值。共模抑制比是一个极为重要的指标,它能够抑制差模输入==模干扰信号。由于共模抑制比很大,大多数运放的共模抑制比一般在数万倍或更多,用数值直接表示不方便比较,所以一般采用分贝方式记录和比较。一般运放的共模抑制比在80~120dB之间。

电源电压抑制比:电源电压抑制比定义为当运放工作于线性区时,运放输入失调电压随电源电压的变化比值。电源电压抑制比反映了电源变化对运放输出的影响。目前电源电压抑制比只能做到80dB左右。所以用作直流信号处理或是小信号处理模拟放大时,运放的电源需要作认真细致的处理。当然,共模抑制比高的运放,能够补偿一部分电源电压抑制比,另外在使用双电源供电时,正负电源的电源电压抑制比可能不相同。

输出峰-峰值电压:输出峰-峰值电压定义为,当运放工作于线性区时,在指定的负载下,运放在当前大电源电压供电时,运放能够输出的最大电压幅度。除低压运放外,一般运放的输出输出峰-峰值电压大于±10V。一般运放的输出峰-峰值电压不能达到电源电压,这是由于输出级设计造成的,现代部分低压运放的输出级做了特殊处理,使得在10k?负载时,输出峰-峰值电压接近到电源电压的50mV以内,所以称为满幅输出运放,又称为轨到轨(raid-to-raid)运放。需要注意的是,运放的输出峰-峰值电压与负载有关,负载不同,输出峰-峰值电压也不同;运放的正负输出电压摆幅不一定相同。对于实际应用,输出峰-峰值电压越接近电源电压越好,这样可以简化电源设计。但是现在的满幅输出运放只能工作在低压,而且成本较高。

最大共模输入电压:最大共模输入电压定义为,当运放工作于线性区时,在运放的共模抑制比特性显著变坏时的共模输入电压。一般定义为当共模抑制比下降6dB是所对应的共模输入电压作为最大共模输入电压。最大共模输入电压限制了输入信号中的最大共模输入电压范围,在有干扰的情况下,需要在电路设计中注意这个问题。

最大差模输入电压:最大差模输入电压定义为,运放两输入端允许加的最大输入电压差。当运放两输入端允许加的输入电压差超过最大差模输入电压时,可能造成运放输入级损坏。

2.2  主要交流指标
开环带宽:开环带宽定义为,将一个恒幅正弦小信号输入到运放的输入端,从运放的输出端测得开环电压增益从运放的直流增益下降3db(或是相当于运放的直流增益的0.707)所对应的信号频率。这用于很小信号处理。

单位增益带宽GB:单位增益带宽定义为,运放的闭环增益为1倍条件下,将一个恒幅正弦小信号输入到运放的输入端,从运放的输出端测得闭环电压增益下降3db(或是相当于运放输入信号的0.707)所对应的信号频率。单位增益带宽是一个很重要的指标,对于正弦小信号放大时,单位增益带宽等于输入信号频率与该频率下的最大增益的乘积,换句话说,就是当知道要处理的信号频率和信号需要的增以后,可以计算出单位增益带宽,用以选择合适的运放。这用于小信号处理中运放选型。

转换速率(也称为压摆率)SR:运放转换速率定义为,运放接成闭环条件下,将一个大信号(含阶跃信号)输入到运放的输入端,从运放的输出端测得运放的输出上升速率。由于在转换期间,运放的输入级处于开关状态,所以运放的反馈回路不起作用,也就是转换速率与闭环增益无关。转换速率对于大信号处理是一个很重要的指标,对于一般运放转换速率SR<=10V/μs,高速运放的转换速率SR>10V/μs。目前的高速运放最高转换速率SR达到6000V/μs。这用于大信号处理中运放选型。

全功率带宽BW:全功率带宽定义为,在额定的负载时,运放的闭环增益为1倍条件下,将一个恒幅正弦大信号输入到运放的输入端,使运放输出幅度达到最大(允许一定失真)的信号频率。这个频率受到运放转换速率的限制。近似地,全功率带宽=转换速率/2πVop(Vop是运放的峰值输出幅度)。全功率带宽是一个很重要的指标,用于大信号处理中运放选型。

建立时间:建立时间定义为,在额定的负载时,运放的闭环增益为1倍条件下,将一个阶跃大信号输入到运放的输入端,使运放输出由0增加到某一给定值的所需要的时间。由于是阶跃大信号输入,输出信号达到给定值后会出现一定抖动,这个抖动时间称为稳定时间。稳定时间+上升时间=建立时间。对于不同的输出精度,稳定时间有较大差别,精度越高,稳定时间越长。建立时间是一个很重要的指标,用于大信号处理中运放选型。

等效输入噪声电压:等效输入噪声电压定义为,屏蔽良好、无信号输入的的运放,在其输出端产生的任何交流无规则的干扰电压。这个噪声电压折算到运放输入端时,就称为运放输入噪声电压(有时也用噪声电流表示)。对于宽带噪声,普通运放的输入噪声电压有效值约10~20μV。

差模输入阻抗(也称为输入阻抗):差模输入阻抗定义为,运放工作在线性区时,两输入端的电压变化量与对应的输入端电流变化量的比值。差模输入阻抗包括输入电阻和输入电容,在低频时仅指输入电阻。一般产品也仅仅给出输入电阻。采用双极型晶体管做输入级的运放的输入电阻不大于10兆欧;场效应管做输入级的运放的输入电阻一般大于109欧。

共模输入阻抗:共模输入阻抗定义为,运放工作在输入信号时(即运放两输入端输入同一个信号),共模输入电压的变化量与对应的输入电流变化量之比。在低频情况下,它表现为共模电阻。通常,运放的共模输入阻抗比差模输入阻抗高很多,典型值在108欧以上。

输出阻抗:输出阻抗定义为,运放工作在线性区时,在运放的输出端加信号电压,这个电压变化量与对应的电流变化量的比值。在低频时仅指运放的输出电阻。这个参数在开环测试。

3. 运算放大器的对信号放大的影响和运放的选型
    由于运算放大器芯片型号众多,即使按照上述办法分类,种类也不少,细分就更多了,这对于初学者就难免犯晕。本节力求通过几个实际电路的分析,明确运算放大器的对信号放大的影响,最后总结如何选择运放。
CA3140的主要指标为:
项目                单位      参数
输入失调电压            μV       5000
输入失调电压温度漂移    μV/℃    8
输入失调电流            pA        0.5
输入失调电流温度漂移    pA/℃     0.005
   
这样可以计算出,在25℃的温度下的失调误差造成的影响如下:
项目                     单位      参数
输入失调电压造成的误差       μV       5000
输入失调电流造成的误差       μV        0.0045
    合计本项误差为               μV       5000
    输入信号200mV时的相对误差  %         2.5
    输入信号100mV时的相对误差  %         5
    输入信号  25mV时的相对误差  %         20
    输入信号  10mV时的相对误差  %         50
    输入信号   1mV时的相对误差  %        500
    初步结论是:高阻运放的输入失调电流很小,它造成的误差远远不及输入失调电压造成的误差,可以忽略;而输入失调电压造成的误差仍然不小,但是可以在工作范围的中心温度处通过调零消除。

这样可以计算出,0~25℃的温度漂移造成的影响如下:
项目                     单位      参数
输入失调电压温漂造成的误差   μV       200
输入失调电流温漂造成的误差   μV         0.001
    合计本项误差为               μV       200
    输入信号200mV时的相对误差  %         0.1
    输入信号100mV时的相对误差  %         0.2
    输入信号  25mV时的相对误差  %        0.8
    输入信号  10mV时的相对误差  %        2
    输入信号   1mV时的相对误差  %        20
    初步结论是:高阻运放的输入失调电流温漂很小,它造成的误差远远不及输入失调电压温漂造成的误差,可以忽略;在使用高阻运放时,由于失调电压温度系数较大,造成的影响较大,使得它不适合放大100mV以下直流信号。若以上两项误差合计将更大。
    由于高阻运放的输入失调电流只有通用运放的千分之一,因此若其它条件不变,仅仅运放的外围电阻等比例增加一倍,几乎不会造成可明显察觉的误差。

HA5159的主要指标为:
项目                单位      参数
输入失调电压            μV       10000
输入失调电压温度漂移    μV/℃    20
输入失调电流            nA        6
输入失调电流温度漂移    pA/℃     60
   
这样可以计算出,在25℃的温度下的失调误差造成的影响如下:
项目                     单位      参数
输入失调电压造成的误差       μV       10000
输入失调电流造成的误差       μV        54.5
    合计本项误差为               μV       10054
    输入信号200mV时的相对误差  %         5.0
    输入信号100mV时的相对误差  %         10.1
    输入信号  25mV时的相对误差  %        40.2
    输入信号  10mV时的相对误差  %        100.5
    输入信号   1mV时的相对误差  %        1005
    初步结论是:输入失调电压和输入失调电流造成的误差较大,但是可以在工作范围的中心温度处通过调零消除。其中输入失调电压造成的误差远远超过输入失调电流造成的误差。

这样可以计算出,0~25℃的温度漂移造成的影响如下:
项目                     单位      参数
输入失调电压温漂造成的误差   μV       500
输入失调电流温漂造成的误差   μV       13.6
    合计本项误差为               μV       513
    输入信号200mV时的相对误差  %         0.3
    输入信号100mV时的相对误差  %         0.51
    输入信号  25mV时的相对误差  %        2.05
    输入信号  10mV时的相对误差  %        5.14
    输入信号   1mV时的相对误差  %        51.4
    初步结论是:在使用高速运放时,由于失调电压温度系数较大,造成的影响较大,使得它不适合放大100mV以下直流信号。若以上两项误差合计将更大。
   
    若其它条件不变,仅仅运放的外围电阻等比例增加一倍,造成误差如下:
这样可以计算出,在25℃的温度下的失调误差造成的影响如下:
项目                     单位      参数
输入失调电压造成的误差       μV       10000
输入失调电流造成的误差       μV       109
    合计本项误差为               μV      10109
这样可以计算出,0~25℃的温度漂移造成的影响如下:
项目                     单位      参数
输入失调电压温漂造成的误差   μV       500
输入失调电流温漂造成的误差   μV       27.3
    合计本项误差为               μV       527
    初步结论:仅仅运放的外围电阻等比例增加一倍,运放的输入失调电压和输入失调电压温漂造成误差不变,而输入失调电流和输入失调电流温漂造成的误差随之增加了一倍。所以,对于高阻信号源或是运放外围的电阻较高时,输入失调电流和输入失调电流温漂造成的误差会很快增加,甚至有可能超过输入失调电压和输入失调电压温漂造成误差,所以这时需要考虑采用高阻运放或是低失调运放。

点击此处查看原文 >>

系统分类: 模拟技术   |    用户分类:    |    来源: 整理

评论(0) | 阅读(160)
发表于:2008-5-29 9:51:09
标签:AVR  

2

AVR方面比较好的国外网站(不断更新中)

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Flash_in_der_Anwendung_schreiben

avr gcc的原理方面的东西, 好好长的外文, 更变态的是居然不是英文。
用AVR单片机实现TCP/IP协议,这个网站上有很多这方面的资料
一个老外的个人网站。
Mini DDS。
AVRX作者的网站
上面又很多avr做的东西。
大名鼎鼎。
看名字就知道了。

这个去的少。



http://www.avr-asm-tutorial.net/avr_en/index.html

不错。
不错。
 
 
国内的推荐
http://www.ouravr.com

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 整理

评论(2) | 阅读(243)
发表于:2008-5-26 20:51:07
标签:C语言  菜单编程  AVRX  avr  

0

C语言菜单设计

const unsigned char menu0_1[] FLASH={"1.自动操作"};
const unsigned char menu0_2[] FLASH={"2.手动操作"};
const unsigned char menu0_3[] FLASH={"3.系统设置"};

const unsigned char menu1[]  FLASH={"1.密码设置"};
const unsigned char menu2[]  FLASH={"2.车位设置"};
const unsigned char menu3[]  FLASH={"3.PLC选择"};
const unsigned char menu4[]  FLASH={"4.卡号设置"};
const unsigned char menu5[]  FLASH={"5.站号设置"};

const unsigned char menu6[]  FLASH={"1.系统密码设置"};
const unsigned char menu7[]  FLASH={"2.自动密码设置"};
const unsigned char menu8[]  FLASH={"3.手动密码设置"};
const unsigned char menu9[]  FLASH={"1.增加车位号码"};
const unsigned char menu10[] FLASH={"2.已设置号码数量"};
const unsigned char menu11[] FLASH={"1.增加卡片"};
const unsigned char menu12[] FLASH={"2.感应删除卡片"};
const unsigned char menu13[] FLASH={"3.手动删除卡片"};
const unsigned char menu14[] FLASH={"4.统计卡片数量"};

const unsigned char menu15[]  FLASH={"6.运行次数统计"};
#define  MAX_KEYTABSTRUCT_NUM 18
#define MENU_AUTOMIMA     1
#define MENU_SHOUMIMA      2

#define MENU_SYSTEMMIMA    3
#define MENU_MIMA       4
#define MENU_MIMA_SITONG      5
#define MENU_MIMA_ZHIDONG    6
#define MENU_MIMA_SHOUDONG     7

#define MENU_CHEWEI      8
#define MENU_CHEWEI_ADD    9
#define MENU_CHEWEI_CHAKAN     10

#define MENU_PLCSEL      11

#define MENU_KAHAO      12
#define MENU_KAHAO_ADD    13
#define MENU_KAHAO_GANYINDELL   14
#define MENU_KAHAO_SHOUDONGDELL   15
#define MENU_KAHAO_CHAKAN   16

#define MENU_ZHANHAO     17

#define MENU_GONUM      18
typedef struct
{
 uchar MenuID;      //本菜单状态索引号
 uchar ParMenuID;    //父菜单状态索引号
 const uchar *MenuName;  //菜单文本内容
 void (*CurrentOperate)(void); //本菜单的功能函数
}KeyTabStruct;
//菜单表,
const KeyTabStruct KeyTab[MAX_KEYTABSTRUCT_NUM] FLASH=
 {
// 菜单ID       父菜单ID  菜单名     菜单功能函数
// MenuID,              ParMenuID,     MenuName,      CurFunction
 {MENU_AUTOMIMA, 0, menu0_1, autodo_ex},
 {MENU_SHOUMIMA, 0, menu0_2, shoudo_ex},
 {MENU_SYSTEMMIMA, 0, menu0_3, NULL},
    {MENU_MIMA,    MENU_SYSTEMMIMA,   menu1,  NULL},
 {MENU_MIMA_SITONG,  MENU_MIMA,      menu6,  set_system_mima},
 {MENU_MIMA_ZHIDONG, MENU_MIMA,  menu7,  set_zhidong_mima},
 {MENU_MIMA_SHOUDONG,MENU_MIMA,  menu8,      set_shoudong_mima},
 {MENU_CHEWEI,      MENU_SYSTEMMIMA,   menu2,      NULL},
 {MENU_CHEWEI_ADD,   MENU_CHEWEI,    menu9,  add_chewei},
 {MENU_CHEWEI_CHAKAN,MENU_CHEWEI, menu10,  chakan_chehao_num},
 {MENU_PLCSEL,   MENU_SYSTEMMIMA,   menu3,      select_plc},
 {MENU_KAHAO,   MENU_SYSTEMMIMA,   menu4,      NULL},
 {MENU_KAHAO_ADD, MENU_KAHAO,  menu11,  add_mifare_menu},
 {MENU_KAHAO_GANYINDELL,MENU_KAHAO, menu12,  auto_del_mifare_menu},
 {MENU_KAHAO_SHOUDONGDELL,MENU_KAHAO,menu13,  shou_del_mifare_menu},
 {MENU_KAHAO_CHAKAN, MENU_KAHAO,  menu14,  count_mifare_menu},
 {MENU_ZHANHAO,   MENU_SYSTEMMIMA,   menu5,  select_zaihao},
 {MENU_GONUM,   MENU_SYSTEMMIMA,   menu15,  show_gonum}
 };

typedef struct
{
 unsigned char IndexMenuID[10];//本级菜单的菜单项的索引号的数组
 char FocusMenuId; //为本级菜单的焦点
 char FocusLine;  //本焦点在屏上是第几项
 char StartLine;  //屏上的第一项菜单在IndexMenuID[10]上的索引值
}view_menu;
view_menu viewmenu;
//本函数得到本级菜单的当前菜单项与下个菜单项索引号的增量
//参数keyTabIndex:本级菜单的当前菜单的索引号
//返回参数:0:当前菜单项为本级菜单的最后一个菜单项,>0:表示下一个菜单项索引号与本级菜单项索引号的差值
uchar get_next(uchar keyTabIndex)
{
 uchar nextKeyTabIndex="keyTabIndex"+1;
 while((nextKeyTabIndex<=MAX_KEYTABSTRUCT_NUM)&&(pgm_read_byte(&KeyTab[nextKeyTabIndex].ParMenuID)>pgm_read_byte(&KeyTab[keyTabIndex].ParMenuID)))
 {
  nextKeyTabIndex++;
 }
 if (pgm_read_byte(&KeyTab[nextKeyTabIndex].ParMenuID)== pgm_read_byte(&KeyTab[keyTabIndex].ParMenuID))
 {
  return nextKeyTabIndex - keyTabIndex;
 }
 return 0;
}
//本函数得到本级菜单的当前菜单项与上一个菜单项索引号的差值
//参数keyTabIndex:本级菜单的当前菜单的索引号
//返回参数:0:当前菜单项为本级菜单的第一个菜单项,>0:表示上一个菜单项索引号与本级菜单项索引号的差值
uchar get_prev(uchar KeyTabIndex)
{
 uchar prevKeyTabIndex ;
 if(KeyTabIndex==0)
  return 0;
 prevKeyTabIndex= KeyTabIndex - 1; 
 while ((prevKeyTabIndex > 0)&&(pgm_read_byte(&KeyTab[prevKeyTabIndex].ParMenuID) > pgm_read_byte(&KeyTab[KeyTabIndex].ParMenuID)))
 {
  prevKeyTabIndex--;
 }
 if (pgm_read_byte(&KeyTab[prevKeyTabIndex].ParMenuID)== pgm_read_byte(&KeyTab[KeyTabIndex].ParMenuID))
 {
  return KeyTabIndex - prevKeyTabIndex;
 }
 return 0;
}
//得本级菜单的菜单项索引号数组IndexMenuID[10]
//参数KeyTabIndex:为本级菜单的父菜单ID,
//返回本级菜单的菜单项个数.
char SetViewMenu(uchar KeyTabIndex,view_menu *ViewMenu)
{
 uchar i = 0 ;
 uchar tmpKeyTabIndex;
 char result = 1;
 tmpKeyTabIndex = KeyTabIndex - get_prev(KeyTabIndex);
 while (tmpKeyTabIndex < KeyTabIndex)
 {
  KeyTabIndex = tmpKeyTabIndex;
  tmpKeyTabIndex = KeyTabIndex - get_prev(KeyTabIndex);
  result++;
 }
 tmpKeyTabIndex = KeyTabIndex + get_next(KeyTabIndex);
 //ViewMenu->IndexMenuID[i++] = pgm_read_byte(&KeyTab[KeyTabIndex].MenuID);
 ViewMenu->IndexMenuID[i++] = KeyTabIndex+1;
 while (tmpKeyTabIndex > KeyTabIndex)
 {
  KeyTabIndex = tmpKeyTabIndex;
  //ViewMenu->IndexMenuID[i++] = KeyTab[KeyTabIndex].MenuID;
  ViewMenu->IndexMenuID[i++] = KeyTabIndex+1;
  tmpKeyTabIndex = KeyTabIndex + get_next(KeyTabIndex);
 }
 ViewMenu->IndexMenuID[i] = '\0';

 return result;
}
/*
for(line=ViewMenu->StartLine;((ViewMenu->IndexMenuID[line-1]!='\0')&& (line-ViewMenu->StartLine+1<=LCD_CH_LINE));line++)
 {
  if(ViewMenu->FocusLine==line)
   Print_flash_str(LCD_MENU_START, line-ViewMenu->StartLine+1, (unsigned char *)KeyTab[ViewMenu->IndexMenuID[line-1]-1].MenuName,0);
  else
   Print_flash_str(LCD_MENU_START, line-ViewMenu->StartLine+1, (unsigned char *)KeyTab[ViewMenu->IndexMenuID[line-1]-1].MenuName,1);
 }
*/
//显示当前菜单
void PrintViewMenuWindow(view_menu *ViewMenu)
{
 unsigned char line;
 print_blank();
 for(line=ViewMenu->StartLine;((ViewMenu->IndexMenuID[line-1]!='\0')&& ((line-ViewMenu->StartLine)+1<=LCD_CH_LINE));line++)
 //for(line=0;((ViewMenu->IndexMenuID[ViewMenu->StartLine+line-1]!='\0')&&(line {
  if((ViewMenu->FocusLine-1)==(line-ViewMenu->StartLine))
   Print_flash_str(LCD_MENU_START, (line-ViewMenu->StartLine)*2, (unsigned char *)pgm_read_word(&KeyTab[ViewMenu->IndexMenuID[line-1]-

1].MenuName),0);
  else
   Print_flash_str(LCD_MENU_START, (line-ViewMenu->StartLine)*2, (unsigned char *)pgm_read_word(&KeyTab[ViewMenu->IndexMenuID[line-1]-

1].MenuName),1);
 }  
}
//菜单主函数基于AVRX操作系统
void menu_ex(void)
{
 //pdataMessage pMsg;
 KeyTabStruct tempkeytab;
 viewmenu.FocusMenuId=MENU_AUTOMIMA;
 viewmenu.StartLine=1;
 viewmenu.FocusLine=1;
 SetViewMenu(viewmenu.FocusMenuId-1, &viewmenu); 
 menufreetime=0;
 while(1)
 {
  //SetViewMenu(viewmenu.FocusMenuId-1, &viewmenu);
  PrintViewMenuWindow(&viewmenu);
  AvrXStartTimerMessage(&freetimer, 6000, &MyQueue);//进入
   pMsg = (pdataMessage)AvrXWaitMessage(&MyQueue);
   if(pMsg==&keymessage)
   {
     AvrXAckMessage(&pMsg->mcb);
    if(AvrXCancelTimerMessage(&freetimer, &MyQueue) != &freetimer.u.mcb)
     AvrXHalt();
    switch(*((uchar *)pMsg->data))
    {
     case KEYUP:
      if(viewmenu.FocusLine==1)
      {
       if(viewmenu.StartLine>1)
        viewmenu.StartLine--;
       else
       {
        if(strlen(viewmenu.IndexMenuID)<=LCD_CH_LINE)
        {
         viewmenu.FocusLine=strlen(viewmenu.IndexMenuID);
         viewmenu.StartLine=1;
        }
        else
        {
         viewmenu.FocusLine=LCD_CH_LINE ;
         viewmenu.StartLine=strlen(viewmenu.IndexMenuID)-LCD_CH_LINE+1;
        }
       }        
      }
      else
      {
       viewmenu.FocusLine--;
      } 
      //PrintViewMenuWindow(&viewmenu);
      break;
     case KEYDOWN://KEYDOWN:
      if(viewmenu.FocusLine      {
       if((viewmenu.StartLine+viewmenu.FocusLine)       {
        viewmenu.FocusLine++;
        //PrintViewMenuWindow(&viewmenu);
       }
       else
       {
        if(strlen(viewmenu.IndexMenuID)==2)
         viewmenu.FocusLine++;
        else
        {
         viewmenu.StartLine=1;
         viewmenu.FocusLine=1;
        }
       }
      }
      else
      {
       viewmenu.FocusLine=LCD_CH_LINE; 
       if((viewmenu.StartLine+viewmenu.FocusLine)<=strlen(viewmenu.IndexMenuID))
       {
        viewmenu.StartLine++;
       }
       else
       {
        viewmenu.FocusLine=1;
        viewmenu.StartLine=1;      
       }
      }
      //PrintViewMenuWindow(&viewmenu);
      break;
      
     case KEYOK:
      memcpy_P((uchar *)&tempkeytab,(uchar *)&KeyTab[viewmenu.IndexMenuID[viewmenu.StartLine+viewmenu.FocusLine-2]

-1],sizeof(KeyTabStruct));
      if(tempkeytab.CurrentOperate!=NULL)
      {
       
       tempkeytab.CurrentOperate();
       if(menufreetime>MENUFREETIME)
        {
         return ;
        }
      }
      else
      {
       if(tempkeytab.MenuID==MENU_SYSTEMMIMA)
       {
        if(!check_mima(SYSTEMMIMA))
         break;
        
       }
       if(viewmenu.FocusMenuId       {
        if(pgm_read_byte((uchar *)&KeyTab[viewmenu.IndexMenuID[viewmenu.StartLine+viewmenu.FocusLine

-2]].ParMenuID)
        ==pgm_read_byte((uchar *)&KeyTab[viewmenu.IndexMenuID[viewmenu.StartLine+viewmenu.FocusLine-

2]-1].MenuID))
        {
         viewmenu.FocusMenuId=pgm_read_byte((uchar *)&KeyTab[viewmenu.IndexMenuID

[viewmenu.StartLine+viewmenu.FocusLine-2]].MenuID);
         viewmenu.StartLine=1;
         viewmenu.FocusLine=1;
         SetViewMenu(viewmenu.FocusMenuId-1, &viewmenu);
        }
       }     
      }
      //PrintViewMenuWindow(&viewmenu);
      break;
     case KEYCONSEL://KEYCONSEL:
      memcpy_P((uchar *)&tempkeytab,(uchar *)&KeyTab[viewmenu.IndexMenuID[viewmenu.StartLine+viewmenu.FocusLine-2]

-1],sizeof(KeyTabStruct));
      if(tempkeytab.ParMenuID==0)
       return;
      viewmenu.FocusMenuId=tempkeytab.ParMenuID;
      viewmenu.StartLine=1;
      viewmenu.FocusLine=1;
      SetViewMenu(viewmenu.FocusMenuId-1, &viewmenu);
      //PrintViewMenuWindow(&viewmenu);
     default:
      break;
    }
    menufreetime=0; 
    
   }
   else if(pMsg==&plcmessage)
   {
    //PLC发送的信息
    AvrXAckMessage(&pMsg->mcb);
   if(AvrXCancelTimerMessage(&freetimer, &MyQueue) != &freetimer.u.mcb)
    AvrXHalt();
   }
   else if(pMsg==&mfacemessage)
   {
    //读卡器发送的信息
    AvrXAckMessage(&pMsg->mcb);
    if(AvrXCancelTimerMessage(&freetimer, &MyQueue) != &freetimer.u.mcb)
    AvrXHalt();
   }
   else if((pTimerMessageBlock)pMsg == &freetimer)
   {
    //睡眠时间到,进入跑马灯显示状态
    if(++menufreetime>MENUFREETIME)
    {
     return ;
    }
   }
   else
         {
              AvrXHalt();
         }
 }
}

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(2) | 阅读(342)
发表于:2008-5-21 23:27:55
标签:PLC  通信检验  LRC  ADD  FCS  

0

与各种PLC通信时,检验算法子程序集

和检验程序:

char *plc_ADD(const uchar *pstr,uchar icount,uchar *pADD)
{
 uchar i,ch,ct,temp;
 if(pstr==NULL || pADD==NULL)
  return NULL;
 ch=*pstr;
 for(i=1;i {
  ch +=*(pstr+i);
 }
 temp=ch;
 ct=temp>>4;
 if(ct>9)
  ct+='A'-10;
 else
  ct+='0';
 *pADD=ct;
 ct=ch&0x0F;
 if(ct>9)
  ct+='A'-10;
 else
  ct+='0';
 *(pADD+1)=ct;
 return pADD; 
}

FCS检验程序:

char *Omron_FCS(const uchar *pstr,uchar icount,uchar *pFCS)
{
 uchar i,ch,ct,temp;
 if(pstr==NULL || pFCS==NULL)
  return NULL;
 ch=*pstr;
 for(i=1;i {
  ch ^=*(pstr+i);
 }
 temp=ch;
 ct=temp>>4;
 if(ct>9)
  ct+='A'-10;
 else
  ct+='0';
 *pFCS=ct;
 ct=ch&0x0F;
 if(ct>9)
  ct+='A'-10;
 else
  ct+='0';
 *(pFCS+1)=ct;
 return pFCS; 
}
LRC检验程序:
char *plc_LRC(const uchar *pstr,uchar icount,uchar *pLRC)
{
 uchar temp,i,ct,ch;
 if(pstr==NULL || pLRC==NULL)
  return NULL;
 for(i=0,ch=0;i {
  ct=valstr(pstr+i);
  temp=valstr(pstr+i+1);
  ch+=(ct<<4)|(temp&0x0F);
 }
 ch=0xff-ch+1;
 temp=ch;
 ct=temp>>4;
 if(ct>9)
  ct+='A'-10;
 else
  ct+='0';
 *pLRC=ct;
 ct=ch&0x0F;
 if(ct>9)
  ct+='A'-10;
 else
  ct+='0';
 *(pLRC+1)=ct;
 return pLRC;
}

点击此处查看原文 >>

系统分类: 工业控制   |    用户分类:    |    来源: 原创

评论(0) | 阅读(440)
发表于:2008-5-15 16:33:32
标签:示波器  射频息号  

1

怎样使用示波器检测射频信号

怎样使用示波器检测射频信号

有一次我在调试同一个MIfare卡通信时,一直读不出卡号,我就用示波器来测一下通信端口,打开示波器时,发现示波器上有波形,而且频率是一定的,当我拿起探头时,波形没有了,这是怎么回事?我把控头放回原来的地方,波形又出现了,我仔细查看探头周围环境,发现探头下面是读卡模块.同时发现探头上的地线夹头夹在探针上,我反夹头拿开,示波器上的波形就没有了,我又查了一下读卡模块射频信号的频率,示波器测出的频率相同.

所以把示波器探头的上地线夹头同探头上的探针短路,可以测射频息号.

点击此处查看原文 >>

系统分类: 测试测量   |    用户分类:    |    来源: 原创

评论(0) | 阅读(269)
发表于:2008-5-15 11:33:01
标签:混合信号  示波器  

0

使用混合信号示波器验证测量混合信号电路

随着电子产品的功能变得日益复杂,混合信号越来越多地出现在工程师设计的产品中。虽然混合信号可以给设计带来灵活性,但由于模拟和数字信号有着不同的频率和幅度特性,因而工程师调试和测试产品的难度也增大了。本文详细介绍了如何利用安捷伦的混合信号来完成设计调试和测试。

如今,无论是在计算机领域,通信领域还是消费类电子领域,当你信手捻来一块电路板时,就会发现其中所使用的器件是多样性的,往往是混合着模拟器件和数字器件,其中模拟部分包括光、声音、温度、压力等现实世界物理信号,以及电源信号、视频信号、AM/FM等调制信号等,而数字部分则包括单片机、微处理器、可编程逻辑器件、DSP等,而像ADC、DAC、某些单片机等则集模拟信号和数字信号于一身。这样的混合结构固然给我们的设计带来了灵活性,但同时也给调试和测试带来了复杂性。其复杂性表现在: 

模拟信号的测试和验证需求仍然存在,但同时存在很多路数字信号需要进行同时显示、验证和测试,尤其是需要验证控制信号是否在正确的时间、正确地控制着相关信号。 
孤立信号越来越少,多路信号的关联性调试和验证在很多情况下是必须的,而模拟信号速度往往远远低于数字信号,要求仪器在捕获一个慢信号完整周期的同时,还能支持很高的采样率,这就要求仪器有很深的存储深度和多个通道,同时价位还要能被接受。 
高速数字信号本身呈现模拟特征(如过冲、振铃等),需要进行信号完整性测试。 
不同器件或芯片间的通信大量使用串行总线,如I2C、SPI、CAN、LIN、USB、SATA、PCI-E等,仪器要和串行通信协议同步来调试验证电路的需求迅速增加。 5.BGA等特殊封装形式使得很多信号无法测量,可编程器件的使用使得很多关键信号没有在管脚处引出。 
领先的测试设备制造商一直致力于混合电路测试技术的研究,新开发的混合信号示波器(MSO)有助于工程师解决混合信号调试和测试方面的难题,有些用户把这种仪器和数码相机做了个比较,发现有很多相似之处,例如: 
有广角镜头能力,能捕获全方位景色,拍下突发事件时,也记录下周围的人物和环境。混合信号可全方位捕获模拟和混合信号多达18路或20路,判知异常信号和其它多路数字信号或模拟信号有没有关系。 
像素高,一次成像,不仅可记下全景,而且可以对局部细节进行放大而不失真。混合信号示波器标准配置有快响应深存储,可在一个屏幕上同时捕获并显示多达18路信号或20个通道,对每一路的信号都是深度捕获,标配存储深度为1MB~8MB,还有选件可配置为更深,能够放大几万倍来观察和分析细节。 
快门抓拍瞬间与所关注的焦点同步。灵活的触发功能可以让您把混合信号示波器和被测对象的运行状态同步起来,比如可与I2C、SPI等串行总线协议同步,还可与SDRAM控制命令、PCI总线命令、LCD驱动电路命令等同步。 
混合信号示波器测量方案 

由于混合信号电路本身的复杂性,即使您只需要观察一路信号质量,数字示波器和模拟 示波器也无法完成,比如,当您需要观察DDR SDRAM的某根数据线信号质量时,眼图分析是常用的手段,在分析时,示波器要首先和DDR SDRAM的读写操作同步,根据DDR SDRAM的命令(参见表1),这需要占用5个通道分别连接到RAS,CAS,CS,WE,CLK信号上,同时再使用另外一个通道来观察您所关心的数据信号眼图,结果如图1所示,混合信号 示波器可轻松获取DDR SDRAM的连续8个读操作(即8个眼图)。 

数字存储 示波器(DSO)或模拟示波器可以判别信号是否正常,却不能告诉你信号是在什么时候变得不正常的,也就是说,它不能帮助你验证在电路特定的运作状态下,关键信号的质量是否过关,而这对于混合信号示波器来说却是很简单的事情。如图2所示,工程师用混合信号示波器可以发现PCI总线数采插卡在DMA控制器将总线控制权交回CPU后,采插内部的固化软件偶尔会跑飞,根本原因是这时时钟会出现不应该的幅值跌落,导致电路误认为新的时钟周期到来,从而产生误动作,据此工程师又进一步发现导致该幅值跌落的原因,从而解决了这个问题。使用时,只需注意把控制信号连接到逻辑通道上,根据PCI总线命令设定触发条件即可。 

上面的功能实质上是混合信号示波器可以与并行总线的控制命令同步,混合信号示波器可以解决的第三个难题是与串行总线同步。比如,I2C总线仅由两根线(时钟线SCL和数据线SDA)组成,如何判断和验证电路是否能正确完成向某个地址(如0x50)读出某个数据(如0x07)呢?混合信号示波器可根据I2C协议来判断两个器件是否通过I2C总线完成通信,对于其它总线如SPI、CAN也是同样方法。也就是说,混合信号 示波器能够先将串性总线的协议解出来,然后再与之同步。 

混合信号 示波器解决的第四个难题是对捕获的深存储数据直接进行高清晰显示处理(图3)。脉宽调制(PWM)信号中偶尔可能会出现异常信号,混合信号示波器可直接以亮点或其它醒目的形式将异常信号与深存储器中其它信号直接区分开来,即使是单次采集,也没有问题,而且还可以对这些异常的亮点进行放大观察、测量和分析。从图4种可以看到,对其中的一个亮点进行放大后,发现该异常是正脉冲末尾处有一短暂的幅值跌落,工程师然后可以具体测量该异常信号的时间和幅值信息。 

对于BGA等特殊封装形式以及使用FPGA的电路,本身电路可测的管脚不是很多,18个或20个通道往往已是不错,而且FPGA的供应商提供的开发工具,往往引出的管脚也有限,若使用Xilinx公司的芯片,安捷伦FPGA调试仪E5904B配合混合信号示波器使用,可以同时观察FPGA内部节点和外围信号的互动情况。 

目前大量使用的数字 示波器大都是2通道或4通道,当有大量数字信号需要被调试时,条件好的工程师会借助于逻辑分析仪,但孤立地使用逻辑分析仪或数字示波器对混合信号电路的调试效率往往是很低的。如很多时候,电路中的关键握手活动或特定任务执行的验证往往牵涉到模拟信号和多路数字信号必须在某个时间段按一定时序出现,因此需要把示波器和逻辑分析仪器同步起来一起使用。目前的方案有: 

在逻辑分析系统中允许使用 示波器模块; 
使用时间相关夹具同步两台仪器,并让其中一台仪器的光标移动时,另一台仪器的光标也跟着移动(即光标联动功能)。 
 与混合信号示波器方案相比,上述两个方案都适合于可将数十路甚至上百路信号测试点都引出来的电路,优点是逻辑分析功能非常完善和强大,可以做反汇编,甚至高级源代码分析,缺点是只能引出十几个被测点的电路,显然有点大材小用,而且价格比较昂贵,使用起来较混合信号示波器复杂。尤其是使用时间相关夹具的第二种方案,若想将示波器的数据传输到逻辑分析仪的屏幕上和数字通道一起显示,屏幕刷新率会很慢,如果每通道有4M采样点存储深度,将示波器四个通道的数据传递到逻辑分析仪器上显示一次可能会需要1分钟的时间。对于上面举的PCI总线数采插卡的例子,必须将示波器设置成无限余辉的方式,才能发现偶发的时钟信号幅值跌落情况。若屏幕刷新率很慢,是难以解决问题的,对观察DDR SDRAM信号眼图也是如此。当然,你可以让两台仪器各自显示各自的波形,这样不影响示波器的波形刷新率,但观察多路混合信号就不太直观,而且有的厂家的时间相关夹具不支持光标联动功能,使用起来就更不方便了。 
混合信号示波器是根据模拟和混合信号电路的特征和测试需求研发出来的产品,而且其价格定位是和数字存储示波器(DSO)同档次的。在当今电路很多测试点不能被触及或引出的情况下,逻辑分析仪器没有充分用武之地,或者只有购买示波器的经费而没有逻辑分析仪器经费的情况下,此时混合信号示波器不失为一很好的选择。

点击此处查看原文 >>

系统分类: 测试测量   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(184)
发表于:2008-5-15 9:46:35
标签:示波器  

0

了解示波器十问

1. 对一个已设计完成的产品,如何用示波器经行检测分析其可靠性?
答:示波器早已成为检测电子线路最有效的工具之一,通过观察线路关键节点的电压电流波形可以直观地检查线路工作是否正常,验证设计是否恰当。这对提高可靠性极有帮助。当然对波形的正确分析判断有赖于工程师自身的经验。

2. 决定示波器探头价格的主要因素是什么?
答:示波器的探头有非常多的种类,不同的性能,比如高压,差分,有源高速探头等等,价格也从几百人民币到接近一万美元。价格的主要决定因素当然是带宽和功能。探头是示波器接触电路的部分,好的探头可以提供测试需要的保真度。为做到这一点,即使无源探头,内部也必须有非常多的无源器件补偿电路(RC网络)。

3. 一般的示波器探头的使用寿命有多长时间?探头需不需要定期的标定?
答:示波器的探头寿命不好说,取决于使用环境和方法。
标准对于探头没有明确的计量规定,但是对于无源探头,至少在更换探头,探头交换通道的时候,必须进行探头补偿调整。所有有源探头在使用前应该有至少20分钟的预热,有的有源探头和电流探头需要进行零点漂移调整。

4. 什么是示波器的实时采样率?
答:实时采样率是指示波器一次采集(一次触发)采样间隔的倒数。据了解,目前业界的最高水平是四个通道同时使用。

5. 什么是示波器的等效时间采样?
答:等效时间采样指的是示波器把多次采集(多次触发)采集到的波形拼凑成一个波形,每次采样速率可能很慢,两次采集触发点有一定的偏移,最后形成的两个点间的最小采样间隔的倒数称为等效采样速率。其指标可以达到很高,如1ps。

6. 什么是功率因数?如何如何测量?
答:功率因数:在直流电路里,电压乘电流就是有功功率。但在交流电路里,电压乘电流是视在功率,而能起到作功的一部分功率(即有功功率)将小于视在功率。有功功率与视在功率之比叫做功率因数,以COSΦ表示,其实最简单的测量方式就是测量电压与电流之间的相位差,得出的结果就是功率因数。

7. 如何表达和测试功率密度?
答:功率密度就是单位体积里的功率,一般电源里用W/in3。

8. 有无办法利用示波器测出高频变压器或电感磁芯的工作情况?
答:TEK推出的功率测试方案里就有一项功能——B-H曲线的分析,它能反应磁芯的工作状态,还能测出动态电感值,并得出磁芯损耗。

9. 开关电源的噪声有多种如布线不合理引起的交叉干扰、电感漏磁、二极管反向尖峰...等引起噪声,如何用示波器鉴别?
答:TEK的TDS5000示波器上有频域分析、分析噪声的频率段就能分析出噪声的种类,才好用相应的处理方法。示波器只能提供数据分析和波段形显示。
   
10. 用示波器怎样可以测试到开头电源的幅射?
答:开关电源存在幅射干扰,一般做法是设法探出干扰源,然后再去屏蔽它。用示波器可以傅立叶变换的功能分析其频率成份构成,根据频率范围,从而判断干扰的种类。

点击此处查看原文 >>

系统分类: 测试测量   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(114)
发表于:2008-5-15 9:41:18
标签:抖动  测量  示波器  

0

抖动测量三种方法

只要测试数据通信IC或测试电信网络,就需要测试抖动。抖动是应该呈现的数字信号沿与实际存在沿之间的差。时钟抖动可导致电和光数据流中的偏差位,引起误码。测量时钟抖动和数据信号就可揭示误码源。

测量和分析抖动可借助三种仪器:误码率(BER)测试仪,抖动分析仪和示波器(数字示波器和取样示波器)。

选用哪种仪器取决于应用,即电或光、数据通信以及位率。因为抖动是误码的主要原因,所以,首先需要测量的是BER。若网络、网络元件、子系统或IC的BER超过可接受的限制,则必须找到误差源。

大多数工程技术人员希望用仪器组合来跟踪抖动问题,先用BER测试仪、然后用抖动分析仪或示波器来隔离误差源。

BER测试仪

制造商需要测量其产品的BER,以保证产品符合电信标准。当需要表征数据通信元件和系统时,BER测试对于测试高速串行数据通信设备也是主要的。

BER测试仪发送一个称之为伪随机位序列(PRBS)的预定义数据流到被测系统或器件。然后,取样接收数据流中的每一位,并对照所希望的PRBS图形检查输入位。因此,BER测试仪可以进行严格的BER测量,有些是抖动分析仪或示波器不可能做到的。

尽管BER测试仪可进行精确的BER测量,但是,对于10-12BER(每1012位为1位误差)精度的网络或器件测试需数小时。为了把测试时间从数小时缩短为几分钟,BER测试仪采用“BERT scan”技术,此技术用统计技术来预测BER。

可以编程BER测试仪在位时间(称之为“单位间隔”或“UI”)的任何点取样输入位。“澡盆”曲线表示BER是取样位置的函数。若BER测试仪检测位周期(0.5UI)中心的位,则抖动引起位误差的概率是小的。若BER测试仪检测位于靠近眼相交点上的位,则将增大获得抖动引起位误差的似然性。

抖动分析仪

BER测试仪不能提供有关抖动持性或抖动源的足够信息。抖动分析仪(往往称之为定时时间分析仪或信号完整性分析仪)可以测量任何时钟信号的抖动,并提供故障诊断抖动的信息。抖动分析仪也用抖动特性来预测BER,其所用时间比BER测试仪小很多。

抖动测试仪对于测试高速数据通信总线(如光纤通信,SerialATA, Infiniband, Rapidio,每个通道的数据率高达3.125Gbits/s)用的器件是有用的。因为抖动分析仪在几秒内可预测BER,所以,对于生产线测试是有用的,很多ATE制造商根据用户要求,把抖动测试仪安置在测试系统中。

抖动分析仪检测信号沿并测量沿之间的时间。在采集定时数据之后,抖动分析仪执行算法,产生直方图、频率曲线、数据的其他直观图像。这些图像展示干扰信号的线索。靠执行直方图和频率曲线的计算,抖动分析仪把整个抖动分离为随机抖动和确定性抖动。

比如一种确定性抖动,它具有一个特殊源。一个干扰信号相位调制基准信号来产生测量信号中的抖动。抖动分析仪可以计算呈现在抖动中的频率(相位1-4)。一旦知道抖动频率,就可隔离抖动源并减轻抖动影响。若干扰信号的频率对应于其他时钟频率,则用增加EMI屏蔽或其他方法把源隔离就可解决问题。

示波器

两类示波器证明对于抖动测试和分析是有用的。为了测试通信速度达3.125Gbits/s(在铜线上传输数据,这可能是最高速度)的器件、缆线、子系统或系统,可以用实时取样示波器。它们类似于抖动分析仪,可以测量任何时钟信号的抖动。

为了测量光信号,如OC-192和10Gigabit Ethernet(9.952Gbits/s)或OC-768(39.808Gbits/s),就需要50GHz~75GHz带宽的取样示皮器(如Agilent数字通信分析仪或Tek通信信号分析仪)。也可在电数据信号中用这些示波器。

宽带示波器对于测试当今所用的最高位率的抖动是有用的。因为它们的低取样率(150ksamples/s或更低),所以,它们需要重复信号(如PRBS)来建立眼图,它们从眼图可建立抖动直方图。

示波器制造商在其示波器上提供抖动分析软件。

定时误差图是数据流的有效瞬时相位图。它示出抖动包含周期成分。定时误差图的快速傅里叶变换(第3个图线)定标为1MHz/div,显示抖动的频率。此频率可对应于开关电源的时钟频率或来自系统数据缆线中的交扰。

眼图交叉点的直方图显示分布有2个峰。双峰表明确定性抖动,它来自外部干扰(如开关电源)。另一处抖动——随机抖动遵从高斯分析,不能确定它们的源。

混合仪器

最近,某些测试设备制造商已开发出混合仪器。传统的BER测试仪只给出位误差,现在BER测试仪执行某些抖动分析,甚至有的还包含取样示波器。现在抖动分析仪也包含取样示波器,如Warecrest SIA-3000。这些取样示波器可观察眼图,但它们没有专用取样示波器那样的带宽。现在混合仪器的示波器带宽最高为6GHz。实时和等效时间取样示波器现在提供测量抖动和计算BER的软件。

点击此处查看原文 >>

系统分类: 测试测量   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(130)
发表于:2008-5-15 9:38:24
标签:逻辑分析仪  采样频率  

0

如何选择逻辑分析仪

逻辑分析仪的品质可以用下述六项要素来评价:
信号采集能力;信号适应能力;可靠性;信号捕捉能力;信号处理能力;扩展性。
下面分类逐项介绍各项性能指标对逻辑分析仪品质的影响。

1 信号采集能力
  信号采集能力反映出逻辑分析仪的基本工作能力。
1.1 输入信号通道数目
  它决定能够同时测量的信号数目。
1.2 采样频率范围
  它决定观察信号的频率范围,也决定测量的时间精度。一般当采样频率为被测信号频率8倍以上时,
  可以获得比较好的观察和测量结果。
1.3 采样存储深度
  它决定能够存储的每个测量信号的采样数目。

 

2信号适应能力
  信号适应能力决定逻辑分析仪的工作范围。
2.1 输入信号电压范围
  它决定逻辑分析仪正常工作的信号电压范围,当信号的电压超出范围时,通常会产生较大的输入电
  流。
2.2 输入信号触发电平调整范围
  它反映出逻辑分析仪适应各种标准电路的能力。常用的范围为-2V至+3V。
2.3 数据建立时间/最小信号宽度/最高输入信号频率
  数据建立时间和最小信号宽度反映的是同一个时间指标,当被测信号的宽度小于这个指标时,就可
  能会测量不到。最高输入信号频率是一个习惯性的指标,通常是指在占空比为1:1时2倍数据建立时
  间所对应的频率,另外逻辑分析仪中输入信号模/数转换器的带宽指标也制约着最高输入信号频率。
2.4 输入阻抗和输入电流
  这个指标反映出设备测试弱信号的能力,当逻辑分析仪的输入端子接在一个驱动能力很弱的电压源
  信号上时(如高频晶体谐振器的无源端),如果输入阻抗过低或输入电流过大,就可能使被测信号
  发生变形甚至消失。
  可供参考的较好的指标如下:
  输入电阻>1MΩ;输入电容<10pF;输入电流<3μA。
2.5 输入信号探头种类
  探头种类是否齐全反映出逻辑分析仪测量功能的完善性。常用的探头及主要参考指标如下:
  高频探头,带宽>200MHz,上升速率>3000V/μS;
  高阻抗探头,输入电阻>1000 MΩ,输入电容<5pF;
  长线驱动器,线长>2米;
  高电压探头;
  小信号探头;
  差分信号探头;
  多线探头组。
2.6 测量夹具种类
  可装配的测试夹和测试探针的种类也反映出逻辑分析仪测量功能的完善性。一个功能完善的逻辑分
  析仪应当采用通用型测试端子接口,以便于连接各种性能的测试夹具。
  对于高密度电路测试,下述测量夹具是重要的:
  能够测量微小间距表贴元件的精密测试夹;
  能够测量微小间距电路的精密防颤测试探针。

 

3 可靠性
  可靠性反映出设备的稳定程度和耐用程度。一台逻辑分析仪的可靠性包含许多因素,下述四点是其中比较重要而又能直接测试和审查的要点。
3.1 输入端子抗静电冲击能力
  静电冲击是操作中经常发生的现象,一个高可靠性的逻辑分析仪的所有输入端子应该能够承受数千
  伏特的静电冲击而不被损坏。
3.2 输入端子抗电源冲击能力
  短路和接错测试点也是操作中经常发生的现象,一个高可靠性的逻辑分析仪的所有输入端子应该能
  够承受数十伏特的电源冲击而不被损坏。
3.3 接插件结构和品质
  接插件应当具有锁紧结构,以保障连接的可靠性,特别是高频测试部件,必须从结构上保证具有优
  良的高频特性。
  接插件应当使用优良的材料制造,以保证经久耐用,其接触部位建议按下述标准进行电镀处理:
  底层电镀50微吋镍;
  表层电镀30微吋金。
3.4 散热特性
  散热特性会影响到设备的稳定性和工作寿命,良好的散热性能是非常重要的。

 

4 信号捕捉能力