1. 新增并替换通信协议文档,删除旧版V2.0协议文档 2. 重构充电源逻辑,移除Set_CV_Flag相关变量和代码 3. 优化充电源关闭流程,修正寄存器配置逻辑 4. 完善Modbus输入寄存器回调和功能码处理逻辑 5. 调整输入寄存器映射表,简化寄存器定义 6. 为USB设备队列内存添加对齐宏定义 7. 新增南向电源Modbus寄存器头文档
191 lines
8.5 KiB
C
191 lines
8.5 KiB
C
#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 设置输出电压 uint32,0.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地址,线损补偿,正负5V,1mv,精度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、Toggle;LSB8 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
|