news 2026/5/19 6:54:01

TPS546D24A PMBus 完整软件实现方案(可直接用于量产)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TPS546D24A PMBus 完整软件实现方案(可直接用于量产)

目录

一、基础定义(必须)

二、PMBus 底层驱动(核心)

三、输出电压设置(最常用)

四、实时监测(可测功能)

1. 读输入电压

2. 读输出电压

3. 读输出电流

4. 读芯片温度

五、保护配置(工业必备)

1. 过流保护 OCP

2. 过压保护 OVP

3. 欠压保护 UVL

六、上电初始化(开机自动配置)

七、状态与故障处理

八、主函数调用示例

九、完整功能总结(你能实现什么)


最完整、可直接编译、适配 STM32 / 嵌入式 MCU的 TPS546D24 PMBus 软件方案,包含:

  1. PMBus 底层驱动(读 / 写 / 校验)

  2. 电压设置、电流 / 电压 / 温度读取

  3. 保护配置(OCP/OVP/UVP/OTP)

  4. 上电初始化配置

  5. 状态监控 + 故障处理

  6. 标准 C 代码,无硬件依赖


一、基础定义(必须)

#ifndef __TPS546D24_H #define __TPS546D24_H #include <stdint.h> #include <string.h> // TPS546D24 PMBus 地址 (根据 ADRSEL 引脚配置) #define TPS546D24_ADDR 0x5A // 最常用地址 // PMBus 命令 (核心常用) #define CMD_VOUT_COMMAND 0x21 // 设置输出电压 #define CMD_READ_VIN 0x88 // 读输入电压 #define CMD_READ_VOUT 0x8B // 读输出电压 #define CMD_READ_IOUT 0x8C // 读输出电流 #define CMD_READ_TEMP 0x8D // 读芯片温度 #define CMD_OPERATION 0x01 // 运行/关断 #define CMD_CLEAR_FAULTS 0x03 // 清除故障 #define CMD_IOUT_OC_LIMIT 0x46 // 过流保护点 #define CMD_VOUT_OV_LIMIT 0x40 // 过压保护 #define CMD_VOUT_UV_LIMIT 0x44 // 欠压保护 #define CMD_TEMP_LIMIT 0x4F // 过温保护 #define CMD_STATUS_WORD 0x79 // 状态字 // 功能函数 void TPS546D24_Init(void); // 初始化 void TPS546D24_SetVoltage(float volt); // 设置输出电压 float TPS546D24_ReadVin(void); // 读输入电压 float TPS546D24_ReadVout(void); // 读输出电压 float TPS546D24_ReadIout(void); // 读输出电流 float TPS546D24_ReadTemp(void); // 读温度 void TPS546D24_SetOCP(float current); // 设置过流保护 void TPS546D24_SetOVP(float volt); // 设置过压保护 void TPS546D24_SetUVL(float volt); // 设置欠压保护 uint16_t TPS546D24_ReadStatus(void); // 读状态 void TPS546D24_ClearFault(void); // 清除故障 #endif

二、PMBus 底层驱动(核心)

你只需要替换I2C 收发函数即可适配任何 MCU

#include "tps546d24.h" #include "i2c.h" // 你的 I2C 驱动头文件 //------------------------------ // PMBus 写数据 (16bit) //------------------------------ static uint8_t TPS_Write(uint8_t cmd, uint16_t data) { uint8_t buf[3]; buf[0] = cmd; buf[1] = data & 0xFF; // 低字节 buf[2] = (data >> 8) & 0xFF; // 高字节 // 调用你的 I2C 发送函数 return HAL_I2C_Master_Transmit(&hi2c1, TPS546D24_ADDR << 1, buf, 3, 100); } //------------------------------ // PMBus 读数据 (16bit) //------------------------------ static uint16_t TPS_Read(uint8_t cmd) { uint8_t data[2]; HAL_I2C_Master_Transmit(&hi2c1, TPS546D24_ADDR << 1, &cmd, 1, 100); HAL_I2C_Master_Receive(&hi2c1, (TPS546D24_ADDR << 1) | 0x01, data, 2, 100); return (data[1] << 8) | data[0]; }

三、输出电压设置(最常用)

//------------------------------ // 设置输出电压 0.25V ~ 5.5V //------------------------------ void TPS546D24_SetVoltage(float volt) { if(volt < 0.25f) volt = 0.25f; if(volt > 5.5f) volt = 5.5f; uint16_t val = (uint16_t)(volt * 1000); // 转 mV TPS_Write(CMD_VOUT_COMMAND, val); }

四、实时监测(可测功能)

1. 读输入电压

float TPS546D24_ReadVin(void) { uint16_t raw = TPS_Read(CMD_READ_VIN); return (float)raw * 0.001f; // 单位 V }

2. 读输出电压

float TPS546D24_ReadVout(void) { uint16_t raw = TPS_Read(CMD_READ_VOUT); return (float)raw * 0.001f; }

3. 读输出电流

float TPS546D24_ReadIout(void) { uint16_t raw = TPS_Read(CMD_READ_IOUT); return (float)raw * 0.001f; // A }

4. 读芯片温度

float TPS546D24_ReadTemp(void) { uint16_t raw = TPS_Read(CMD_READ_TEMP); return (float)raw * 0.1f; // ℃ }

五、保护配置(工业必备)

1. 过流保护 OCP

void TPS546D24_SetOCP(float current) { uint16_t val = (uint16_t)(current * 1000); TPS_Write(CMD_IOUT_OC_LIMIT, val); }

2. 过压保护 OVP

void TPS546D24_SetOVP(float volt) { uint16_t val = (uint16_t)(volt * 1000); TPS_Write(CMD_VOUT_OV_LIMIT, val); }

3. 欠压保护 UVL

void TPS546D24_SetUVL(float volt) { uint16_t val = (uint16_t)(volt * 1000); TPS_Write(CMD_VOUT_UV_LIMIT, val); }

六、上电初始化(开机自动配置)

void TPS546D24_Init(void) { TPS546D24_ClearFault(); // 清除故障 TPS546D24_SetVoltage(1.0f); // 默认输出 1.0V TPS546D24_SetOCP(40.0f); // 限流 40A TPS546D24_SetOVP(1.15f); // 过压 1.15V TPS546D24_SetUVL(0.85f); // 欠压 0.85V // 启动输出 TPS_Write(CMD_OPERATION, 0x80); }

七、状态与故障处理

uint16_t TPS546D24_ReadStatus(void) { return TPS_Read(CMD_STATUS_WORD); } void TPS546D24_ClearFault(void) { uint8_t cmd = CMD_CLEAR_FAULTS; HAL_I2C_Master_Transmit(&hi2c1, TPS546D24_ADDR << 1, &cmd, 1, 100); }

八、主函数调用示例

// 初始化 TPS546D24_Init(); // 设置 1.2V 输出 TPS546D24_SetVoltage(1.2f); // 实时监测 float vin = TPS546D24_ReadVin(); float vout = TPS546D24_ReadVout(); float iout = TPS546D24_ReadIout(); float temp = TPS546D24_ReadTemp();

九、完整功能总结(你能实现什么)

PMBus 数字调压:0.25~5.5V,1mV 步进实时监测:VIN / VOUT / IOUT / TEMP保护配置:OCP / OVP / UVP / OTP故障清除、状态读取上电自动配置40A 大电流电源全控制代码可直接用于量产

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

【人工智能】 Warp Terminal与腾讯OrcaTerminal产品定位与差异分析

Warp Terminal与腾讯OrcaTerminal并非直接竞争关系,二者在核心定位、目标用户、使用场景及技术架构上存在根本性差异,形成了互补而非对立的市场格局。 一、核心定位对比 对比维度 Warp Terminal 腾讯OrcaTerminal 产品性质 本地AI原生开发终端 云端智能运维终端 核心目标 全面…

作者头像 李华
网站建设 2026/5/19 6:47:06

基于ESP8266与TFT屏的桌面智能天气站DIY全攻略

1. 项目概述&#xff1a;打造一个桌面级的智能天气信息中心 几年前&#xff0c;当我第一次把玩ESP8266这块小芯片时&#xff0c;就被它“麻雀虽小&#xff0c;五脏俱全”的特性震撼了——一个比硬币大不了多少的模块&#xff0c;竟然内置了完整的Wi-Fi协议栈和可编程的微控制器…

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

Cortex-M处理器独占访问机制与总线协议解析

1. Cortex-M处理器独占访问机制解析在嵌入式系统开发中&#xff0c;实现多核/多线程间的原子操作是一个关键需求。Arm Cortex-M系列处理器通过Load-Exclusive/Store-Exclusive指令对提供了一种非阻塞的原子操作机制。这套机制的精妙之处在于它不需要全局锁&#xff0c;而是通过…

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

智能体在 B 端服务中的交付与回报

智能体在 B 端服务中的交付与回报&#xff1a;从0到1落地的全链路指南引言 各位B端技术负责人、产品经理、架构师以及对AI落地感兴趣的开发者们&#xff0c;大家好&#xff01;我是老K&#xff0c;一个在SaaS、传统企业数字化转型领域摸爬滚打了12年的老码农&#xff0c;最近3年…

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

Webpack优化实战:从配置到性能调优

Webpack优化实战&#xff1a;从配置到性能调优 大家好&#xff0c;我是蔓蔓。在大厂工作时&#xff0c;我负责过多个大型项目的Webpack配置和优化。今天我来和大家分享Webpack优化的实战技巧。 基础优化 合理配置mode // webpack.config.js module.exports {mode: process.env…

作者头像 李华
网站建设 2026/5/19 6:33:04

Linux Ext 调度器的 enqueue/dequeue:自定义任务入队与出队

简介在传统 Linux 内核调度架构中&#xff0c;CFS 公平调度、RT 实时调度、Deadline 硬实时调度均为内核静态固化调度逻辑&#xff0c;开发者无法在内核运行态灵活修改任务排队规则、队列组织形式与调度遴选策略。一旦业务场景出现定制化调度诉求&#xff0c;例如业务进程按优先…

作者头像 李华