功能:
完成对板上音频信号的采集和波形显示,可以通过手机播放音乐或App产生音频信号的方式提供声音信号源,通过板上电路的放大、MCU中ADC的采集以后将波形显示在OLED屏幕上,可以通过板上按键的操作在两个方向(横轴 - 时间;纵轴 - 幅度)来扩展、压缩波形的显示,按键的功能可自行定义;
- 实现信号发生器的功能,能够产生2KHz以内的正弦波、三角波、方波三种常用波形,通过按键的操作能够实现频率可调、幅度可调,通过调整板上的R、C的值,可以最高生成200KHz的模拟信号;
- 能够通过Ain管脚测量外部模拟信号(0-3.3V,DC-200KHz),并能够对外部的周期性波形测量其周期和峰峰值;
- 能够对采集到的信号进行FFT变换,并在屏幕上显示其基频及低次谐波(比如2、3、4、5次)的分量。
使用CubeIDE开发, 建立工程,配置引脚如下:
片内外设及功能安排如下
一图胜千言,所有的功能都可以参考出来
演示部分在视频中
ADC采样使用DMA+TIM, 连续采样完一组后停止采集, 标识一个完成标志
这样采集速度超快:1ksps~4Msps.也就意味着可以分析出5Hz~2MHz的波形.
主程序中当采集一组后, 进行数据分析, 包括幅度, 频率等
其中频率计算我使用arm内置的DSP库进行128点的FFT运算.(可以使用更多点数以获得细腻的频谱分辨率,处于内存消耗,我是用了128点)
调试阶段就用板载的串口, 发送波形与fft运算结果:
左边为128点原始数据,右边为128点fft的前64点(因为FFT运算的对称效果)
按键处理部分:
并未使用程序消抖方法, 在按键中断中设立标志位, 主程序直接对标志位读取, 因为大循环时间的原因, 就是是重复触发也会当作一次按键事件.
波形合成:
使用两个TIM定时器, 在1号中断里实时更新占空比放到TIM2的pwm输出, 我将pwm设置成了8位宽,(也就是幅度与偏置有256级调节空间),便于操作我每次调节改变16作为步进.输出PWM波通过RC低通滤波实现波形合成.
调整范围: 频率 50~2kHz, 幅度0~3.3v, 直流0~3.3v
总结:
核心使用的是STM32G031, 麻雀虽小五脏俱全, 引出引脚与外片内外设安排也非常合理, 资源可以充分发挥
感谢硬禾用心设计的迷你核心模块, 搭配底板使用效果绝佳