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

告别高成本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成本。调试过程中最大的收获是:接地处理比想象中更重要,一个不良的地线布局可能让所有精调参数功亏一篑。

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

相关文章:

  • openclaw-mini:轻量级本地AI助手框架的设计、部署与实战
  • 终极指南:如何通过abqpy类型提示彻底改变Abaqus Python脚本开发体验
  • CodeFire-App:基于事件驱动的开发者自动化管家实战解析
  • 云南民族大学考研辅导班机构推荐:排行榜单与哪家好评测 - michalwang
  • 基于表面增强拉曼和近红外光谱技术的微藻油脂检测及种类鉴别软件设计【附代码】
  • 边缘计算:为开发模式带来的新挑战与机遇
  • 告别手工建模噩梦:这款管线参数化建模工具让效率提升10倍!
  • 终极NBT数据编辑器:如何用NBTExplorer掌控我的世界游戏核心
  • BilibiliDown音频提取实战指南:3步完成无损音乐下载
  • 3分钟掌握Topit:让你的Mac窗口永远保持在最前方的完整指南
  • 云原生实战宝典:基于GitHub仓库的Kubernetes全栈可复现学习路径
  • Snowflake-Labs subagent-cortex-code:AI编码助手与数据平台的无缝集成方案
  • 数据模型!大数据模型追踪!
  • CDH hdfs集群核心服务器磁盘损坏应急恢复运维
  • Go语言工作流引擎实战:从原理到构建自动化部署流水线
  • 基于Rust的轻量级反向代理edgecrab:专为边缘计算场景设计
  • 观察 Taotoken 账单详情追溯每一次 API 调用的模型与消耗
  • 二向箔压缩测试极限挑战
  • VIOLETTA:AI智能体任务描述标准,提升人机协作效率
  • AKShare股票数据插件:构建自动化金融数据流水线
  • 三步曲:零基础快速为FF14国际服注入完美中文界面
  • 别再为贴图丢失发愁了!保姆级教程:用Blender 3.6打包模型和材质,完美导入Unity 2022
  • 从零构建飞书机器人:Node.js实战与架构设计详解
  • 【无功优化】基于改进遗传算法的电力系统无功优化研究【IEEE30节点】附Matlab代码
  • 平行宇宙数据同步协议:软件测试的多维挑战与验证体系
  • 告别网络焦虑:手把手教你用OSM瓦片搭建本地Leaflet离线地图(附完整代码)
  • 避开这3个坑,你的蓝桥杯PCF8591 AD/DA转换才能准!
  • 3分钟掌握PowerToys文本提取器:告别手打文字的时代
  • 前端响应式设计:移动优先最佳实践
  • 上海对外经贸大学考研辅导班机构推荐:排行榜单与哪家好评测 - michalwang