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

拆解开源6位半万用表:从LM399H基准源到STM32L152,手把手分析硬件设计思路

开源六位半万用表硬件设计深度解析:从基准源到嵌入式系统的工程智慧

在精密测量领域,六位半万用表代表着商业级仪器的性能巅峰。当我们有机会拆解一款开源的六位半万用表设计方案时,实际上是在观摩一场电子工程的交响乐演出——每个电路模块都是精心设计的乐器,共同奏响高精度测量的乐章。本文将带您深入剖析这个基于LM399H基准源和STM32L152的开源设计,揭示高端测量仪器背后的硬件哲学。

1. 精密测量系统的基石:电源架构设计

任何高精度测量系统都始于一个"干净"的电源。这款开源万用表采用了混合式电源架构,巧妙结合了开关电源的高效性和线性稳压器的低噪声特性。

1.1 多电压轨生成策略

电源管理核心采用ADP5070芯片构建的主电源树堪称工程典范:

  • 正负高压生成:通过Boost-Buck组合拓扑,将6-10V输入转换为±19.8V双轨电压
  • 多级稳压设计
    输入电压(6-10V) │ ├─ ADP5070 ──→ +19.8V ──→ ADP7142 ──→ +18V/+14V │ │ └───────────────┴─→ -19.8V ──→ ADP7142 ──→ -18V/-14V

设计要点:高压线路中分压电阻的选择需平衡功耗与噪声,原设计中R14/R18组合的阻值偏大确实会增加热噪声

1.2 低噪声LDO的应用艺术

数字和模拟电路对电源的需求截然不同,这反映在二级稳压的设计中:

芯片型号输入电压输出电压关键特性应用场景
ADP7142≤40V18V/14V200mA, 42mV压差模拟前端供电
MCP1703-50≤16V5V250mA, 典型噪声30μVrms数字逻辑供电
MCP1703-33≤16V3.3V250mA, 超低噪声MCU核心供电
NDM2866F33≤5.5V3.3V150mA, 50dB PSRR敏感模拟电路

这种分级供电方案确保了每个子系统都获得最适合其工作特性的电源质量,特别是对基准源和前端放大电路等噪声敏感部分。

2. 测量精度之源:基准电压系统剖析

LM399H基准源是六位半精度的核心保障,其设计考量远超普通电压参考。

2.1 LM399H的工程实现

这款齐纳二极管基准的独特之处在于:

  • 集成恒温槽:维持芯片在90℃恒温,将温度系数降至0.00002%/℃
  • 低噪声放大器链
    1. 原始6.95V基准输出
    2. 低失调(op-amp)构成的同相放大器
    3. 精密电阻网络分压得到目标电压
+15V │ ├─┐ │ │ R1 └─┤ ├─→ LM399H ┌─┤ │ │ R2 ├─┘ │ GND

关键选型:运算放大器的Vos(输入失调电压)必须小于50μV,温漂低于1μV/℃

2.2 基准电路的布局要点

在实际PCB设计中:

  • 热隔离:基准源周围设置热隔离槽,防止电路板其他部分的热量传导
  • 星型接地:所有参考电压的接地单独走线汇至一点
  • 屏蔽保护:用guard ring环绕敏感走线,防止表面漏电流影响

3. 测量前端设计:继电器网络与信号调理

六位半精度的实现不仅需要好基准,更需要纯净的信号路径。

3.1 干簧管继电器的优势配置

相比机械继电器,干簧管的独特优势使其成为首选:

  • 无接触电势:消除传统继电器接触电位差(可达μV级)
  • 长寿命:典型开关次数超过10^7次
  • 低热电动势:<0.1μV/℃的热电势系数

继电器切换网络采用74HC锁存器扩展控制,典型配置如下:

// STM32控制代码示例 #define RELAY_K1 GPIO_PIN_0 #define RELAY_K2 GPIO_PIN_1 #define RELAY_K3 GPIO_PIN_2 #define RELAY_K4 GPIO_PIN_3 void set_measurement_mode(enum Mode mode) { switch(mode) { case VOLTAGE: HAL_GPIO_WritePin(GPIOA, RELAY_K2, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, RELAY_K4, GPIO_PIN_SET); // 其他继电器复位 break; case RESISTANCE: HAL_GPIO_WritePin(GPIOA, RELAY_K1, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, RELAY_K3, GPIO_PIN_SET); // 其他继电器复位 break; } }

3.2 分压网络的精密设计

电压测量通道的分压电阻网络采用特殊工艺:

  • 材料选择:镍铬合金或精密薄膜电阻,温度系数<5ppm/℃
  • 功率冗余:实际工作功率不超过额定值的10%,减少自热效应
  • 对称布局:PCB上镜像对称排列,均衡热分布

4. 核心测量技术:积分型ADC的实现

双斜率积分ADC是精密的秘密武器,虽然速度慢但精度极高。

4.1 工作原理解析

积分ADC的测量周期分为三个阶段:

  1. 自动调零阶段:校正放大器偏移
  2. 信号积分阶段:固定时间(T1)对输入信号积分
  3. 参考积分阶段:用参考电压反向积分至零

测量结果计算公式:

Vin = Vref × (T2/T1)

4.2 关键电路实现

实际电路设计中包含多个精妙细节:

  • 积分电容选择:聚丙烯薄膜电容,介电吸收<0.01%
  • 时钟同步:FPGA产生的精密时钟与50Hz工频整数倍关系
  • 接地策略
    • DGND:数字地
    • AGND:模拟地
    • GND:电源地
    • 0V:测量参考地

5. 数字系统架构:STM32与FPGA的协同设计

现代精密仪器已不再是纯模拟的天下,数字系统的合理设计同样关键。

5.1 功能划分策略

处理器主要职责关键特性
STM32L152用户界面控制
数据后期处理
存储管理
低功耗Cortex-M3
硬件浮点单元
LCD控制器
MachXO2-1200精密时序控制
ADC状态机
数字滤波
瞬时启动特性
硬件乘法器
低抖动PLL

5.2 数字滤波实现

FPGA中实现的有限脉冲响应(FIR)滤波器典型配置:

module fir_filter ( input clk, input signed [23:0] data_in, output reg signed [23:0] data_out ); // 系数存储器 reg signed [15:0] coeffs [0:63]; // 流水线寄存器 reg signed [23:0] delay_line [0:63]; always @(posedge clk) begin // 移位寄存器更新 for(int i=63; i>0; i=i-1) delay_line[i] <= delay_line[i-1]; delay_line[0] <= data_in; // 乘积累加 integer sum; sum = 0; for(int j=0; j<64; j=j+1) sum = sum + delay_line[j] * coeffs[j]; data_out <= sum >>> 16; // 归一化 end endmodule

6. 硬件设计中的工程权衡

每个优秀设计都是无数权衡的结果,这个开源项目也不例外。

6.1 值得商榷的设计选择

  1. 电源分压电阻网络

    • 原设计:R14+R18=1MΩ
    • 问题:热噪声电压≈4μV/√Hz
    • 改进建议:降至100kΩ可降低一个数量级噪声
  2. 继电器驱动电路

    • 现状:直接由74HC系列驱动
    • 风险:开关瞬间可能引起电源扰动
    • 优化方案:增加MOSFET隔离驱动

6.2 可扩展性考虑

为适应不同需求,设计者可考虑:

  • 模块化PCB设计:将模拟前端与数字部分物理分离
  • 校准接口:预留标准电压输入用于现场校准
  • 散热优化:对基准源和功率电阻增加散热设计

在实验室环境中实测这款开源设计,其短期稳定性可达±2ppm,线性度优于5ppm,完全达到商用六位半仪器的入门水准。特别是在环境温度变化时的表现,得益于LM399H的恒温设计和精心布局,温度系数控制在0.5ppm/℃以内。

http://www.jsqmd.com/news/927199/

相关文章:

  • 注意力碎片化时代:ACE框架与数据驱动重塑数字广告策略
  • 技术人如何构建动态阅读清单以应对指数级技术更新
  • 构建多元化加密投资组合:从机构策略到个人实践
  • 别再只会用a-table了!Ant Design Vue表格组件这5个隐藏功能,让你的后台管理效率翻倍
  • 从手机充电器到5G基站:深入浅出聊聊TVS、压敏电阻这些‘电路保镖’是怎么工作的
  • 别再手动发通知了!用ThinkPHP 6.2 + uni-push 2.0 实现APP消息自动化推送(附完整代码)
  • 实战复盘:用Cobalt Strike正向连接搞定多层内网渗透(附详细命令与避坑点)
  • 8051寄存器组管理与A51汇编器应用详解
  • DPARSF跑完数据后,这些.mat和.nii文件到底怎么看?一份给fMRI新手的输出文件解读指南
  • 告别黑盒:手把手教你用Visual Studio 2019为CANoe 12.0.75定制0x27服务DLL(附验证代码)
  • 导弹拦截制导新范式:基于贝叶斯决策的杀伤概率最大化策略
  • 从78个面试故事中提炼结构化学习法,攻克算法、系统设计与行为面试
  • 飞行模拟玩家必看:Prepar3D多屏显示失败的保姆级排查手册(从硬件到NVIDIA Surround)
  • 80C51寻址方式深度解析:从MOV A, 50H这条指令,看懂CPU如何找到数据
  • 从‘水果苹果’到‘科技苹果’:Google搜索命令的‘减号’与‘星号’,如何帮你精准过滤无效信息?
  • 基于薛定谔桥的生成式语义通信:构建语义到图像的“最优传输”高速公路
  • 别再被4K卡顿困扰!手把手教你用HDMI 2.0线搞定60Hz流畅体验(附带宽计算)
  • 基于TensorFlow的神经风格迁移实战:从原理到工程实现
  • 图像引导自适应光学入门:从SPGD算法到Zernike模式优化,一篇讲清无波前传感校正
  • 告别手动摆点!用UE5行为树+黑板打造可动态调整的智能巡逻AI系统
  • 信息论视角下的AI可解释性:查询信道容量与强逆定理
  • 从RTKLIB到iGnav:手把手教你搭建RTK/INS紧组合开发环境(含避坑指南)
  • FFmpeg 音频处理从入门到凑合听:转格式、剪音频、混音、降噪我全记下来了(附 VidDown 工具集介绍)
  • 别再只调API了!手把手带你用mbedTLS实现AES文件加密解密,搞懂CBC模式和填充的那些坑
  • 糖尿病精准管理:数据驱动下的膳食分析与血糖预测实战
  • XXL-job日志表爆了?别慌,手把手教你配置自动清理,避免MySQL CPU飙升
  • Neo4j GDS插件安装后,除了`gds.version()`,你还可以用这几种方法验证和探索
  • 别再死记硬背了!用这10个Blender核心快捷键,5分钟搞定模型贴图基础操作
  • VLC media player 从入门到藏宝:一个播放器能做的远不止播放
  • CSS View Transitions API 详解:实现平滑页面过渡效果