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

简单理解:为什么有些ADC采样要设置延时

ADC 完整采样流程(从物理信号到数字输出,含量化 / 编码)

核心前置概念(先理清底层逻辑)

术语通俗解释
模拟信号传感器 / 引脚输入的连续电压(如 0~3.3V,可取值 1.234V、2.567V 等任意值)
采样硬件在某一时刻 “抓取” 模拟电压的瞬时值(相当于 “给电压拍快照”)
保持把抓取的瞬时电压暂存到电容中,供后续量化使用(避免电压波动影响)
量化把连续的模拟电压按固定 “步长” 划分,转换成离散的整数区间(如 1.234V→1527)
编码把量化后的整数区间,转换成二进制数字(如 1527→0101 1110 0111),是量化的最终硬件输出

你问的这个问题直击 ADC 采样的核心!ADC 采集时设置延时(比如Delay_ms(100)),不是 ADC 硬件本身需要延时才能完成采样,而是从 “工程实用性、系统资源、数据有效性” 三个维度的必要设计 —— 咱们结合你之前的软件触发 + 轮询采样场景,把原因拆得明明白白:

一、核心原因 1:控制采样频率,避免数据冗余

ADC 硬件的采样速度极快(比如 12 位 ADC 单次采样仅需几微秒到几十微秒),但实际应用中,我们根本不需要这么高频的采样:

  • 举个例子:你采集的是普通电压信号(如传感器输出),这个信号的变化频率通常是 “每秒几次到几十次”(比如环境温度变化、电池电压变化);
  • 若不设置延时,MCU 会以 “每秒几万次甚至几十万次” 的频率采样 —— 结果就是采集到大量重复、无意义的数据(比如同一电压值被采 1000 次);
  • 设置Delay_ms(100)后,采样频率被固定为10Hz(每秒 10 次),刚好匹配实际信号的变化速度,既保证数据有效,又不会产生冗余数据。
类比理解:

就像你给静止的水杯拍照,不需要每秒拍 1000 张(全是一样的),每秒拍 10 张就足够 —— 延时就是 “控制拍照的间隔”。

二、核心原因 2:降低 CPU 占用率,保障系统其他功能

你的 ADC 采样代码是while(1)无限循环,若没有延时:

while (1) { ADC_SoftwareStartConvCmd(adcx, ENABLE); // 启动采样(微秒级完成) while (!(adcx->SR & (1 << 1))); // 等待完成(微秒级) ConvertedData = adcx->DR; // 读数据(微秒级) printf("value:%x\r\n", ConvertedData); // 打印(微秒级) // 无延时 → 立刻回到循环开头,重复执行 }
  • MCU 主频通常是几十 MHz 到几百 MHz,上述循环全程仅需几十微秒就能完成一次,意味着每秒会循环几万次;
  • 后果:CPU 100% 被这个循环占用,无法处理其他任务(比如串口接收指令、按键响应、定时器中断、LED 闪烁等),整个系统会 “卡死” 在采样上;
  • 设置Delay_ms(100)后,CPU 在这 100ms 内无需执行采样逻辑,可空闲出来处理其他事务,系统整体响应性大幅提升。

三、核心原因 3:避免外设(如串口)过载

你采样后会通过printf打印数据到串口,串口的传输速度是固定的(比如波特率 9600,每秒仅能传输约 960 个字符):

  • 若不延时,采样频率极高,printf会被频繁调用,串口缓冲区会瞬间被填满,导致数据丢失、打印乱码;
  • 延时 100ms 后,打印频率降到 10Hz,串口有足够时间传输数据,不会出现过载问题。

四、补充:这些场景下 “延时不是必须的”

不是所有 ADC 采样都要加延时,只有 “轮询 + 简单场景” 需要,以下场景可去掉或替换:

  1. 中断触发采样:配置 ADC 采样完成中断,采样完成后触发中断、读取数据,主循环无需轮询,自然不用延时;
  2. 操作系统(RTOS)场景:用 “任务延时”(如vTaskDelay(100))替代Delay_ms(100),任务会被挂起,CPU 可执行其他任务,延时更高效;
  3. 高速数据采集:比如采集音频、高频信号,需要高采样率(如 1kHz 以上),可减小延时(如Delay_ms(1)),但仍需控制频率避免系统过载。

五、和 ADC 硬件本身的区别(关键澄清)

⚠️ 重要:Delay_ms(100)是 “采样间隔延时”,不是 “等待 ADC 完成采样的延时”—— 你代码中while (!(adcx->SR & (1 << 1)))才是等待 ADC 硬件完成采样的逻辑(微秒级),这和 “100ms 间隔延时” 是两回事:

  • 等待采样完成:必须有,否则会读到无效数据;
  • 采样间隔延时:工程设计需要,控制频率、降负载。

总结

ADC 采集设置延时的核心目的是:

  1. 控频率:匹配实际信号变化速度,避免冗余数据;
  2. 降负载:释放 CPU 资源,保障系统其他功能运行;
  3. 保外设:避免串口等外设因高频操作过载。

简单说:延时不是 ADC 硬件的 “刚需”,而是让采样功能 “融入整个系统” 的工程设计 —— 没有延时,采样功能能跑,但整个系统会出问题。

http://www.rkmt.cn/news/175198.html

相关文章:

  • 2025年绞肉机推荐:口碑与实力兼具的品牌,绞肉机厂家找哪家博锐市场认可度高 - 品牌推荐师
  • 1.5 树上数据结构
  • 国标GB28181算法算力平台EasyGBS视频监控集成与管理利器
  • 从实验到生产:PyTorch-CUDA-v2.7实现模型无缝部署
  • 2025年行业内圆形电梯家用TOP品牌厂家排行榜 - 行业平台推荐
  • 2025年工业拖链品牌口碑排名:德斯普拖链,三大核心痛点全解析 - myqiye
  • 一文搞懂!RAGFlow 入门教程与安装部署全流程
  • 【ppo】强化学习ppo训练调参
  • 最新上海旧房翻新装修公司推荐!口碑评分皆名列前 茅 - 速递信息
  • 程序员就业城市全攻略:最新
  • Reflect和Object相比有什么区别
  • PyTorch-CUDA-v2.7镜像内置Python3.9,兼容主流AI框架
  • 读共生:4.0时代的人机关系04前景展望
  • GitHub star飙升项目:PyTorch-CUDA-v2.7镜像获开发者一致好评
  • 软工实践学习 学期回顾——102301334黄伟圣
  • MobaXterm无密码打开ssh
  • AIPD美国人工智能专利(1976-2023)
  • PyTorch-CUDA-v2.7镜像优化内存管理,提升大模型加载效率
  • 计算机毕业设计springboot订餐管理系统 基于 SpringBoot 的智慧餐厅在线订餐平台 SpringBoot 驱动的数字化餐饮订单与座位预约系统
  • markdown写文档更方便:结合Jupyter与PyTorch-CUDA-v2.7输出实验报告
  • LLaMA-Factory:让大模型微调变得如此简单
  • 上海交通大学《动手学大模型》编程实战课,课件ppt+教程
  • 零基础也能轻松掌握LLM!这份《大语言模型实战》可视化指南,吴恩达都点赞
  • 2025国产CMDB年度选型指南:全场景适配与差异化产品深度解析
  • WEB攻防-业务设计篇隐私合规检测资源拒绝服务配合项目
  • LLaMA Factory 如何对大模型进行微调、导出和量化!掌握这几步,轻松搞定
  • 全面掌握 AI 智能体 30 个高频面试的问题与解答相关的核心知识点
  • 当PI遇上自抗扰:永磁同步电机控制的暴力美学
  • 论文怎么才能降ai率?10个写作指令+3款降ai率工具实测,帮你有效降低ai率
  • 一站式深度学习环境:PyTorch-CUDA-v2.7集成CUDA工具包