自整定程序新增各点位稳定信号(可正常运行)
This commit is contained in:
parent
a6fe9524cd
commit
f60f444fe7
|
@ -245,6 +245,11 @@
|
|||
<WinNumber>1</WinNumber>
|
||||
<ItemText>udevice,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>17</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>mode_pwmp_hd->process_state,0x0A</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<MemoryWindow1>
|
||||
<Mm>
|
||||
|
@ -1505,14 +1510,6 @@
|
|||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>1</RteFlg>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>Middlewares/Library/DSP Library/DSP Library</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
|
@ -1520,7 +1517,7 @@
|
|||
<cbSel>0</cbSel>
|
||||
<RteFlg>0</RteFlg>
|
||||
<File>
|
||||
<GroupNumber>17</GroupNumber>
|
||||
<GroupNumber>16</GroupNumber>
|
||||
<FileNumber>91</FileNumber>
|
||||
<FileType>4</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
|
@ -1533,4 +1530,12 @@
|
|||
</File>
|
||||
</Group>
|
||||
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<cbSel>0</cbSel>
|
||||
<RteFlg>1</RteFlg>
|
||||
</Group>
|
||||
|
||||
</ProjectOpt>
|
||||
|
|
|
@ -1278,9 +1278,6 @@
|
|||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>Middlewares/Library/DSP Library/DSP Library</GroupName>
|
||||
<GroupOption>
|
||||
|
@ -1379,6 +1376,9 @@
|
|||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
<Group>
|
||||
<GroupName>::CMSIS</GroupName>
|
||||
</Group>
|
||||
</Groups>
|
||||
</Target>
|
||||
</Targets>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
@ -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);
|
||||
|
|
|
@ -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; // 当前推动阀门的计数器
|
||||
|
|
Reference in New Issue