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

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

    关注

    111

    文章

    5662

    浏览量

    181805
  • OLED
    +关注

    关注

    118

    文章

    5990

    浏览量

    221495
  • adc
    adc
    +关注

    关注

    95

    文章

    5653

    浏览量

    539516

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    信号发生器的特点 信号发生器可以产生哪些波形?

    信号发生器的特点 信号发生器可以产生哪些波形? 信号发生器是一种用于产生各种频率、振幅和波形的电
    的头像 发表于 12-21 15:05 746次阅读

    信号发生器的占空比是什么 信号发生器占空比怎么设置

    信号发生器的占空比是什么 信号发生器占空比怎么设置  信号发生器的占空比是指方波波形中高电平和低
    的头像 发表于 12-21 14:02 1876次阅读

    泰克MSO58B示波器如何检测信号发生器输出信号

    在电子设备调试和测试过程中,准确地检测信号是非常关键的。信号发生器常用于生成不同频率和幅度的信号,以供各种电子设备进行测试。在此过程中,使用泰克MSO58B
    的头像 发表于 12-01 17:49 389次阅读
    泰克MSO58B<b class='flag-5'>示波器</b>如何检测<b class='flag-5'>信号</b><b class='flag-5'>发生器</b>输出<b class='flag-5'>信号</b>?

    信号发生器的基本使用方法

    电路信号发生器
    油泼辣子
    发布于 :2023年11月30日 15:26:53

    函数信号发生器怎么使用?函数信号发生器实现方法通常有哪几种?

    发生器的使用方法和实现方法。 一、函数信号发生器的使用方法 1. 连接电源和外部设备:将函数信号发生器
    的头像 发表于 11-20 16:16 2946次阅读

    简易信号发生器设计方案

    电子发烧友网站提供《简易信号发生器设计方案.pdf》资料免费下载
    发表于 10-20 09:43 1次下载
    <b class='flag-5'>简易</b><b class='flag-5'>信号</b><b class='flag-5'>发生器</b>设计方案

    简易低频虚拟信号发生器设计

    电子发烧友网站提供《简易低频虚拟信号发生器设计.pdf》资料免费下载
    发表于 10-13 10:24 1次下载
    <b class='flag-5'>简易</b>低频虚拟<b class='flag-5'>信号</b><b class='flag-5'>发生器</b>设计

    简易信号发生器的设计

    简易信号发生器的设计  信号发生器是一种能够产生可靠、标准化的交替电流、交流电压和脉冲的电子设备。在电子测试和测量、频率标准校准等领域中,
    的头像 发表于 08-24 15:49 1371次阅读

    为何示波器示数是信号发生器输出的2倍呢?

    如题,我用的是泰克TDS2022型数字存储示波器及AFG3101型任意波形/函数发生器信号发生器输出峰峰值是1V,为什么示波器示数是2V呢
    发表于 05-15 11:01