DMM 高精度采样部分

下面是对 DMM 高精度采样部分 的总结,按"采样获取 → 数据处理/滤波 → 量值换算 → 触发与显示"组织,便于定位实现位置与关键函数。

  1. 采样获取(AD7190 读数 + ch设置)

    采样在 HAL_SYSTICK_Callback() 中完成:当 flag 允许且 AD7190_RDY_STATE()==0 表示转换就绪时,通过 SPI 读取 4 字节原始数据。随后从状态字节 sample[3] 解析通道号,并把 24 位转换结果写入 ad7190_data[],同时减去零偏 bias_data[],最后设置 number 和 flag=2 触发后续处理。

    关键函数/变量:HAL_SYSTICK_Callback、ad7190_data、bias_data、number、flag。

    定位:DMM/Core/Src/main.c 中 HAL_SYSTICK_Callback() 逻辑块。

    (source: DMM/Core/Src/main.c)

  2. 滤波与高精度处理(移动平均)

    采用固定深度移动平均滤波 AD7190_Filter(),缓冲深度由 AD7190_FILTER_DEPTH(当前为 8)控制。每个通道都有独立缓冲区 filter_buf[channel][depth] 和索引 filter_index[channel]。

    适用场景:电压/电流/电阻读数都可根据 use_filter 参数选择是否滤波,以平衡响应速度与稳定性。

    定位:DMM/Core/Src/main.c 中 AD7190_Filter(),以及 MEAS_ReadVoltage_V*、DMM_ReadCurrent_*、DMM_R_Read 里的滤波调用。

    (source: DMM/Core/Src/main.c)

  3. 码值换算(高精度量值还原)

    ADC 原始 24 位读数会右移 4 位到 20-bit(code20 = ad7190_data[ch] >> 4),以匹配 ADC20_FULL_SCALE 的满量程常量。

电压换算:通过参考电压与前端运放比例、量程比例还原到被测端电压。

关键公式在 MEAS_ReadVoltage_V/code20_to_vinV 中使用:

V = code20 * REFERENCE_VOLTAGE * (OPA_RES_R1/OPA_RES_R2) / ADC20_FULL_SCALE * VRange_Scale()

电流换算:先还原为 ADC 端电压,再除以电流路径比例与增益:

I = Vadc / (IPath_VperA() * IRange_Gain())

电阻换算:通过 Vdut/Idut 得到 Rdut,同样支持滤波。

定位:DMM/Core/Src/main.c 中 MEAS_ReadVoltage_V*、code20_to_vinV、DMM_ReadCurrent_A、DMM_R_Read。

(source: DMM/Core/Src/main.c)

  1. 采样与显示的触发机制
    flag 是采样与显示的握手变量:

HAL_SYSTICK_Callback 完成采样后把 flag 置为 2。

主循环里检测 flag == 2 时,将最新通道数据换算并更新显示,然后把 flag 置回 1。

这使采样与 UI 更新解耦,保证采样回调中只做轻量处理。

定位:DMM/Core/Src/main.c 主循环 (while(1)) 与 HAL_SYSTICK_Callback()。

(source: DMM/Core/Src/main.c)

位置指引(便于快速定位)

采样入口:DMM/Core/Src/main.c → HAL_SYSTICK_Callback()

滤波实现:DMM/Core/Src/main.c → AD7190_Filter()

电压换算:DMM/Core/Src/main.c → MEAS_ReadVoltage_V / code20_to_vinV

电流换算:DMM/Core/Src/main.c → DMM_ReadCurrent_A

电阻换算:DMM/Core/Src/main.c → DMM_R_Read

相关推荐
代码游侠9 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
CODECOLLECT13 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen13 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠16 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
深圳市九鼎创展科技18 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计18 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报20 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业20 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
czwxkn20 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件
Love Song残响20 小时前
NVIDIA显卡终极优化指南
stm32·单片机·嵌入式硬件