您当前的位置:五五电子网电子知识电子知识资料仪器仪表读写器函数信号发生器和示波器二合一仪器设计 正文
函数信号发生器和示波器二合一仪器设计

函数信号发生器和示波器二合一仪器设计

点击数:7186 次   录入时间:03-04 11:57:28   整理:http://www.55dianzi.com   仪器仪表读写器

    1.总体设计方案

     

     

    1.1 主控制模块

    方案一:采用单片机。单片机的应用较为广泛,但是单片机的处理频率达不到我们的要求。所以我们只能够使用处理速度较快的处理器。

    方案二:采用Xilinx的FPGA来实现主控制器。Xilinx的FPGA的内部IP核可以方便的产生DDS波形,这样就方便我们能够更好的产生想要的波形。

    所以采用方案二。

    1.2显示模块

    方案一:使用TFT触摸屏。彩屏有这样明显的优点:微功耗,尺寸小,超薄轻巧,显示信息量大,字迹美观,视觉舒适,但是对于FPGA来说,其实现对触摸屏的控制不能够较好的完成控制要求。

    方案二:使用VGA显示。FPGA可以实现对VGA的控制。VGA的使用较为广泛,且价格在接收的范围之内。而且,对于FPGA来说,实现对VGA接口的控制比控制其他的显示器更加的方便和快捷。这就节省了我们的设计麻烦。

    所以采用方案二。

     

   

    1.3 输入模块

    方案一:使用矩阵键盘。矩阵键盘的编码较为简答,且可以实现较为复杂的控制。但是矩阵键盘的按键过少,不能够实现更多数据的输入。

    方案二:使用PS2键盘。PS2键盘的控制更为简单,我们可以通过两根数据线精心数据的读取,且PS2键盘的设计更加符合我们设计要求,这就决定了PS2在本设计中的优势。

    故采用方案二。

     

    1.4 AD输出模块

    ADS7822是一种单片高速12位逐次比较型A/D转换器, ADS7822内置双极性电路构成的混合集成转换显片,具有外接元件少,功耗低,精度高等特点,并且具有自动校零和自动极性转换功能,只需外接少量的阻容件即可构成一个完整的A/D转换器。所以该方案采用ADS7822作为AD输入的元器件。

     

     

    1.5 DA输出模块

    DAC7513是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。

     

    2.程序设计

    2.1 AD输出

     

    --**********************分频进程*************************

    process(clk)

    variable cnt1 : integer range 0 to 100;

    variable cnt2 : integer range 0 to 20;

    begin

    if clk'event and clk='1' then

    if cnt1=100 then

    cnt1:=0;

    if cnt2=20 then

    cnt2:=0;

    cLOCk<=not clock;

    if(cnt=3)then

    cnt<=0;

    else

    cnt<=cnt+1;

    end if;

    else

    cnt2:=cnt2+1;

    end if;

    else

    cnt1:=cnt1+1;

    end if;

    end if;

    end process;

    --**************状态驱动进程**********************

    sync :process(clock,reset)

    begin

    if(reset = '0') then

    current_state <= start;

    elsif(clock'event and clock='1') then

    current_state <= next_state;

    end if;

    end process sync;

    --***************adc驱动进程*******************

    comb :process(current_state, intr)

    begin

    case current_state is

    when start => --启动状态

    next_state <= convert;

    cs <= '0';

    wr <= '0';

    rd <= '1';

    read_data <= '0';

    when convert =>--初始化

    if(intr = '0') then

    next_state <= read1;

    else

    next_state <= convert;

    end if;

    cs <= '1';

    wr <= '1';

    rd <= '1';

    read_data <= '0';

    when read1 =>--读状态1

    next_state <= read2;

    cs <= '0';

    wr <= '1';

    rd <= '0';

    read_data <= '1';

    when read2 =>--读状态2

    next_state <= start;

    cs <= '1';

    wr <= '1';

    rd <= '1';

    read_data <= '0';

    when others =>--其他状态

    next_state <= start;

    end case;

    end process comb;

    --****************读取AD数据********************



www.55dianzi.com

    get_data: process(cLOCk,reset)

    begin

    if(reset = '0') then

    p<=0;

    elsif(clock'event and clock='1') then

    if(read_data = '1') then

    p<=conv_integer(data_i);

    end if;

    end if;

    end process;

    2.2 DA输出

     

    --*********************65536Hz分频进程************************

    process(clk)

    variable cnt1 : integer range 0 to 762;

    begin

    if clk'event and clk='1' then

    case cnt1 IS

    WHEN 381 =>

    cp_65k<='1';

    cnt1:=cnt1+1;

    WHEN 762=>

    cnt1:=0;

    cp_65k<='0';

    cp_wr<='0';

    WHEN 20=>

    cp_wr<='1';

    cnt1:=cnt1+1;

    WHEN OTHERS=>

    cnt1:=cnt1+1;

    end case;

    end if;

    end process;

    --*********************1kHz分频进程************************

    process(cp_65k)

    variable cnt1 : integer range 0 to 64;

    begin

    if cp_65k'event and cp_65k='1' then

    case cnt1 is

[1] [2]  下一页


本文关键字:信号发生器  仪器  示波器  仪器仪表读写器电子知识资料 - 仪器仪表读写器