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基准电压