diff --git a/MDK-ARM/controller-v2.uvoptx b/MDK-ARM/controller-v2.uvoptx
index 0a28dde..fb8fbe7 100644
--- a/MDK-ARM/controller-v2.uvoptx
+++ b/MDK-ARM/controller-v2.uvoptx
@@ -245,6 +245,11 @@
1
udevice,0x0A
+
+ 17
+ 1
+ mode_pwmp_hd->process_state,0x0A
+
@@ -1505,14 +1510,6 @@
-
- ::CMSIS
- 0
- 0
- 0
- 1
-
-
Middlewares/Library/DSP Library/DSP Library
0
@@ -1520,7 +1517,7 @@
0
0
- 17
+ 16
91
4
0
@@ -1533,4 +1530,12 @@
+
+ ::CMSIS
+ 0
+ 0
+ 0
+ 1
+
+
diff --git a/MDK-ARM/controller-v2.uvprojx b/MDK-ARM/controller-v2.uvprojx
index e6b7aa4..0d8ec8e 100644
--- a/MDK-ARM/controller-v2.uvprojx
+++ b/MDK-ARM/controller-v2.uvprojx
@@ -1278,9 +1278,6 @@
-
- ::CMSIS
-
Middlewares/Library/DSP Library/DSP Library
@@ -1379,6 +1376,9 @@
+
+ ::CMSIS
+
diff --git a/User/application/mode/mode_pwmp_hd.c b/User/application/mode/mode_pwmp_hd.c
index 032a3d5..f35b6cd 100644
--- a/User/application/mode/mode_pwmp_hd.c
+++ b/User/application/mode/mode_pwmp_hd.c
@@ -134,7 +134,7 @@ static void pwmp_control_update(filter_e type)
if (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_ADJUST)
{
- p->ctrl_target = p->ctrl_target;
+ p->ctrl_target = mode_pwmp_hd_adjust->ctrl_target;
}
else if (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_TEST)
{
@@ -165,6 +165,9 @@ static void pwmp_control_update(filter_e type)
mode_pwmp_hd_test->small_trip_current_adc = p->small_trip_current_adc;
mode_pwmp_hd_test->ctrl_feedback = p->ctrl_feedback;
mode_pwmp_hd_test->real_error = p->real_error;
+ /*整定模式赋值*/
+ mode_pwmp_hd_adjust->ctrl_feedback = p->ctrl_feedback;
+ mode_pwmp_hd_adjust->real_error = p->real_error;
}
/*PID参数获取*/
@@ -227,6 +230,72 @@ void mode_pwmp_hd_stop(mode_pwmp_hd_t *handle)
osel_memset((uint8_t *)&handle->control, 0, sizeof(mode_pwmp_hd_control_t));
}
+// TODO:需要对进气和排气过程进行判定
+/*将10-20、20-30、30-40...等区间进行局部线性化,并将输入的目标变量进行映射处理*/
+static float32_t convert_target_to_controlvalue()
+{ // FIXME:将函数补足
+ uint16_t i = 0;
+ float32 tmp = 0;
+ static float32 control_value = 0; // 此变量要传回,故定义为static类型。
+
+ i = (uint16_t)(fabs(mode_pwmp_hd->control.ctrl_target) / 10);
+
+ /*此处判断为解决处于10、20、30等整十处的特殊情况*/
+ if (((uint16_t)fabs(mode_pwmp_hd->control.ctrl_target) % 10 == 0) && (fabs(mode_pwmp_hd->control.ctrl_target) >= 10))
+ {
+ if (mode_pwmp_hd->action == INFLATE)
+ {
+ control_value = mode_pwmp_hd->valvepos.valvepos_in[i - 1];
+ }
+ else if (mode_pwmp_hd->action == DEFLATE)
+ {
+ control_value = mode_pwmp_hd->valvepos.valvepos_de[i - 1];
+ }
+ }
+ else
+ { /*处于区间内的情况*/
+ if (mode_pwmp_hd->action == INFLATE)
+ {
+ tmp = ((mode_pwmp_hd->control.ctrl_target - (i * 10)) / (10));
+ control_value = tmp * mode_pwmp_hd->valvepos.valvepos_in_k[i - 1] + mode_pwmp_hd->valvepos.valvepos_in_b[i - 1];
+ }
+ else if (mode_pwmp_hd->action == DEFLATE)
+ {
+ tmp = ((mode_pwmp_hd->control.ctrl_target - (i * 10)) / (10));
+ control_value = tmp * mode_pwmp_hd->valvepos.valvepos_de_k[i - 1] + mode_pwmp_hd->valvepos.valvepos_de_b[i - 1];
+ }
+ }
+
+ return control_value;
+}
+
+/*判断运动状态(充气/排气)*/
+static void inflate_or_deflate()
+{
+ if (udevice.value_action_type == ATO)
+ {
+ if (mode_pwmp_hd->control.real_error < 0)
+ {
+ mode_pwmp_hd->action = DEFLATE;
+ }
+ else if (mode_pwmp_hd->control.real_error > 0)
+ {
+ mode_pwmp_hd->action = INFLATE;
+ }
+ }
+ else if (udevice.value_action_type == ATC)
+ {
+ if (mode_pwmp_hd->control.real_error < 0)
+ {
+ mode_pwmp_hd->action = INFLATE;
+ }
+ else if (mode_pwmp_hd->control.real_error > 0)
+ {
+ mode_pwmp_hd->action = DEFLATE;
+ }
+ }
+}
+
/**
* @brief 算法方案初始化
* @param {execute_plan_hd_e} plan
@@ -286,6 +355,11 @@ static execute_rsp_hd_t *execute_dac_plan1()
Control_diff = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin - mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
float32 out = 0.0;
+ /*判断此时的充排气状态*/
+ inflate_or_deflate();
+ /*获取目标值对应的控制值大小*/
+ mode_pwmp_hd->valvepos_stable = convert_target_to_controlvalue();
+
// 杭电:输出限幅的参数设置
_pid.pid_u.hd.set_out_prm_position(&_pid.pid_u.hd, 100, 0);
out = _pid.pid_u.hd.pid_position(&_pid.pid_u.hd, mode_pwmp_hd->control.real_error);
@@ -299,20 +373,45 @@ static execute_rsp_hd_t *execute_dac_plan1()
/*二阶段加权系数*/
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输出结果进行归一化处理
- out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围
- out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first;
- }
- else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1)
- { // 对PID输出结果进行归一化处理
- out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围
- out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second;
+ if (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_ADJUST)
+ {
+ if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
+ { // 对PID输出结果进行归一化处理
+ out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围
+ out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first;
+ }
+ else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1)
+ { // 对PID输出结果进行归一化处理
+ out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围
+ out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second;
+ }
+ else
+ {
+ 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
{
- 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;
+ if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
+ { // 对PID输出结果进行归一化处理
+ out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围
+ out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first;
+ }
+ else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1)
+ { // 对PID输出结果进行归一化处理
+ out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围
+ out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second;
+ }
+ else if (fabs(mode_pwmp_hd->control.real_error) < 1 && fabs(mode_pwmp_hd->control.real_error) > 0.7)
+ {
+ 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
+ {
+ out = mode_pwmp_hd->valvepos_stable;
+ }
}
#else
float32 index = fabs(1 - exp(-(pow(mode_pwmp_hd->control.real_error, 2) - 1)));
@@ -372,8 +471,15 @@ static execute_rsp_hd_t *execute_dac_plan1()
}
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);
+ if (mode_pwmp_hd_adjust->adjust_state == PWMP_HD_ADJUST_STEP_BY_10_TO_100 || mode_pwmp_hd_adjust->adjust_state == PWMP_HD_ADJUST_STEP_BY_10_TO_0)
+ {
+ 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
+ {
+ out = mode_pwmp_hd->valvepos_stable;
+ }
}
#endif
}
@@ -383,6 +489,7 @@ static execute_rsp_hd_t *execute_dac_plan1()
return &rsp;
}
+
///
///
///
@@ -561,7 +668,7 @@ static void pwmp_adjust_hd_rough_position0(uint8_t *state, mode_pwmp_hd_adjust_s
else
{
/*得到一个粗略的,小于启动量的值*/
- 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.97 : 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;
@@ -954,7 +1061,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 * 10;
+ mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 1; // 0.1秒钟加一次
}
mode_pwmp_hd_adjust->last_adc = mode_pwmp_hd_adjust->psb_adc;
mode_pwmp_hd_adjust->arr_last = mode_pwmp_hd_adjust->arr_current;
@@ -1345,8 +1452,6 @@ static void pwmp_adjust_hd_pid_calculate(uint8_t *state, mode_pwmp_hd_adjust_sta
*state = next_state; // 将状态切换
}
-/**/
-
/*参数保存模式*/
static void pwmp_adjust_hd_save(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
{
@@ -1364,6 +1469,148 @@ static void pwmp_adjust_hd_save(uint8_t *state, mode_pwmp_hd_adjust_state_e next
mode_pwmp_hd->params_save_cb();
}
+// XXX:将0、10、20...90、100处的阀位反馈值记录下来,做小区间的线性化。
+/*以每10%阀位为一步进,由0阀位增加到100阀位*/
+static void pwmp_hd_adjust_step_by_10_to_100(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
+{
+ execute_rsp_hd_t *execute_res;
+ if (!FSM_IS_WAIT(*state))
+ {
+
+ mode_pwmp_hd_adjust->ctrl_target = 10;
+ mode_pwmp_hd_adjust->adjust_state = (mode_pwmp_hd_adjust_state_e)*state;
+ FSM_WAIT(mode_pwmp_hd_adjust->adjust_state); // 等放气完毕就可以切入到else里面了
+ *state = PWMP_HD_ADJUST_BLEEDING;
+ }
+ else
+ {
+ static unsigned int i = 0;
+ /*将模式调整为控制模式*/
+ pwmp_control_update(FILTER_MEDIAN);
+ if (rt_data.loop_current >= 4.0)
+ {
+ if (mode_pwmp_hd_adjust->ctrl_target == 0)
+ {
+ pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8);
+ }
+ else if (mode_pwmp_hd_adjust->ctrl_target == 100)
+ {
+ pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.5);
+ }
+ else
+ {
+ execute_res = execute_dac(EXECUTE_PLAN); // PID计算结果经过执行器处理
+ if (execute_res->code == EXECUTE_HD_OUT) // 执行DAC输出
+ {
+ pdctrl_out(execute_res->dac);
+ }
+ }
+ }
+ /*当误差大于0.5%时重置等待时间*/
+ if (fabs(mode_pwmp_hd_adjust->real_error) > 1)
+ {
+ // 此处延时三秒钟
+ mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 30;
+ }
+ else
+ {
+ mode_pwmp_hd_adjust->wait_count--;
+ if (mode_pwmp_hd_adjust->wait_count == 0)
+ {
+ if ((unsigned int)mode_pwmp_hd_adjust->ctrl_target < 100)
+ {
+ mode_pwmp_hd_adjust->valvepos.valvepos_in[i] = execute_res->dac;
+ i++;
+ }
+ else
+ {
+ *state = next_state;
+ }
+ mode_pwmp_hd_adjust->ctrl_target += 10;
+ }
+ }
+ }
+}
+
+/*排气值整定*/
+static void pwmp_hd_adjust_step_by_10_to_0(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
+{
+ execute_rsp_hd_t *execute_res;
+ if (!FSM_IS_WAIT(*state))
+ {
+ mode_pwmp_hd_adjust->ctrl_target = 90;
+ mode_pwmp_hd_adjust->adjust_state = (mode_pwmp_hd_adjust_state_e)*state;
+ FSM_WAIT(*state); // 设置等待状态
+ }
+ else
+ {
+ static unsigned int i = 0;
+ /*将模式调整为控制模式*/
+ pwmp_control_update(FILTER_MEDIAN);
+ if (rt_data.loop_current >= 4.0)
+ {
+ if (mode_pwmp_hd_adjust->ctrl_target == 0)
+ {
+ pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8);
+ }
+ else if (mode_pwmp_hd_adjust->ctrl_target == 100)
+ {
+ pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.5);
+ }
+ else
+ {
+ execute_res = execute_dac(EXECUTE_PLAN); // PID计算结果经过执行器处理
+ if (execute_res->code == EXECUTE_HD_OUT) // 执行DAC输出
+ {
+ pdctrl_out(execute_res->dac);
+ }
+ }
+ }
+ /*当误差大于0.5%时重置等待时间*/
+ if (fabs(mode_pwmp_hd_adjust->real_error) > 1)
+ {
+ // 此处延时三秒钟
+ mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 30;
+ }
+ else
+ {
+ mode_pwmp_hd_adjust->wait_count--;
+ if (mode_pwmp_hd_adjust->wait_count == 0)
+ {
+ if ((unsigned int)mode_pwmp_hd_adjust->ctrl_target > 0)
+ {
+ mode_pwmp_hd_adjust->valvepos.valvepos_de[i] = execute_res->dac;
+ i++;
+ }
+ else
+ {
+ *state = next_state;
+ }
+ mode_pwmp_hd_adjust->ctrl_target -= 10;
+ }
+ }
+ }
+}
+
+/*将整定出的参数进行保存*/
+static void pwmp_hd_adjust_valvepos_calculate(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
+{
+ *state = next_state;
+ for (unsigned int i = 0; i < 9; i++)
+ {
+ mode_pwmp_hd->valvepos.valvepos_in[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i];
+ mode_pwmp_hd->valvepos.valvepos_de[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
+ }
+ for (unsigned int i = 0; i < 8; i++)
+ {
+ mode_pwmp_hd->valvepos.valvepos_in_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_in[i];
+ mode_pwmp_hd->valvepos.valvepos_de_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
+ mode_pwmp_hd->valvepos.valvepos_in_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i];
+ mode_pwmp_hd->valvepos.valvepos_de_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
+ }
+ mode_pwmp_hd->params_save_cb();
+}
+
//////////////////////////////////*状态机模式END*//////////////////////////////////////////////////////
//////////////////////////////*整定程序入口BEGIN*//////////////////////////////////////////////////////
@@ -1406,7 +1653,17 @@ void pwmp_adjust(uint8_t *state)
pwmp_adjust_hd_pid_calculate(state, PWMP_HD_ADJUST_SAVE);
break;
case PWMP_HD_ADJUST_SAVE:
- pwmp_adjust_hd_save(state, PWMP_HD_ADJUST_STOP);
+ pwmp_adjust_hd_save(state, PWMP_HD_ADJUST_STEP_BY_10_TO_100);
+ break;
+ /*GPS2000中特有的整定流程,整定得到充排气过程中每百分之10稳定阀位的控制值,并将控制值每10%区间做线性处理*/
+ case PWMP_HD_ADJUST_STEP_BY_10_TO_100:
+ pwmp_hd_adjust_step_by_10_to_100(state, PWMP_HD_ADJUST_STEP_BY_10_TO_0);
+ break;
+ case PWMP_HD_ADJUST_STEP_BY_10_TO_0:
+ pwmp_hd_adjust_step_by_10_to_0(state, PWMP_HD_ADJUST_VALVEPOS_CALCULATE);
+ break;
+ case PWMP_HD_ADJUST_VALVEPOS_CALCULATE:
+ pwmp_hd_adjust_valvepos_calculate(state, PWMP_HD_ADJUST_STOP);
break;
case PWMP_HD_ADJUST_BLEEDING:
pwmp_adjust_hd_bleeding(state);
diff --git a/User/application/mode/mode_pwmp_hd.h b/User/application/mode/mode_pwmp_hd.h
index 596cbc5..f829f8e 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 2 // 蓝牙等待最大次数
+#define WAIT_COUNT_MAX 2 // 蓝牙等待最大次数
#define VIP_H_EN_HD 1 // 高电压输出开关
///////////////////////////////////////*算法整定部分宏定义BEGIN*////////////////////////////////////////
@@ -28,6 +28,12 @@ typedef enum
PWMP_HD_PROCESS_STOP,
} mode_pwmp_hd_process_state_e; // 处理状态
+typedef enum
+{
+ INFLATE=0,
+ DEFLATE,
+}mode_pwmp_hd_action_e; // 运动状态(充气/排气)
+
/*需要存储的变量*/
typedef struct
{
@@ -83,6 +89,22 @@ typedef union
typedef struct
{
+ /*充气过程:各百分之十阀位的控制信号值*/
+ uint16_t valvepos_in[9]; // 充气过程中9个不同阀位的控制信号值
+ /*排气过程:各百分之十阀位的控制信号值*/
+ uint16_t valvepos_de[9]; // 排气过程中9个不同阀位的控制信号值
+
+ float32_t valvepos_in_k[8];
+ float32_t valvepos_de_k[8];
+ float32_t valvepos_in_b[8];
+ float32_t valvepos_de_b[8];
+} mode_pwmp_hd_valvepos_t;
+
+typedef struct
+{
+ mode_pwmp_hd_valvepos_t valvepos; // 各稳定阀位控制信号值
+ mode_pwmp_hd_action_e action; // 运动状态(充气/排气)
+
uint8_t lcd_adjust_state; // LCD自整定流程状态
float32 duty_percent; // 占空比
float32 current_electric; // 电流
@@ -96,6 +118,8 @@ typedef struct
uint16_t current_adc; // 当前位置反馈的AD值
uint32_t count; // 计数
+ float32 valvepos_stable; // 10%-90%阀位之间的稳定控制值
+
mode_pwmp_hd_control_t control;
mode_pwmp_hd_filter_t filter;
mode_pwmp_hd_params_u *pwmp_save;
@@ -162,6 +186,9 @@ typedef enum
PWMP_HD_ADJUST_BLEEDING, // 在整定状态中放气
PWMP_HD_ADJUST_BLEEDING_POSITION0, // 放气位置0
PWMP_HD_ADJUST_INITIATE, // 启动值
+ PWMP_HD_ADJUST_STEP_BY_10_TO_100, // 由0-100找到控制值
+ PWMP_HD_ADJUST_STEP_BY_10_TO_0, // 由100-0找到控制值
+ PWMP_HD_ADJUST_VALVEPOS_CALCULATE, // 对各区间阀位控制值进行线性化处理
PWMP_HD_ADJUST_STOP,
PWMP_HD_ADJUST_FAIL, // 整定失败
PWMP_HD_ADJUST_TEST,
@@ -181,9 +208,18 @@ typedef enum
PWMP_HD_ADJUST_RESULT_FAIL,
} mode_pwmp_hd_adjust_result_e; // 整定结果
+typedef struct
+{
+ /*充气过程:各百分之十阀位的控制信号值*/
+ uint16_t valvepos_in[9]; // 充气过程中9个不同阀位的控制信号值
+ /*排气过程:各百分之十阀位的控制信号值*/
+ uint16_t valvepos_de[9]; // 排气过程中9个不同阀位的控制信号值
+} mode_pwmp_hd_adjust_valvepos_t;
+
typedef struct
{
mode_pwmp_hd_adjust_state_e adjust_state;
+ mode_pwmp_hd_adjust_valvepos_t valvepos; // 记录处于每10%阀位的控制信号值
volatile uint16_t wait_count;
volatile uint16_t psb_adc;
@@ -216,6 +252,10 @@ typedef struct
uint32_t current_0; // 0位置电流大小
uint32_t current_100; // 100位置电流大小
+ float32 ctrl_target; // 控制目标值
+ float32 real_error; // 实际误差
+ float32 ctrl_feedback;// 反馈值
+
/*输出值*/
uint16_t arr_default; // 默认计数器(推动计数值)
volatile uint16_t arr_current; // 当前推动阀门的计数器