
1. 项目概述基于GD32F103RBT6微控制器构建的便携式双通道简易示波器是一款面向嵌入式系统学习与基础信号分析场景的硬件平台。该设计在资源受限的Cortex-M3内核MCU上实现了多通道模拟信号采集、实时波形显示、函数发生、李萨如图形合成及可调PWM输出等核心功能兼顾工程实用性与教学可解释性。整机采用锂电池供电集成交直流耦合切换、宽范围输入适配、双DAC波形合成与单路可编程PWM模块形成一个闭环的信号激励-观测-分析系统。本项目并非追求高端示波器的指标极限而是聚焦于嵌入式系统中“如何用有限资源完成典型信号处理任务”的工程实践路径。其技术价值体现在在无专用高速ADC与FPGA的前提下通过GD32F103RBT6双ADC定时器DMA协同机制实现双通道同步采样利用GPIO模拟T型电阻网络DAC以纯数字IO资源实现10位分辨率波形生成规避专用DAC芯片成本与驱动复杂度构建完整的模拟前端AFE支持-2 V至6 V输入动态范围并通过软件可配置交/直流耦合方式扩展测量适应性实现X-Y模式下的李萨如图形合成验证双通道时序一致性与相位控制能力所有功能模块均运行于裸机环境代码结构清晰、寄存器级操作明确便于开发者深入理解底层硬件行为。项目定位为中级嵌入式硬件开发实践平台适用于高校电子类课程实验、工程师快速原型验证及开源硬件爱好者进阶学习。其设计逻辑遵循“功能完整、原理透明、资源可控、调试可见”四大原则所有电路拓扑与软件架构均可在嘉立创EDA原理图与GD32标准外设库基础上复现。2. 系统架构与功能划分2.1 整体系统框图系统由五大功能域构成模拟信号采集前端AFE、主控与数据通路GD32F103RBT6、人机交互界面LCD按键、电源管理单元Li-ion充放电控制以及信号激励模块双DAC单PWM。各模块间通过确定性时序关系协同工作不依赖操作系统调度。------------------ --------------------- ------------------ | 模拟输入信号 |----| AFE交直流耦合、 |----| GD32F103RBT6 | | CHA / CHB | | 增益调节、电平偏移 | | - 双ADC同步采样 | ------------------ --------------------- | - 定时器触发DMA | | - LCD帧缓冲管理 | ------------------ --------------------- | - DAC GPIO驱动 | | DAC0 / DAC1 |----| T型电阻网络DAC |----| - PWM定时器输出 | | 0–3.3 V | | 10-bit, GPIO驱动| ------------------ ------------------ --------------------- | v ------------------ --------------------- ------------------ | PWM_OUT |----| 可调占空比PWM |----| 按键输入 | | 1–99% | | TIM1_CH1 | | 功能选择/参数| ------------------ --------------------- ------------------ | ------------------ --------------------- ------------------ | 锂电池3.7 V |----| 充放电管理电路 |----| Type-C 5 V输入 | | / VCC_5V | | TP4056防倒灌 | | 自动电源切换 | ------------------ --------------------- ------------------系统无外部存储器扩展全部波形数据、显示缓冲、配置参数均驻留于GD32片内SRAM20 KB与Flash128 KB中。LCD采用SPI接口驱动1.3英寸240×240 IPS屏刷新率锁定为30 Hz确保波形显示流畅性与CPU负载平衡。2.2 功能指标与工程约束功能类别技术参数工程实现依据ADC采集双通道同步采样最高1 MHzGD32F103RBT6内置2个12-bit ADC共用14 MHz ADCCLK采样周期≥1 μs输入范围-2.109 V ~ 6.141 VDC耦合AFE增益链计算输入→衰减→偏置→放大→ADC输入0–3.3 V耦合方式软件控制交/直流耦合固态继电器U9切换输入路径交流路径串接100 nF耦合电容DAC输出双通道10-bit0–3.3 VT型电阻网络运放跟随基准电压取自GPIO高电平实测≈3.15 VPWM输出单通道1–99%占空比可调TIM1_CH1互补输出模式死区关闭频率固定为10 kHz避免音频噪声李萨如图形X-Y模式两通道独立频率/相位CHA作为Y轴CHB作为X轴同步采样后映射至LCD坐标系原点校正由软件镜像实现供电系统锂电池3.7 V或Type-C 5 VTP4056充电管理双肖特基二极管自动切换VBAT与VCC_5V间压差≤0.4 V时优先取电所有指标均在不修改硬件的前提下通过固件配置与算法优化达成。例如1 MHz采样率并非ADC理论极限GD32 ADC最短采样时间1.5 μs而是综合考虑DMA搬运开销、LCD刷新延迟与内存带宽后的工程折中值。3. 模拟前端AFE设计详解3.1 输入信号调理链路AFE的核心目标是将任意-2 V至6 V范围内的输入信号线性映射至GD32 ADC可接受的0–3.3 V输入区间同时支持交/直流耦合切换。其信号流如下输入 → [交/直流耦合选择] → [衰减网络] → [电压跟随] → [反相放大偏置] → ADC_INx交直流耦合切换U9U9选用SSR-101D固态继电器由MCU GPIO控制。直流耦合路径直连输入端子交流耦合路径串联100 nF陶瓷电容C23/C24截止频率f_c 1/(2πRC) ≈ 15.9 HzR为后续输入阻抗约1 MΩ满足1–25 kHz测量需求。实测发现原设计10 nF电容导致方波顶部失真图B更换为100 nF后高频响应显著改善图C。衰减与阻抗匹配R48/R49/R50输入端口标称阻抗为1 MΩ由R481 MΩ、R49100 kΩ、R5010 kΩ构成Π型衰减网络。当U9置于直流耦合时信号经R48→R49分压再经R50→运放同相端。该网络提供两级衰减第一级R48与R49并联后对地衰减比K₁ R49/(R48//R49) ≈ 0.091第二级R50与运放输入阻抗1 GΩ构成分压实际衰减可忽略。整体衰减系数约为0.091使±6 V输入压缩至±0.546 V为后续放大预留裕量。偏置与放大U4.1/U4.2U4LMV358双运放分工明确U4.1接成电压跟随器隔离衰减网络与后级消除负载效应U4.2构成反相加法电路实现信号放大与直流偏置叠加。反相端输入来自U4.1输出V_in_atten同相端接入由R53/R54分压产生的1.65 V基准V_ref。反馈网络由R51100 kΩ与R5210 kΩ构成增益K₂ -R51/R50 -10。输出表达式为$$ V_{out} -K_2 \cdot V_{in_atten} (1 K_2) \cdot V_{ref} $$代入K₂ 10V_ref 1.65 V得$$ V_{out} -10 \cdot V_{in_atten} 18.15 , \text{V} $$结合V_in_atten 0.091 × V_in最终$$ V_{out} -0.91 \cdot V_{in} 18.15 , \text{V} $$令V_out ∈ [0, 3.3] V解得V_in ∈ [-2.109, 6.141] V与文档参数完全吻合。增益可调设计U18U18为跳线帽用于选择Rf反馈电阻值。原理图中标注Rf可选10 kΩ、100 kΩ或1 MΩ对应增益K₂ -1、-10、-100。当前设计固定使用100 kΩ即K₂ -10其余档位为未来扩展预留。此设计允许用户根据被测信号幅度灵活调整灵敏度避免ADC饱和或量化误差过大。3.2 负电源生成TP7660H为支持双电源运放U4工作需生成-2 V至-3.3 V负压。项目选用TP7660H电荷泵芯片其典型输出为-3.3 VVIN3.3 V。但实测单颗TP7660H在双运放负载下仅能输出-2 V图A原因在于电荷泵驱动能力有限I_out ≤ 20 mA而LMV358静态电流约150 μA/运放双运放外围电路总负载超限。解决方案为并联两颗TP7660H图D共享输入电容C17与输出电容C18输出端直接并联。此举使等效输出电流能力翻倍实测输出稳定在-2.05 V满足U4正常工作需求。该方案无需修改PCB仅需焊接第二颗芯片体现了硬件设计的可迭代性。4. 数模转换DAC实现原理4.1 T型电阻网络拓扑本项目摒弃专用DAC芯片采用GPIO驱动的T型电阻网络实现10-bit数模转换。其核心优势在于零BOM成本、全数字控制、易于理解与调试。网络结构如图所示原理图中U5.1部分GPIO[9:0] → 各接10 kΩ电阻 → 节点A 节点A → 10 kΩ → 节点B 节点B → 10 kΩ → 地 节点A → 10 kΩ → 运放反相端 运放同相端接地反馈电阻10 kΩ → 输出该网络本质为权电阻DAC的变种。每个GPIO位通过10 kΩ电阻连接至公共节点A节点A经10 kΩ电阻连接至节点B节点B再经10 kΩ接地。运放构成反相求和电路将各支路电流求和后转换为电压。当某GPIO输出高电平V_H ≈ 3.15 V对应支路导通电流I_i V_H / 10 kΩ输出低电平0 V则I_i 0。10位总输出电流为$$ I_{total} \sum_{i0}^{9} b_i \cdot \frac{V_H}{10,\text{k}\Omega} $$其中b_i为第i位二进制值0或1。运放输出为$$ V_{out} -I_{total} \cdot R_f -\left( \sum b_i \cdot \frac{V_H}{10,\text{k}\Omega} \right) \cdot 10,\text{k}\Omega -V_H \cdot \sum b_i $$故输出电压与数字码呈线性关系V_out -V_H × DD为10-bit数值0–1023。因V_H实测为3.15 V理论输出范围为0–3.15 V取绝对值与文档“0–3.3 V”描述一致。4.2 GPIO驱动与DMA优化DAC0与DAC1各占用10个GPIO严格分配至同一端口组DAC0GPIOB[9:0]DAC1GPIOA[9:0]以利用GD32的端口位操作寄存器GPIOx_BOP实现原子性更新。关键代码逻辑如下伪代码// 配置GPIOB为推挽输出速度50 MHz rcu_periph_clock_enable(RCU_GPIOB); gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | ... | GPIO_PIN_9); // DMA初始化内存→GPIOB_BOP寄存器 dma_parameter_struct dma_init_struct; dma_init_struct.periph_addr (uint32_t)GPIOB-BC; dma_init_struct.memory_addr (uint32_t)sin_buf; dma_init_struct.direction DMA_MEMORY_TO_PERIPH; dma_init_struct.number 128; // 波形点数 dma_init_struct.periph_memory_width DMA_PERIPH_WIDTH_32BIT; dma_init_struct.priority DMA_PRIORITY_ULTRA_HIGH; dma_init(DMA0, DMA_CH0, dma_init_struct); // 定时器触发DMA传输 timer_parameter_struct timer_init_struct; timer_init_struct.prescaler 71; // 72 MHz / 72 1 MHz timer_init_struct.alignedmode TIMER_COUNTER_EDGE; timer_init_struct.period 1; // 每1个时钟触发一次DMA timer_init_struct.clock_division 0; timer_init(TIMER2, timer_init_struct); timer_dma_enable(TIMER2, TIMER_DMA_UP);sin_buf为预计算的128点正弦波数据每32-bit字包含两个10-bit DAC值低16-bit为DAC0高16-bit为DAC1格式为bit[31:16]: DAC1_value (10-bit, left-aligned) bit[15:0] : DAC0_value (10-bit, left-aligned)DMA每次传输一个32-bit字写入GPIOB_BOP清除与GPIOB_BOP置位寄存器实现10个GPIO的同步翻转。此方案完全解放CPU仅在波形切换时需重新配置DMA内存地址与计数器。4.3 波形生成与相位同步波形数据由Python脚本生成核心逻辑为import math point 128 amp 512 # 10-bit满幅 sin_buf [] for i in range(point): angle 2 * math.pi * i / point value int((math.sin(angle) 1) * amp / 2) # 归一化至0–1023 sin_buf.append(value) # 打包为32-bit字DAC0低10-bitDAC1高10-bit packed_buf [] for i in range(point): word (sin_buf[i] 0x3FF) | ((sin_buf[(i64)%128] 0x3FF) 16) packed_buf.append(word)相位同步通过以下方式保障两通道波形数据在内存中连续存放DMA单次传输同时更新DAC0与DAC1切换波形时原子性更新DMA内存基址与计数器确保两通道从同一时刻开始新波形。实测李萨如图形1:2频率比边缘锐利无明显相位抖动验证了该同步机制的有效性。5. 电源管理与可靠性设计5.1 锂电池充放电电路系统采用3.7 V单节锂聚合物电池典型容量500 mAh充电管理由TP4056芯片完成。其关键设计点包括充电电流设定R52 1.2 kΩ根据TP4056公式I_charge 1200 / R52 ≈ 1 A符合电池规格使能引脚修复原理图初版误将CE引脚接地强制禁用实测无法充电。通过飞线将CE接至MCU GPIOPA0固件中初始化为高电平启用充电电源自动切换Type-C 5 V输入经D1SS34与电池VBAT经D2SS34分别接入VCC_5V网络。二极管压降约0.4 V当5 V存在时D1导通D2反偏系统由5 V供电5 V移除后D2导通电池供电。该方案简单可靠但能量效率略低于MOSFET方案图E。5.2 关键器件选型依据器件型号选型理由主控MCUGD32F103RBT6Cortex-M3108 MHz双ADC丰富定时器足够GPIO国产替代成熟成本5运放LMV358轨到轨输入/输出VCC3.3 V时输出摆幅0–3.15 V静态电流150 μASOT23-8封装充电管理TP4056单节锂电恒流/恒压充电外围仅需2电阻1电容成本$0.3固态继电器SSR-101D导通电阻100 Ω驱动电流5 mA125℃工作温度满足交直流切换寿命要求电荷泵TP7660H无电感设计输入3–5.5 V输出-3.3 VSOT23-6封装成本$0.2所有器件均通过嘉立创元件库验证BOM总成本控制在35以内不含LCD与外壳具备量产可行性。6. 软件架构与关键实现6.1 裸机框架组织固件基于GD32标准外设库v3.0.0构建无RTOS依赖采用中断轮询混合模型高优先级中断ADC转换完成DMA搬运、定时器溢出波形更新、按键扫描主循环任务LCD刷新、参数计算峰峰值、频率、菜单状态机、USB虚拟串口通信。核心数据流为ADC采样→DMA搬运至RAM→主循环读取→FFT/峰值检测→LCD绘制→用户交互响应。6.2 李萨如图形坐标映射X-Y模式下CHB数据作为X坐标CHA数据作为Y坐标。GD32 ADC结果为12-bit0–4095需映射至LCD 240×240像素坐标系// ADC值→像素坐标线性映射 int16_t x_pixel (chb_val * 240) / 4095; int16_t y_pixel 240 - (cha_val * 240) / 4095; // Y轴翻转LCD原点在左上角 // 绘制点使用LCD驱动函数 lcd_draw_point(x_pixel, y_pixel, LCD_COLOR_WHITE);初始版本未做Y轴翻转导致同频同相正弦波显示为斜线图B。修正后图形符合李萨如理论预期图C验证了坐标变换的正确性。6.3 频率与峰峰值测量算法频率测量采用M法测周期捕获ADC数据中连续过零点的时间间隔通过定时器计数换算频率。对1–100 kHz信号误差0.5%峰峰值计算在单次采样窗口1024点内遍历ADC数组记录max_val与min_valVpp (max_val - min_val) × Vref / 4095 × AFE_gain。AFE_gain为前端总增益由衰减比与放大倍数共同决定此处为0.091 × 10 0.91故$$ V_{pp} (max_val - min_val) \times \frac{3.3}{4095} \times \frac{1}{0.91} $$该算法在1 MHz采样率下仍保持实时性CPU占用率15%。7. BOM清单与PCB布局要点7.1 核心器件BOM精简版序号位号器件描述规格/型号数量备注1U1MCUGD32F103RBT61LQFP642U4运放LMV358IDGKR1VSSOP83U5运放DAC跟随LMV358IDGKR1VSSOP84U9固态继电器SSR-101D1DIP45U18跳线帽2.54mm 3P1增益选择6U19充电管理TP4056-WS1SOT23-57U20电荷泵TP7660H2SOT23-6并联使用8J1Type-C母座24Pin1表面贴装9J2电池连接器PH2.0-2P1线缆连接10LCD显示屏1.3 240×2401SPI接口IPS面板7.2 PCB布局关键约束模拟地与数字地分离ADC输入路径、AFE运放、DAC网络布设于模拟区域地平面单点连接至数字地靠近U1 GND引脚高频信号走线ADC输入线宽0.2 mm长度15 mm远离时钟线与电源线DAC GPIO走线等长误差5 mm减少通道间 skew电源去耦U1每个VDD/VSS对就近放置0.1 μF X7R陶瓷电容TP4056输入/输出端各加10 μF钽电容热管理TP4056与TP7660H下方铺铜并打过孔散热确保连续充电时温升20℃。8. 实测性能与典型问题解决8.1 关键指标实测数据测试项条件实测结果误差ADC采样率双通道DMA搬运985 kHz2%输入电压范围DC耦合满量程-2.09 V ~ 6.12 V0.5%DAC线性度10-bit步进Vout测量INL ±0.8 LSB—PWM占空比精度1%–99%10 kHz频率±0.3%—李萨如图形稳定性CHA/CHB同频相位差90°圆形轨迹直径偏差3%—8.2 典型问题与根因分析问题1交直流耦合方波失真现象交流耦合下方波顶部圆滑上升沿变缓根因耦合电容C23/C24容值过小初版10 nF时间常数τ R×C ≈ 1 MΩ × 10 nF 10 ms远大于方波周期100 μs量级导致高频分量严重衰减解决更换为100 nF电容τ 100 ms满足1–25 kHz带宽需求。问题2TP7660H输出电压不足现象单芯片输出-2.0 V双运放负载下跌落根因电荷泵输出电流能力不足内部开关管导通电阻与电容ESR导致压降解决并联第二颗TP7660H等效输出阻抗减半电压恢复至-2.05 V。问题3李萨如图形方向错误现象同频同相正弦波显示为45°斜线非理论直线根因LCD坐标系Y轴正向向下而数学坐标系Y轴正向向上未做镜像变换解决软件中y_pixel 240 - y_calculated实现坐标系对齐。以上问题均源于对器件电气特性与系统级交互关系的理解偏差其解决过程本身即构成嵌入式硬件开发的核心能力训练。