UPP/UPP/Core/UPP/upp_params.h
Razvalyaev d918ffb860 ШИМ и контроль угла отлажене на 417 более менее
Оптимизированы конфиг дефайны - в мкс и мс, а не тиках
2025-11-20 19:14:21 +03:00

103 lines
4.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
******************************************************************************
* @file upp_params.h
* @brief Модуль определябщий поведение УПП
******************************************************************************
* @details
******************************************************************************/
#ifndef _UPP_PARAMS_H
#define _UPP_PARAMS_H
#include "upp_defs.h"
#define to_float(_u16_, _coef_) ((float)_u16_/_coef_)
typedef struct
{
unsigned set_default_pui:1; ///< Выставить настройки ПУИ в дефолтные
unsigned set_default_internal:1;///< Выставить внутренние настройки в дефолтные
unsigned go:1; ///< Запустить УПП
unsigned stop:1; ///< Остановка УПП (авария)
unsigned reserved:11;
unsigned reset_mcu:1;
}UPP_FuncCalls_t;
typedef struct
{
uint16_t PhaseSequence; ///< Последовательность фаз todo
uint16_t PhaseNumber; ///< [Количество]
uint16_t U; ///< [В x 10]
uint16_t U_deviation_plus; ///< [Проценты x 100]
uint16_t U_deviation_minus; ///< [Проценты x 100]
uint16_t F; ///< [Гц x 100]
uint16_t F_deviation_plus; ///< [Проценты x 100]
uint16_t F_deviation_minus; ///< [Проценты x 100]
uint16_t I; ///< [Амперы x 10]
}UPP_ParamsNominal_t;
typedef struct
{
uint16_t TemperatureWarn; ///< Предупредительный порог температуры [Градусы x 100]
uint16_t TemperatureErr; ///< Аварийный порог температуры [Градусы x 100]
}UPP_ParamsSetpoints_t;
typedef struct
{
struct
{
uint16_t mean_alpha; ///< Коэф альфа для усредняющего эксп. фильтра [0..1 x 65535]
}pm;
UPP_ParamsNominal_t nominal;
UPP_ParamsSetpoints_t setpoints;
/* Параметры АЦП */
struct
{
uint16_t ADC_Max[4]; ///< Величина в единицах измерения при АЦП = 4095 [В или А x 10]
uint16_t ADC_Zero[4]; ///< Кванты АЦП когда на входе ноль
}adc;
/* Параметры ШИМ */
struct
{
uint16_t PhaseMask; ///< Битовяя маска на какие фазы подавать ШИМ: 0 бит - a, 1 бит - b, 2 бит - c
uint16_t Frequency; ///< Частота ШИМ для пачки импульсов на тиристоры [Герцы]
uint16_t PulseNumber; ///< Количесво импульсов в пачке [Количество]
}pwm;
/* Параметры Угла */
struct
{
uint16_t Hysteresis; ///< Гистерезис для определения перехода через ноль [Проценты x 100]
uint16_t DebouneCouner; ///< Защита от дребезга: через сколько тактов снова начать фиксировать переход через ноль [Количество]
}zc;
/* Параметры Угла */
struct
{
uint16_t PulseLengthReserve;/*!< @brief Сколько запаса закладывать на длительность пачки импульсов [Проценты] @ref __AngleSetLimit
@details Пример: 100% - будет запас в одну пачку импульсов */
uint16_t Angle_Max; ///< Максимальный угол открытия тиристора [0..1 x 65535]
uint16_t Angle_Min; ///< Минимальный угол открытия тиристора [0..1 x 65535]
uint16_t PID_Kp; ///< Пропорциональный коэфициент ПИ регулятора угла [x 10000]
uint16_t PID_Ki; ///< Интегральный коэфициент ПИ регулятора угла [x 10000]
uint16_t PID_Kd; ///< Интегральный коэфициент ПИ регулятора угла [x 10000]
uint16_t PID_ExpAlpha; ///< Коэффициент сглаживающего фильтра задания регулятора [0..1 x 65535]
}angle;
}UPP_PrvtParams_t;
/* Контроль внутренних параметров УПП. */
void UPP_Params_ControlInternal(void);
/* Установка параметров на дефолтные значения */
void UPP_Params_SetDefault(int pui_default, int internal_default);
#endif //_UPP_PARAMS_H