ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

开源EMBO:基于STM32的示波器

开源EMBO:基于STM32的示波器 很多人刚听见「STM32示波器」第一反应就是板子焊个TFT屏波形直接在设备端画完。EMBO根本不走这条路。采样全在STM32片内做完触发面板、波形渲染、FFT运算全扔给电脑处理。一块两三块钱的Blue Pill最小系统板刷上对应固件插USB电脑端开Qt上位机直接就能当示波器用。参数和台式专业仪器根本不是一个量级作者自己在社区也明说无输入保护、无硬件量程切换标称采样率范围0.8~4MSps。它能活到现在核心就两个理由足够便宜普通人照着文档走半小时就能跑通上手。EMBO项目地址github.com/parezj/EMBO协议MIT全栈作者是捷克理工大学测量系的Jakub Pařez整个项目是他的硕士课题开发期间还有ST官方的工程师提供过支持。仓库直接放了预编译好的HEX固件、全平台Win/Mac/Linux上位机和完整数据手册。信号到底怎么走图1探头进 ADC采样缓冲几乎占满 RAM示意探头接完直连单片机脚根本没绕什么复杂的外部电路整条链路简单到离谱模拟输入脚 / 数字输入脚 → STM32片内自带ADC或GPIO → DMA直接往整块RAM里怼采样缓冲几乎把RAM空间吃满 → FreeRTOS任务打包成帧 → USB CDC 或者 UART 走标准SCPI文本协议输出 → 电脑端Qt应用直接分出示波器、逻辑分析仪、电压表多套界面目前官方给过稳定固件支持的芯片就这几颗STM32F103C8Blue Pill、F103RE、F303RE、L412KB。像L0、G0、G4、F4这些系列仓库里只有预留的工程文件作者明确标了实验性分支第一次上手复刻别直接从这些版本开刀。这套固件里直接叠了六件仪器的能力示波器、逻辑分析仪、电压表是三个核心主工具频率计、PWM输出、信号发生器是三个并行可用的副工具不用来回烧固件就能直接切换。信号发生器完全靠片内12位DAC驱动只有自带DAC的芯片才能跑最典型的就是F303RE能输出正弦、三角、锯齿、方波、白噪声临时当个低压恒压源用也没问题。Blue Pill用的F103C8没有片内DAC上位机里信号发生器那栏直接灰了——不是你软件装坏了是芯片本身就没这块外设。通信链路没自己瞎写私有二进制协议固件里直接嵌了标准SCPI解析器电脑发纯文本命令开发板回采样数据和运行状态。好处是你拿普通串口助手敲几行命令就能确认固件是不是还正常运行坏处是高采样率下走UART尤其是ST-LINK转串口的通道延迟很容易飙到几百毫秒。上位机状态栏里的Latency一涨先去查通信通道有没有堵别上来就乱改触发电平。两种路径USB CDC和UART都能通但吞吐和延迟差一截追求稳定采样直接插板载USB CDC。三个新手最容易想当然踩的坑图2一套固件里叠了示波器、逻辑分析仪和电压表等示意1. 它不是成品没有任何输入保护作者当年在EEVblog论坛写得特别直白这套开发板直出方案没有任何输入保护电路、没有硬件输入衰减、没有量程切换。引脚上的输入电压必须卡在MCU能承受的范围里过压、反接、靠近市电的高压信号完全不在这个项目的设计目标里。想当日常调试工具用前端分压、运放缓冲、过压保护得你自己加上去。第一次接线别直接把未知设备的信号脚往ADC上怼先拿板上PWM输出接ADC回环测通稳了再接外部电路。烧一个Blue Pill倒是不贵炸坏你要测的目标板就得不偿失了。2. 采样率别跨芯片瞎吹作者公开的标称采样率是0.8~4MSps实际数值完全取决于你用的芯片和开了多少并行通道。F303系列有多路独立ADC峰值采样率表现自然比F103好不少Blue Pill上的F103C8本身RAM容量就紧张采样深度天生受限。F303RE的配置里DAQ缓冲最多能做到四万点量级。上位机的水平轴你可以手动调Fs和存储深度也可以按当前显示宽度自动折中——界面波形随便缩放所以它没按传统台式示波器「每格多少秒」的习惯来做交互。界面上标出来的Real Fs是实际测出的真实采样率算频率全靠这个精度别只盯着你自己手填的标称Fs瞎调参数。3. 选FreeRTOS不是赶时髦是被逼出来的作者自己说选RTOS核心需求就是看每个任务的栈余量HighWaterMark。主采样缓冲要尽可能铺满整块RAM静态分配整机运行时RAM占用直接顶到99%不知道栈的剩余余量高采样运行时分分钟直接爆栈死机。把采样、通信、控制拆成独立任务之后还能接SEGGER SystemView看系统调度状态。FFT、平均滤波、8位传输加速、光标测量这些吃算力的活全扔给电脑端的FFTW3库做开发板这边专心采样和传数据。新手改固件千万别上来就把EM_DAQ_MAX_MEM往大了拉编译大概率能过运行时栈和堆的边界却脆得一碰就碎官方缓冲本来就已经贴着MCU的RAM上限了。现象优先排查方向软件连不上开发板端口选对没、烧的HEX是不是对应你手上的芯片、走的USB还是UART通道波形全是噪声或者直接贴满上下边输入信号有没有超量程、共地有没有接稳、信号源阻抗是不是太大高采样率下丢点、频率计读数乱跳DMA过载示波器拉满采样的时候其他并行仪器会抢资源上位机找不到信号发生器入口当前用的MCU有没有片内DACF103C8根本没有这个外设自己编译链接失败、符号重复报错新版本GCC/CubeIDE要额外加-fcommonRelease配置的头文件路径大概率不全延迟长期卡在几百毫秒换USB CDC通道试、少开几个并行仪器、别在UART通道上硬拉满最高采样率电脑上位机实际用起来是什么样主界面先选对串口号再点连接连上之后窗口顶部会直接读出当前MCU型号和固件版本你刷错了不匹配的HEX这里第一时间就会露馅。左侧面板放示波器、逻辑分析仪、电压表三个核心工具页底部是频率计、PWM输出、信号发生器三个副工具。示波器操作逻辑和台式示波器几乎对齐Run/Stop/Single三个基础控制触发模式分Auto带超时、Normal、Single边沿、通道、触发电平和预触发都能调。Auto模式最常用逻辑上和Normal一致但触发超时后也会强制出一屏波形偶发弱信号不会让屏幕一直黑着。Utils菜单里能开平均滤波、降成8位传输提速、打开FFT波形数据可导出CSV、TXT或截图。逻辑分析仪共用大部分控件触发去掉了电平触发只保留双边沿数字信号不需要垂直增益面板里直接把这个选项拿掉了。电压表固定采样率100Sps靠NPLC平均压制50Hz工频干扰测直流读数稳但刷新慢平均次数拉得越高噪声越低刷新也越慢。PWM输出支持单通道或者同步双通道临时驱小电机或者模拟正交编码够用。作者在文档里写明了示波器或者逻辑分析仪拉满最高采样率时频率计和PWM很容易被抢DMA资源六个工具不可能同时拉满还全部稳定。频率计分慢速和快速两档1MHz以下走慢速更高切快速两秒内没读到有效边沿就超时。上手顺序先烧通跑起来再想着改源码图3先烧官方 HEX用 PWM 回环到 ADC 看上位机有没有波形示意别上来就开CubeIDE自己从头编译按这个步骤走直接去Release页面下现成包。固件HEX按芯片挑上位机选对应系统。官方压缩包里连数据手册一起放了引脚和参数对照表直接查。对着引脚图接线。README里有F103C8和F303RE的Pinout模拟通道、数字通道、PWM/DAC出口别接混。这种无隔离前端地线必须和信号源共接浮地探头采出来全是噪声。烧完固件上电电脑选对端口连接。主窗口能读到MCU型号和固件信息再开示波器。连型号都读不到别着急调触发电平先回去查连接。先做自测。拿板上的PWM或者信号发生器绕回ADC确认触发、时基、通道开关正常。这一步通了再接外部待测电路。单独测试电压表。慢慢拉大平均次数看读数稳不稳顺便感受没有前端衰减时的原生量程别上来就怼高压。全跑通了再开CubeIDE改固件。新版本工具链记得给GCC加-fcommon优先用Debug配置核对头文件路径。自己编出来的HEX体积和官方差太多先对比链接脚本和优化选项别上来就动采样缓冲。Cube包版本尽量贴近作者工程跨大版本强行编译坑多半在底层外设配置。最后说死几个明确边界它绝对不是带高压探头、带多档硬件衰减的消费级成品示波器无保护裸前端输入电压和源阻抗必须你自己把关别作死直接碰市电。采样率和采样深度受限于MCU的ADC性能和RAM容量0.8~4MSps是作者实测的公开口径别信营销号吹出来的虚高峰值。信号发生器完全依赖片内DAC不是支持列表里的芯片都自带DAC买板子之前先查手册。自己从源码编译时坑多半出在工具链配置上不是业务代码逻辑。官方预编译HEX能跑通再动手动工程。项目协议MIT背景是捷克理工大学测量系的学生课题主页 embo.jakubparez.com仓库 github.com/parezj/EMBO。参考https://github.com/parezj/EMBOhttps://embo.jakubparez.comhttps://www.eevblog.com/forum/projects/embo-embedded-oscilloscope-(stm32-bluepill-nucleo)-for-win-mac-linux/
返回列表