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

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

3天内不再提示

解析简易示波器和信号发生器的实现

电子森林 来源:电子森林 作者:电子森林 2021-04-01 09:51 次阅读

本项目为南京工程学院刘昕禹同学完成并分享的作品

“简易示波器DIY套件V2.0 - 基于STM32G031最小系统模块”

因为本人也没学几天,如有错误,欢迎指正。

已经实现功能:

ADC模拟示波器,可以实现调节频率,单位电压,显示电压范围和选择频道(麦克风和Ain管脚)。

模拟函数发生,在Aux管脚可以实现正弦波、方波,并且可以调节频率。(今年大二,还没有学到模电,不知道怎么算三角波的占空比来实现信号的转换,理论上添加占空比数组后可以实现方波)。

可以实现同时输出波形(Aux)和接受波形的输入(Ain)。

未实现功能:

快速傅里叶变换(额,这个真不会,从网上复制来的FFT代码运行不起来,调用Cortex-M0的CMSIS DSP结果空间不足,使用之前Jack的FFT相关代码,也出现空间不足的情况。应该是使用了HAL库导致占用空间过大所导致的。写了两天代码,不想通过寄存器来实现,就算了吧,能退就退吧,我已经不想搞了)。

实现功能注意事项:

在这里就说说我遇到的坑吧。

空间不足,这类MPU的RAM的全局变量别开太大。(如果不添加FFT代码,目前代码可以实现局部刷新,提高显示速度)。

如果追求高刷新速度,建议使用局部刷新,经测试,局部刷新相对于全局刷新速度更快。

中断的合理安排。这类程序的设计需要添加多级中断,注意中断的优先级和中断内的代码的安排。

对于如果想要调用CMSIS来实现FFT的同学,希望注意空间的合理安排,或者自己来搞这里头的代码(我是真不想弄了,这两天让我心力憔悴)。

几个对开发板的建议吧:

开发板总体质量不错也挺小巧。

MPU的SPI总线和OLED的SPI总线对接(额,活动内页面说已经是对接的了,但是实际原理图和引脚测试结果都表明没有对接,望修改)。

能不能换用空间更大的MPU,就像我我添加HAL_UART的库后,代码一下子大了一半。

通过上位机来实现MPU进入下载模式,我看该该CH340那RTS,CTS没有接入开发板,通过置位这两个脚来实现开发板的上电和Boot0的拉低。

Reset按下后能够使得OLED(或整个开发板)的断电,有些时候因为传输给OLED的信号存在问题,重新初始化OLED是无效的,需要重新上电。

实现的思路:

先说简单的吧,信号发生,因为该模块在Aux上级加了滤波,所以可以调节信号的占空比来生成正弦波,我是通过调节预分频器来实现波形频率的变化(额,这个说实话我也不太懂,我也是看了网上的内容才知道的,就不多说了,以免误导。同时因为放假前嫌示波器太重了,带起来不方便,就没带回家了,我现在还不太清楚预分频数值和频率的关系,所以代码上就写了预分频的数值,希望知道的人能告诉我一下,谢谢)。

示波器,通过ADC中断来实现对数值的写入,写入后对屏幕进行滚动输出。

这段代码中存在一个问题,就是由于中断的性质,我们在上一屏和下一屏之间是不太推荐去采样的,所以会导致在快速刷新的时候,上一屏和下一屏画面不太连续(说实话也看不太出来,但是理论上是这样子的)。

由于屏幕分辨率的原因,对于方波这类上升沿和下降沿变化很快的信号他的上升沿和下降沿显示就不太够,就会出现上升沿和下降沿是一个点来表示的情况,但是可以通过算法来调节[1]。

达到的性能:

实现10us、20us、50us、0.1ms、0.5ms、2.5ms的采样速度,并且支持仅调节源代码里头的数组不改变函数内容来实现更多的采样率。

实现1.0v、0.8v、0.4v、0.1v的电压间隔,可以调节0-5v内电压显示范围,并且支持仅调节源代码里头的数组不改变函数内容来实现更多的电压间隔。

在较高电压时以x.x来显示,在低电压时以.xx来显示,同时改变电压间隔该功能仍能复现。

支持局部刷新,来实现更高的显示速率。

函数发生,目前因为按键的限制,预分频在0-999内调节,但是可以调节源代码里头的变量大小的限制变量来实现更多的预分频即频率。

函数发生,支持添加占空比表来实现更多不同的函数发生。

源代码和以编译文件:

注意事项:

请勿修改CubeMX的时钟,这会导致与实际标称值对应不上。

已禁用UART端口,如有需要望启用。

KEIL MDK版本,请对应版本打开。

补充:

经过测试,HAL库在不添加管脚、中断,在仅有初始化的时候,添加cortex-m0 dsp库,空间不够,添加zerofft也存在空间不够的情况。不排除是本人配置存在的问题,希望了解的大佬,不吝赐教,谢谢。

看了Jack大佬直播的视频,找到了有关[1]问题的解决方法,可以通过插值来实现波形的连续。但是,在下文提交的代码中,若采用插值的方法,面对Aux输出正弦波,Ain输入的情况,由于分辨率的原因,会出现一团糊的情况。不排除本人代码水平问题,希望了解的大佬,不吝赐教,谢谢。

波形的生成,经测试,调节预分频的大小同时保持占空比的不变可以调节波形的频率,但是,由于占空比的计算要使用专门的算法,不同的幅值对应某一时刻的占空比是不同的,故需要保存多个码表来实现不同的幅值。[提交版已实现]

由于fft代码占用空间太大,同时由于水平有限,无法实现,提交版已经注释有关fft代码(引用后可能会导致堆栈的问题,导致屏幕花屏),但是仍保留代码在里面同时fft界面也已预留,水平较强的同学可以试一试。

去除掉fft代码后,空间剩余好多,就添加几组幅值不同的正弦波函数占空比表以及重新启用了局部刷新的功能(经测试,局部刷新相对于全局刷新有肉眼上速度的提升)。

追加:Total RO Size (Code + RO Data) 21856 ( 21.34kB)

Total RW Size (RW Data + ZI Data) 6960 ( 6.80kB)

Total ROM Size (Code + RO Data + RW Data) 21924 ( 21.41kB) 可以看到,RAM空间快不足了,可能提交的这份代码有点难以实现,如果要用的话可以手动关闭局部刷新,可以省出来1k的RAM。

贴几张图吧:

o4YBAGBlKJCAGaZaAAfhhGGehQ4749.png

o4YBAGBlKL6AO8dMABMT44cCCJc383.png

pIYBAGBlKYyATg3lABG-bcDqAu0606.png

o4YBAGBlKOOAIrw3ABQh6T_cR2Y826.png

pIYBAGBlKT6AGShVABN6ZkO9x38101.png

update:添加波形幅值调节

pIYBAGBlKReAMQ2lAA2cGOYpznk349.png

编辑:jq

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

    关注

    113

    文章

    6240

    浏览量

    184789
  • OLED
    +关注

    关注

    119

    文章

    6198

    浏览量

    224080
  • adc
    adc
    +关注

    关注

    98

    文章

    6495

    浏览量

    544439

原文标题:简易示波器和信号发生器的实现

文章出处:【微信号:xiaojiaoyafpga,微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    信号发生器如何进行通讯设置#信号发生器#通讯设置#示波器#网络分析仪#示波器维修

    信号发生器
    安泰仪器维修
    发布于 :2024年09月11日 17:44:09

    labview控制示波器信号发生器

    ,但是没有调用过仪器,我想用软件实现控制信号发生器发出双脉冲波形,示波器自动抓取,信号发生器不要
    发表于 07-06 15:13

    信号发生器频率怎么调

    信号发生器是一种电子设备,用于产生具有特定频率、幅度和波形的电信号。这些信号可以用于测试和校准各种电子设备,如放大器、滤波、振荡
    的头像 发表于 06-03 11:06 1764次阅读

    信号发生器的sync什么意思

    允许多个信号发生器产生同步信号,以实现精确的时间对齐和相位锁定。本文将详细介绍信号发生器的同步功
    的头像 发表于 06-03 10:59 3155次阅读

    信号发生器的使用方法 信号发生器的幅值是有效值吗

    信号发生器是一种电子设备,用于生成具有特定特性的电信号,如正弦波、方波、锯齿波等。信号发生器广泛应用于测试和测量领域,如电子电路设计、通信系
    的头像 发表于 06-03 10:56 2907次阅读

    示波器内置任意波形发生器的作用

    , AWG)的功能逐渐受到工程师和技术人员的青睐。本文将详细解析示波器内置任意波形发生器的作用、特点、使用方法以及应用场景,旨在为读者提供全面的了解和指导。
    的头像 发表于 05-29 17:10 804次阅读

    任意波形发生器示波器怎么连接

    在电子测试领域中,任意波形发生器示波器是两种非常重要的测试设备。任意波形发生器能够产生多种波形信号,用于模拟各种实际环境中的信号;而
    的头像 发表于 05-15 15:38 1018次阅读

    函数发生器信号发生器和波形发生器的区别

    在电子测试和测量领域,函数发生器信号发生器和波形发生器都是重要的测试仪器,它们各自具有独特的功能和应用场景。本文将详细介绍这三种发生器的原
    的头像 发表于 05-15 14:49 1562次阅读

    函数发生器示波器的区别

    在电子工程领域中,函数发生器示波器是两种不可或缺的工具。它们各自在电子信号的产生、观测和分析中发挥着重要的作用。然而,尽管它们都与电子信号有关,但函数
    的头像 发表于 05-15 11:46 887次阅读

    信号发生器信号示波器的区别

    在电子测量和测试领域,信号发生器信号示波器是两种不可或缺的工具。它们各自在信号的产生、分析和测试中扮演着重要的角色。然而,尽管两者都与
    的头像 发表于 05-10 15:51 1487次阅读

    示波器信号发生器怎么连接

    首先将信号发生器示波器分别与电源连接,并确保接地线正确连接,以确保有效的工作和安全性。
    的头像 发表于 05-08 16:34 3515次阅读

    proteus信号发生器怎么设置方波

    ,用于模拟和调试电子电路。它具有丰富的虚拟仪器库,包括示波器信号发生器、函数发生器等。Proteus信号
    的头像 发表于 02-23 16:44 9796次阅读

    信号发生器是干什么用的 信号发生器示波器怎么连接

    信号发生器是一种用于产生各种电信号的设备,它在电子设备测试、电路调试、教学实验等领域得到广泛应用。信号发生器可以产生不同频率、幅度、波形和相
    的头像 发表于 01-30 10:08 2913次阅读

    任意波形发生器信号幅值和示波器不一致是什么原因

    任意波形发生器(AWG)和示波器是两种常用的信号源和测量工具,它们在电子测量和测试中都发挥着重要的作用。
    的头像 发表于 01-29 17:14 2397次阅读

    信号发生器是干什么用的 信号发生器的使用方法

    信号发生器是一种电子测试仪器,用于产生各种类型的电信号。它可以在实验室、工厂和其他领域提供标准化的、可重复的信号,用于测试和验证其他电子设备的性能。
    的头像 发表于 01-19 14:51 3094次阅读