寒假在家一起练1-有信号发生器功能的简易示波器
寒假期间做的一个小项目,基于STM32G031实现一个有信号发生器功能的简易示波器。
标签
嵌入式系统
居有常
更新2021-03-01
1672

1 项目需求

  • 完成对板上音频信号的采集和波形显示,可以通过手机播放音乐或App产生音频信号的方式提供声音信号源,通过板上电路的放大、MCU中ADC的采集以后将波形显示在OLED屏幕上,可以通过板上按键的操作在两个方向(横轴 - 时间;纵轴 - 幅度)来扩展、压缩波形的显示,按键的功能可自行定义;
  • 实现信号发生器的功能,能够产生2KHz以内的正弦波、三角波、方波三种常用波形,通过按键的操作能够实现频率可调、幅度可调,通过调整板上的R、C的值,可以最高生成200KHz的模拟信号;
  • 能够通过Ain管脚测量外部模拟信号(0-3.3V,DC-200KHz),并能够对外部的周期性波形测量其周期和峰-峰值;
  • 能够对采集到的信号进行FFT变换,并在屏幕上显示其基频及低次谐波(比如2、3、4、5次)的分量。

2 实现思路

  • ADC对模拟输入进行采样,采样由定时器触发,采样结果由DMA搬运;
  • 将采样得到的ADC量化值映射到屏幕坐标点上,实现波形显示;
  • 按下按键调整采样频率,实现波形在时间轴上的扩展与压缩;
  • 对采样序列进行FFT变换,绘制频谱;
  • 信号参数的显示,如峰峰值、直流分量、信号频率等;
  • 输出PWM波并通过RC低通滤波实现方波、正弦波、三角波的生成,通过按键改变PWM波的频率与占空比,从而改变输出信号的频率和幅度。

3 完成的功能及达到的性能

波形显示:按下L提高采样率,按下R降低采样率,采样率取值范围为1kHz、2.5kHz、5kHz、10kHz、25kHz、50kHz、100kHz、250kHz、500kHz、1MHz,通过改变采样率来实现横轴的缩放。能够显示音频信号和外部模拟信号的波形。

输出波形:能够输出正弦、方波和三角波三种基础波形,可以设置输出波形的频率和幅度

频谱显示:按下L提高采样率,按下R降低采样率,显示频率范围为直流至采样频率的一半。

以下是展示图——

FhQHc2d4eQuIMllDHU52Pb_En5yY

1kHZ正弦波频谱

 

FkxCDNJ4sZqpDhssFwwcyxEL_xEM

2kHZ正弦波频谱

 

FovfxI3sCzxv-nmW_vJVJm4xmLPS

方波

 

Fu0CUdZjwFT4yv-crcm_bB5Zr_pG

正弦波

 

Fp9qlU1DVSZwiTv2yAXaZO-qx5B1

三角波

 

4 遇到的困难

由于是初次接触嵌入式系统,有很多东西需要学习,除了基本的软件使用、程序编写外,还要学习示波器实现原理、如何通过改变PWM的占空比来调节输出信号波形、如何驱动OLED显示屏等等,有着不小的困难。

在项目进行期间,我学习了许多相关理论知识,研究了jack大佬和其他同学实现思路和代码,尤其是王同学所做的项目(https://www.eetree.cn/project/detail/167),他的实现思路相当清晰,让我对整个项目的实现过程及相关功能模块的具体实现有了更加深入的认识,为我解开了很多疑惑。通过研究他的代码,照着他的思路一边理解,一边去做,我学到了很多知识,非常感谢。

以下是示波和信号发生两个基本功能的实现方法——

示波功能的实现: 首先由ADC对数据进行采样。为了方便进行FFT计算,ADC共采集256个采样点。每次ADC转换由定时器1触发,触发频率最高为1MHz,即ADC采样率最高为1Msps。ADC的转换结果直接由DMA搬运至内存,转换结束后进入中断,进行后续的数据处理。在得到256个采样的ADC量化值后,根据触发电平选择波形起始点,返回起始点在数组中的下标,显示从起始点开始的100个点。取起始点后100个采样值使其显示在OLED屏幕上(一次性刷新),为此需要将ADC量化值与OLED屏幕上的坐标进行线性映射。得到采样点坐标后,使用OLED的绘制直线函数,连接屏幕上各个离散的点,就可以得到信号的波形。

信号发生(用PWM实现任意波形):板上有一个1Kohm的电阻和10nF的电容构成的低通滤波器,截止频率为1.6KHz。若在该输出端输出频率足够的PWM信号,则输出电压大小就和PWM的占空比成正比。通过改变PWM的占空比就可以调节输出电压波形。通过实验可知,当信号的每一个周期由500个PWM脉冲组成时,信号的纹波较小。以正弦信号为例,在程序外,在电脑中生成一个正弦信号,并在一个周期中进行500次采样,根据电压和PWM占空比的正比关系可以计算出500个PWM脉冲的占空比。将其定义为长度为500的数组写入程序。程序中使能PWM的DMA通道,这样就可以在每个PWM脉冲结束后自动将数组中的元素载入定时器输出比较寄存器,从而改变占空比。低通滤波器再将STM32产生的PWM脉冲转变为模拟信号,即可重新生成正弦波。方波和三角波同理。

6 未来的计划和建议

初次学习嵌入式系统,还有许多细节没有搞明白,但是学习新的知识,探索未知的领域,正是理工科学习的魅力所在。硬禾举办的这次活动为我们提供了一个很好的平台,去发现问题,学习新的知识来解决问题,将理论知识运用到实践项目中,在这个过程中,虽有困难,但更多的是学到新的知识时的那份喜悦。虽然看着其他同学们陆续做出了成果,但当自己真正动手去做时,才发现会有各种各样的难题,真的是“内行看门道,外行看热闹”,未来我也要多加实践,强化自己的专业知识和技能,争取能够娴熟使用嵌入式系统平台,做出令自己满意的项目。

建议的话,主控芯片STM32G031的资源有限,希望更换更好的主控芯片,从而实现更高的频谱性能;希望平台能提供更多的指导,帮助同学们更好地进行项目。

7 附上源代码和烧录文件链接

源代码

链接:https://pan.baidu.com/s/1Z0oRaCl4GO3qkLv8sW48iQ
提取码:6pjq

 

烧录文件

链接:https://pan.baidu.com/s/11Rpx7zTPhjZdGKv1xEjkwA
提取码:v3np

附件下载
MiNi_Scope_DIY.zip
代码
团队介绍
团队成员
李天航
北京理工大学
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号