Полноценно запустилось в матлаб корректно. УПП может плавно открывать тиристоры пачкой импульсов

Начата работа над управлением УПП по командам
This commit is contained in:
2025-11-16 19:40:40 +03:00
parent bb5b9886d7
commit b0813fb7e8
38 changed files with 1374 additions and 288 deletions

View File

@@ -16,7 +16,7 @@
******************************************************************************/
#ifndef __SPI_MEMORY_CONFIG_H_
#define __SPI_MEMORY_CONFIG_H_
#include "upp_config.h"
#include "upp_defs.h"
/////////////////////////---USER SETTINGS---/////////////////////////

View File

@@ -19,7 +19,7 @@
******************************************************************************/
#ifndef _MODBUS_CONFIG_H_
#define _MODBUS_CONFIG_H_
#include "upp_config.h"
#include "upp_defs.h"
// Общие параметры
#define MODBUS_DEVICE_ID 1 ///< Адрес устройства в сети Modbus

View File

@@ -22,6 +22,9 @@
#include "modbus_inputregs.h"
#include "modbus_devid.h"
/* DEFINE DATA FOR MODBUS */
MB_DataStructureTypeDef MB_DATA = {0};; ///< Coils & Registers
MB_DataInternalTypeDef MB_INTERNAL;
/**
* @brief Check is address valid for certain array.
@@ -78,6 +81,10 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
{
*pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr - R_HOLDING_ADDR); // указатель на выбранный по Addr регистр
}
else if(MB_Check_Address_For_Arr(Addr, Qnt, R_HOLDING_PRVT_PARAMS_ADR, R_HOLDING_PRVT_PARAMS_QNT) == ET_NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&MB_INTERNAL, Addr - R_HOLDING_PRVT_PARAMS_ADR); // указатель на выбранный по Addr регистр
}
// if address doesnt match any array - return illegal data address response
else
{

View File

@@ -50,20 +50,24 @@
#ifndef _MODBUS_DATA_H_
#define _MODBUS_DATA_H_
#include "upp_defs.h"
#include "upp_control.h"
#include "stdint.h"
//--------------SIZES OF DATA---------------
#define R_HOLDING_PRVT_PARAMS_ADR 555
#define R_HOLDING_PRVT_PARAMS_QNT (sizeof(UPP_PrvtParams_t)/sizeof(uint16_t))
// DEFINES FOR INPUT REGISTERS ARRAYS
#define R_INPUT_ADDR 0 ///< Начальный адрес входных регистров
#define R_INPUT_QNT 16 ///< Количество входных регистров
#define R_INPUT_QNT (sizeof(UPP_PUI_Values_t)/sizeof(uint16_t)) ///< Количество входных регистров
// DEFINES FOR HOLDING REGISTERS ARRAYS
#define R_HOLDING_ADDR 0 ///< Начальный адрес регистров хранения
#define R_HOLDING_QNT 16 ///< Количество регистров хранения
#define R_HOLDING_QNT (sizeof(UPP_PUI_Params_t)/sizeof(uint16_t)) ///< Количество регистров хранения
// DEFINES FOR COIL ARRAYS
#define C_COILS_ADDR 0 ///< Начальный адрес коилов
@@ -89,7 +93,7 @@
*/
typedef struct //MB_DataInRegsTypeDef
{
uint16_t in[16];
UPP_PUI_Values_t pui;
}MB_DataInRegsTypeDef;
@@ -98,7 +102,7 @@ typedef struct //MB_DataInRegsTypeDef
*/
typedef struct //MB_DataInRegsTypeDef
{
uint16_t out[16];
UPP_PUI_Params_t pui_params;
}MB_DataHoldRegsTypeDef;
@@ -153,6 +157,13 @@ typedef struct // tester modbus data
extern MB_DataStructureTypeDef MB_DATA;
typedef struct
{
UPP_FuncCalls_t FuncCalls;
UPP_PrvtParams_t param;
}MB_DataInternalTypeDef;
extern MB_DataInternalTypeDef MB_INTERNAL;
#endif //_MODBUS_DATA_H_
/////////////////////////////////////////////////////////////

View File

@@ -10,7 +10,7 @@
*************************************************************************/
#ifndef __MYLIBS_CONFIG_H_
#define __MYLIBS_CONFIG_H_
#include "upp_config.h"
#include "upp_defs.h"
// user includes
/**

View File

@@ -27,39 +27,58 @@
#define TEMP_1 0
#define TEMP_2 1
/* Дефайны для базовых величин */
#define PM_U_BASE 1216.0
#define PM_I_BASE 53.0
/* Дефайны для настройки мониторинга питания */
#define PM_ADC_PERIOD_MKS 10
#define PM_ZERO_CROSS_HYSTERESIS_V 10
#define PM_ZERO_CROSS_DEBOUNCE_10US 2.5*100 // (2.5 * 100 = 2.5 мс)
/* Рассчитанные дефайны */
#define PM_ADC_PERIOD (180*PM_ADC_PERIOD_MKS)-1
/* Общие для всего проекта структуры*/
/**
* @brief Состояния полуволны
* @addtogroup UPP_DEFAULT_PARAMS Default params for external flash
* @ingroup UPP_CONFIG
* @brief Дефолтные параметры для внешней памяти. Они применятся по команде или по ошибке
* @{
*/
typedef enum {
UPP_WAVE_UNKNOWED = 0,
UPP_WAVE_POSITIVE,
UPP_WAVE_NEGATIVE
} UPP_HalfWave_t;
/* Параметры ПУИ */
#define PUI_Iref_PERCENT_DEFAULT 150
#define PUI_Tnt_MS_DEFAULT 300
#define PUI_Umin_PERCENT_DEFAULT 80
#define PUI_Umax_PERCENT_DEFAULT 120
#define PUI_Imax_PERCENT_DEFAULT 99
#define PUI_Imin_PERCENT_DEFAULT 7
#define PUI_TiMax_US_DEFAULT 5000
#define PUI_Tdelay_SECONDS_DEFAULT 30
#define PUI_Interlace_EN_DEFAULT 5000
/* Параметры АЦП */
#define ADC_U_MAX_V_DEFAULT 1216.0
#define ADC_I_MAX_A_DEFAULT 53.0
#define ADC_U_ZERO_DEFAULT 2048
#define ADC_I_ZERO_DEFAULT 2048
/* Параметры определения перехода через ноль */
#define ZERO_CROSS_HYSTERESIS_V_DEFAULT 10.0
#define ZERO_CROSS_DEBOUNCE_10US_DEFAULT 2.5*100 // (2.5 * 100 = 2.5 мс)
/* Параметры ШИМ для тиристоров */
#define PWM_THYR_FREQUENCY_HZ_DEFAULT 20000
#define PWM_THYR_PULSE_NUMBER_DEFAULT 20
/** //UPP_DEFAULT_PARAMS
* @}
*/
/**
* @brief Названия Фаз
* @addtogroup UPP_COMPILED_PARAMS Fixed params
* @ingroup UPP_CONFIG
* @brief Параметры устанавливаемые на этапе компиляции. Без перепрошивки их не поменять
* @{
*/
typedef enum {
UPP_PHASE_A = 0,
UPP_PHASE_B = 1,
UPP_PHASE_C = 2,
UPP_PHASE_UNKNOWN = 3
} UPP_Phase_t;
#define PM_U_NOM_V 690
#define PM_I_NOM_V 5
#define PM_F_NOM_HZ 50
#define PM_ADC_PERIOD_MKS 10 ///< Период опроса АЦП в мкс
/* Частоты таймеров в МГц*/
#define ADC_TIM8_FREQ_MZH 180 ///< Частота тиков таймера АЦП
#define PWM_TIM1_FREQ_MHZ 180 ///< Частота тиков таймера ШИМ (1-4 каналы)
#define PWM_TIM3_FREQ_MHZ 90 ///< Частота тиков таймера ШИМ (5-6 каналы)
#define ANGLE_TIM2_FREQ_MHZ 90 ///< Частота тиков таймера отсчета угла открытия тиристоров
#endif //_UPP_CONFIG_H_

178
UPP/Core/Configs/upp_defs.h Normal file
View File

@@ -0,0 +1,178 @@
/**
******************************************************************************
* @file upp_defs.h
* @brief Общие дефайны УПП
******************************************************************************
@addtogroup UPP_DEFS UPP defines
@ingroup UPP_MAIN
@brief Общие дефайны для всего проекта УПП
@{
******************************************************************************
* @details
******************************************************************************/
#ifndef _UPP_DEFS_H_
#define _UPP_DEFS_H_
#include "upp_config.h"
/**
* @addtogroup UPP_HIGHLEVEL Defines for high-level
* @ingroup UPP_DEFS
* @brief Дефайны УПП которые определяют коды ошибок и параметры для общения с верхним уровнем
* @{
*/
/**
* @brief Список аварий УПП
*/
typedef enum {
WM_Not_Init = 0, ///< УПП не инициализирован
WM_Ready = 1, ///< УПП в готовности
WM_Running = 2, ///< УПП в работе, управляет тиристорами
WM_Error = 3, ///< УПП в аварии
} UPP_WorkModeType_t;
/**
* @brief Список аварий УПП
*/
typedef enum {
Err_None = 0, ///< Неисправность отсутствует
/* Програмные ошибки */
Err_Internal_1 = 1, ///< Внутренняя неисправность УПП 1
Err_Internal_2 = 2, ///< Внутренняя неисправность УПП 2
Err_Internal_3 = 3, ///< Внутренняя неисправность УПП 3
Err_Internal_4 = 4, ///< Внутренняя неисправность УПП 4
Err_Internal_5 = 5, ///< Внутренняя неисправность УПП 5
Err_Internal_6 = 6, ///< Внутренняя неисправность УПП 6
/* Ошибки по питанию */
Err_Power_Digit_5V = 7, ///< Неисправность цифрового источника питания (5 В)
Err_Power_24V = 8, ///< Неисправность источника питания 24 В
Err_Power_Analog_5V = 9, ///< Неисправность аналогового источника питания микроконтроллера (± 5 В)
Err_Power_SCI_5V = 10, ///< Неисправность источника питания последовательных интерфейсов микроконтроллера (5 В)
Err_Power_DIO_24V = 11, ///< Неисправность источника питания дискретных входов/выходов (24 В)
/* Ошибки по допустимым пределам Наряжений/Токов/Температуры */
Err_OverCurrent = 12, ///< Ток выше допустимого (см. Imax и TiMax в @ref UPP_PUI_Params_t)
Err_OverVoltage = 13, ///< Напряжение сети выше допустимого (см. Umах в @ref UPP_PUI_Params_t)
Err_OverTemperature = 14, ///< Температура выше допустимой (плюс 85 °C)
Err_UnderVoltage = 15, ///< Напряжение сети ниже допустимого (см. Umin в @ref UPP_PUI_Params_t)
/* Ошибки по обрывам фаз */
Err_LossPhaseAll = 16, ///< Обрыв трёх фаз (см. Imin в @ref UPP_PUI_Params_t)
Err_LossPhaseA = 17, ///< Обрыв фазы A (см. Imin в @ref UPP_PUI_Params_t)
Err_LossPhaseB = 18, ///< Обрыв фазы B (см. Imin в @ref UPP_PUI_Params_t)
Err_LossPhaseC = 19, ///< Обрыв фазы C (см. Imin в @ref UPP_PUI_Params_t)
/* Другие ошибки */
Err_LongStart = 20, ///< Затянутый пуск (ток не спадает за установленное время) (см. Tdelay в @ref UPP_PUI_Params_t)
Err_Interlace = 21, ///< Неправильный порядок чередования фаз (см. Interlace в @ref UPP_PUI_Params_t)
Err_OverFrequency = 22, ///< Частота сети выше допустимой
Err_UnderFrequency = 23, ///< Частота сети ниже допустимой
} UPP_ErrorType_t;
/**
* @brief Структура данных от УПП передаваемых в ПУИ
*/
typedef struct {
uint16_t Error; /** @brief Текущая авария
@details В случае срабатывания защиты */
uint16_t WorkMode; /** @brief Режим работы
@details «Готовность» или «Работа» */
uint16_t Voltage; /** @brief Напряжение на входе УПП, Вольты */
uint16_t Current; /** @brief Ток на входе УПП, Амперы */
uint16_t Frequency; /** @brief Частота напряжения на входе УПП */
uint16_t Temperature; /** @brief Температура радиатора тиристоров, Градусы Цельсия */
} UPP_PUI_Values_t;
/**
* @brief Структура параметров УПП от ПУИ
* @details Параметры по умолчанию приведены в @ref UPP_DEFAULT_PARAMS
* @note Защиты №X приведены в @ref UPP_ErrorType_t
*/
typedef struct {
uint16_t Iref; /** @brief Уставка ограничения тока УПП
@details В диапазоне от 100 % до 500 % от Iн = 5 А
По умолчанию @ref PUI_Iref_PERCENT_DEFAULT */
uint16_t Tnt; /** @brief Уставка времени нарастания заданного тока
@details В диапазоне от 50 до 5000 мс.
По умолчанию @ref PUI_Tnt_MS_DEFAULT */
uint16_t Umin; /** @brief Уставка защиты №15 от понижения напряжения входной сети
@details В диапазоне от 5% до 99 % от Uн = 690 В.
По умолчанию @ref PUI_Umin_PERCENT_DEFAULT */
uint16_t Umax; /** @brief Уставка защиты №13 от повышения напряжения входной сети
@details В диапазоне от 100% до 120 % от Uн = 690 В.
По умолчанию @ref PUI_Umax_PERCENT_DEFAULT */
uint16_t Imax; /** @brief Уставка защиты №12 по току
@details В диапазоне от 5 % до 99 % от 50 А.
По умолчанию @ref PUI_Imax_PERCENT_DEFAULT */
uint16_t Imin; /** @brief Уставка защит № 16 №19 от обрыва фаз(ы)
@details В диапазоне от 0 % до 40 % от Iн = 5 А. При задании нуля эти защиты отключаются.
По умолчанию @ref PUI_Imin_PERCENT_DEFAULT */
uint16_t TiMax; /** @brief Выдержка времени на срабатывание защиты № 12 по току
@details В диапазоне от 500 до 10000 мкс.
По умолчанию @ref PUI_TiMax_US_DEFAULT */
uint16_t Tdelay; /** @brief Выдержка времени защиты № 20 от затянутого пуска
@details В диапазоне от 5 до 60 с.
По умолчанию @ref PUI_Tdelay_SECONDS_DEFAULT */
uint16_t Interlace; /** @brief Разрешение защиты № 21 от обратного порядка чередования фаз;
@details 0 нет защиты, 1 есть защита.
По умолчанию @ref PUI_Interlace_EN_DEFAULT */
} UPP_PUI_Params_t;
/** //UPP_HIGHLEVEL
* @}
*/
/**
* @addtogroup UPP_INTERNAL_DEFS Defines for internal use
* @ingroup UPP_DEFS
* @brief Дефайны УПП которые используютяс исключительно внутри программы
* @{
*/
#define ANGLE_PERIOD_MS (((float)1/(PM_F_NOM_HZ*2))*1000)
/**
* @brief Состояния полуволны
*/
typedef enum {
UPP_WAVE_UNKNOWED = 0,
UPP_WAVE_POSITIVE,
UPP_WAVE_NEGATIVE
} UPP_HalfWave_t;
/**
* @brief Названия Фаз
*/
typedef enum {
UPP_PHASE_A = 0,
UPP_PHASE_B = 1,
UPP_PHASE_C = 2,
UPP_PHASE_UNKNOWN = 3
} UPP_Phase_t;
/** //UPP_INTERNAL_DEFS
* @}
*/
#endif //_UPP_DEFS_H_
/** //UPP_DEFS
* @}
*/