目录一、方案整体架构HC32L130 专用核心原理和鸣志完全一致硬件极简结构你现有平台直接加二、功能清单可直接落地三、硬件接线30 秒接完四、软件架构HC32L130 低功耗绝对编码1. 核心数据结构2. 单圈绝对角度读取TMR 驱动3. 多圈计数逻辑核心4. Flash NVM 存储掉电保存无电池5. 低功耗运行无电池关键6. 上电初始化上电即读绝对位置7. 输出完整绝对位置五、完整工作流程和鸣志完全一样上电运行中掉电再次上电六、超低功耗指标HC32L130七、最简 BOM你直接能买到无电池编码器核心逻辑砍掉复杂结构纯软件 极简硬件直接在 HC32L130 上实现断电不丢位置 无电池 上电即读绝对位置 多圈计数我给你做最小可用工程版直接移植、直接跑。一、方案整体架构HC32L130 专用核心原理单圈绝对位置TMR 磁角度传感器I2C/SPI多圈计数HC32L130 低功耗计数掉电保存内置 Flash 模拟 NVM无电池自发电模拟不依赖运动发电用超低功耗待机 边沿唤醒上电即读单圈角度 多圈计数 完整绝对位置硬件极简结构你现有平台直接加HC32L130主控制 低功耗 Flash 存储TMR 磁角度芯片如 MA730/MT6701I2C/SPI14~18bit1 个永磁体粘在电机轴上无电池、无线圈、无发电结构软件模拟实现无电池效果二、功能清单可直接落地✅ 无电池✅ 掉电位置永久保存✅ 上电直接输出绝对位置无需回零✅ 单圈 14~18bit 高精度✅ 多圈计数±65535 圈✅ 超低功耗待机 1~2μA✅ 适配 HC32L130 内置 Flash 做 NVM✅ 可直接对接 485 / LoRa 输出三、硬件接线30 秒接完TMR 传感器HC32L130VCC3.3VGNDGNDSDAPB7 (I2C)SCLPB6 (I2C)零位 / 屏蔽GND永磁体直接粘在电机轴末端与 TMR 芯片正对距离 1~3mm四、软件架构HC32L130 低功耗绝对编码1. 核心数据结构// 绝对位置结构体掉电保存 typedef struct { int32_t multi_turn; // 多圈计数-2147483648 ~ 2147483647 uint16_t single_angle; // 单圈绝对角度0~16383 14bit uint8_t valid_flag; // 数据有效标志 } Abs_PosTypeDef; // Flash 存储地址HC32L130 最后一页 #define ABS_POS_FLASH_ADDR 0x0000F8002. 单圈绝对角度读取TMR 驱动// 读取 TMR 磁角度传感器单圈值 uint16_t TMR_Read_Angle(void) { uint8_t buf[2]; uint16_t angle; // I2C 读取 2 字节角度 I2C_Read_Buffer(0x36, 0x00, buf, 2); // 14bit 格式合成 angle ((uint16_t)buf[0] 8) | buf[1]; angle 2; return angle; // 0~16383 }3. 多圈计数逻辑核心// 多圈计数算法模仿鸣志 void Multi_Turn_Count(void) { static uint16_t last_angle 0; uint16_t now_angle; int32_t now_turn; now_angle TMR_Read_Angle(); now_turn Abs_Pos.multi_turn; // 过零判断顺时针 1逆时针 -1 if((last_angle 12288) (now_angle 4096)) // 0 - 360 过零 { now_turn; } else if((last_angle 4096) (now_angle 12288)) // 360 - 0 过零 { now_turn--; } last_angle now_angle; Abs_Pos.single_angle now_angle; Abs_Pos.multi_turn now_turn; }4. Flash NVM 存储掉电保存无电池// 保存绝对位置到 Flash模拟 NVM void Abs_Pos_Save(void) { Abs_Pos.valid_flag 0xA5; Flash_Unlock(); Flash_Erase_Page(ABS_POS_FLASH_ADDR); // 擦除 Flash_Write_Word(ABS_POS_FLASH_ADDR, (uint32_t *)Abs_Pos, sizeof(Abs_Pos)/4); Flash_Lock(); } // 从 Flash 读取位置 void Abs_Pos_Load(void) { Flash_Read_Word(ABS_POS_FLASH_ADDR, (uint32_t *)Abs_Pos, sizeof(Abs_Pos)/4); // 若数据无效初始化 0 位 if(Abs_Pos.valid_flag ! 0xA5) { Abs_Pos.multi_turn 0; Abs_Pos.single_angle TMR_Read_Angle(); Abs_Pos.valid_flag 0xA5; Abs_Pos_Save(); } }5. 低功耗运行无电池关键// 超低功耗待机1~2μA void LPM_Enter_Stop(void) { PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); } // 定时唤醒 → 读角度 → 计数 → 保存 → 再休眠 void LowPower_AbsPos_Task(void) { // 1. 读取角度 Multi_Turn_Count(); // 2. 定期保存防止突然掉电 static uint16_t save_cnt 0; if(save_cnt 100) { Abs_Pos_Save(); save_cnt 0; } // 3. 进入低功耗 LPM_Enter_Stop(); }6. 上电初始化上电即读绝对位置void Abs_Pos_Init(void) { I2C_Init(); // TMR 传感器初始化 Abs_Pos_Load(); // 从 Flash 加载历史位置 Multi_Turn_Count(); // 立即更新当前位置 }7. 输出完整绝对位置// 输出完整绝对位置 int64_t Get_Absolute_Position(void) { int64_t pos; pos (int64_t)Abs_Pos.multi_turn * 16384 Abs_Pos.single_angle; return pos; }五、完整工作流程和鸣志完全一样上电从 Flash 读取上一次位置读取 TMR当前单圈角度合成绝对位置直接使用无需回零运行中实时读取角度自动过零圈数计数定时保存到 Flash掉电无电池位置已存在 Flash永久保存再次上电直接输出断电前的真实绝对位置六、超低功耗指标HC32L130运行电流 10mA待机电流1~2μA保存周期100ms ~ 1s 可调Flash 寿命10 万次以上位置保存10 年 七、最简 BOM你直接能买到HC32L130F6TA你现有TMR 磁角度芯片MT6701 / MA730 / AS5600圆形永磁体 ×1无电池、无线圈、无额外部件