0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Digilent Zybo板的数字示波器的制作

454398 来源:网络整理 作者:网络整理 2019-11-20 17:29 次阅读

步骤1:模拟前端

使用Digilent Zybo板的数字示波器的制作

Xilinx Zynq IC具有“ XADC模数转换器。 XADC最多以1MSPS(每秒兆采样)采样,输出12位值。该ADC的输入范围为0-1V。

XADC能够对几个输入通道进行采样,但是在Zynq板上,用户实际上只能访问几个特定的辅助输入。在示波器中,我使用了Zybo XADC PMOD上可用的AUX14 ADC输入。

由于0-1V的示波器输入范围不是很有用,因此必须在ADC输入的前面添加模拟电路,以便缩放和移动输入电压,请参见此步骤的框图。

此框图是使用LTSPICE原理图/仿真中显示的电路实现的(为仿真附上原理图文件)。根据需要,增益为1/20 = 0.05,直到抗混叠滤波器导致其下降约400kHz(1MSPS ADC的奈奎斯特频率= 500kHz)为止。

我在面包板上实现了该设计(没有时间使用通孔组件设计PCB)。第二个LTSPICE原理图中显示了用于实现此设计的组件(不可仿真,仅用于设计用于订购零件的电路),以及实际构建的电路。 3.3V和GND来自XADC PMOD连接器

步骤2:ADC缓冲器/触发器

设计负责采样输入信号,在发生波形事件时触发并在完成时使数据可用于PS。

-processing_system7_0:Zynq PS

-rst_processing_system7_0_100M:零件AXI通信(添加到连接自动化中)

-processing_system7_0_ai_periph:AXI通信(添加到连接自动化中)

-xadc_wiz_0:XADC实现。在DRP,单通道模式下配置,具有最大转换率(实际为961KSPS)。 VAUX14被配置为双极性模式。

-gpio_trigger_settings:GPIO IP用于设置子采样和触发阈值。二次采样是指选择从ADC接受输入值的频率。如果将示波器的时基缩小很长一段时间,则缓冲区将太小而无法填满(例如)以1MSPS采集的1秒数据。触发阈值是指触发发生时的电压电平。

-gpio_trigger_control:GPIO IP。通道1输出,能够复位触发块(当PS准备好用于新的数据缓冲区时)并声明要读取的存储器的地址值。通道2是输入,允许读取数据缓冲区的输出数据,最后写入的地址以及触发缓冲区是否已满。

-drp_int_0:我的IP,用于解释XADC的DRP输出。

-trigger_0:我的IP,用于实现触发行为

-blk_mem_gen_0:用于保存过去的采样值的IP。

此部分所有IP的SystemVerilog文件都包括在内。

步骤3:用户输入处理

设计的这一部分负责对编码器和按钮输入进行采样。 “标准速度” PMOD用于将这些信号引入Zynq。只需使用GPIO模块即可对按钮输入进行采样。编码器输入由编码器IP块(由我编写)处理,以便获得与旋转编码器多少有关的“计数”值。

由于使用了机械式旋转编码器,因此开关和编码器输出均需要上拉电阻(5k Ohm),并且还添加了一个去抖动的LP滤波器。这可能是我设计中最薄弱的部分,并且肯定需要做更多的工作。尽管对硬件模块进行了仿真,但显示出正常的功能(图像已附上),但我仍然无法从编码器获取准确的计数值。在最后的演示之前,我没有时间来诊断这个问题,因此我建议您花一些时间比我更多的时间来设计这个问题!

-encoder_btn_gpio:输入了通道1,正在计数来自三个编码器和两个按钮的值

-encoder0,1,2:我的IP,用于解释旋转编码器的正交输入。编码器的步长被记录为可以为负或正的“计数”值。存在RST输入以重置计数值,允许PS读取计数值,然后将其重置。这样,计数值将永远不会溢出并导致奇怪的结果。

步骤4:视频驱动程序

设计的这一部分负责绘制GUI和输入波形。示波器波形,触发电平线和其他变化的指示器存储在帧缓冲器中,每个存储器地址保存一个像素值。该帧缓冲区是一个块内存,VGA驱动程序从中读取值,然后将其发送到VGA端口以在屏幕上显示。

最初,屏幕的大小希望为640 x480。但是,存储一个块RAM中的所有这些像素值都是不可能的,因为块ram的最大深度是262144(对应于18位的地址,2 ^ 18 = 262144),并且640 x 480 = 307200像素。做出了妥协,将屏幕缩小到480 x 512,以便将整个屏幕缓冲区存储在一个块ram中。

为了简化以后的编码,在计算机上的图像编辑器中绘制了背景图像(网格和屏幕轮廓)。编写(包括)了一个matlab脚本,将黑白BMP转换为.coe文件,该文件可以预加载到块ram单元中。这意味着图像已经存储在内存中,不需要用代码或硬件“绘制”。这是与屏幕缓冲区分开的独立块内存,因此两个块RAM的输出将运行到自定义IP块(颜色处理器)中,以便“决定”应显示哪种颜色,示波器信号和指示器具有更高的层优先级在网格上。

-axi_gpio_0:输出通道1。控制地址,数据和启用信号以写入屏幕缓冲区。输入通道2。读取确认位以确认写入操作已完成。

-bram_write_controller:从GPIO模块获取地址,数据和启用信号,以写入块ram。地址和数据信号无需更改即可简单路由。 EN信号带来了复杂性。我不确定从GPIO写入“ 1”和“ 0”将花费多长时间(就时钟周期而言),因此我想确保块wram仅被写入一次。该写控制器在GPIO的EN信号的上升沿运行,以便为块ram的写使能产生一个1时钟宽度的使能脉冲。完成该脉冲后,可以将确认信号置为高电平,以确认它已被写入。

-signals_buffer1:这是一个3位宽的块ram,用于在屏幕上存储变化的像素值,例如波形,触发电平线和电压/分压指示器。每个存储器地址代表一个像素。地址系统的工作方式是,高9位是像素的行,低9位是像素的列。

-gui_buffer:这是一个1位宽的块ram,用于存储通过图像生成的.coe文件加载的不变的GUI(网格,轮廓等)。 (附加了MATLAB脚本)

-vga_driver_0:为VGA协议生成水平和垂直同步信号。生成代表当前显示像素的列和行值。这些用于从块RAM中读出以读取当前像素的存储值

-color_processor_0:此IP根据存储的像素值决定显示哪种颜色。我将优先级从最高设置为最低(红色触发电平线,黄色信号线,白色GUI/网格)。每个像素的值存储为3位值,每个位代表一个“层”。优先级较高的信号(如触发线)应出现在“顶层”,而优先级较低的信号(如背景网格)应出现在“底层”。

步骤5 :处理系统

将前面介绍的设计组合在一起,以提供最终设计,并由一个PS来控制它们。所有模块的接口均通过GPIO IP。结合使用时,请参见图像以查看所有先前的GPIO模块的命名约定:

-gpio_trigger_control:控制触发模块,读取缓冲区值

-gpio_trigger_settings:设置阈值和子采样

-screen_buffer_gpio:将值写入屏幕缓冲区

-encoder_btn_gpio:读取编码器计数和按钮值。

写入(包括)用于写入像素的库,读取编码器/按钮输入,并读取样本缓冲区值。由于时间有限,主代码有些大,没有足够的时间使它们具有模块化功能。

在最初的开发中,FreeRTOS将用于PS中。由于时间限制,这被放弃并且没有使用任何任务。但是,我一直在进行的CORTEX_A9_Zynq_ZC702 FreeRTOS演示项目仍在使用,其名义是在最后一刻尽可能少地更改。

我的示波器的最终版本仅具有垂直刻度调整和触发电平调整,因此未使用时分显示。

主程序的基本流程是:

1)检查编码器和按钮输入,适当调整触发值

2)检查范围是否已触发(重复1&2,直到触发)

3)擦除并更新显示V/Second划分的标记。

4)读取触发缓冲区的所有值。

5)计算触发电平线在像素位置的位置

6)计算当前和下一个样本的位置以像素为单位

7)删除当前列中的所有像素

8)绘制一条从当前样本位置的行到下一个样本位置的行的垂直线。

9)绘制触发电平线

10)绘制三角形以显示0V电平

11 )重置触发器以再次开始采样。

12)从1开始重复。

第6步:结论,注释,未来改进

回头看看有一些变化我想做。大部分时间都受我时间紧迫的限制。

-编码器:目前,编码器的工作情况很差。我需要使用示波器进行更多调试,以确保正交输出“无反弹”且干净,以便在解释它们时没有错误。

-应该添加垂直偏移和水平偏移/缩放。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 示波器
    +关注

    关注

    111

    文章

    5661

    浏览量

    181787
  • Digilent
    +关注

    关注

    2

    文章

    218

    浏览量

    15630
收藏 人收藏

    评论

    相关推荐

    数字示波器和模拟示波器区别

    数字示波器:将模拟电信号经过模数转换技术转化成数字信号,再通过数字信号处理技术进行分析和显示。
    的头像 发表于 04-07 18:15 1144次阅读

    基于STM32制作的500KHz示波器项目

    今天小编给大家带来国外的Maker Mirko Pavleskid的基于STM32制作的500KHz示波器项目。
    的头像 发表于 12-03 10:07 838次阅读
    基于STM32<b class='flag-5'>制作</b>的500KHz<b class='flag-5'>示波器</b>项目

    发布两款数字示波器,高分辨率数字示波器产品线趋于完善

    2023年9月26日,鼎阳科技发布两款数字示波器,分别是SDS3000X HD系列数字示波器以及新款SDS1000X HD系列数字
    的头像 发表于 09-26 17:16 342次阅读
    发布两款<b class='flag-5'>数字</b><b class='flag-5'>示波器</b>,高分辨率<b class='flag-5'>数字</b><b class='flag-5'>示波器</b>产品线趋于完善

    数字示波器的工作原理 示波器的主要用途

    数字示波器的工作原理 示波器的主要用途  数字示波器的工作原理及其主要用途 数字
    的头像 发表于 09-04 16:52 2325次阅读

    数字示波器和模拟示波器哪个好?

    数字示波器和模拟示波器哪个好? 随着现代电子技术的不断发展与进步,数字示波器和模拟示波器已成为测
    的头像 发表于 09-04 16:52 3338次阅读

    数字示波器使用方法介绍 数字示波器的用途介绍

    数字示波器使用方法介绍 数字示波器的用途介绍  数字示波器是一种电子测试仪器,适用于电子工程师在
    的头像 发表于 09-04 16:49 1355次阅读

    虚拟示波器数字示波器的区别是什么?

    虚拟示波器数字示波器的区别是什么?  虚拟示波器数字示波器是电子测量领域中的两种常见设备。虽
    的头像 发表于 09-04 16:47 1431次阅读

    数字示波器和模拟示波器有何区别?

    数字示波器和模拟示波器有何区别 数字示波器(Digital Oscilloscope)和模拟示波器
    的头像 发表于 09-04 16:43 4589次阅读

    使用Genode控制Zybo Z7 GPIO - 第2/2部分

    电子发烧友网站提供《使用Genode控制Zybo Z7 GPIO - 第2/2部分.zip》资料免费下载
    发表于 07-13 11:32 0次下载
    使用Genode控制<b class='flag-5'>Zybo</b> Z7 GPIO - 第2/2部分

    Zybo Z7-20上的汽车检测系统

    电子发烧友网站提供《Zybo Z7-20上的汽车检测系统.zip》资料免费下载
    发表于 07-11 11:22 0次下载
    <b class='flag-5'>Zybo</b> Z7-20上的汽车检测系统

    制作您自己的基于PC的声卡示波器

    电子发烧友网站提供《制作您自己的基于PC的声卡示波器.zip》资料免费下载
    发表于 06-16 10:37 0次下载
    <b class='flag-5'>制作</b>您自己的基于PC的声卡<b class='flag-5'>示波器</b>

    使用ZYBO从SD卡播放wav文件

    电子发烧友网站提供《使用ZYBO从SD卡播放wav文件.zip》资料免费下载
    发表于 06-15 09:44 0次下载
    使用<b class='flag-5'>ZYBO</b>从SD卡播放wav文件

    使用Genode控制Zybo Z7 GPIO

    电子发烧友网站提供《使用Genode控制Zybo Z7 GPIO.zip》资料免费下载
    发表于 06-13 14:35 0次下载
    使用Genode控制<b class='flag-5'>Zybo</b> Z7 GPIO

    Zybo Z7开发如何使用Wifi和ESP8266?

    大家好,我是 Wifi 和 ESP8266 的新手,所以我目前正在测试一些项目以验证我购买的 ESP8266 在 Arduino 上的工作情况。但是,我的目标是最终在 Digilent 提供的 Zybo Z7 开发上使用它。有
    发表于 05-25 13:29