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

Он пидом считается наоборот. 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] = {
THYR_PORT_1_WIDTH,
PM_PORT_2_WIDTH,
OUT_PORT_3_WIDTH
ANGLE_PORT_3_WIDTH,
OUT_PORT_4_WIDTH
};
/**
* @brief Таблица смещений в выходном массиве OUT
@ -46,7 +47,8 @@ const int outLengths[OUT_PORT_NUMB] = {
const int outOffsets[OUT_PORT_NUMB] = {
OFFSET_OUT_ARRAY_1,
OFFSET_OUT_ARRAY_2,
OFFSET_OUT_ARRAY_3
OFFSET_OUT_ARRAY_3,
OFFSET_OUT_ARRAY_4
};
// INPUT/OUTPUTS AUTO-PARAMS END

View File

@ -57,10 +57,11 @@
#define ADC_PORT_1_WIDTH 6
#define IN_PORT_2_WIDTH 16
#define OUT_PORT_NUMB 3
#define OUT_PORT_NUMB 4
#define THYR_PORT_1_WIDTH 6
#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
/** WRAPPER_CONF
@ -99,12 +100,13 @@
#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_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_4 (OFFSET_OUT_ARRAY_3 + ANGLE_PORT_3_WIDTH)
// 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.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 Функция для записи входов в приложение МК
* @param u - массив входных значений
@ -96,17 +112,11 @@ void app_writeOutputBuffer(real_T* Buffer) {
Write_PowerMonitor(Buffer, 1);
Write_AngleControl(Buffer, 2);
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((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[1], 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))
return;
/* Ошибка регулирования = уставка - измеренное */
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 */
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;
Angle_SetAngle(hangle, angle);

View File

@ -129,7 +129,7 @@ void UPP_Control_InternalParams(void)
// Обновление регулятора угла открытия
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);
}
// Обновление АЦП конфигов