From a6fe9524cdc09d2d9da9daa5a42ee379fa952d1d Mon Sep 17 00:00:00 2001 From: gaoyuhang Date: Tue, 18 Jun 2024 08:48:58 +0800 Subject: [PATCH] =?UTF-8?q?GPS2000=E6=B5=8B=E8=AF=95=EF=BC=88=E6=9C=AA?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=B4=E5=AE=9A=E7=AE=97=E6=B3=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MDK-ARM/controller-v2.uvoptx | 9 +++++-- User/application/mode/mode.c | 4 +-- User/application/mode/mode_pwmp_hd.c | 37 ++++++++++++++++++++++------ User/application/mode/mode_pwmp_hd.h | 2 +- User/application/src/params.c | 6 ++++- User/entity.h | 2 +- 6 files changed, 45 insertions(+), 15 deletions(-) diff --git a/MDK-ARM/controller-v2.uvoptx b/MDK-ARM/controller-v2.uvoptx index 707886d..0a28dde 100644 --- a/MDK-ARM/controller-v2.uvoptx +++ b/MDK-ARM/controller-v2.uvoptx @@ -125,7 +125,7 @@ 0 JL2CM3 - -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) + -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) 0 @@ -145,7 +145,7 @@ 0 ST-LINKIII-KEIL_SWO - -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) + -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) 0 @@ -240,6 +240,11 @@ 1 adc_raw,0x0A + + 16 + 1 + udevice,0x0A + diff --git a/User/application/mode/mode.c b/User/application/mode/mode.c index 4617ffa..0a323ba 100644 --- a/User/application/mode/mode.c +++ b/User/application/mode/mode.c @@ -294,8 +294,8 @@ void mode_init(void) pdctrl_init(PDCTRL_PWMP); break; case MODE_FREQUENCY_DOMAIN_CONTROL_ALGORITHM: - pdctrl_init(PDCTRL_PWMP); - //pdctrl_init(PDCTRL_DAC); + //pdctrl_init(PDCTRL_PWMP); + pdctrl_init(PDCTRL_DAC); mode_pwmp_hd_init(&mode_get()->interface_req, mode_get()->positioner_model, &mode_params.mode_pwmp_hd_params, mode_params_save_cb); break; diff --git a/User/application/mode/mode_pwmp_hd.c b/User/application/mode/mode_pwmp_hd.c index 41d0b59..032a3d5 100644 --- a/User/application/mode/mode_pwmp_hd.c +++ b/User/application/mode/mode_pwmp_hd.c @@ -183,7 +183,7 @@ static float32 get_pwmp_hd_control_kp(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) @@ -292,11 +292,12 @@ static execute_rsp_hd_t *execute_dac_plan1() out = out / 100; if (udevice.value_travel_type == TRAVEL_TYPE_STRAIGHT) { +#if 1 /* 一阶段加权系数*/ - static float32 index_min_first = 0.5; - static float32 index_max_first = 0.5; + static float32 index_min_first = 0.3; + 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; if (fabs(mode_pwmp_hd->control.real_error) >= 5.7) { // 对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_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) { @@ -352,7 +370,7 @@ static execute_rsp_hd_t *execute_dac_plan1() { 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_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->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; *state = next_state; @@ -935,7 +954,7 @@ static void pwmp_adjust_hd_accurate_position100(uint8_t *state, mode_pwmp_hd_adj else { /*40mm————30;16mm————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->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); break; 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; + /*暂时先跳过PWMP_HD_ADJUST_BLEEDING_POSITION0*/ case PWMP_HD_ADJUST_BLEEDING_POSITION0: pwmp_adjust_hd_bleeding_position0(state, PWMP_HD_ADJUST_ACCURATE_POSITION100); break; @@ -1879,7 +1899,8 @@ void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mod /*PID初始化*/ 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(); diff --git a/User/application/mode/mode_pwmp_hd.h b/User/application/mode/mode_pwmp_hd.h index a00485a..596cbc5 100644 --- a/User/application/mode/mode_pwmp_hd.h +++ b/User/application/mode/mode_pwmp_hd.h @@ -3,7 +3,7 @@ #include "main.h" #define MODE_DEFAULT_AUTOLOAD 99 // 预分频系数 -#define WAIT_COUNT_MAX 10 // 蓝牙等待最大次数 +#define WAIT_COUNT_MAX 2 // 蓝牙等待最大次数 #define VIP_H_EN_HD 1 // 高电压输出开关 ///////////////////////////////////////*算法整定部分宏定义BEGIN*//////////////////////////////////////// diff --git a/User/application/src/params.c b/User/application/src/params.c index 50f9fcc..8299162 100644 --- a/User/application/src/params.c +++ b/User/application/src/params.c @@ -144,7 +144,7 @@ void params_restart(void) // 执行机构行程类型:直行程/角行程 TRAVEL_TYPE_STRAIGHT/TRAVEL_TYPE_ANGULAR udevice.value_travel_type = TRAVEL_TYPE_STRAIGHT; // 执行机构气动类型:气开/气关 ATO/ATC - udevice.value_action_type = ATC; + udevice.value_action_type = ATO; // 执行机构作用类型:单作用/双作用 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[1] = 2.1390624; + + /*GPS2000*/ + // // 回路电流 // calib_param[CALIBPARA_LOOP].value[0] = 0.609059751; // calib_param[CALIBPARA_LOOP].value[1] = -0.761328101; diff --git a/User/entity.h b/User/entity.h index 3be0491..45ab396 100644 --- a/User/entity.h +++ b/User/entity.h @@ -22,7 +22,7 @@ // 软件版本号 1个字节 #define SW_VER 0x01 // 固件版本号 1个字节 -#define FW_VER 0x03 +#define FW_VER 0x05 #define HART_VERSION HART_PROTOCOL_VERSION_7 ///< HART协议版本号 #define CPU_VREF 2.5f ///< CPU基准电压