基于STM32F103平台的示波器应用设计方案

基于STM32F103平台的示波器应用设计方案


一、系统架构设计

1. 硬件模块组成
模块 核心组件 功能描述
主控单元 STM32F103C8T6 72MHz主频,内置12位ADC(1Msps)、DMA、定时器,支持双通道同步采样
信号调理 AD827运放+可编程增益放大器 输入阻抗1MΩ,增益0-40dB可调,带宽50MHz,适配0-5V输入范围
采样模块 STM32内置ADC+DMA 双通道交替采样,配置为定时器触发模式,实现零CPU干预数据采集
显示模块 3.5寸TFT-LCD(ILI9341) 320×240分辨率,支持波形绘制、参数显示及触摸交互
用户交互 旋转编码器+独立按键 调节时基、电压档位,切换触发模式(边沿/脉宽/斜率)
电源管理 MP1584EN降压模块 5V转3.3V,支持1A输出,效率>92%
2. 关键参数指标

二、硬件设计实现

1. 信号调理电路
输入信号 → 保护电路(TVS管) → 阻抗匹配(1kΩ±1%) → 可编程增益放大器 → 低通滤波(160kHz) → ADC输入
2. 采样电路设计
// 双通道交替采样配置(STM32CubeMX生成)
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_0 | ADC_CHANNEL_1;  // PA0/PA1双通道
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5; // 55.5周期采样
HAL_ADC_ConfigChannelAttenuation(&hadc1, ADC_CHANNEL_0, ADC_ATTENUATION_11DB);
HAL_ADC_ConfigChannelAttenuation(&hadc1, ADC_CHANNEL_1, ADC_ATTENUATION_11DB);
3. 显示驱动设计

三、软件核心算法

1. 数据采集流程
graph TD
    A[定时器触发] --> B[ADC双通道交替采样]
    B --> C[DMA传输至环形缓冲区]
    C --> D{触发检测}
    D -->|满足条件| E[停止采样]
    D -->|未满足| B
    E --> F[数据处理与显示]
2. 关键算法实现
3. 显示引擎

参考代码 基于stm32f103平台的示波器应用 www.youwenfan.com/contentcsr/102796.html

四、性能优化

  1. 采样率动态调整

    • 通过按键切换档位:100kHz/50kHz/20kHz

    • 代码实现:

      void SetSampleRate(uint8_t mode) {
          switch(mode) {
              case 0: TIM2_Prescaler = 0; break;    // 1Msps
              case 1: TIM2_Prescaler = 7199; break; // 500ksps
              case 2: TIM2_Prescaler = 35999; break;// 200ksps
          }
          HAL_TIM_Base_Init(&htim2);
      }
      
  2. 功耗管理

    • 空闲模式:关闭ADC/DMA,功耗<1mA
    • 活跃模式:启用所有外设,功耗约80mA
  3. 抗干扰措施

    • 硬件:输入端添加RC低通滤波器(1kΩ+100nF)
    • 软件:数字巴特沃斯滤波器(截止频率150kHz)

五、功能扩展方案

  1. 通信接口扩展

    • USB CDC虚拟串口(用于PC端数据记录)
    • SPI Flash存储(记录历史波形)
  2. 高级功能实现

    • 自动测量:频率/幅值/占空比计算

      float CalcFrequency(uint16_t *buffer) {
          // 峰值检测算法
          uint16_t max_val = 0;
          for(int i=0; i<1024; i++) {
              if(buffer[i] > max_val) max_val = buffer[i];
          }
          return (float)SYS_CLK / (2 * max_val * SAMPLING_INTERVAL);
      }
      
    • 协议解码:支持UART/I2C/SPI信号捕获


六、测试数据与性能

测试条件 输入信号 测量结果 误差分析
1kHz正弦波 2Vpp Vpp=1.98V±0.02 ADC参考电压漂移
50Hz方波 3.3Vpp 占空比=50.1% 触发电平抖动
100kHz脉冲 1Vpp 频率=99.8kHz 抗混叠滤波不足

七、工程文件结构

Oscilloscope_STM32/
├── Core/
│   ├── Inc/               # 头文件
│   │   ├── main.h
│   │   └── adc.h
│   └── Src/               # 源文件
│       ├── main.c
│       └── fft.c
├── Drivers/
│   ├── CMSIS/
│   └── STM32F1xx_HAL_Driver/
├── Middlewares/
│   └── USB_Device/
└── Utilities/
    └── GUI/               # 触摸屏交互库

八、开发建议

  1. 调试技巧

    • 使用逻辑分析仪验证ADC采样时序
    • 通过SWO接口输出调试信息
  2. 生产注意事项

    • PCB布局:ADC输入走线<10mm,避免数字信号干扰
    • 校准流程:上电时进行ADC参考电压校准

 

专注于matlab/simulink,电子电路,编程