Была путаница с углом альфа.
Он пидом считается наоборот. 0 - ничего не подает - 1 полностью открываем
This commit is contained in:
parent
b887114510
commit
edac877616
@ -38,7 +38,8 @@ const int inOffsets[IN_PORT_NUMB] = {
|
|||||||
const int outLengths[OUT_PORT_NUMB] = {
|
const int outLengths[OUT_PORT_NUMB] = {
|
||||||
THYR_PORT_1_WIDTH,
|
THYR_PORT_1_WIDTH,
|
||||||
PM_PORT_2_WIDTH,
|
PM_PORT_2_WIDTH,
|
||||||
OUT_PORT_3_WIDTH
|
ANGLE_PORT_3_WIDTH,
|
||||||
|
OUT_PORT_4_WIDTH
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Таблица смещений в выходном массиве OUT
|
* @brief Таблица смещений в выходном массиве OUT
|
||||||
@ -46,7 +47,8 @@ const int outLengths[OUT_PORT_NUMB] = {
|
|||||||
const int outOffsets[OUT_PORT_NUMB] = {
|
const int outOffsets[OUT_PORT_NUMB] = {
|
||||||
OFFSET_OUT_ARRAY_1,
|
OFFSET_OUT_ARRAY_1,
|
||||||
OFFSET_OUT_ARRAY_2,
|
OFFSET_OUT_ARRAY_2,
|
||||||
OFFSET_OUT_ARRAY_3
|
OFFSET_OUT_ARRAY_3,
|
||||||
|
OFFSET_OUT_ARRAY_4
|
||||||
};
|
};
|
||||||
|
|
||||||
// INPUT/OUTPUTS AUTO-PARAMS END
|
// INPUT/OUTPUTS AUTO-PARAMS END
|
||||||
|
|||||||
@ -57,10 +57,11 @@
|
|||||||
#define ADC_PORT_1_WIDTH 6
|
#define ADC_PORT_1_WIDTH 6
|
||||||
#define IN_PORT_2_WIDTH 16
|
#define IN_PORT_2_WIDTH 16
|
||||||
|
|
||||||
#define OUT_PORT_NUMB 3
|
#define OUT_PORT_NUMB 4
|
||||||
#define THYR_PORT_1_WIDTH 6
|
#define THYR_PORT_1_WIDTH 6
|
||||||
#define PM_PORT_2_WIDTH 32
|
#define PM_PORT_2_WIDTH 32
|
||||||
#define OUT_PORT_3_WIDTH 16
|
#define ANGLE_PORT_3_WIDTH 16
|
||||||
|
#define OUT_PORT_4_WIDTH 16
|
||||||
|
|
||||||
// INPUT/OUTPUTS PARAMS END
|
// INPUT/OUTPUTS PARAMS END
|
||||||
/** WRAPPER_CONF
|
/** WRAPPER_CONF
|
||||||
@ -99,12 +100,13 @@
|
|||||||
#define OFFSET_IN_ARRAY_2 (OFFSET_IN_ARRAY_1 + ADC_PORT_1_WIDTH)
|
#define OFFSET_IN_ARRAY_2 (OFFSET_IN_ARRAY_1 + ADC_PORT_1_WIDTH)
|
||||||
|
|
||||||
/// === Полный размер буфера ===
|
/// === Полный размер буфера ===
|
||||||
#define TOTAL_OUT_SIZE (THYR_PORT_1_WIDTH + PM_PORT_2_WIDTH + OUT_PORT_3_WIDTH)
|
#define TOTAL_OUT_SIZE (THYR_PORT_1_WIDTH + PM_PORT_2_WIDTH + ANGLE_PORT_3_WIDTH + OUT_PORT_4_WIDTH)
|
||||||
|
|
||||||
/// === Смещения массивов (внутри общего буфера) ===
|
/// === Смещения массивов (внутри общего буфера) ===
|
||||||
#define OFFSET_OUT_ARRAY_1 0
|
#define OFFSET_OUT_ARRAY_1 0
|
||||||
#define OFFSET_OUT_ARRAY_2 (OFFSET_OUT_ARRAY_1 + THYR_PORT_1_WIDTH)
|
#define OFFSET_OUT_ARRAY_2 (OFFSET_OUT_ARRAY_1 + THYR_PORT_1_WIDTH)
|
||||||
#define OFFSET_OUT_ARRAY_3 (OFFSET_OUT_ARRAY_2 + PM_PORT_2_WIDTH)
|
#define OFFSET_OUT_ARRAY_3 (OFFSET_OUT_ARRAY_2 + PM_PORT_2_WIDTH)
|
||||||
|
#define OFFSET_OUT_ARRAY_4 (OFFSET_OUT_ARRAY_3 + ANGLE_PORT_3_WIDTH)
|
||||||
|
|
||||||
// INPUT/OUTPUTS AUTO-PARAMS END
|
// INPUT/OUTPUTS AUTO-PARAMS END
|
||||||
|
|
||||||
|
|||||||
@ -59,8 +59,24 @@ void Write_PowerMonitor(real_T* Buffer, int ind_port)
|
|||||||
WriteOutputArray(upp.pm.measured.final.I[2], ind_port, nn++);
|
WriteOutputArray(upp.pm.measured.final.I[2], ind_port, nn++);
|
||||||
WriteOutputArray(upp.pm.measured.final.Fmean, ind_port, nn++);
|
WriteOutputArray(upp.pm.measured.final.Fmean, ind_port, nn++);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Write_AngleControl(real_T* Buffer, int ind_port)
|
||||||
|
{
|
||||||
|
int nn = 0;
|
||||||
|
|
||||||
|
WriteOutputArray(iref_dbg, ind_port, nn++);
|
||||||
|
WriteOutputArray(upp.pm.measured.final.Iamp, ind_port, nn++);
|
||||||
|
WriteOutputArray(upp.hangle.alpha, ind_port, nn++);
|
||||||
|
|
||||||
|
|
||||||
|
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR1) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
||||||
|
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR2) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
||||||
|
WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR3) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Функция для записи входов в приложение МК
|
* @brief Функция для записи входов в приложение МК
|
||||||
* @param u - массив входных значений
|
* @param u - массив входных значений
|
||||||
@ -96,17 +112,11 @@ void app_writeOutputBuffer(real_T* Buffer) {
|
|||||||
|
|
||||||
Write_PowerMonitor(Buffer, 1);
|
Write_PowerMonitor(Buffer, 1);
|
||||||
|
|
||||||
|
Write_AngleControl(Buffer, 2);
|
||||||
|
|
||||||
int nn = 0;
|
int nn = 0;
|
||||||
WriteOutputArray(iref_dbg, 2, nn++);
|
|
||||||
WriteOutputArray(upp.pm.measured.final.Iamp, 2, nn++);
|
|
||||||
WriteOutputArray(upp.hangle.alpha, 2, nn++);
|
|
||||||
//WriteOutputArray(upp.hangle.htim->Instance->CNT, 2, nn++);
|
//WriteOutputArray(upp.hangle.htim->Instance->CNT, 2, nn++);
|
||||||
|
|
||||||
//WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR1) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
|
||||||
//WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR2) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
|
||||||
//WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR3) - upp.hangle.htim->Instance->CNT, 2, nn++);
|
|
||||||
|
|
||||||
//WriteOutputArray(dbg[0], 2, nn++);
|
//WriteOutputArray(dbg[0], 2, nn++);
|
||||||
//WriteOutputArray(dbg[1], 2, nn++);
|
//WriteOutputArray(dbg[1], 2, nn++);
|
||||||
//WriteOutputArray(dbg[2], 2, nn++);
|
//WriteOutputArray(dbg[2], 2, nn++);
|
||||||
|
|||||||
Binary file not shown.
@ -59,13 +59,16 @@ void Angle_PID(Angle_Handle_t *hangle, float setpoint, float measurement)
|
|||||||
if(assert_upp(hangle))
|
if(assert_upp(hangle))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
/* Ошибка регулирования = уставка - измеренное */
|
||||||
float err = setpoint - measurement;
|
float err = setpoint - measurement;
|
||||||
|
|
||||||
/* Вычисляем выход PID */
|
/* ПИД регулирование */
|
||||||
float angle = arm_pid_f32(&hangle->pid, err); // делта подаём как ошибку
|
float reverse_angle = arm_pid_f32(&hangle->pid, err); // 0 - открыть максимально поздно, 1 - открыть макситмально рано
|
||||||
|
|
||||||
/* Ограничиваем диапазон и сохраняем в alpha */
|
/* Ограничиваем диапазон и сохраняем в alpha */
|
||||||
if(angle > hangle->Config.AngleMax) angle = hangle->Config.AngleMax;
|
float angle = hangle->Config.AngleMax - reverse_angle;
|
||||||
|
if (angle > hangle->Config.AngleMax) angle = hangle->Config.AngleMax;
|
||||||
if(angle < hangle->Config.AngleMin) angle = hangle->Config.AngleMin;
|
if(angle < hangle->Config.AngleMin) angle = hangle->Config.AngleMin;
|
||||||
|
|
||||||
Angle_SetAngle(hangle, angle);
|
Angle_SetAngle(hangle, angle);
|
||||||
|
|||||||
@ -129,7 +129,7 @@ void UPP_Control_InternalParams(void)
|
|||||||
// Обновление регулятора угла открытия
|
// Обновление регулятора угла открытия
|
||||||
if(alpha_update)
|
if(alpha_update)
|
||||||
{
|
{
|
||||||
Angle_SetRange(&upp.hangle, angle_max, angle_max);
|
Angle_SetRange(&upp.hangle, angle_min, angle_max);
|
||||||
Angle_PID_Init(&upp.hangle, angle_pid_kp, angle_pid_ki, angle_pid_kd);
|
Angle_PID_Init(&upp.hangle, angle_pid_kp, angle_pid_ki, angle_pid_kd);
|
||||||
}
|
}
|
||||||
// Обновление АЦП конфигов
|
// Обновление АЦП конфигов
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user