本次测试使用工业级明纬 RS-15-12 提供稳定的 12V 前级直流输入,最大限度排除劣质电源适配器带来的底噪干扰。
1. 测试目的
通过 MCU (ADuCM3029) I2C 总线向 PMIC (TPS65273V) 写入寄存器配置,实现 VOUT1 与 VOUT2 输出电压的动态程控调节(预期值分别为 1.20V 与 1.80V)。体验现代高级电子设备(比如智能手机)是如何根据工作量大小,随时调整供电来省电的。
2. 软硬件运行环境
主控 MCU: ADuCM3029 评估板 (ARM Cortex-M3)
执行端 PMIC: TPS65273V 评估板 (输入 12V,双路同步 Buck)
工具链: macOS / VS Code / PlatformIO (CMake) / PyOCD 0.44.0
物理拓扑: 杜邦线飞线连接,系统共地 (GND),I2C 总线上拉电阻 10kΩ(PMIC 侧自带)。
3. 硬件连接

4. 环境搭建
确保已安装 Homebrew,同时确保网络畅通,打开终端,输入以下命令:
brew install cmake
brew install openocd
brew install --cask gcc-arm-embedded
注意!这里需要用
brew install --cask gcc-arm-embedded
命令安装 ARM 官方亲自打包并发布的完整工具链。不要使用 Homebrew 官方仓库里的
arm-none-eabi-gcc
官方仓库里不包含 newlib(嵌入式 C 标准库)具体搭建过程可参考:
5. 关键代码
int main(void) {
// 1. 初始化系统时钟与 I2C 外设供电
SystemInit();
adi_pwr_Init();
adi_pwr_EnableClock(ADI_CLOCK_GATE_I2C_CLK, true);
// 2. 配置 P0.4(SCL) 和 P0.5(SDA) 为 I2C 复用功能
pADI_GPIO0->CFG = (pADI_GPIO0->CFG & ~(0x0F00)) | (0x0500);
// 3. 启动 I2C 驱动
if (adi_i2c_Open(0, i2c_dev_mem, ADI_I2C_MEMORY_SIZE, &hI2C) != ADI_I2C_SUCCESS)
{
while(1); // 失败死锁
}
// 4. 配置 I2C 通信参数 (100kHz, 从机地址 0x60)
adi_i2c_SetBitRate(hI2C, 100000);
adi_i2c_SetSlaveAddress(hI2C, TPS65273V_I2C_ADDR);
// ==========================================
// 💥 电源控制逻辑执行区
// ==========================================
// 示例:将 VOUT1 的电压精确设置为 1.20V
bool vout1_ok = TPS_SetVoltage(TPS_REG_VOUT1_SEL, 1.20f);
// 示例:将 VOUT2 的电压精确设置为 1.80V
bool vout2_ok = TPS_SetVoltage(TPS_REG_VOUT2_SEL, 1.80f);
// 主循环
while(1) {
// 如果需要动态调压,可以在这里加入延时或按键触发逻辑
}
return 0;
}
6. 测试结果
输出
I2C(默认输出)


符合用户手册预设值
使用 I2C(调节输出)


符合实验预期值
安全上电与验证时序
线接好后,按照这个顺序上电,能最大程度保护你的板子:
先给单片机上电:插上 Mac 的 USB,让 ADuCM3029 先运行起来(此时 I2C 会在空载状态下试图发送一次电压配置)。
再给 PMIC 上电:打开 12V 稳压电源,给 TPS65273V 供电。
触发指令:按下 ADuCM3029 板子上的 Reset(复位)按键。此时,单片机会重启,执行 main.c 里的代码,重新初始化 I2C,并向 TPS65273V 发送调压指令。
拿起万用表(黑笔接地),去测两路电感后方的电压。显示 1.20V 和 1.80V!本来还想写动态调节的,但是后面自己热插拔输入电源把 PMIC 烧了🤡,可能是因为杜邦线和滤波电容引起 LC 谐振导致的,只能等后期更换芯片后再写了!
