2025寒假练 - 用RP2040实现模拟示波器
该项目使用了带显示屏的基于RP2040多功能嵌入式编程学习、硬件调试平台,micropython语言,实现了模拟示波器的设计,它的主要功能为:显示输入信号波形与参数。
标签
显示
ADC
参加活动/培训
2025寒假练活动
周力信
更新2025-03-13
北京理工大学
35

 项目报告:基于RP2040的简易示波器设计 

 一、项目介绍 

本项目基于RP2040微控制器设计了一款简易数字示波器,能够实时采集并显示两路模拟信号波形。通过ADC采样和SPI显示屏驱动,实现了信号电压的实时可视化,支持通道切换、波形参数显示(最大值、最小值)以及动态网格校准功能。项目代码采用MicroPython开发,结合硬件电路和软件算法,展示了嵌入式系统中数据采集与图形化显示的基本原理。

 二、硬件介绍 

1. RP2040:主控芯片,负责ADC采样、数据处理、屏幕驱动及用户交互。 

    使用GPIO26GPIO27作为两路ADC输入通道。 

    通过SPI接口驱动ST7789显示屏。 

2. ST7789显示屏:240x240分辨率彩色LCD,用于实时显示波形、网格及参数。 

3. 面包板:用于连接RP2040、显示屏及外部信号输入电路。 

4. ESP32方波生成器:作为外部信号源,生成测试波形(如方波、正弦波),用于验证示波器功能。 

5. 按键模块:5个物理按键(M/S/L/PRESS/R),用于切换通道、清屏等交互操作。

三、方案框图和项目设计思路介绍

方案框图

设计思路:

多任务并行处理

任务1ADC周期性采样

实现逻辑:使用RP2040的硬件定时器触发ADC采样,频率可配置(如1kHz10kHz)。

数据缓存:采用环形队列(array.array)存储最近N个采样点,实现实时数据流管理。

 

任务2:屏幕显示线程

波形绘制:基于st7789库,将ADC数据映射为屏幕坐标,通过线性插值绘制连续波形(红色为CH1,蓝色为CH2)。

参数显示:在屏幕底部区域实时更新最大值、最小值和采样频率(例如:“CH1: max=3.1V, min=0.2V”)。

 

任务3:用户输入响应

按键中断处理:通过Pin.irq实现按键事件捕获,触发通道切换或功能菜单。

波轮开关解析:读取旋转编码器的脉冲信号,调整时间轴缩放比例(例如:每格50ms→100ms)。

 

 四、软件流程图及关键代码介绍 

1. 初始化与显示驱动 

# 初始化SPI和显示屏  
spi0 = SPI(0, baudrate=60000000, phase=1, polarity=1, sck=Pin(2), mosi=Pin(3))
display = st7789.ST7789(spi0, 240, 240, reset=Pin(0), dc=Pin(1))
display.fill(st7789.BLACK)
display.text(font2, "OscilloScope", 20, 5)

    通过高速SPI驱动显示屏,初始化后显示标题和网格。 

 

2. ADC采样与数据处理 

class adc_ch:  
def __init__(self, pin_index, buff_size, sample_freq):
self.ch = ADC(Pin(pin_index))
self.buff = array.array('H', [0] * buff_size)
self.timer = Timer()
# ... 省略采样回调函数和数据滤波逻辑
def start_sample(self, start_index=0, count=SAMP_BUFF_SIZE):
# 定时器触发ADC采样,数据存入环形缓冲区

    adc_ch类封装了ADC通道的配置、定时采样、数据滤波(滑动平均)及电压转换功能。 

 

3. 波形绘制与交互 

def draw_waveform(data1, data2, data_len, show_step=1, old_data=None):  
# 根据电压值映射屏幕坐标,动态擦除旧波形并绘制新波形
display.line(x_prev, y_prev, x_current, y_current, color)

    通过线性插值绘制波形,支持双通道显示(红色为CH1,蓝色为CH2)。 

    按钮触发通道开关逻辑(见buttonMbuttonS的中断处理)。 

 

五、功能展示图及说明

面包板接线

Rp2040显示屏

整体电路

       功能说明详见视频。

 六、项目中遇到的难题与解决方法 

1. 实时采样与显示同步 

    问题:高采样频率下,数据处理和显示刷新导致卡顿。 

    解决:采用环形缓冲区管理采样数据,异步定时器触发采样,主循环仅处理显示逻辑。 

 

2. 波形抖动与噪声 

    问题:ADC采样存在噪声,波形抖动明显。 

    解决:在data_filter方法中实现滑动平均滤波(窗口大小=3),平滑波形。 

 

3. 屏幕刷新效率 

    问题:全屏刷新导致闪烁。 

    解决:动态擦除旧波形(绘制黑色覆盖),仅更新变化区域,提升流畅度。 

 

七、心得体会

  1. 实践与理论的结合

通过本次活动,深刻体会到嵌入式开发中理论与实践紧密结合的重要性。例如,ADC采样频率的计算、SPI通信的时序配置等理论知识,需通过实际调试才能验证其正确性。

收获:学会了如何将数据手册中的参数转化为实际代码配置,提升了问题分析与解决能力。

  1. 耐心与细节决定成败

项目中许多问题源于微小细节,如未接地的信号线导致ADC噪声、SPI相位配置错误导致花屏。需反复验证每一步操作,耐心排查问题。

收获:培养了细致严谨的工程思维,增强了抗压能力。

 

八、意见与建议

  1. 活动前期准备

理论培训:建议增加RP2040外设(如ADCSPI)的专题培训,辅以实际案例(如如何配置5kHz采样率),降低上手门槛。

硬件清单标准化:提供明确的硬件连接图及推荐元件(如滤波电容、屏蔽线),减少因硬件问题导致的调试时间浪费。

  1. 开发工具支持

统一开发环境:提前为项目配置一致的MicroPython固件版本和IDE(如Thonny),避免兼容性问题。

调试工具共享:提供逻辑分析仪、示波器等工具,帮助团队快速定位通信或信号问题。

  1. 功能扩展引导

开放课题建议:在完成基础示波器功能后,提供扩展方向(如实现频率测量”“增加FFT频谱显示),鼓励创新探索。

参考案例分享:展示类似项目的优秀实现(如开源示波器设计),激发灵感并降低重复造轮子的成本。

  1. 活动后期总结

成果展示与评审:组织团队答辩或成果展示,邀请导师点评,促进经验共享和技术交流。

反馈收集:通过匿名问卷收集参与者对活动流程、内容难度的反馈,持续优化活动设计。

 

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