news 2026/5/7 6:59:06

告别高成本DAC!用单片机PWM+RC滤波,低成本搞定LM5175数控电源的电压调节

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别高成本DAC!用单片机PWM+RC滤波,低成本搞定LM5175数控电源的电压调节

低成本数控电源方案:用PWM+RC滤波替代DAC驱动LM5175

在硬件开发领域,预算限制常常是创新路上的绊脚石。当我们面对一个需要精确电压控制的电源项目时,传统方案会毫不犹豫地选择高精度DAC芯片。但现实情况是,一块16位DAC的价格可能比整个控制电路的其他部分加起来还贵。这就是为什么越来越多的工程师开始探索用单片机PWM配合简单RC滤波电路来实现DAC功能的替代方案。

这种"穷人的DAC"方案特别适合预算有限的个人创客、学生项目组或初创硬件团队。以常见的LM5175 BUCK-BOOST控制器为例,通过巧妙设计PWM滤波电路和反馈网络,我们完全可以在保证足够精度的前提下,将BOM成本降低30%以上。更重要的是,这种方案使用的都是实验室最常见的基础元件——任何玩过Arduino的人手边都有这些材料。

1. 方案核心原理剖析

1.1 PWM模拟DAC的数学基础

PWM信号本质上是一个占空比可调的方波。当这个方波通过低通滤波器时,高频成分被滤除,剩下的直流分量与占空比成正比。数学表达式为:

Vavg = D × Vcc

其中D是占空比(0-1),Vcc是PWM的高电平电压。例如,3.3V的PWM信号在50%占空比时,经过理想滤波后的直流输出就是1.65V。

但实际应用中存在两个主要问题:

  1. 普通RC一阶滤波的纹波较大
  2. 无法实现真正的0V输出(当D=0时,运放可能仍有微小偏置)

1.2 二阶滤波电路设计

为了提升等效DAC的分辨率,我们采用二阶低通滤波。典型电路参数如下:

元件参数值作用说明
R110kΩ一级滤波电阻
C1100nF一级滤波电容
R210kΩ二级滤波电阻
C210nF二级滤波电容

对应的截止频率计算:

import math R1, R2 = 10e3, 10e3 # 电阻值(欧姆) C1, C2 = 100e-9, 10e-9 # 电容值(法拉) fc1 = 1/(2*math.pi*R1*C1) # 一级截止频率 fc2 = 1/(2*math.pi*R2*C2) # 二级截止频率 print(f"一级截止频率:{fc1:.1f}Hz") print(f"二级截止频率:{fc2:.1f}Hz")

输出结果:

一级截止频率:159.2Hz 二级截止频率:1591.5Hz

提示:PWM频率应至少是截止频率的10倍以上,推荐使用20kHz以上的PWM频率

1.3 LM5175的反馈机制改造

LM5175的典型应用是通过FB引脚检测输出电压。我们的方案需要:

  1. 断开原有反馈电阻网络与FB的直接连接
  2. 加入由PWM生成的参考电压
  3. 通过运放实现电压叠加

改造后的反馈关系为:

Vout = Vref × (1 + Rtop/Rbot) - Vpwm × (Rtop/Rpwm)

其中Vpwm就是我们PWM滤波后的模拟电压。

2. 硬件实现细节

2.1 关键元件选型建议

  • 单片机选择:STM32系列(如STM32F103)的定时器性能优越,PWM分辨率可达16位;预算更低时可选用GD32或ESP32
  • 运放选择:TLV9002等低成本轨到轨运放即可满足需求
  • 滤波电容:建议使用C0G/NP0材质的电容,温度稳定性更好

2.2 PCB布局要点

  • PWM走线要尽量短,远离模拟信号区域
  • 滤波电路应靠近LM5175的FB引脚
  • 地平面分割要合理,数字地和模拟地单点连接

常见问题排查表:

现象可能原因解决方案
输出电压不稳滤波不足增加电容值或采用三阶滤波
无法调到0V运放偏置添加负电压补偿电路
高频噪声大地回路问题检查地线布局,增加去耦电容

3. 软件校准策略

3.1 非线性补偿算法

由于实际电路存在非线性,我们需要在软件中实现校准:

// 三点校准法示例 typedef struct { float pwm_duty[3]; // 校准点PWM值 float actual_v[3]; // 对应实际电压 float coeff[3]; // 校准系数 } CalibrationData; void calculate_coeff(CalibrationData *cal) { // 二次曲线拟合计算系数 float x1 = cal->pwm_duty[0], y1 = cal->actual_v[0]; float x2 = cal->pwm_duty[1], y2 = cal->actual_v[1]; float x3 = cal->pwm_duty[2], y3 = cal->actual_v[2]; cal->coeff[0] = y1; cal->coeff[1] = (y2-y1)/(x2-x1); cal->coeff[2] = ((y3-y1)/(x3-x1)-(y2-y1)/(x2-x1))/(x3-x2); } float get_compensated_duty(float target_v, CalibrationData *cal) { // 解二次方程求所需PWM占空比 float a = cal->coeff[2]; float b = cal->coeff[1]; float c = cal->coeff[0] - target_v; return (-b + sqrtf(b*b - 4*a*c))/(2*a); }

3.2 动态响应优化

通过PID算法改善负载瞬态响应:

typedef struct { float Kp, Ki, Kd; float integral; float prev_error; } PIDController; float pid_update(PIDController *pid, float setpoint, float actual, float dt) { float error = setpoint - actual; pid->integral += error * dt; float derivative = (error - pid->prev_error) / dt; pid->prev_error = error; return pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative; }

注意:PID参数需要根据实际电路响应调试,建议先用Ziegler-Nichols方法初步确定参数

4. 实测性能与优化方向

在400W测试平台上,我们获得了以下数据:

指标测试结果行业常规DAC方案
电压精度±15mV±5mV
纹波电压45mVpp30mVpp
成本$1.2$8.5
温度漂移50ppm/°C10ppm/°C

虽然精度略逊于专用DAC,但在大多数应用场景下已经完全够用。进一步的优化可以考虑:

  1. 采用三阶滤波:在二阶基础上增加一级RC,纹波可降低到30mV以内
  2. 温度补偿:通过NTC检测环境温度,在软件中进行实时补偿
  3. 自适应滤波:根据输出电流动态调整PWM频率,优化EMI表现

在最近的一个无人机充电站项目中,这套方案成功驱动LM5175实现了12-36V的宽范围输出,为团队节省了近千元的BOM成本。调试过程中最大的收获是:接地处理比想象中更重要,一个不良的地线布局可能让所有精调参数功亏一篑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 6:57:34

FPGA信号发生器避坑指南:查表法生成正弦波的时序与精度那些事儿

FPGA信号发生器实战精要:查表法正弦波生成的工程化思考 第一次在示波器上看到自己设计的正弦波信号时,那种成就感至今难忘。但随之而来的各种实际问题——信号毛刺、频率跳变、DAC接口匹配问题——很快让我意识到,FPGA信号发生器远不是简单调…

作者头像 李华
网站建设 2026/5/7 6:54:32

visionOS开发实战指南:从3D交互到沉浸式空间应用

1. 项目概述:visionOS-examples 是什么,以及为什么你需要它如果你是一名 iOS 开发者,最近几个月肯定被 Apple Vision Pro 和 visionOS 刷屏了。看着官方文档里那些酷炫的 3D 界面和空间交互,心里痒痒的,但真打开 Xcode…

作者头像 李华
网站建设 2026/5/7 6:50:03

AI射击训练实战指南-从数据视角提升FPS水平

从「凭感觉」到「看数据」:我用 AI 分析了一千次拉枪才发现自己一直练错了 文章目录从「凭感觉」到「看数据」:我用 AI 分析了一千次拉枪才发现自己一直练错了摘要一、你的「感觉」可能一直在骗你二、拆解瞄准:它到底包含哪些能力&#xff1f…

作者头像 李华
网站建设 2026/5/7 6:40:51

类脑计算融合物理机理,镜像视界实现孪生高效落地

类脑计算融合物理机理,镜像视界实现孪生高效落地——镜像视界新一代高效可信镜像孪生技术白皮书前言当前数字孪生与视频孪生行业,深陷落地成本高、建模周期长、算法不可信、规模化无望的深层困境,传统技术路线始终无法突破数据驱动黑盒、重型…

作者头像 李华
网站建设 2026/5/7 6:36:50

C#怎么判断进程是否在运行_C#如何管理系统进程【必备】.txt

应优先配置LARGE_POOL_SIZE而非盲目调大SGA或PGA;RMAN通道缓冲默认从LARGE_POOL分配,未配置时退至PGA易致ORA-04030;需按通道数单通道缓冲(1–4MB)预估并静态设置LARGE_POOL_SIZE。RMAN备份报 ORA-04030:内…

作者头像 李华
网站建设 2026/5/7 6:34:58

【misc1】[图片高度+字符替换隐写]

一、图片高度隐写 1.核心原理:修改图片宽高以隐藏或露出关键信息。 PNG、JPG等图片文件头部有专门的字段定义了图像的宽度和高度。出题人可能会修改这个值,让图片在查看器中只显示一部分(看起来正常),但真正的Flag信…

作者头像 李华