
简介这份电路图设计资料面向嵌入式硬件工程师、电源设计初学者及机器人主控板开发者围绕一块集成电源管理与通信接口的硬件板卡展开重点解决多电压域供电、电源采样监控与工业总线通信等实际问题。压缩包内为1个PDF文件约622KB以原理图页形式呈现涵盖电源输入、DCDC转换、采样与接口等模块便于直接查阅与对照设计。内容涉及INA226电源采样、RS485收发器TP75176、防反接电路、12V降压3.3V与3.3V升压5V电路并包含LMR14050、LMR62421等DCDC转换器及TPS2553电源管理方案同时覆盖STM32F405主控、TMP275温度检测与CAT24C512存储、I2C与UART调试接口、电机驱动及外部传感器模块供电等设计细节。目前已有3945人学习适合需要参考完整电源树与接口布局的读者快速获取设计思路与器件选型依据。1. 一块机器人电源板卡的真实拆解起点拿到 LX-GIS-2-PWR 这份原理图时我第一反应不是去看 STM32F405 的引脚分配而是翻到第二页看电源输入路径。原因很简单机器人主控板烧过太多次十次里有七次不是 MCU 的问题而是电源域设计没兜住。这块板卡要同时伺候 11.1V 锂电池、12V 到 16.8V 的外部适配器、电机驱动、前视摄像头补光灯、RS485 总线收发、以及一堆 3.3V 和 5V 的外设模块任何一个电源域出问题都会连锁反应。它解决的核心问题是在一块板子上把多路输入电源安全地合并、分配、监控并且让主控能实时知道每一路电流电压的状态。适合谁看做嵌入式硬件、机器人电控、工业网关的工程师尤其是那些需要在锂电池和外部电源之间做无缝切换、还要做电流采样上报的场景。下面按电源输入、降压升压、采样监控、通信接口、调试排错几个技术点逐层拆。2. 电源输入路径理想二极管、防反接与 12V 降压 3.3V2.1 LTC4359 理想二极管如何做电池与外部电源的自动切换这块板子的输入有两个来源11.1V 锂电池接口和外部 12V 到 16.8V 适配器。两者不能直接并联否则电池会向适配器倒灌。原理图里用的是 LTC4359 搭配 NMOSCSD18543Q3A构成理想二极管电路。LTC4359 的 SOURCE 脚接 NMOS 源极GATE 驱动栅极IN 脚接输入电源OUT 接负载侧。当输入电压高于输出侧时芯片快速拉高 GATENMOS 导通压降只有几十毫伏当输入掉电或反接时GATE 迅速拉低MOS 关断反向电流被切断。相比肖特基二极管理想二极管的优势在压降和发热。10A 电流下肖特基压降约 0.5V功耗 5W需要散热片理想二极管压降约 0.02V功耗 0.2W几乎不发热。LTC4359 的 SHDN 脚可以用来做使能控制原理图里通过电阻分压设定阈值。实际调试时要注意 GATE 引脚的上升时间如果负载有大电容浪涌电流会触发前级保护常见做法是在 GATE 和 SOURCE 之间加一颗小电容延缓开通。2.2 FSV20120V 防反接电路的工作逻辑防反接用了两颗 FSV20120V分别放在电池接口和外部电源接口后面。FSV20120V 是一颗 120V/20A 的肖特基二极管这里不是用来做理想二极管而是做极性保护。当电源正负极接反时二极管反向截止后级电路不会得到反向电压。选 120V 耐压是因为外部适配器最高 16.8V但工业现场可能有浪涌留足余量。这里有个容易踩的坑防反接二极管放在理想二极管前面还是后面。原理图里是放在前面先防反接再做理想二极管切换。如果放在后面反接时理想二极管的 NMOS 体二极管可能先导通反而让反向电压窜到负载侧。所以顺序不能乱。2.3 LMR14050 实现 12V 到 3.3V 的降压设计12V 到 3.3V 的降压用的是 LMR14050这是一颗 40V/5A 的同步降压转换器。原理图里反馈电阻是 R2434K 和 R3120K输出电压计算Vout 0.75V × (1 R24/R31) 0.75 × (1 34/20) 0.75 × 2.7 2.025V等等这个结果不对。重新看原理图LMR14050 的 FB 基准是 0.75V但原理图里标注的是Vout (34K/10K)*0.750.753.3V说明实际用的是 34K 和 10K。R31 在原理图里标注 20K 可能是另一路的分压。按 34K 和 10K 算Vout 0.75 × (1 34/10) 0.75 × 4.4 3.3V正确。LMR14050 的开关频率由 RT/SYNC 脚电阻设定原理图里 R23100K对应约 400KHz。电感 L2 是 6.8uH/4A输出电容 C19 是 22uF/10V。输入电容 C1 是 10uF/50VC2 是 0.1uF/50V。EN 脚通过 R33310K 和 R34100K 分压使能阈值约 1.2V对应输入电压约 4.8V 时启动。实际布局时输入电容要尽量靠近 VIN 和 GND 引脚FB 反馈走线要远离 SW 节点否则输出纹波会变大。如果输出带载后电压跌落先查电感饱和电流是否够再查 FB 电阻精度。2.4 3.3V 升压 5VLMR62421 的反馈电阻计算5V 系统由 LMR62421 从 3.3V 升压得到。这是一颗 2.7V 到 5.5V 输入的升压转换器开关频率 1.6MHz。反馈基准是 1.25V原理图里 R3020KR210KVout 1.25 × (1 R30/R2) 1.25 × (1 20/10) 1.25 × 3 3.75V这个结果也不是 5V。再看原理图标注Vout((30/10)1)*1.255V说明实际用的是 30K 和 10K。按 30K 和 10K 算Vout 1.25 × (1 30/10) 1.25 × 4 5V正确。LMR62421 的 EN 脚通过 R104.7K 和 R114.7K 分压使能阈值约 0.6V3.3V 输入时 EN 电压约 1.65V正常使能。电感 L1 是 3.3uH/1.32A输出电容 C15 是 2.2uF/50V。升压电路布局时SW 节点面积要小反馈走线要短否则容易振荡。电源域芯片输入输出关键电阻电感12V→3.3VLMR1405012V3.3V/3A34K/10K6.8uH3.3V→5VLMR624213.3V5V/0.3A30K/10K3.3uH电池切换LTC435911.1V跟随分压设定无防反接FSV20120V12-16.8V跟随无无3. INA226 电源采样电路与 I2C 地址配置3.1 INA226 的采样原理与分流电阻选型INA226 是一颗 16 位 I2C 接口的电流/电压/功率监控芯片共模电压范围 0V 到 36V适合这块板子的 12V 和 5V 电源域。它通过测量分流电阻两端的差分电压来计算电流同时测量 VBUS 对地电压。原理图里 INA226 的 IN 和 IN- 接在分流电阻 R170.005Ω 两端VBUS 接在负载侧。分流电阻选 0.005Ω 是因为最大电流 10A 时压降只有 50mV功耗 0.5W。INA226 的差分输入范围是 ±81.92mV0.005Ω 对应最大电流 16.384A留了余量。如果选 0.01Ω最大电流 8.192A10A 时会超量程。所以 0.005Ω 是合理的。电流计算公式Current (ShuntVoltage / Rshunt) (ShuntVoltage / 0.005)INA226 的 ShuntVoltage 寄存器是 2.5uV/LSB所以 50mV 对应 20000 个 LSB。实际读取时// INA226 读取电流值 #define INA226_ADDR 0x40 #define SHUNT_RESISTOR 0.005f #define CURRENT_LSB 0.001f // 1mA/LSB float ina226_read_current(I2C_HandleTypeDef *hi2c) { uint8_t reg 0x04; // Current Register uint8_t data[2]; HAL_I2C_Master_Transmit(hi2c, INA226_ADDR 1, reg, 1, 100); HAL_I2C_Master_Receive(hi2c, (INA226_ADDR 1) | 1, data, 2, 100); int16_t raw (int16_t)((data[0] 8) | data[1]); return raw * CURRENT_LSB; // 返回安培 }这里 CURRENT_LSB 需要根据校准寄存器设置。INA226 的校准寄存器值CAL 0.00512 / (CURRENT_LSB × Rshunt)如果 CURRENT_LSB 设为 1mARshunt0.005ΩCAL 0.00512 / (0.001 × 0.005) 0.00512 / 0.000005 1024所以校准寄存器写 1024。实际调试时如果读到的电流值偏大或偏小先查校准寄存器是否写对再查分流电阻的实际阻值。3.2 I2C 地址冲突与 TMP275/CAT24C512 的地址分配原理图里 I2C1 总线上挂了 INA226、TMP275 和 CAT24C512。INA226 的地址由 A0 和 A1 引脚决定原理图里 A0 和 A1 都接地地址是 0x40。TMP275 的地址由 A0/A1/A2 决定原理图里 A0/A1/A2 都接地地址是 0x48。CAT24C512 的地址由 A0/A1/A2 决定原理图里 A0/A1/A2 都接地地址是 0x50。三个器件地址不冲突但要注意 7 位地址和 8 位地址的区别。HAL 库用的是 8 位地址需要左移一位。INA226 的 7 位地址 0x408 位写地址是 0x80读地址是 0x81。TMP275 的 7 位地址 0x488 位写地址是 0x90读地址是 0x91。CAT24C512 的 7 位地址 0x508 位写地址是 0xA0读地址是 0xA1。原理图里标注的I2C ADDR write Ox92 read 0x93和I2C ADDR write OxA2 read 0xA3是 TMP275 和 CAT24C512 的 8 位地址但写的是 0x92 和 0xA2说明 A0 引脚可能接了 VCC 而不是 GND。实际以原理图连接为准调试时用 I2C 扫描工具确认。# 在 Linux 下用 i2cdetect 扫描 I2C 总线 i2cdetect -y 1 # 输出示例 # 0 1 2 3 4 5 6 7 8 9 a b c d e f # 40: 40 -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- # 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --如果扫描不到器件先查上拉电阻。原理图里 I2C 上拉是 4.7K3.3V 供电电流约 0.7mA符合 I2C 规范。如果上拉太大上升沿变缓高速通信会出错。3.3 INA226 的 ALERT 引脚与功率报警配置INA226 的 ALERT 引脚可以配置成过流、过压、欠压报警。原理图里 ALERT 通过 R25100K 上拉到 3.3V接到 MCU 的 PWR_ALERT 网络。配置报警阈值// 设置 INA226 过流报警阈值为 8A void ina226_set_alert_current(I2C_HandleTypeDef *hi2c, float current_limit) { uint8_t reg 0x07; // Alert Limit Register uint16_t limit (uint16_t)(current_limit / CURRENT_LSB); uint8_t data[2] {limit 8, limit 0xFF}; HAL_I2C_Master_Transmit(hi2c, INA226_ADDR 1, reg, 1, 100); HAL_I2C_Master_Transmit(hi2c, INA226_ADDR 1, data, 2, 100); // 配置 Mask/Enable 寄存器使能过流报警 reg 0x06; uint16_t mask 0x8000; // SOL 位过流报警 data[0] mask 8; data[1] mask 0xFF; HAL_I2C_Master_Transmit(hi2c, INA226_ADDR 1, reg, 1, 100); HAL_I2C_Master_Transmit(hi2c, INA226_ADDR 1, data, 2, 100); }ALERT 引脚是开漏输出需要上拉。触发后 MCU 进入中断读取状态寄存器判断报警类型。注意 ALERT 是锁存还是透明模式由 Mask/Enable 寄存器的 AFF 位决定。锁存模式下需要读状态寄存器清除报警。4. RS485 收发器 TP75176 与 UART5 通信实战4.1 TP75176 的收发切换与 DE/RE 控制RS485 收发器用的是 TP75176兼容 75176 引脚。原理图里 RX 接 MCU 的 USART5_RXTX 接 USART5_TXDE 和 RE 接在一起由 USART5_CTRL 控制。DE 高电平发送RE 低电平接收。因为 DE 和 RE 接在一起所以发送时 DE 高、RE 高发送禁止接收接收时 DE 低、RE 低接收使能。这种接法需要 MCU 在发送前拉高 CTRL发送完拉低。如果 CTRL 切换不及时总线会冲突。常见做法是用 UART 的 TC发送完成中断来切换// RS485 发送函数 void rs485_send(uint8_t *data, uint16_t len) { HAL_GPIO_WritePin(RS485_CTRL_GPIO_Port, RS485_CTRL_Pin, GPIO_PIN_SET); // DE 高发送模式 HAL_UART_Transmit(huart5, data, len, 1000); // 等待发送完成 while(__HAL_UART_GET_FLAG(huart5, UART_FLAG_TC) RESET); HAL_GPIO_WritePin(RS485_CTRL_GPIO_Port, RS485_CTRL_Pin, GPIO_PIN_RESET); // DE 低接收模式 }如果发送完立即拉低 CTRL最后一个字节可能还没移出移位寄存器总线会被截断。所以必须等 TC 标志置位。有些方案用 DMA 发送完成中断来切换效果一样。4.2 RS485 终端电阻与总线匹配原理图里 B12 是 120Ω 终端电阻标注A/120 OHM。RS485 总线两端需要各接一个 120Ω 终端电阻匹配电缆特性阻抗减少反射。如果总线短于 10 米可以不接如果长于 100 米必须接。这块板子作为总线的一个节点终端电阻通过跳线或焊接选择。实际组网时如果通信不稳定先查终端电阻。用万用表测 A-B 之间电阻如果接近 60Ω说明两端都有终端电阻如果接近 120Ω只有一端有如果无穷大没有终端电阻。另外查 A-B 之间的差分电压空闲时应该大于 200mV如果小于 200mV说明偏置电阻不够。4.3 根据 RS485 差分信号解析数据RS485 是物理层协议数据格式由上层协议决定。常见的是 Modbus RTU。解析数据时先看波特率、数据位、停止位、校验位是否匹配。原理图里 UART5 的波特率由 MCU 配置常见 9600 或 115200。# Python 解析 Modbus RTU 帧 import serial def parse_modbus_rtu(frame): if len(frame) 4: return None addr frame[0] func frame[1] if func 0x03: # 读保持寄存器 byte_count frame[2] data frame[3:3byte_count] crc frame[3byte_count:5byte_count] # 校验 CRC calc_crc crc16(frame[:3byte_count]) if calc_crc ! (crc[1] 8 | crc[0]): return None registers [] for i in range(0, byte_count, 2): registers.append((data[i] 8) | data[i1]) return {addr: addr, func: func, registers: registers} return None def crc16(data): crc 0xFFFF for byte in data: crc ^ byte for _ in range(8): if crc 0x0001: crc (crc 1) ^ 0xA001 else: crc 1 return crc解析时注意字节序Modbus 是大端。CRC 是低字节在前。如果解析出错先抓原始波形用示波器看差分信号是否干净再查波特率误差。5. 电源管理 TPS2553 与 LT1910 的限流与故障排查5.1 TPS2553 的限流电阻计算与故障上报TPS2553 是一颗限流配电开关用于 5V 和 3.3V 外设模块供电。原理图里 R10024.9K 设定限流值。TPS2553 的限流公式Ilimit 22980 / Rilim^1.026Rilim24.9K 时Ilimit 22980 / 24900^1.026 ≈ 22980 / 31600 ≈ 0.727A约 0.73A。如果外设模块电流超过这个值TPS2553 进入恒流模式FAULT 引脚拉低。FAULT 是开漏输出通过 R1011K 上拉到 3.3V接到 MCU 的 PWR_ALERT 网络。MCU 检测到 FAULT 低电平后可以关闭该路电源或上报故障。实际调试时如果 FAULT 频繁触发先查外设模块的峰值电流。有些模块启动瞬间电流是额定值的 2 到 3 倍需要加大限流值或加软启动电路。5.2 LT1910 高边驱动与电机供电的故障保护LT1910 是一颗高边 NMOS 驱动芯片用于电机驱动板和外部模块供电。原理图里用了两颗 LT1910分别控制 MOTOR_PWR_CAR 和 MOTOR_PWR_ARM。LT1910 的 SENSE 脚接在 NMOS 源极和负载之间通过 R360.005Ω 检测电流。当电流超过阈值时LT1910 关断 GATEFAULT 引脚拉低。电流阈值计算Ilimit Vsense / Rsense 50mV / 0.005Ω 10A原理图里标注Iset 10A对应 Vsense50mV。LT1910 的 TIMER 脚接 C300.1uF设定故障后的重启时间。如果电机堵转电流超过 10ALT1910 关断TIMER 电容充电充电到阈值后尝试重启。如果故障持续进入打嗝模式。排查电机供电问题时先查 LT1910 的 FAULT 引脚是否拉低再查 SENSE 电阻是否烧断。如果电机不转但 FAULT 正常查 GATE 电压是否升到 12V 以上NMOS 是否导通。5.3 电源域故障排查流程与关键测试点这块板子的电源域多排查时按以下顺序步骤测试点正常值异常处理1电池接口电压11.1V查电池或防反接二极管2理想二极管输出11.1V查 LTC4359 GATE 电压312V 输入电压12-16.8V查适配器或防反接43.3V 输出3.3V±5%查 LMR14050 FB 分压55V 输出5V±5%查 LMR62421 FB 分压6INA226 电流读数与实际相符查校准寄存器7RS485 A-B 差分200mV查终端电阻和偏置8TPS2553 FAULT高电平查外设电流用万用表测电压用示波器看纹波。3.3V 和 5V 的纹波应该小于 50mV。如果纹波大查输出电容和电感。如果 INA226 读数跳变查 I2C 上拉和电源去耦。6. 用 INA226 做功率趋势记录与阈值联动INA226 不只是读当前值还可以做趋势记录。我一般会在 MCU 里开一个 100ms 的定时器每次读 INA226 的电压、电流、功率存到环形缓冲区。如果功率超过阈值触发报警或降载。// INA226 功率趋势记录 #define POWER_LOG_SIZE 100 float power_log[POWER_LOG_SIZE]; uint8_t power_log_idx 0; void ina226_log_power(I2C_HandleTypeDef *hi2c) { float voltage ina226_read_voltage(hi2c); float current ina226_read_current(hi2c); float power voltage * current; power_log[power_log_idx] power; power_log_idx (power_log_idx 1) % POWER_LOG_SIZE; // 如果功率超过 50W触发降载 if (power 50.0f) { // 关闭非关键外设 HAL_GPIO_WritePin(IO_PWR_CTRL_GPIO_Port, IO_PWR_CTRL_Pin, GPIO_PIN_RESET); } }阈值联动时要注意迟滞否则功率在阈值附近波动会频繁开关。常见做法是设两个阈值超过 50W 关断低于 45W 恢复。另外 INA226 的转换时间可以配置默认 1.1ms如果噪声大可以加长转换时间做平均。验证方法用电子负载拉载从 0A 慢慢加到 10A看 INA226 读数是否线性。如果非线性查分流电阻的温漂。0.005Ω 的电阻在 10A 时功耗 0.5W温升可能导致阻值变化。选低温漂的合金电阻或者做温度补偿。最后提一个技巧INA226 的 VBUS 和 IN 可以接不同点VBUS 接负载侧IN 接电源侧这样可以同时测电源电压和负载电压算线损。如果线损大查走线宽度和连接器接触电阻。本文还有配套的精品资源点击获取