Please select To the mobile version | Continue to access the desktop computer version

Electronic Engineer Discuss

View: 10083|Reply: 0

-简易数字示波器设计

[Copy link]

19

Threads

24

Posts

135

Credits

注册会员

Rank: 2

Credits
135
Post time 2015-7-11 17:25:20 | Show all posts |Read mode
本帖最后由 Tom 于 2015-7-11 17:35 编辑

电信专业综合实践




设计题目:在LPC2210 开发板的基础上
----------简易数字示波器设计




学校:   
班级:   
姓名:      
学号:   
指导老师:

2011.1.1


目 录
第1章 设计内容与要求        1
1.1        设计内容        1
1.2        设计要求        1
1.3        系统功能        1
1.4        应用分析        1
第2章 系统总体设计        3
2.1        总体框图        3
2.2        总体设计分析        3
第3章 硬件结构        7
3.1        5V电源电路        7
3.2        系统电源电路        8
3.3        复位电路        10
3.4        JTAG接口电路        11
3.5        系统存储器电路        11
3.6        TFT液晶接口电路        12
3.7        串口接口电路        13
3.8        ADC电路        14
3.9        按键控制电路        15
3.10        主芯片电路        14
第4章  软件分析        14
4.1        软件框图分析        14
4.2        任务的划分        15
4.3        任务的优先级设计        15
4.4        液晶初始化设计        16
4.5        定时器设计        16
4.6        AD转换设计        16
4.7        数据处理        17
4.8        触发设计        17
4.9        周期设计        17
4.10        求最值设计        18
4.11        主函数与调用的TASK设计        18
拓展部分        19
参考文献        20



第一章 设计内容与要求

1. 1 设计内容:
    在LPC2210 开发板的基础上设计一简易数字示波器。

1. 2 设计要求:
        数字示波器的硬件系统的电路原理图设计
        数字示波器的图形界面设计
        数字示波器的信号触发、矢量显示、轨迹消隐实现
        被测信号的周期、最大/最小值实现

1. 3 系统功能:
    以LPC2210开发板的液晶屏模拟数字示波器的显示屏,实现被测波形的显示。  

1. 4 应用分析:
本设计对基于ARM(Advanced RISC Machine)的简易示波器的设计过程进行了介绍。主要对系统的硬件设计部分和软件设计部分进行了分析。硬件设计部分首先给出了系统框图,然后对各个组成模块进行了介绍。并给出了各模块所使用的主要元器件。包括电源部分、放大部分、控制部分、键盘功能及芯片的采集和显示部分。软件设计部分编写了使能部分、AD转换、显示部分、数值计算部分。


   
                                                               





第二章 系统的总体设计

2. 1 总体框图



                   2-1 系统框图

2. 2 总体设计分析
本设计如果选择的是DSP,设计中用到芯片就会增多,而且因为DSP造价高于ARM并且小信号的采集如果应用DSP放大芯片有很多限制,不易选取。而应用ARM则减少了这方面的问题。在嵌入式处理器设计领域,RISC[1]已经成为处理器结构设计的必然选择。嵌入式微处理器嵌入式系统是以应用为中心,以计算机技术为基础,软硬可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。并且该系统是以提高对象体系智能性、控制力和人机交互能力为目的,通过相互作用和内在指标评定的,嵌入到对象体系中的专用计算机系统。而嵌入式微处理器是嵌入式系统的核心部件,是决定嵌入式系统功能强弱的主要因素,也决定了嵌入式系统的应用范围和开发复杂度。
本设计需要解决的问题包括硬件部分和软件部分。
硬件部分的设计主要是芯片选择,控件的选择,放大倍数的控制,衰减倍数 的选择。
软件部分的设计主要是驱动程序的编译,主函数主要功能的实现,按键控制的选择。










第三章 硬件结构

3. 1  5V电源电路
LPC2200系列ARM7微控制器均要使用两组电(LPC213x,LPC214x除外),I/O口供电电源为3.3V,内核及芯片外设供电电源为1.8V,所以系统设计为3.3V应用系统。首先有CZ1电源接口输入9V直流电源,二极管D1防止电源反接,经过C42,C44滤波,然后通过LM2575将电源稳压の5V,再使用LDO芯片(低压差芯片)稳压输出3.3V及1.8V电压。如图所示(1-1),所设计的5V电源电路的稳压芯片使用的是LM2575开关电源芯片。

                    图3-1 (5V电源电路)

3. 2 系统电源电路
系统电源电路如图1-2所示,LDO芯片分别采用SPX1117M3-1.8和SPX1117M3-3.3,其特点为输出电流大,输出电压精度高,稳定性好。犹豫LPC2200系列ARM7微控制器具有独立的模拟电源和模拟地引脚,为了降低噪声和出错几率,模拟电源与数字电源应该隔离。这里使用10uH的电感L2~L4实现电源隔离(将高频噪声隔离),并且在设计PCB板时采用大面积敷地,以降低噪声。

                           图3-2(系统电路)

3. 3 复位电路
由于ARM芯片的告诉、低功耗和的工作电压导致其噪声容限低,对电源的纹波、瞬态响应性能、时钟源的稳定性和电源监控可靠性等诸多方面也提出了更高的要求。如图1-3所示。

                       图3-3(系统复位电路)

3. 4  JTAG接口电路
采用RAM公司提出的标准20脚JTAG仿真调试接口,JTAG信号的定义以及与LPC2210的连接如图1-4所示。图中,JTAG接口上的信号nTRST连接到LPC2210芯片的T\R\S\T\引脚,以达到控制LPC2210内部JTAG接口电路复位的目的(但不控制CPU复位)。

                       图3-4(JTAG接口电路)

3. 5 系统存储器电路
SartARM2200j教学实验开发平台上扩展了2MB NOR FLASH(型号为SST39VF160)和8MB PSRAM(芯片型号为MT45W4MW16),电路如图1-5。为了方便程序调试及最终代码的固化应用,使用LPC2210外部存储接口的BANK0和BANK1地址空间,并且可以通过JP10跳线将片选信号CS0和CS1分别分配给SRAM或FLASH。在使用JTAG调试程序时,分配SPRAM为BANK0地址,因为BANK0可以进行异常向量表的重新映射操作。当最终代码固化到FLASH时,分配FLASH为BANK0地址,SRAM为BANK1地址。这是因为BANK0可以用来引导程序运行。若使用BANK0引导程序运行,将JP9短接到OUTSIDE端,使系统复位时BOOT1和BOOT0引脚的电平为0b01(即二进制值01).

              图3-5(系统存储器电路)

3 . 6  TFT液晶接口电路
SmartARM2200教学实验开发平台标配有2.2英寸液晶屏-TF6758液晶模块,其电路原理如图1-6所示。TFT6758液晶模块的工作电压为3.3V,内带白光LED背光灯,可以直接使用8位、16位或18位总线方式与控制器连接(因为液晶模块内部包含了HD66781和HD66783液晶控制驱动器)。为了得到更搞的数据传输速率,设计电路时采用16位总线接口,按照HD66781芯片说明,需要IM3和IM0引脚0电平,16位数据分别为DB17~DB10和DB8~DB1引脚,为使用的DB0和DB9引脚应接地,电路连接如图1-6所示。因为不使用DMA传输功能,所以将DACK引脚接为高电平。

图3-6 (TFT6758液晶模块应用电路)
3. 7 串口接口电路
由于系统电源是3.3V,所以应使用SP3232E进行RS232电平转换,SP3232E是3V工作电源的RS232转换芯片。如图1-7所示

图3-7 (串口接口电路)

3. 8  ADC电路
PC2114/2124/2119/2129/2194具有4路10位ADC转换器,LPC2210/2212/2214/2290/2292/2294具有8路10位ADC转换器,其参考电压为3.3V(由V3a引脚提供),参考电压的精度会影响ADC的转换结果。SmartARM2200教学实验开发平台提供了两路滞留电压测量电路如图1-8所示,可调电阻W1和W2用于调整ADC的输出电压,可以在VINI和VIN2测试点上用万用表检查当前电压值。R36和R37为I/O口保护电阻,当ADC输入电压调整到3.3V或0V时,而P0.27或P0.28作为GPIO输出0或1,此刻,这两个电阻保证电路不产生短路故障。

图3-8 (ADC电路)

3. 9 按键控制电路
按键:在SmartARM2200教学实验平台上使用P0.20扩展一个独立按键KEY1,当需要使用此按键时,应将JP2跳线短接。当断开JP2跳线时,P0.20可以通过J5连接器(GPIO输出接口)与用户板连接使用。


图3-9 (按键控制电路)

3. 10 主芯片电路
LPC2210是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-S CPU的微控制器,并带有0/128/256KB嵌入的高速片内Flash存储器,片内128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。由于LPC2210具有较小的64个144脚封装,极低的功耗,多个32位定时器,4路10位ADC或8路10位ADC(64脚和144脚封装)以及多达9个外部中断。

    图3-10 (主芯片电路)
第四章 软件分析

4. 1 软件框图分析
               

        

                                                




4. 2 任务的划分
对一个嵌入式应用系统进行“任务划分”,是实时操作系统应用软件设计的关键,任务划分是否合理将直接影响软件设计的质量。任务划分原则如下:
        以CPU为中心,将与各种输入/输出设备(或端口)相关的功能分别划分为独立的任务。
        发现“关键”功能,将其最“关键”部分“剥离”出来,用一个独立任务(或ISR)完成,剩余部分用另一个任务实现,两者之间通过通信机制沟通。
        发现“紧迫”功能,将其最“紧迫”部分“剥离”出来,用一个独立的高优先级任务(或ISR)完成,剩余部分用另一个任务实现,两者之间通过通信机制沟通。
        对于既“关键”又“紧迫”的功能,按“紧迫”功能处理。
        将消耗机时较多的数据处理功能划分出来,封装为低优先级任务。
        将关系密切的若干功能组合成为一个任务,达到功能聚合的效果。
        将由相同事件触发的若干功能组合成为一个任务,从而免除事件分发机制。
        将运行周期相同的功能组合成为一个任务,从而免除时间事件分发机制。
        将若干按固定顺序执行的功能组合成为一个任务,从而免除同步接力通信的麻烦。

4. 3 任务的优先级设计
为不同任务安排不同的优先级,其最终目标是使系统的实时性指标能够得到满足。在实际的产品开发中,应该在项目开始时,仔细思考和推敲。如果任务优先级的设定有误,对以后的开发和调试会带来极大的困扰,会让工程师花很长时间来查错误,而且出现的错误不好排除。所以设计任务的优先级是很重要的。
本次实验一共建立了五个任务,其优先级如下:
     OSTaskCreate (Task0,(void *)0, &Task0Stk[128 - 1], 2);        //创建Task0任务,优先级为2
        OSTaskCreate (Task1,(void *)0, &Task1Stk[128 - 1], 3);        //创建Task1任务,优先级为3
        OSTaskCreate (Task2,(void *)0, &Task2Stk[128 - 1], 4);        //创建Task2任务,优先级为4
        OSTaskCreate (Task3,(void *)0, &Task3Stk[128 - 1], 5);  //创建Task3任务,优先级为5
        OSTaskCreate (Task4,(void *)0, &Task4Stk[128 - 1], 6);        //创建Task4任务,优先级为6

4. 4 液晶显示初始化设计
    GUI_PrtPic(0, 0, 239, 319, gImage_root01);// 示波器面板(背景)图显示
    GUI_Line(224, 268, 224, 315, 0xffff);                //Running至Off间6根短白线
    GUI_Line(184, 268, 184, 315, 0xffff);
    GUI_Line(144, 268, 144, 315, 0xffff);
    GUI_Line(104, 268, 104, 315, 0xffff);
    GUI_Line( 64, 268,  64, 315, 0xffff);
    GUI_Line( 24, 268,  24, 315, 0xffff);
    WaveTrackCnt = 0;
   
    GUI_PrtStr(208, 270, "Coupling", 0xfee4, 0x0274); // "Coupling"和" DC "显示
    GUI_PrtStr(188, 280, " DC ", 0x0000, 0xffff);
    GUI_PrtStr(168, 273, "Volt/Div", 0xfee4, 0x0274);        // "Volt/Div"和" 0.42V "显示
    GUI_PrtStr(148, 275, " 0.42V ", 0x0000, 0xffff);
    GUI_PrtStr(128, 270, "Time/Div", 0xfee4, 0x0274);         // "Time/Div"和" 60uS "显示
    GUI_PrtStr(108, 275, " 60uS ", 0x0000, 0xffff);
    GUI_PrtStr( 88, 274, "TrigVolt", 0xfee4, 0x0274);        // TrigVolt显示
    sprintf(UART0_StrBuff, " %1.2fV ", CH1TptVal*3.3/255);
    GUI_PrtStr( 68, 276, UART0_StrBuff, 0x0000, 0xffff);
    GUI_PrtStr( 48, 280, "Invert", 0xfee4, 0x0274);        // "Invert"和" Off "显示
    GUI_PrtStr( 28, 283, " Off ", 0x0000, 0xffff);  

4. 5 定时器设计
   PWMPR = 0x00;                            // 不分频,计数频率为Fpclk
    PWMMCR = 0x02;                                            // 设置PWMMR0匹配时复位PWMTC
    PWMMR0 = CYCLE_DATA;                        // 设置PWM周期
    PWMMR6 = DUTY_CYCLE_DATA;                        // 设置PWM占空比
   
    PWMLER = 0x41;                                            // PWMMR0、PWMMR6锁存
    PWMPCR = 0x4000;                                        // 允许PWM6输出,单边PWM
PWMTCR = 0x09;                                            // 启动定时器,PWM使能

4. 6 AD转换设计
ADCR = (1 << 7)                     |                // SEL = 0x80 ,选择通道7
           ((Fpclk / 4500000 - 1) << 8) |                 // CLKDIV = Fpclk / 4500000 - 1 ,即转换时钟为4.5MHz
           (1 << 16)                    |                // BURST = 1 ,软件控制转换操作
           (2 << 17)                    |                 // CLKS = 2 ,使用9clock转换, 8位精度
           (1 << 21)                    |                 // PDN = 1 , 正常工作模式(非掉电转换模式)
           (0 << 22)                    |                 // TEST1:0 = 00 ,正常工作模式(非测试模式)
           (1 << 24)                    |                 // START = 1 ,直接启动ADC转换
           (1 << 27);                                                        // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)                                       
    dat = ADDR;                                                                // 读取ADC结果,并清除DONE标志位

4. 7 数据处理
void OSC_PCM(void)                                                                // 2048个数据采集,每个数据为8位
{   
        uint32 i, dat;

    for(i=0; i<1024*2; i++)
    {
        while( (ADDR&0x80000000)==0 );          // 等待转换结束
        dat = ADDR;                             // 读取ADC结果
        CH1 = (dat>>8) & 0xFF;               // 提取AD转换值
    }
}

4. 8 触发设计
uint8 OSC_LockTrigerPoint(void)                                        // 触发点锁定
{   
        uint32 i;
    uint32 Avg0, Avg1;

    CH1Tpt1 = 0;
    for(i=250; i<1250; i++)
    {
        Avg0 = (CH1[i+3]+CH1[i+2]+CH1[i+1]+CH1[i+0]) >> 2;  // 对采样值滤波
        Avg1 = (CH1[i+7]+CH1[i+6]+CH1[i+5]+CH1[i+4]) >> 2;  // 对采样值滤波            
        if( (Avg1 - Avg0)>0 )             // 比较2个采样点,判断是否为上升沿      
        {
            CH1TptVal = 80;                        // 触发点电压为:3.3*80/255=1.04V
            if((Avg1>CH1TptVal) && (Avg0<CH1TptVal))        // 是否为触发点
            {
                CH1Tpt1 = i;                     // 保存触发点对应的采样序号
                i = 0xffff;                     // 破坏循环条件,退出for循环      
            }
        }
        i++;                                // 没有找到触发点则向上继续收缩
    }
    if(i == 1250)                        // 如果搜索到1240意味无法找到触发点
    {
        CH1Tpt1 = 250;                  // 给定一个初始值用于显示
        return(0);
    }
    else
    {
        return(1);
    }
}

4. 9 周期设计
uint8 OSC_FindPeriod(void)                                // 求(寻找)周期
{   uint32 i;
    uint32 Avg0, Avg1;
    if(CH1Tpt1 > 240)                // 已经锁定触发点,可以寻找周期
    {
        for(i=CH1Tpt1+8; i<1250; i++)
        {
            Avg0 = (CH1[i+3]+CH1[i+2]+CH1[i+1]+CH1[i+0]) >> 2;
            Avg1 = (CH1[i+7]+CH1[i+6]+CH1[i+5]+CH1[i+4]) >> 2;            
            if( (Avg1 - Avg0)>0 )  
            {                //CH1TptVal = 128;
                if((Avg1>CH1TptVal) && (Avg0<CH1TptVal))    // 是否为触发点
                {
                    CH1Tpt2 = i;
                    i = 0xffff;
                }
            }
            i++;
        }
    }
    if(i == 1250)
    {
        CH1Tpt2 = 250;                            // 给定一个初始值用于显示
        return(0);
    }
    else
    {
        CH1Fre = 422880/(CH1Tpt2-CH1Tpt1);
        return(1);
    }
}

4. 10 求最值设计
void OSC_CH1MaxMin(void)                                                //求(寻找)最大值和最小值
{   
           uint32 i;
       uint32 Max, Min;
   
       Max = CH1[CH1Tpt1-125];
        Min = CH1[CH1Tpt1-125];
        for(i=CH1Tpt1-125; i<CH1Tpt1+125; i++)   
    {
        if(CH1>Max)
        {
            Max = CH1;
        }
        if(CH1<Min)
        {
            Min = CH1;
        }
    }
         CH1Max = Max;
         CH1Min = Min;
}

4. 11 主函数与调用的TASK设计
#include "config.h"
#include "stdlib.h"
OS_STK        Task0Stk [128];                        // Define the Task0 stack 定义用户任务0的堆栈
OS_STK        Task1Stk [128];                        // Define the Task1 stack 定义用户任务1的堆栈
OS_STK        Task2Stk [128];                        // Define the Task2 stack 定义用户任务2的堆栈
OS_STK        Task3Stk [128];                        // Define the Task3 stack 定义用户任务3的堆栈
OS_STK        Task4Stk [128];                        // Define the Task4 stack 定义用户任务4的堆栈
void         Task0(void *pdata);                        // Task0 任务0
void         Task1(void *pdata);                        // Task1 任务1
void         Task2(void *pdata);                        // Task2 任务2
void         Task3(void *pdata);                        // Task3 任务3
void         Task4(void *pdata);                        // Task4 任务4
int main (void)
{
        OSInit();                                                //操作系统初始化        
        OSTaskCreate (Task0,(void *)0, &Task0Stk[128 - 1], 2);        //创建Task0任务,优先级为2
        OSTaskCreate (Task1,(void *)0, &Task1Stk[128 - 1], 3);        //创建Task1任务,优先级为3
        OSTaskCreate (Task2,(void *)0, &Task2Stk[128 - 1], 4);        //创建Task2任务,优先级为4
        OSTaskCreate (Task3,(void *)0, &Task3Stk[128 - 1], 5);  //创建Task3任务,优先级为5
        OSTaskCreate (Task4,(void *)0, &Task4Stk[128 - 1], 6);        //创建Task4任务,优先级为6
        OSStart();                                                                                                //启动操作系统
        return 0;                                                                                                                        
}

Task0 任务0      //采样1600个数据, 锁定触发点  
void Task0(void *pdata)
{   uint32 i;
        pdata = pdata;                                                        //防止编译警告,以下同
        TargetInit ();                                                        //初始化目标板
        while (1)
        {
        OS_ENTER_CRITICAL();                                //进入临界区
        for(i=0;i<1600;i++)                                //采样1600个数据
        {
            while((ADDR&0x80000000)==0);    //等待转换结束
            CH1=(ADDR>>8)&0xFF;          //提取AD转换值(8位)
        }
        OS_EXIT_CRITICAL();                                //退出临界区
            OSC_LockTrigerPoint();                                //锁定触发点
        OSC_FindPeriod();                                        //求频率
        OSC_CH1MaxMin();                                        //求最大、最小值
        GUI_ClrTrack();                                        //清除旧轨迹(前一次波形)
        GUI_DispTrack();                                        //显示新轨迹(当前波形)
                OSTimeDly(50);                                                //延时
        }
}
   
Task1 任务1   //调用函数:sprintf,GUI_PrtStr,OSTimeDly
void Task1(void *pdata)
{   
        pdata = pdata;
        while (1)
        {                                                                                                                                
            sprintf(UART0_StrBuff, "CH1max = %1.2fV", CH1Max*3.3/256);        //显示通道1最大值(1位正数、2位小数)
            GUI_PrtStr(5, 10, UART0_StrBuff, 0xfee4, 0x0274);                        //坐标位置5、10,前景黄色,背景蓝色
            sprintf(UART0_StrBuff, "CH1min = %1.2fV", CH1Min*3.3/256);        //显示通道1最小值(1位正数、2位小数)
            GUI_PrtStr(5, 110, UART0_StrBuff, 0xfee4, 0x0274);
            sprintf(UART0_StrBuff, "CH1Fre = %6d Hz", CH1Fre);          //显示通道1频率(6位正数)
            GUI_PrtStr(5, 210, UART0_StrBuff, 0xfee4, 0x0274);
        OSTimeDly(100);                                                                                                //延时
        }
}

Task2 任务2

void Task2(void *pdata)
{  
        pdata = pdata;
         
        while (1)
        {
            GUI_PrtStr(208, 270, "Coupling", 0xfee4, 0x0274);         //直流耦合
            GUI_PrtStr(188, 280, " DC ", 0x0000, 0xffff);        //前景黑色,背景白色
            GUI_PrtStr(168, 273, "Volt/Div", 0xfee4, 0x0274);        //Y轴;0.42V/格
            GUI_PrtStr(148, 275, " 0.42V ", 0x0000, 0xffff);
            GUI_PrtStr(128, 270, "Time/Div", 0xfee4, 0x0274);        //X轴;60uS/格
            GUI_PrtStr(108, 275, " 60uS ", 0x0000, 0xffff);
            GUI_PrtStr( 88, 274, "TrigVolt", 0xfee4, 0x0274);        //触发电平显示
            sprintf(UART0_StrBuff, " %1.2fV ", CH1TptVal*3.3/255);
            GUI_PrtStr( 68, 276, UART0_StrBuff, 0x0000, 0xffff);
            GUI_PrtStr( 48, 280, "Invert", 0xfee4, 0x0274);        //反向显示关
            GUI_PrtStr( 28, 283, " Off ", 0x0000, 0xffff);  
        OSTimeDly(2000);
        }
}

Task3 任务3   //CH1Tpt1:通道1符合触发条件对应的第一个采样序号,CH1Tpt2:通道1符合触发条件对应的第二个采样序号
void Task3(void *pdata)
{
        pdata = pdata;
        while (1)
        {
            sprintf(UART0_StrBuff, "CH1Tpt1 = %6d\n\r", CH1Tpt1);               
            UART0_SendStr(UART0_StrBuff);                        //通过串口0,发送CH1Tpt1
            sprintf(UART0_StrBuff, "CH1Tpt2 = %6d\n\r", CH1Tpt2);               
            UART0_SendStr(UART0_StrBuff);                        //通过串口0,发送CH1Tpt2
            GUI_PrtStr(226, 268, " Running ", 0xfee4, 0x0274); //交替显示Running
        OSTimeDly(200);
            GUI_PrtStr(226, 268, " Running ", 0xfee4, 0xa000);
        OSTimeDly(200);
        }
}
Task4 任务4  //按键控制

void Task4(void *pdata)
{   
        uint32 pwm;
        pdata = pdata;
        while(1)
        {
        /* 自检信号,可以调节PWM占空比*/
        if((IO0PIN&KEY)==0)
        {
            OSTimeDly(20);
            if( (IO0PIN&KEY) == 0 )
            {
                pwm++;
                while( (IO0PIN&KEY) == 0 );
                if(pwm >= 5)  pwm = 1;
                PWMMR6 = DUTY_CYCLE_DATA*pwm;        // 设置PWM占空比
                PWMLER = 0x41;                                // PWMMR0、PWMMR6锁存
                PWMTCR = 0x09;                                // 启动定时器,PWM使能
            }
        }
    }
}














拓展知识
Agilent 1000 系列便携式示波器
23 种自动测量
所有型号的 1000 系列示波器都配有 23 种自动电压、时间和频率测量项
目。按下Measure键就可调出三种您最常用的测量,或在屏幕上同时显示出一
个通道的所有测量结果。
序列模式让您轻松进行调试
序列模式可记录最多 1000 次触发产生的波形,然后进行回放,轻松找出
毛刺和其他异常,以便进行进一步分析。示波器可将波形存储到内部存储器或
外部存储器 (USB 闪存) 中。
对波形进行数字滤波
选择合适的实时数字滤波器对输入信号进行滤波,屏幕上显示的信号不再
含有您不需要的频率分量。可供选择的数字滤波器包括低通滤波器、高通滤波
器、带通滤波器和带阻滤波器。可选择的频率范围为 250 Hz 至示波器的完整
带宽。
高级触发
1000 系列示波器可选择边沿、脉宽、复合视频、码型和交替通道等触发
模式。这些模式可确保您能够捕捉和查看难于发现的信号。
远程编程
为了通过内置 USB 接口来远程控制仪器,您可以根据您的实际测试需求
使用 Agilent I/O 程序库或美国 NI 公司用于 1000 系列示波器的仪器驱动程序。
这些驱动程序充分利用了业内公认的标准,并可与很多应用程序开发环境兼
容,例如 Agilent VEE Pro、美国 NI 公司的 LabView 和 LabWindows/CVI。










参考文献

    [1] 刘全,韩大强,李柯霖.便携式20M数字存储示波器[J].电子制作.2005:70-75.
[2] 周明辉,宋跃,张小平等. 基于ARM的等效采样手持式存储示波表设计[J].电脑开发与应用,2005,18(6):24-28.
[3] 张毅,周绍磊等.虚拟仪器技术分析与应用[M].北京:北京机械工业出版社,2004:231-232.
[4] 张兴会,赵杰.智能数据采集系统的研究[J].仪器仪表学报,2001 ,22(4):101-102.
[5] 刘振兴,李宗福,刘林辉.ARM嵌入式技术实践教程[M].北京:北京航空航天大学出版社,2005.
[6]  ARM公司.ARM Architecture Reference Manual[M].2000.
[7] 桑楠.嵌入式系统原理及应用技术开发.北京:北京航空航天大学出版社,2001:75-88.
[8]  Atmel公司.24C08 Data Sheet.
[9] 林俊超,宋飞等.ARM嵌入式应用系统开发典型实例[M].西安:中国电力出版社,2005.
[10] ARM Limited.ARM Software Development Toolkit Version2.0[M].ARM DUI 0021A,1995.
[11] 周立功.ARM嵌入式系统软件开发实例(一)[M].北京:北京航空航天大学出版社,2004.
[12] 沈连丰,宋铁成等.嵌入式系统及其开发应用[M].北京:电子工业出版社,2005.

This post contains more resources

You have to Login for download or view attachment(s). No Account? Register

x
Reply

Use magic Report

You have to log in before you can reply Login | Register

Points Rules

Dark room|Mobile|Archiver|Electronic Engineer Discuss

2024-3-29 03:34 GMT+8 , Processed in 0.256515 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

Quick Reply To Top Return to the list