Files
chrg/docs/south_regs.h
wrh 8f44ae6877 chore: 整理代码并更新文档
1. 新增并替换通信协议文档,删除旧版V2.0协议文档
2. 重构充电源逻辑,移除Set_CV_Flag相关变量和代码
3. 优化充电源关闭流程,修正寄存器配置逻辑
4. 完善Modbus输入寄存器回调和功能码处理逻辑
5. 调整输入寄存器映射表,简化寄存器定义
6. 为USB设备队列内存添加对齐宏定义
7. 新增南向电源Modbus寄存器头文档
2026-07-23 10:36:59 +08:00

191 lines
8.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __DigtalPower_ModbusRTU_REG_List_H__
#define __DigtalPower_ModbusRTU_REG_List_H__
#include "USART1_Modbus_RTU.h"
#include "dac.h"
#define ModbusRTU_SW_Version 0x0301; //01是电源代号,02是负载代号,03是非节能源载代号,04是节能电源代号;低字节01是版本号,V0.1
//ModbusRTU 从站地址//工作状态及运行参数显示
#define ModbusRTU_Power_Status 0x00 //R,工作状态指示,00 预充电;01就绪/停止 02 缓启动;03 运行;04 故障:03 03 00 00 00 01 85 E8
#define ModbusRTU_Relay_Status 0x01 //bit0=0 主继电器断开 bit0=1 主继电器闭合;;;bit1=0 滤波继电器断开 bit1=1 滤波继电器闭合
#define ModbusRTU_Fault_Status 0x02 //故障状态寄存器
#define ModbusRTU_Flash_Status 0x03 //flash存储状态
#define ModbusRTU_Role_ModeFlag 0x04 //0x04 源载指令,默认是电子负载,1是supply,2是eload
//故障寄存器
/*****************************故障类型*****************/
#define F_NOERR 0x0000//无故障
#define F_SW_VIN_UVP 0x0001//输入欠压
#define F_SW_VIN_OVP 0x0002//输入过压
#define F_SW_VOUT_UVP 0x0004//输出欠压
#define F_SW_VOUT_OVP 0x0008//输出过压
#define F_SW_IOUT_OCP 0x0010//输出过流
#define F_SW_SHORT 0x0020//输出短路
#define F_SW_OTP 0x0040//过温保护
//电源控制指令
#define ModbusRTU_PowerCmd 0x05 //05 W 0x01 开机,0x02 关机,0x03故障复位;0xAA 存储数据到flash;0xBB 恢复默认参数
#define ModbusRTU_WorkMode 0x06 //06 WR 0x01 恒压,0x02 恒流,0x03开环,04 恒功率,05恒阻
#define ModbusRTU_Volt 0x07 //07-08 WR 设置输出电压 uint320.001V, 0~60V,默认5V,查询电压也是这个指令
#define ModbusRTU_Current 0x09 //09-0A WR 设置输出电流 uint32 0.001A, 0~60A,默认值1A,查询电压也是这个指令
#define ModbusRTU_ShortTest_VoltShort 0x0B //无论short测试成功或者失败,都给出短路恒流值的时候的电压
#define ModbusRTU_ShortTest_CurrentShort 0x0C //无论测试成功或者失败,都给出短路恒流值的时候的电压
#define ModbusRTU_OCPTest_VoltOCP 0x0D //无论short测试成功或者失败,都给出短路恒流值的时候的电压
#define ModbusRTU_OCPTest_CurrentOCP 0x0E //无论测试成功或者失败,都给出短路恒流值的时候的电压
#define ModbusRTU_DUT_Vpkp 0x0F //量测正峰值
#define ModbusRTU_DUT_Vpkn 0x10 //量测负峰值
#define ModbusRTU_DUT_Vpp 0x11 //量测峰峰值
//纹波寄存器
#define ModbusRTU_Ripple_Value 0x12 //读取纹波
#define ModbusRTU_Temp 0x1A //WR 11,当前内部温度读取点
#define ModbusADDR_SW_Version 0x1B //10,12地址,读取版本号,03代表buckboost半桥,01是版本号
#define ModbusADDR_SlaveID_Modify 0x1C //11,13地址,修订SlaveID
#define Line_Compensation 0X1D //1F 14d地址,线损补偿,正负5V1mv,精度0.001,放大1000倍,5000
#define Eload_Start_VON 0x20 //10 16寄存器存储电子负载启动电压,负载检测到电压值为启动电压,才开启电子负载;
#define Eload_Stop_Volt 0x21 //11 17寄存器存储电子负载关闭电压;
#define Eload_Slew_Rate 0x22 //12 18寄存器存储电子负载上升斜率参数;
#define ModbusRTU_CPower 0x24 //36-37 功率值
#define ModbusRTU_CResistor 0x26 //38 电阻值
//6.3.1电源控制参数
#define ModbusRTU_VoltLimit 0x28 //0x29 40-41 0x2A 42寄存器输出电压限值,默认是6.0V,可以微调到6.5V;
#define ModbusRTU_CurrentLimit_H 0x2A //42~43WR 输出电流限值
#define ModbusRTU_CurrentLimit_L 0x2B //42~43WR 输出电流限值
#define ModbusRTU_Volt_CAL_K 0x2C //2C~2D 电压校准K值,被放大Q16倍,再移动16回去;使用两个字节
#define ModbusRTU_Volt_CAL_K_L 0x2D
#define ModbusRTU_Volt_CAL_B 0x2E //2E 电压校准B值
#define ModbusRTU_Current_CAL_K 0x2F //2F-30 电流校准K值
#define ModbusRTU_Current_CAL_K_L 0x30
#define ModbusRTU_Current_CAL_B 0x31 //31 电流校准B值
#define ModbusRTU_SourceCurrent_CAL_K 0x32 //32-33 电流校准K值
#define ModbusRTU_SourceCurrent_CAL_K_L 0x33
#define ModbusRTU_SourceCurrent_CAL_B 0x34 //34 电流校准B值
#define ModbusRTU_SourceSink_Current_Offset 0x35 //电源的电流上报offset
//#define ModbusRTU_Sink_Current_Offset 0x33 //负载的电流上报offset
#define ModbusRTU_CALI_CRC 0x36 //校准偏移6参数的校验值;使用CRC16-Modbus校验;
#define ModbusRTU_CAL_WriteEnable 0x37 //使能写入FLASH;下次调用使用这个参数;是个魔数:0x4361 (C+a)
#define ModbusRTU_CAL_WriteRecovery 0x38 //使能写入出厂数据区域;0x5763
#define ModbusRTU_CAL_ReadRecovery 0x39 //使能读出;将出厂数据读到当前的bank中,并更新6个参数
//short测试
#define ModbusRTU_ShortTest_CMD_MODE_FLAG 0x40 //16位;0x0101; 01启动,低字节的01,保持电流,为0是释放电流; 20260601新增一个低字节的bit7=0用于是恢复以前的状态,bit7=1是将卸载电流归零;
#define ModbusRTU_ShortTest_Hold_Time 0x41 //单位是ms,最大65535ms,给0是立即释放,给一个时间值,是保持这个时间不变;
//#define ModbusRTU_ShortTest_CurrentShort 0x42 //无论测试成功或者失败,都给出短路恒流值的时候的电压
//OCP测试
#define ModbusRTU_OCPTest_CMD_MODE_FLAG 0x43 //16位;0x0101; 01启动,低字节的01,保持电流,为0是释放电流; 20260601新增一个低字节的bit7=0用于是恢复以前的状态,bit7=1是将卸载电流归零;
#define ModbusRTU_OCPTest_StartCurrent 0x44 //起始电流
#define ModbusRTU_OCPTest_StopCurrent 0x45 //终止电流
#define ModbusRTU_OCPTest_StepCurrent 0x46 //每一步的电流
#define ModbusRTU_OCPTest_Step_Hold_Time 0x47 //每一步的保持时间;默认10ms;范围1ms到100ms;
#define ModbusRTU_OCPTest_Vtrig_Stop 0x48 //达到触发OCP流点的电压值;
#define ModbusRTU_OCPTest_Hold_Time 0x49
//#define ModbusRTU_OCPTest_VoltOCP 0x49 //无论short测试成功或者失败,都给出短路恒流值的时候的电压
//#define ModbusRTU_OCPTest_CurrentOCP 0x4A //无论测试成功或者失败,都给出短路恒流值的时候的电压
//DYNA 电子负载的动态测试模式,也叫动态负载或瞬态测试。在该模式下,负载会按设定的斜率、频率和占空比,在两个电流值(如高负载和低负载)之间周期性跳变,用来测试电源的瞬态响应、恢复时间等特性。
#define ModbusRTU_DYNA_CMD_MODE_FLAG 0x4B //动态测试 CMD启动、退出、 以及模式:Continuous、PULSE、ToggleLSB8 BIT7 短路测试时候的电流:保持/归零;bit1 过流; bit0 成功/失败
#define ModbusRTU_DYNA_L1 0x4C //动态测试电流1
#define ModbusRTU_DYNA_L2 0x4D //动态测试电流2
#define ModbusRTU_DYNA_T1 0x4E //动态测试电流1的时间
#define ModbusRTU_DYNA_T2 0x4F //动态测试电流2的时间
#define ModbusRTU_DYNA_Rise_Slew_Rate 0x50 //动态测试上升斜率
#define ModbusRTU_DYNA_Fall_Slew_Rate 0x51 //动态测试下降斜率
#define ModbusRTU_DUT_ValueReset 0x5D //复位数值
#define ModbusRTU_SYS_Reset 0x61 //系统复位指令,如果异常过压,通常发指令,让系统复位
//#define ModbusRTU_Volt_Kp 0x30 //48-49 RW 电压环kp
//#define ModbusRTU_Volt_Ki 0x32 //50-51WR 电压环ki
//#define ModbusRTU_Curr_Kp 0x34 //52-53WR 电流环kp
//#define ModbusRTU_Curr_Ki 0x36 //54-55WR 电流环ki
//#define ModbusRTU_CP_Kp 0x38 //56-57 RW 功率环kp
//#define ModbusRTU_CP_Ki 0x3A //58-59 WR 功率环ki
//#define ModbusRTU_CR_Kp 0x3C //60-61 WR 电阻环kp
//#define ModbusRTU_CR_Ki 0x3E //62-63 WR 电阻环ki
//112,0x70寄存器,改为当前内部温度读取点;
#define ModbusRTU_TempLimit 0x71 //WR 温度限值
#define ModbusRTU_FANSpeed 0x72 //风速控制,上位机可以设定;自动模式下,温度高于一个值,最大风速跑,低于则最小风速跑
#define SMU_Relay_ON 0x0001 //源载主继电器
#define SMU_EL_PB15_EMI_Bypass_ON 0x0002 //旁路滤波继电器
//定义电流保护值的关系:Y(VDAC) = K*X(I-real)+B
#define Init_OCP_VALUE 12000 //12A
//正向:
#define K_COEFF_FWD_Q16 (9960)
#define B_Intercept_FWD (1846)
//反向:
#define K_COEFF_REV_Q16 (-9960)
#define B_Intercept_REV (1846)
//结构体
//6.2.1工作状态及运行参数显示 PowerStatusAndParaShow
typedef struct {
uint16_t Power_Status;
uint16_t Relay_Status;
uint16_t Fault_Status;
uint16_t Flash_Status;
uint32_t InputVolt;
uint32_t InputCurr;
uint32_t OutputVolt;
uint32_t OutputCurr;
uint32_t OutputPower;
uint16_t statusRsv1; //预留位
uint16_t statusRsv2;
}S_PowerStatusAndParaShow;
extern S_PowerStatusAndParaShow PowerStatusAndParaShow;
//6.2.2电源控制指令PowerControlCmd
typedef struct{
uint16_t PowerCmd;
uint16_t WorkMode;
uint32_t Vout;
uint32_t Iout;
uint8_t Remote_Power_ON_Flag; //开关机指示
uint8_t Remote_Power_Reset_Flag; //复位指示
}S_PowerControlCmd;
extern S_PowerControlCmd PowerControlCmd;
//6.3.1电源控制参数
typedef struct{
uint32_t VoutLimit;
uint32_t IoutLimit;
uint16_t DutyLimit;
uint16_t FrequnceLimit;
float VoltKp;
float VoltKi;
float CurrKp;
float CurrKi;
}S_PowerControlPara;
extern uint8_t Power_OnOff_Flag,Power_OnOff_Flag;
extern S_PowerControlPara PowerControlPara;
//Modbus 参数初始化
extern void Modbus_Para_Init(void);
#endif