当前位置: 首页 > news >正文

Mini-DSO 采样原理深度解析:STC8 单片机 ADC 如何实现 250kHz 高速采样

Mini-DSO 采样原理深度解析:STC8 单片机 ADC 如何实现 250kHz 高速采样

【免费下载链接】Mini-DSO用STC单片机制作的简易示波器 / DIY Mini Digital Storage Oscilloscopes(DSO) with STC MCU项目地址: https://gitcode.com/gh_mirrors/mi/Mini-DSO

Mini-DSO 采样原理听起来很复杂,但当你真正读懂 STC8 单片机内置 ADC 的工作方式,会发现这块巴掌大的 DIY 示波器里藏着非常巧妙的工程智慧。本文从 ADC 时钟配置、逐点查询采样、触发预缓存到 Bandgap 电压校准,一步步拆解 Mini-DSO 如何用一颗 STC8A8K64S4A12(27MHz 主频)实现最高 250kHz 的等效采样率,把模拟信号变成 OLED 屏幕上稳定的波形。

Mini-DSO 是什么:一块 STC8 单片机做出来的示波器

Mini-DSO 是"用 STC 单片机制作的简易数字存储示波器",核心只有一颗 STC8A8K64S4A12 单片机、一块 SSD1306 OLED 屏、一个 EC11 编码器旋钮和简单的外围电路。它没有专用的 ADC 芯片,采样任务全部由 STC8 单片机内置的 12 位逐次逼近型 ADC 完成,这就是 Mini-DSO 采样原理最值得研究的地方。

硬件成本极低,功能却不含糊:支持 12 档横轴时间区间(500ms 到 100us)、最高 30V 电压量程、自动/普通/单次三种触发方式,还能测量波形频率。主控代码主要集中在 adc_stc8.c 和 chart.c 中,整体电路可以参考 Mini_DSO_Scheme_V0.3.pdf。

250kHz 采样率的由来:ADC 时钟是怎么配置的

要理解 Mini-DSO 采样原理,先要明白一个概念:STC8 内置 ADC 的转换速度由 ADC 时钟决定,而 ADC 时钟来自系统时钟分频。在 adc_stc8.h 中可以看到一串宏定义,比如:

ADC_SPEED_512 512 个时钟 → 最慢 ADC_SPEED_32 32 个时钟 → 最快

27MHz 主频下,ADC 时钟配置为ADC_SPEED_32时,完成一次 12 位转换只需要约 4us,换算过来就是1 / 4us ≈ 250kHz 的采样率。这正是 Mini-DSO 高速采样的秘密:不是硬件有多豪华,而是把分频比压到了极限。

ADCInit()函数会根据当前时间档位动态设置ADCCFG寄存器,档位越"快",ADC 分频越小,转换速度越快。

ADC 采样核心流程:查询方式实现逐点采样

Mini-DSO 采样原理的第二个关键是查询式转换ADCRead()函数执行以下步骤:

  1. 清零结果寄存器
  2. 通过ADC_CONTR选择输入通道(如 P1.6 对应ADC_CHS_06
  3. 置位ADC_START启动转换
  4. 循环等待ADC_FLAG标志位置位
  5. 读取结果:res = (ADC_RES << 8) | ADC_RESL

12 位结果被拆成高 8 位和低 8 位两个寄存器,合并后得到一个 0~4095 的原始 ADC 值。整个过程没有使用中断,代码路径极短,这正是能跑出 4us 采样间隔的前提——任何多余的操作都会拖慢采样节奏。

采样间隔怎么控制:从 500ms 到 100us 的 12 档位

Mini-DSO 采样原理中最巧妙的部分,是用延时函数精确控制采样间隔。屏幕横向共 4 格、每格 25 个采样点,共 100 个采样点组成一帧波形。switch_Dealy()根据当前时间档位插入不同的微秒级延时:

  • 500ms 档:插入约 19.97ms 延时(每格 500ms)
  • 100us 档:不插入延时,直接以 4us/点的极限速度连续采样

时间档位和 ADC 速度是联动的,ADCInit(scale_h)switch_Dealy(scale_h)由同一个档位参数驱动。源码注释里标注了每个档位对应的转换耗时,比如ADC_SPEED_32在 27MHz 下就是 4us,开发者甚至用_nop_()空指令做单周期微调,精细到极致。

触发采样原理:预缓存与环形缓冲

对于观察一次性信号(如按键毛刺),Mini-DSO 采用预缓存 + 触发检测的策略。采样开始后,先把PRE_BUF_NUM个点存入预缓存数组,构成环形缓冲;随后持续采样并检测当前点与上一点是否跨过触发电压(上升沿或下降沿)。

一旦触发成功,就继续采集触发点之后的点,最后把"触发前的预缓存 + 触发后的采样"拼接成完整波形,让触发点恰好落在屏幕中心。这就是为什么 adc_stc8.c 里的GetWaveADC()那么长——它同时要处理自动、普通、单次三种触发模式。

注意:100us 档(250kHz 采样率)下触发计算来不及执行,所以代码里该档位仅支持自动触发模式,这正是单片机算力边界的真实体现。

校准的秘密:Bandgap 内部参考电压

采样精度靠什么保证?答案是 STC8 单片机内置的Bandgap 带隙基准电压GetBGV()从 ROM 固定地址0xfdf7读取出厂校准的参考电压值(单位 mV),同时通过 ADC 第 16 通道(ADC_CHS_BG)实测 Bandgap 对应的 ADC 值,最终按公式计算真实电压:

Vx = BGV × ADCx × LSB ÷ ADCbg ÷ 100

这样即使芯片个体存在差异,也能通过内部基准自动校正。这也是为什么 settings.h 里强调 LSB 分压系数上限不能超过 777——12 位 ADC 满量程 4095 与 BGV 值相乘会逼近 32 位整数的上限。

采样数据如何变成屏幕上的波形

拿到 100 个原始 ADC 值后,chart.c 负责把数据"翻译"成画面:根据自动/手动量程换算成毫伏电压,计算波形的最大最小值与频率,再按矢量或点阵模式绘制到 SSD1306 OLED 上。频率测量则通过查找触发点两侧的等值点间隔来完成。

上图是 Mini-DSO 与专业示波器的同信号对比,1kHz 方波的频率和幅值读数基本一致,验证了这套采样方案的实用性。

总结:Mini-DSO 采样原理给你的启发

回顾整个 Mini-DSO 采样原理,你会发现它没有高深的技术,却处处是工程取舍:用查询代替中断换速度、用延时控制采样间隔、用预缓存实现触发、用 Bandgap 做自校准。对单片机初学者来说,把 adc_stc8.c 和 chart.c 从头读一遍,比看十篇理论文章收获都大——250kHz 采样率,就是这么"抠"出来的。

【免费下载链接】Mini-DSO用STC单片机制作的简易示波器 / DIY Mini Digital Storage Oscilloscopes(DSO) with STC MCU项目地址: https://gitcode.com/gh_mirrors/mi/Mini-DSO

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4084396.html

相关文章:

  • 多图一次看懂:North Micro Vision Instruct 多图像理解完整指南
  • 计算机毕业设计之基于Python的霍兰德职业倾向测试可视化系统
  • 计算机毕业设计之个性化推荐电商平台的设计与实现
  • 计算机毕业设计之基于Python的二手交易信息数据分析系统的设计与实现
  • 五秒把B站缓存视频转成MP4:m4s-converter 免费开源工具实测手记
  • uni-app云打包显示编译成功,但是一直没有进入打包队列,后面也一直没反应
  • auto-value-parcel处理@Nullable属性完全指南:null安全序列化的正确姿势
  • 在MCN做后期3年,我们团队12个剪辑师电脑里都装了同一款AI配音
  • COPE: Chain-Of-Thought Prediction Engine for Open-Source Large Language Model Based Stroke Outcom...
  • 重复受害视角下 Web3 恶意授权钓鱼攻击风险研究
  • BACnet/IP 报文视角下对象模型与事件服务安全研究
  • 如何从零定制一款开源中文字体:未来荧黑终极上手指南
  • 原神私服一键搭建:把提瓦特装进本地电脑,按下按钮就能玩
  • 别再靠Excel管多仓库库存了!2026年电商老板必看的3种升级方案
  • 老旧Mac免费升级最新macOS?OpenCore Legacy Patcher终极指南
  • REPENTOGON完整安装指南:让《以撒的结合:悔改+》脚本扩展器一次跑通
  • 2026年8月最新:外贸企业GEO优化服务商哪家好?从客户口碑看广拓时代的GEO服务|运营方法
  • 免费下载管理器怎么选?imFile一步到位告别龟速下载
  • 制造企业为什么需要APS系统?手工排产的5大痛点与解决方案
  • Apache Airflow核心原理与生产实践:从工作流编排到分布式调度
  • 第191篇 状态观测器——测不到的状态量怎么估计
  • SPT-AKI存档编辑器快速上手:10分钟吃透离线版角色修改与一键配置方法
  • osu-droid模组系统源码解析:可扩展Mod架构的设计之道
  • Redis--黑马点评Day1
  • TVA-World架构:在工业质检中小试牛刀(1)
  • 如何让个人开发者30分钟搞定收款:PayJS的Golang SDK上手全指南
  • FanControl中文设置实战:3步汉化,10分钟让Windows风扇完全听你的
  • 苹果说你的Mac该退役了,OpenCore Legacy Patcher凭什么说“不“
  • 3步跑通芋道源码框架:Spring Boot企业级开发的完整答案
  • 【优化求解】移动边缘计算中物联网应用的动态请求调度优化附matlab代码