Была путаница с углом альфа.

Он пидом считается наоборот. 0 -  ничего не подает - 1 полностью открываем
This commit is contained in:
Razvalyaev 2025-11-18 00:49:16 +03:00
parent b887114510
commit edac877616
6 changed files with 33 additions and 16 deletions

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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);

View File

@ -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);
} }
// Обновление АЦП конфигов // Обновление АЦП конфигов