GPS2000测试(未修改整定算法)

This commit is contained in:
gaoyuhang 2024-06-18 08:48:58 +08:00
parent 7d7af4febb
commit a6fe9524cd
6 changed files with 45 additions and 15 deletions

View File

@ -125,7 +125,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>JL2CM3</Key> <Key>JL2CM3</Key>
<Name>-U601012352 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32L476VGTx$CMSIS\Flash\STM32L4xx_1024.FLM)</Name> <Name>-U601012352 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8006 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32L476VGTx$CMSIS\Flash\STM32L4xx_1024.FLM)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@ -145,7 +145,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key> <Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U73002200150000504A51544E -O206 -S1 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32L476VGTx$CMSIS\Flash\STM32L4xx_1024.FLM)</Name> <Name>-U16004A002933353739303541 -O206 -S1 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32L476VGTx$CMSIS\Flash\STM32L4xx_1024.FLM)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@ -240,6 +240,11 @@
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>adc_raw,0x0A</ItemText> <ItemText>adc_raw,0x0A</ItemText>
</Ww> </Ww>
<Ww>
<count>16</count>
<WinNumber>1</WinNumber>
<ItemText>udevice,0x0A</ItemText>
</Ww>
</WatchWindow1> </WatchWindow1>
<MemoryWindow1> <MemoryWindow1>
<Mm> <Mm>

View File

@ -294,8 +294,8 @@ void mode_init(void)
pdctrl_init(PDCTRL_PWMP); pdctrl_init(PDCTRL_PWMP);
break; break;
case MODE_FREQUENCY_DOMAIN_CONTROL_ALGORITHM: case MODE_FREQUENCY_DOMAIN_CONTROL_ALGORITHM:
pdctrl_init(PDCTRL_PWMP); //pdctrl_init(PDCTRL_PWMP);
//pdctrl_init(PDCTRL_DAC); pdctrl_init(PDCTRL_DAC);
mode_pwmp_hd_init(&mode_get()->interface_req, mode_get()->positioner_model, &mode_params.mode_pwmp_hd_params, mode_pwmp_hd_init(&mode_get()->interface_req, mode_get()->positioner_model, &mode_params.mode_pwmp_hd_params,
mode_params_save_cb); mode_params_save_cb);
break; break;

View File

@ -183,7 +183,7 @@ static float32 get_pwmp_hd_control_kp(void)
static float32 get_pwmp_hd_control_ki(void) static float32 get_pwmp_hd_control_ki(void)
{ {
return mode_pwmp_hd->pwmp_save->storage.ki < 0.001 ? mode_pwmp_hd->pwmp_save->storage.ki * 20 : 0.01; return mode_pwmp_hd->pwmp_save->storage.ki < 0.001 ? mode_pwmp_hd->pwmp_save->storage.ki * 20 : 0.02;
} }
static float32 get_pwmp_hd_control_kd(void) static float32 get_pwmp_hd_control_kd(void)
@ -292,11 +292,12 @@ static execute_rsp_hd_t *execute_dac_plan1()
out = out / 100; out = out / 100;
if (udevice.value_travel_type == TRAVEL_TYPE_STRAIGHT) if (udevice.value_travel_type == TRAVEL_TYPE_STRAIGHT)
{ {
#if 1
/* 一阶段加权系数*/ /* 一阶段加权系数*/
static float32 index_min_first = 0.5; static float32 index_min_first = 0.3;
static float32 index_max_first = 0.5; static float32 index_max_first = 0.4;
/*二阶段加权系数*/ /*二阶段加权系数*/
static float32 index_min_second = 0.3; static float32 index_min_second = 0.2;
static float32 index_max_second = 0.3; static float32 index_max_second = 0.3;
if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
{ // 对PID输出结果进行归一化处理 { // 对PID输出结果进行归一化处理
@ -313,6 +314,23 @@ static execute_rsp_hd_t *execute_dac_plan1()
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin; out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
} }
#else
float32 index = fabs(1 - exp(-(pow(mode_pwmp_hd->control.real_error, 2) - 1)));
if (fabs(mode_pwmp_hd->control.real_error) >= 1)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index;
}
else if (fabs(mode_pwmp_hd->control.real_error) > 0.99 && fabs(mode_pwmp_hd->control.real_error) < 1)
{
out = mode_pwmp_hd->pwmp_save->storage.startup_value;
}
else if (fabs(mode_pwmp_hd->control.real_error) <= 0.99)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin);
}
#endif
} }
else if (udevice.value_travel_type == TRAVEL_TYPE_ANGULAR) else if (udevice.value_travel_type == TRAVEL_TYPE_ANGULAR)
{ {
@ -352,7 +370,7 @@ static execute_rsp_hd_t *execute_dac_plan1()
{ {
out = mode_pwmp_hd->pwmp_save->storage.startup_value; out = mode_pwmp_hd->pwmp_save->storage.startup_value;
} }
else if (fabs(mode_pwmp_hd->control.real_error) < 1) else if (fabs(mode_pwmp_hd->control.real_error) <= 0.99)
{ {
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围 out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); out += (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin);
@ -546,6 +564,7 @@ static void pwmp_adjust_hd_rough_position0(uint8_t *state, mode_pwmp_hd_adjust_s
mode_pwmp_hd_adjust->arr_record_1 = mode_pwmp_hd_adjust->arr_last > 1000 ? mode_pwmp_hd_adjust->arr_last * 0.9 : mode_pwmp_hd_adjust->arr_last; mode_pwmp_hd_adjust->arr_record_1 = mode_pwmp_hd_adjust->arr_last > 1000 ? mode_pwmp_hd_adjust->arr_last * 0.9 : mode_pwmp_hd_adjust->arr_last;
/*判断位置反馈磁条是正装还是反装*/ /*判断位置反馈磁条是正装还是反装*/
mode_pwmp_hd_adjust->adc_0_100_flag = mode_pwmp_hd_adjust->adc_record_0 < current_adc ? TRUE : FALSE; mode_pwmp_hd_adjust->adc_0_100_flag = mode_pwmp_hd_adjust->adc_record_0 < current_adc ? TRUE : FALSE;
mode_pwmp_hd_adjust->arr_current = mode_pwmp_hd_adjust->arr_record_1;
} }
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 50; mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 50;
*state = next_state; *state = next_state;
@ -935,7 +954,7 @@ static void pwmp_adjust_hd_accurate_position100(uint8_t *state, mode_pwmp_hd_adj
else else
{ {
/*40mm————3016mm————40*/ /*40mm————3016mm————40*/
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 30; mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 10;
} }
mode_pwmp_hd_adjust->last_adc = mode_pwmp_hd_adjust->psb_adc; mode_pwmp_hd_adjust->last_adc = mode_pwmp_hd_adjust->psb_adc;
mode_pwmp_hd_adjust->arr_last = mode_pwmp_hd_adjust->arr_current; mode_pwmp_hd_adjust->arr_last = mode_pwmp_hd_adjust->arr_current;
@ -1362,8 +1381,9 @@ void pwmp_adjust(uint8_t *state)
pwmp_adjust_hd_initiate_position0(state, PWMP_HD_ADJUST_ROUGH_POSITION100); pwmp_adjust_hd_initiate_position0(state, PWMP_HD_ADJUST_ROUGH_POSITION100);
break; break;
case PWMP_HD_ADJUST_ROUGH_POSITION100: case PWMP_HD_ADJUST_ROUGH_POSITION100:
pwmp_adjust_hd_rough_position100(state, PWMP_HD_ADJUST_BLEEDING_POSITION0); pwmp_adjust_hd_rough_position100(state, PWMP_HD_ADJUST_ACCURATE_POSITION100);
break; break;
/*暂时先跳过PWMP_HD_ADJUST_BLEEDING_POSITION0*/
case PWMP_HD_ADJUST_BLEEDING_POSITION0: case PWMP_HD_ADJUST_BLEEDING_POSITION0:
pwmp_adjust_hd_bleeding_position0(state, PWMP_HD_ADJUST_ACCURATE_POSITION100); pwmp_adjust_hd_bleeding_position0(state, PWMP_HD_ADJUST_ACCURATE_POSITION100);
break; break;
@ -1879,7 +1899,8 @@ void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mod
/*PID初始化*/ /*PID初始化*/
execute_pid_init(EXECUTE_PLAN); execute_pid_init(EXECUTE_PLAN);
/*计数最大值*/ /*计数最大值*/
mode_pwmp_hd->wait_count_max = 100 / ((MODE_DEFAULT_AUTOLOAD + 1) * 0.1); // =10每减一消耗10ms总消耗时间100ms // mode_pwmp_hd->wait_count_max = 100 / ((MODE_DEFAULT_AUTOLOAD + 1) * 0.1); // =10每减一消耗10ms总消耗时间100ms
mode_pwmp_hd->wait_count_max = 2; // 每减一耗时50ms共100ms
/*保存参数*/ /*保存参数*/
mode_pwmp_hd->params_save_cb(); mode_pwmp_hd->params_save_cb();

View File

@ -3,7 +3,7 @@
#include "main.h" #include "main.h"
#define MODE_DEFAULT_AUTOLOAD 99 // 预分频系数 #define MODE_DEFAULT_AUTOLOAD 99 // 预分频系数
#define WAIT_COUNT_MAX 10 // 蓝牙等待最大次数 #define WAIT_COUNT_MAX 2 // 蓝牙等待最大次数
#define VIP_H_EN_HD 1 // 高电压输出开关 #define VIP_H_EN_HD 1 // 高电压输出开关
///////////////////////////////////////*算法整定部分宏定义BEGIN*//////////////////////////////////////// ///////////////////////////////////////*算法整定部分宏定义BEGIN*////////////////////////////////////////

View File

@ -144,7 +144,7 @@ void params_restart(void)
// 执行机构行程类型:直行程/角行程 TRAVEL_TYPE_STRAIGHT/TRAVEL_TYPE_ANGULAR // 执行机构行程类型:直行程/角行程 TRAVEL_TYPE_STRAIGHT/TRAVEL_TYPE_ANGULAR
udevice.value_travel_type = TRAVEL_TYPE_STRAIGHT; udevice.value_travel_type = TRAVEL_TYPE_STRAIGHT;
// 执行机构气动类型:气开/气关 ATO/ATC // 执行机构气动类型:气开/气关 ATO/ATC
udevice.value_action_type = ATC; udevice.value_action_type = ATO;
// 执行机构作用类型:单作用/双作用 // 执行机构作用类型:单作用/双作用
udevice.value_relay_type = VALVE_ACTING_SINGLE; udevice.value_relay_type = VALVE_ACTING_SINGLE;
@ -333,8 +333,12 @@ void params_restart(void)
/*************************************** 校准参数 ***************************************/ /*************************************** 校准参数 ***************************************/
// 回路电流 // 回路电流
/*GPS3000*/
calib_param[CALIBPARA_LOOP].value[0] = 0.611153543; calib_param[CALIBPARA_LOOP].value[0] = 0.611153543;
calib_param[CALIBPARA_LOOP].value[1] = 2.1390624; calib_param[CALIBPARA_LOOP].value[1] = 2.1390624;
/*GPS2000*/
// // 回路电流 // // 回路电流
// calib_param[CALIBPARA_LOOP].value[0] = 0.609059751; // calib_param[CALIBPARA_LOOP].value[0] = 0.609059751;
// calib_param[CALIBPARA_LOOP].value[1] = -0.761328101; // calib_param[CALIBPARA_LOOP].value[1] = -0.761328101;

View File

@ -22,7 +22,7 @@
// 软件版本号 1个字节 // 软件版本号 1个字节
#define SW_VER 0x01 #define SW_VER 0x01
// 固件版本号 1个字节 // 固件版本号 1个字节
#define FW_VER 0x03 #define FW_VER 0x05
#define HART_VERSION HART_PROTOCOL_VERSION_7 ///< HART协议版本号 #define HART_VERSION HART_PROTOCOL_VERSION_7 ///< HART协议版本号
#define CPU_VREF 2.5f ///< CPU基准电压 #define CPU_VREF 2.5f ///< CPU基准电压