Была путаница с углом альфа.
Он пидом считается наоборот. 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] = {
|
||||
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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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.
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
// Обновление АЦП конфигов
|
||||
|
||||
Loading…
Reference in New Issue
Block a user