рефакторинг и описание параметров

добавлен, но не запущен модбас
фиксы симуляции и тесты с двигателем в матлаб
This commit is contained in:
2026-01-28 15:30:37 +03:00
parent 9f9af482cf
commit bd64d747b3
21 changed files with 307 additions and 310 deletions

View File

@@ -224,61 +224,50 @@ typedef enum
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) #define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
/* Use of CMSIS compiler intrinsics for register exclusive access */ /* Atomic operations for MinGW/GCC */
/* Atomic 32-bit register access macro to set one or several bits */ /* Atomic 32-bit register access macro to set one or several bits */
#define ATOMIC_SET_BIT(REG, BIT) \ #define ATOMIC_SET_BIT(REG, BIT) \
do { \ do { \
uint32_t val; \ __sync_fetch_and_or(&(REG), (BIT)); \
do { \
val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT); \
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
} while(0) } while(0)
/* Atomic 32-bit register access macro to clear one or several bits */ /* Atomic 32-bit register access macro to clear one or several bits */
#define ATOMIC_CLEAR_BIT(REG, BIT) \ #define ATOMIC_CLEAR_BIT(REG, BIT) \
do { \ do { \
uint32_t val; \ __sync_fetch_and_and(&(REG), ~(BIT)); \
do { \
val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT); \
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
} while(0) } while(0)
/* Atomic 32-bit register access macro to clear and set one or several bits */ /* Atomic 32-bit register access macro to clear and set one or several bits */
#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) \ #define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) \
do { \ do { \
uint32_t val; \ uint32_t old_val, new_val; \
do { \ do { \
val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \ old_val = (REG); \
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \ new_val = (old_val & ~(CLEARMSK)) | (SETMASK); \
} while (!__sync_bool_compare_and_swap(&(REG), old_val, new_val)); \
} while(0) } while(0)
/* Atomic 16-bit register access macro to set one or several bits */ /* Atomic 16-bit register access macro to set one or several bits */
#define ATOMIC_SETH_BIT(REG, BIT) \ #define ATOMIC_SETH_BIT(REG, BIT) \
do { \ do { \
uint16_t val; \ __sync_fetch_and_or((uint16_t *)&(REG), (BIT)); \
do { \
val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT); \
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
} while(0) } while(0)
/* Atomic 16-bit register access macro to clear one or several bits */ /* Atomic 16-bit register access macro to clear one or several bits */
#define ATOMIC_CLEARH_BIT(REG, BIT) \ #define ATOMIC_CLEARH_BIT(REG, BIT) \
do { \ do { \
uint16_t val; \ __sync_fetch_and_and((uint16_t *)&(REG), ~(BIT)); \
do { \
val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT); \
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
} while(0) } while(0)
/* Atomic 16-bit register access macro to clear and set one or several bits */ /* Atomic 16-bit register access macro to clear and set one or several bits */
#define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK) \ #define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK) \
do { \ do { \
uint16_t val; \ uint16_t old_val, new_val; \
do { \ do { \
val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \ old_val = (REG); \
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \ new_val = (old_val & ~(CLEARMSK)) | (SETMASK); \
} while (!__sync_bool_compare_and_swap((uint16_t *)&(REG), old_val, new_val)); \
} while(0) } while(0)
/** /**
* @} * @}
*/ */

View File

@@ -167,7 +167,7 @@ typedef struct {
unsigned fInitDone : 1; ///< флаг для выхода из потока программы МК unsigned fInitDone : 1; ///< флаг для выхода из потока программы МК
double SimTime; ///< Текущее время симуляции double SimTime; ///< Текущее время симуляции
long SystemClock; ///< Счетчик тактов для симуляции системных тиков (в целочисленном формате) long long SystemClock; ///< Счетчик тактов для симуляции системных тиков (в целочисленном формате)
double SystemClockDouble; ///< Счетчик в формате double для точной симуляции системных тиков С промежуточными значений double SystemClockDouble; ///< Счетчик в формате double для точной симуляции системных тиков С промежуточными значений
double sSystemClock_step; ///< Шаг тиков для их симуляции, в формате double double sSystemClock_step; ///< Шаг тиков для их симуляции, в формате double

View File

@@ -95,6 +95,8 @@ set code_PERIPH=.\MCU_STM32_Matlab\stm32_matlab_conf.c^
.\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_rcc_ex.c^
.\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim.c^
.\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c^ .\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_tim_ex.c^
.\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_uart.c^
.\MCU_STM32_Matlab\Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_usart.c^
.\MCU_STM32_Matlab\Drivers\STM32_SIMULINK\stm32_matlab_tim.c^ .\MCU_STM32_Matlab\Drivers\STM32_SIMULINK\stm32_matlab_tim.c^
.\MCU_STM32_Matlab\Drivers\STM32_SIMULINK\stm32_matlab_adc.c .\MCU_STM32_Matlab\Drivers\STM32_SIMULINK\stm32_matlab_adc.c

View File

@@ -19,6 +19,7 @@ void app_init(void) {
HAL_Init(); HAL_Init();
MX_DMA_Init(); MX_DMA_Init();
MX_IWDG_Init(); MX_IWDG_Init();
MX_USART3_UART_Init();
MX_TIM1_Init(); MX_TIM1_Init();
MX_TIM2_Init(); MX_TIM2_Init();
MX_TIM3_Init(); MX_TIM3_Init();

View File

@@ -1,14 +1,16 @@
clear all clear all
IadcMax = 200;%50; IadcMax = 53;%200;%53;
VadcMax = 1216; VadcMax = 1216;
Ts = 5e-6; Ts = 5e-6;
Vnom = 400; Vnom = 690;
Inom = 30;%4.2; Inom = 2;%4.2;
Fnom = 50; Fnom = 50;
Temperature1 = 2.22; % 20 градусов Temperatures1 = [2.22 4.22]; % 20->68 градусов
Temperature2 = 2.99; % 34 градусов TempTimeline1 = [0 100]; % 0 и 10 секунда
Temperatures2 = [2.99 4.45]; % 34->80 градусов
TempTimeline2 = [0 50]; % 0 и 5 секунда

Binary file not shown.

View File

@@ -20,6 +20,7 @@
#ifndef _MODBUS_CONFIG_H_ #ifndef _MODBUS_CONFIG_H_
#define _MODBUS_CONFIG_H_ #define _MODBUS_CONFIG_H_
#include "upp_defs.h" #include "upp_defs.h"
#include "upp_params.h"
#include "upp_io.h" #include "upp_io.h"
// Общие параметры // Общие параметры
@@ -35,8 +36,6 @@
#define MODBUS_MODEL_NAME "" #define MODBUS_MODEL_NAME ""
#define MODBUS_USER_APPLICATION_NAME "" #define MODBUS_USER_APPLICATION_NAME ""
#define MODBUS_NUMB_OF_USEROBJECTS 0 ///< Количество пользовательских объектов
#define MODBUS_USEROBJECT_0_NAME "" ///< Строка пользовательского идентификатора 0. По аналогии можно определить строки до <=128 USEROBJECT
// Периферия (опционально) // Периферия (опционально)
//#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart //#define mb_huart huart1 ///< Удобный дефайн для модбасовского uart

View File

@@ -22,10 +22,10 @@
* @{ * @{
*/ */
#define UPP_DISABLE_ERROR_BLOCK ///< Отключить блокировку УПП при ошибках //#define UPP_DISABLE_ERROR_BLOCK ///< Отключить блокировку УПП при ошибках
//#define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП //#define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП
#define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В) #define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В)
#define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы //#define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы
//#define ZC_DISABLE_HYSTERESIS_DEBOUNCE ///< Отключить гиситерезис и дребезг на определении перехода через ноль //#define ZC_DISABLE_HYSTERESIS_DEBOUNCE ///< Отключить гиситерезис и дребезг на определении перехода через ноль

View File

@@ -57,6 +57,8 @@ void PendSV_Handler(void);
void SysTick_Handler(void); void SysTick_Handler(void);
void TIM1_UP_TIM10_IRQHandler(void); void TIM1_UP_TIM10_IRQHandler(void);
void TIM2_IRQHandler(void); void TIM2_IRQHandler(void);
void USART3_IRQHandler(void);
void TIM8_BRK_TIM12_IRQHandler(void);
void TIM8_UP_TIM13_IRQHandler(void); void TIM8_UP_TIM13_IRQHandler(void);
void TIM8_TRG_COM_TIM14_IRQHandler(void); void TIM8_TRG_COM_TIM14_IRQHandler(void);
void DMA2_Stream0_IRQHandler(void); void DMA2_Stream0_IRQHandler(void);

View File

@@ -133,12 +133,12 @@ int Protect_Currents(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *params,
void Protect_Misc(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *params, UPP_ParamsNominal_t *nominal) void Protect_Misc(PowerMonitor_Measured_t *measure, UPP_PUI_Params_t *params, UPP_ParamsNominal_t *nominal)
{ {
/* Переводим внутренние уставки в удобный вид */ /* Переводим внутренние уставки в удобный вид */
float lFnom = u2f(PARAM_INTERNAL->nominal.F, 100); float lFnom = u2f(nominal->F, 100);
float lFmin = lFnom - lFnom*u2f(PARAM_INTERNAL->nominal.F_deviation_minus, 10000); float lFmin = lFnom - lFnom*u2f(nominal->F_deviation_minus, 10000);
float lFmax = lFnom + lFnom*u2f(PARAM_INTERNAL->nominal.F_deviation_plus, 10000); float lFmax = lFnom + lFnom*u2f(nominal->F_deviation_plus, 10000);
float lTwarn = u2f(PARAM_INTERNAL->setpoints.TemperatureWarn, 100); float lTwarn = PARAM_INTERNAL->temp.TemperatureWarn;
float lTerr = u2f(PARAM_INTERNAL->setpoints.TemperatureWarn, 100); float lTerr = PARAM_INTERNAL->temp.TemperatureWarn;
/*=============== ЗАЩИТЫ ПО ЧАСТОТЕ ==================*/ /*=============== ЗАЩИТЫ ПО ЧАСТОТЕ ==================*/

View File

@@ -60,6 +60,8 @@ extern DMA_HandleTypeDef hdma_adc3;
extern TIM_HandleTypeDef htim1; extern TIM_HandleTypeDef htim1;
extern TIM_HandleTypeDef htim2; extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim8; extern TIM_HandleTypeDef htim8;
extern TIM_HandleTypeDef htim12;
extern UART_HandleTypeDef huart3;
extern TIM_HandleTypeDef htim14; extern TIM_HandleTypeDef htim14;
/* USER CODE BEGIN EV */ /* USER CODE BEGIN EV */
@@ -232,6 +234,46 @@ void TIM2_IRQHandler(void)
/* USER CODE END TIM2_IRQn 1 */ /* USER CODE END TIM2_IRQn 1 */
} }
/**
* @brief This function handles USART3 global interrupt.
*/
void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
RS_UART_Handler(&hmodbus1);
return;
/* USER CODE END USART3_IRQn 0 */
HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */
/* USER CODE END USART3_IRQn 1 */
}
/**
* @brief This function handles TIM8 break interrupt and TIM12 global interrupt.
*/
void TIM8_BRK_TIM12_IRQHandler(void)
{
/* USER CODE BEGIN TIM8_BRK_TIM12_IRQn 0 */
uint32_t itsource = mb_htim.Instance->DIER;
uint32_t itflag = mb_htim.Instance->SR;
if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE))
{
if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE))
{
RS_TIM_Handler(&hmodbus1);
return;
}
}
/* USER CODE END TIM8_BRK_TIM12_IRQn 0 */
HAL_TIM_IRQHandler(&htim8);
HAL_TIM_IRQHandler(&htim12);
/* USER CODE BEGIN TIM8_BRK_TIM12_IRQn 1 */
/* USER CODE END TIM8_BRK_TIM12_IRQn 1 */
}
/** /**
* @brief This function handles TIM8 update interrupt and TIM13 global interrupt. * @brief This function handles TIM8 update interrupt and TIM13 global interrupt.
*/ */

View File

@@ -468,6 +468,8 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
__HAL_RCC_TIM8_CLK_ENABLE(); __HAL_RCC_TIM8_CLK_ENABLE();
/* TIM8 interrupt Init */ /* TIM8 interrupt Init */
HAL_NVIC_SetPriority(TIM8_BRK_TIM12_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM8_BRK_TIM12_IRQn);
HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0); HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn); HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 15, 0); HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 15, 0);
@@ -494,6 +496,10 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM12_MspInit 0 */ /* USER CODE END TIM12_MspInit 0 */
/* TIM12 clock enable */ /* TIM12 clock enable */
__HAL_RCC_TIM12_CLK_ENABLE(); __HAL_RCC_TIM12_CLK_ENABLE();
/* TIM12 interrupt Init */
HAL_NVIC_SetPriority(TIM8_BRK_TIM12_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM8_BRK_TIM12_IRQn);
/* USER CODE BEGIN TIM12_MspInit 1 */ /* USER CODE BEGIN TIM12_MspInit 1 */
/* USER CODE END TIM12_MspInit 1 */ /* USER CODE END TIM12_MspInit 1 */
@@ -613,6 +619,14 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
__HAL_RCC_TIM8_CLK_DISABLE(); __HAL_RCC_TIM8_CLK_DISABLE();
/* TIM8 interrupt Deinit */ /* TIM8 interrupt Deinit */
/* USER CODE BEGIN TIM8:TIM8_BRK_TIM12_IRQn disable */
/**
* Uncomment the line below to disable the "TIM8_BRK_TIM12_IRQn" interrupt
* Be aware, disabling shared interrupt may affect other IPs
*/
/* HAL_NVIC_DisableIRQ(TIM8_BRK_TIM12_IRQn); */
/* USER CODE END TIM8:TIM8_BRK_TIM12_IRQn disable */
HAL_NVIC_DisableIRQ(TIM8_UP_TIM13_IRQn); HAL_NVIC_DisableIRQ(TIM8_UP_TIM13_IRQn);
HAL_NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn); HAL_NVIC_DisableIRQ(TIM8_TRG_COM_TIM14_IRQn);
/* USER CODE BEGIN TIM8_MspDeInit 1 */ /* USER CODE BEGIN TIM8_MspDeInit 1 */
@@ -637,6 +651,16 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM12_MspDeInit 0 */ /* USER CODE END TIM12_MspDeInit 0 */
/* Peripheral clock disable */ /* Peripheral clock disable */
__HAL_RCC_TIM12_CLK_DISABLE(); __HAL_RCC_TIM12_CLK_DISABLE();
/* TIM12 interrupt Deinit */
/* USER CODE BEGIN TIM12:TIM8_BRK_TIM12_IRQn disable */
/**
* Uncomment the line below to disable the "TIM8_BRK_TIM12_IRQn" interrupt
* Be aware, disabling shared interrupt may affect other IPs
*/
/* HAL_NVIC_DisableIRQ(TIM8_BRK_TIM12_IRQn); */
/* USER CODE END TIM12:TIM8_BRK_TIM12_IRQn disable */
/* USER CODE BEGIN TIM12_MspDeInit 1 */ /* USER CODE BEGIN TIM12_MspDeInit 1 */
/* USER CODE END TIM12_MspDeInit 1 */ /* USER CODE END TIM12_MspDeInit 1 */

View File

@@ -110,6 +110,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
GPIO_InitStruct.Alternate = GPIO_AF7_USART3; GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USART3 interrupt Init */
HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART3_IRQn);
/* USER CODE BEGIN USART3_MspInit 1 */ /* USER CODE BEGIN USART3_MspInit 1 */
/* USER CODE END USART3_MspInit 1 */ /* USER CODE END USART3_MspInit 1 */
@@ -157,6 +160,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
*/ */
HAL_GPIO_DeInit(GPIOB, SCIT1_Pin|SCIR1_Pin); HAL_GPIO_DeInit(GPIOB, SCIT1_Pin|SCIR1_Pin);
/* USART3 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART3_IRQn);
/* USER CODE BEGIN USART3_MspDeInit 1 */ /* USER CODE BEGIN USART3_MspDeInit 1 */
/* USER CODE END USART3_MspDeInit 1 */ /* USER CODE END USART3_MspDeInit 1 */

View File

@@ -151,7 +151,7 @@ void UPP_Errors_LossPhase(void)
MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT)); MS_TO_SLOW_TICKS(ERRORS_DELAY_MS_DEFAULT));
/* Если хотя бы одна фаза есть проверяем фазы отдельно */ /* Если хотя бы одна фаза есть проверяем фазы отдельно */
if(!ERR_PUI->LossPhaseAll) if(!loss_phases_all)
{ {
ERR_PUI->LossPhaseA = setError( ERR_PRIVATE->ia_min, ERR_PUI->LossPhaseA = setError( ERR_PRIVATE->ia_min,
ERR_PUI->LossPhaseA, ERR_PUI->LossPhaseA,

View File

@@ -10,6 +10,7 @@
- @ref ANGLE_CONTROL - Формирование и регулирование угла открытия тиристора - @ref ANGLE_CONTROL - Формирование и регулирование угла открытия тиристора
******************************************************************************/ ******************************************************************************/
#include "upp_main.h" // всё остальное по работе с УПП #include "upp_main.h" // всё остальное по работе с УПП
#include "usart.h"
#include "tim.h" #include "tim.h"
#include "iwdg.h" #include "iwdg.h"
@@ -34,6 +35,8 @@ int UPP_App_Init(void)
upp.PUI.values = &MB_DATA.InRegs.pui; upp.PUI.values = &MB_DATA.InRegs.pui;
upp.call = &MB_INTERNAL.FuncCalls; upp.call = &MB_INTERNAL.FuncCalls;
MODBUS_FirstInit(&hmodbus1, &mb_huart, &mb_htim);
if(HAL_TIM_Base_Start(&ustim) != HAL_OK) if(HAL_TIM_Base_Start(&ustim) != HAL_OK)
{ {
return 1; return 1;
@@ -50,7 +53,6 @@ int UPP_App_Init(void)
{ {
return 1; return 1;
} }
if(UPP_Params_Init() != HAL_OK) if(UPP_Params_Init() != HAL_OK)
{ {
return 1; return 1;
@@ -74,6 +76,7 @@ int UPP_PreWhile(void)
#endif #endif
UPP_DO.CEN(ENABLE); UPP_DO.CEN(ENABLE);
MODBUS_SlaveStart(&hmodbus1, NULL);
return 0; return 0;
} }
@@ -141,8 +144,8 @@ int UPP_While(void)
UPP_DO.Error(DISABLE); UPP_DO.Error(DISABLE);
if(slow_cnt == 0) if(slow_cnt == 0)
{ // начало инициализации - сбрасываем флаги { // начало инициализации - сбрасываем флаги
memset(&ERR_PRIVATE, 0, sizeof(ERR_PRIVATE)); memset(ERR_PRIVATE, 0, sizeof(*ERR_PRIVATE));
memset(&ERR_PUI, 0, sizeof(ERR_PUI)); memset(ERR_PUI, 0, sizeof(*ERR_PUI));
} }
if(slow_cnt > MS_TO_SLOW_TICKS(UPP_INIT_BEFORE_READY_MS)) if(slow_cnt > MS_TO_SLOW_TICKS(UPP_INIT_BEFORE_READY_MS))

View File

@@ -372,8 +372,8 @@ void UPP_Params_Saturate(void)
SATURATE_U16(PARAM_PUI->Tdelay, 5, 60); SATURATE_U16(PARAM_PUI->Tdelay, 5, 60);
SATURATE_U16(PARAM_PUI->Interlace, 0, 1); SATURATE_U16(PARAM_PUI->Interlace, 0, 1);
SATURATE_U16(PARAM_INTERNAL->setpoints.TemperatureWarn, 0, 90); SATURATE_U16(PARAM_INTERNAL->temp.TemperatureWarn, 0, 90);
SATURATE_U16(PARAM_INTERNAL->setpoints.TemperatureErr, 0, 90); SATURATE_U16(PARAM_INTERNAL->temp.TemperatureErr, 0, 90);
SATURATE_U16(PARAM_INTERNAL->nominal.PhaseNumber, 0, 3); SATURATE_U16(PARAM_INTERNAL->nominal.PhaseNumber, 0, 3);
SATURATE_U16(PARAM_INTERNAL->nominal.U, 0, ADC_U_MAX_V_DEFAULT*10); SATURATE_U16(PARAM_INTERNAL->nominal.U, 0, ADC_U_MAX_V_DEFAULT*10);
@@ -426,8 +426,8 @@ void UPP_Params_SetDefault(int pui_default, int internal_default)
if(internal_default) if(internal_default)
{ {
PARAM_INTERNAL->setpoints.TemperatureWarn = SETPOINT_TEMP_WARN*10; PARAM_INTERNAL->temp.TemperatureWarn = SETPOINT_TEMP_WARN*10;
PARAM_INTERNAL->setpoints.TemperatureErr = SETPOINT_TEMP_ERR*10; PARAM_INTERNAL->temp.TemperatureErr = SETPOINT_TEMP_ERR*10;
PARAM_INTERNAL->nominal.PhaseNumber = NOM_PHASE_NUMB; PARAM_INTERNAL->nominal.PhaseNumber = NOM_PHASE_NUMB;
PARAM_INTERNAL->nominal.U = NOM_U_V_DEFAULT*10; PARAM_INTERNAL->nominal.U = NOM_U_V_DEFAULT*10;

View File

@@ -10,15 +10,17 @@
#define _UPP_PARAMS_H #define _UPP_PARAMS_H
#include "upp_defs.h" #include "upp_defs.h"
#define u2f(_u16_, _coef_) ((float)_u16_/_coef_) #define u2f(_u16_, _coef_) ((float)_u16_/_coef_)
typedef struct typedef struct
{ {
unsigned set_default_pui:1; ///< Выставить настройки ПУИ в дефолтные
unsigned set_default_internal:1;///< Выставить внутренние настройки в дефолтные
unsigned go:1; ///< Запустить УПП unsigned go:1; ///< Запустить УПП
unsigned stop:1; ///< Остановка УПП (авария) unsigned stop:1; ///< Остановка УПП (авария)
unsigned set_default_pui:1; ///< Выставить настройки ПУИ в дефолтные
unsigned set_default_internal:1;///< Выставить внутренние настройки в дефолтные
unsigned reserved:11; unsigned reserved:11;
unsigned reset_mcu:1; unsigned reset_mcu:1;
@@ -27,72 +29,75 @@ typedef struct
typedef struct typedef struct
{ {
uint16_t PhaseSequence; ///< Последовательность фаз todo uint16_t PhaseSequence; ///< Адрес 1000: Последовательность фаз todo
uint16_t PhaseNumber; ///< [Количество] uint16_t PhaseNumber; ///< Адрес 1001: [Количество]
uint16_t U; ///< [В x 10] uint16_t U; ///< Адрес 1002: [В x 10]
uint16_t U_deviation_plus; ///< [Проценты x 100] uint16_t U_deviation_plus; ///< Адрес 1003: [Проценты x 100]
uint16_t U_deviation_minus; ///< [Проценты x 100] uint16_t U_deviation_minus; ///< Адрес 1004: [Проценты x 100]
uint16_t F; ///< [Гц x 100] uint16_t F; ///< Адрес 1005: [Гц x 100]
uint16_t F_deviation_plus; ///< [Проценты x 100] uint16_t F_deviation_plus; ///< Адрес 1006: [Проценты x 100]
uint16_t F_deviation_minus; ///< [Проценты x 100] uint16_t F_deviation_minus; ///< Адрес 1007: [Проценты x 100]
uint16_t I; ///< [Амперы x 10] uint16_t I; ///< Адрес 1008: [Амперы x 10]
}UPP_ParamsNominal_t; }UPP_ParamsNominal_t;
typedef struct typedef struct
{ {
uint16_t TemperatureWarn; ///< Предупредительный порог температуры [Градусы x 100]
uint16_t TemperatureErr; ///< Аварийный порог температуры [Градусы x 100]
}UPP_ParamsSetpoints_t; }UPP_ParamsSetpoints_t;
typedef struct typedef struct
{ {
UPP_ParamsNominal_t nominal;
/* Параметры Температур */
struct struct
{ {
uint16_t rms_window_size; ///< Размер окна для RMS uint16_t TemperatureWarn; ///< Адрес 1010: Предупредительный порог температуры [Градусы x 100]
uint16_t rms_exp_alpha; ///< Постоянная времени для сглаживания RMS uint16_t TemperatureErr; ///< Адрес 1011: Аварийный порог температуры [Градусы x 100]
}pm; }temp;
UPP_ParamsNominal_t nominal;
UPP_ParamsSetpoints_t setpoints;
/* Параметры АЦП */ /* Параметры АЦП */
struct struct
{ {
uint16_t ADC_Max[4]; ///< Величина в единицах измерения при АЦП = 4095 [В или А x 10] uint16_t ADC_Max[4]; ///< Адрес 1020: Величина в единицах измерения при АЦП = 4095 [В или А x 10]
uint16_t ADC_Zero[4]; ///< Кванты АЦП когда на входе ноль uint16_t ADC_Zero[4]; ///< Адрес 1021: Кванты АЦП когда на входе ноль
}adc; }adc;
/* Параметры Мониторинга напряжения */
struct
{
uint16_t rms_window_size; ///< Адрес 1030: Размер окна для RMS
uint16_t rms_exp_alpha; ///< Адрес 1031: Постоянная времени для сглаживания RMS
}pm;
/* Параметры ШИМ */ /* Параметры ШИМ */
struct struct
{ {
uint16_t PhaseMask; ///< Битовяя маска на какие фазы подавать ШИМ: 0 бит - a, 1 бит - b, 2 бит - c uint16_t PhaseMask; ///< Адрес 1040: Битовяя маска на какие фазы подавать ШИМ: 0 бит - a, 1 бит - b, 2 бит - c
uint16_t Frequency; ///< Частота ШИМ для пачки импульсов на тиристоры [Герцы] uint16_t Frequency; ///< Адрес 1041: Частота ШИМ для пачки импульсов на тиристоры [Герцы]
uint16_t Duty; ///< Скважность ШИМ для пачки импульсов на тиристоры [Проценты] uint16_t Duty; ///< Адрес 1042: Скважность ШИМ для пачки импульсов на тиристоры [Проценты]
uint16_t PulseLength; ///< Количесво импульсов в пачке [Количество] uint16_t PulseLength; ///< Адрес 1043: Количесво импульсов в пачке [Количество]
}pwm; }pwm;
/* Параметры Угла */ /* Параметры Перехода через ноль */
struct struct
{ {
uint16_t Hysteresis; ///< Гистерезис для определения перехода через ноль [Проценты x 100] uint16_t Hysteresis; ///< Адрес 1050: Гистерезис для определения перехода через ноль [Проценты x 100]
uint16_t DebouneCouner; ///< Защита от дребезга: через сколько тактов снова начать фиксировать переход через ноль [Количество] uint16_t DebouneCouner; ///< Адрес 1051: Защита от дребезга: через сколько тактов снова начать фиксировать переход через ноль [Количество]
}zc; }zc;
/* Параметры Угла */ /* Параметры Угла */
struct struct
{ {
uint16_t PulseLengthReserve;/*!< @brief Сколько запаса закладывать на длительность пачки импульсов [Проценты] @ref __AngleSetLimit uint16_t PulseLengthReserve;/*!< @brief Адрес 1060: Сколько запаса закладывать на длительность пачки импульсов [Проценты] @ref __AngleSetLimit
@details Пример: 100% - будет запас в одну пачку импульсов */ @details Пример: 100% - будет запас в одну пачку импульсов */
uint16_t Angle_Max; ///< Максимальный угол открытия тиристора [0..1 x 65535] uint16_t Angle_Max; ///< Адрес 1061: Максимальный угол открытия тиристора [0..1 x 65535]
uint16_t Angle_Min; ///< Минимальный угол открытия тиристора [0..1 x 65535] uint16_t Angle_Min; ///< Адрес 1062: Минимальный угол открытия тиристора [0..1 x 65535]
uint16_t PID_Kp; ///< Пропорциональный коэфициент ПИ регулятора угла [x 10000] uint16_t PID_Kp; ///< Адрес 1063: Пропорциональный коэфициент ПИ регулятора угла [x 10000]
uint16_t PID_Ki; ///< Интегральный коэфициент ПИ регулятора угла [x 10000] uint16_t PID_Ki; ///< Адрес 1064: Интегральный коэфициент ПИ регулятора угла [x 10000]
uint16_t PID_Kd; ///< Интегральный коэфициент ПИ регулятора угла [x 10000] uint16_t PID_Kd; ///< Адрес 1065: Интегральный коэфициент ПИ регулятора угла [x 10000]
}angle; }angle;
}UPP_PrvtParams_t; }UPP_PrvtParams_t;
/* Контроль параметров УПП. */ /* Контроль параметров УПП. */
@@ -108,4 +113,55 @@ void UPP_Params_Saturate(void);
/* Установка параметров на дефолтные значения */ /* Установка параметров на дефолтные значения */
void UPP_Params_SetDefault(int pui_default, int internal_default); void UPP_Params_SetDefault(int pui_default, int internal_default);
#define MODBUS_NUMB_OF_USEROBJECTS 128 ///< Количество пользовательских объектов
/* Номинальные параметры (H1000-H1008) */
#define MODBUS_USEROBJECT_0_NAME "Nom PhSeq;H1000;[]"
#define MODBUS_USEROBJECT_1_NAME "Nom PhNum;H1001;[cnt]"
#define MODBUS_USEROBJECT_2_NAME "Nom U;H1002;[Vx10]"
#define MODBUS_USEROBJECT_3_NAME "Nom Udev+;H1003;[%x100]"
#define MODBUS_USEROBJECT_4_NAME "Nom Udev-;H1004;[%x100]"
#define MODBUS_USEROBJECT_5_NAME "Nom F;H1005;[Hzx100]"
#define MODBUS_USEROBJECT_6_NAME "Nom Fdev+;H1006;[%x100]"
#define MODBUS_USEROBJECT_7_NAME "Nom Fdev-;H1007;[%x100]"
#define MODBUS_USEROBJECT_8_NAME "Nom I;H1008;[Ax10]"
/* Температурные параметры (H1010-H1011) */
#define MODBUS_USEROBJECT_10_NAME "TempWarn;H1010;[Cx100]"
#define MODBUS_USEROBJECT_11_NAME "TempErr;H1011;[Cx100]"
/* Параметры АЦП (H1020-H1027) */
#define MODBUS_USEROBJECT_20_NAME "ADC Max Uba;H1020;[V/Ax10]"
#define MODBUS_USEROBJECT_21_NAME "ADC Max Uac;H1021;[V/Ax10]"
#define MODBUS_USEROBJECT_22_NAME "ADC Max Ic;H1022;[V/Ax10]"
#define MODBUS_USEROBJECT_23_NAME "ADC Max Ia;H1023;[V/Ax10]"
#define MODBUS_USEROBJECT_24_NAME "ADC Zero Uba;H1024;[Quants]"
#define MODBUS_USEROBJECT_25_NAME "ADC Zero Uac;H1025;[Quants]"
#define MODBUS_USEROBJECT_26_NAME "ADC Zero Ic;H1026;[Quants]"
#define MODBUS_USEROBJECT_27_NAME "ADC Zero Ia;H1027;[Quants]"
/* Мониторинг питания (H1030-H1031) */
#define MODBUS_USEROBJECT_30_NAME "RMS WindowSize;H1030;[]"
#define MODBUS_USEROBJECT_31_NAME "RMS Alpha;H1031;[x10000]"
/* ШИМ параметры (H1040-H1043) */
#define MODBUS_USEROBJECT_40_NAME "PWM Mask;H1040;[bit]"
#define MODBUS_USEROBJECT_41_NAME "PWM Freq;H1041;[Hz]"
#define MODBUS_USEROBJECT_42_NAME "PWM Duty;H1042;[%]"
#define MODBUS_USEROBJECT_43_NAME "PWM Pulses;H1043;[cnt]"
/* Ноль-кросс (H1050-H1051) */
#define MODBUS_USEROBJECT_50_NAME "ZC Hyst;H1050;[%x100]"
#define MODBUS_USEROBJECT_51_NAME "ZC Debounce;H1051;[cnt]"
/* Угловые параметры (H1060-H1065) */
#define MODBUS_USEROBJECT_60_NAME "Angle PulseRes;H1060;[%]"
#define MODBUS_USEROBJECT_61_NAME "Angle Max;H1061;[x65535]"
#define MODBUS_USEROBJECT_62_NAME "Angle Min;H1062;[x65535]"
#define MODBUS_USEROBJECT_63_NAME "Angle PID_Kp;H1063;[x10000]"
#define MODBUS_USEROBJECT_64_NAME "Angle PID_Ki;H1064;[x10000]"
#define MODBUS_USEROBJECT_65_NAME "Angle PID_Kd;H1065;[x10000]"
/* Функциональные вызовы - если нужно (битовые поля в одном регистре) */
#define MODBUS_USEROBJECT2000_NAME "FuncCalls;H2000;[bitmask]"
#endif //_UPP_PARAMS_H #endif //_UPP_PARAMS_H

View File

@@ -12,7 +12,7 @@
<lExt>*.lib</lExt> <lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc; *.md</tExt> <tExt>*.txt; *.h; *.inc; *.md</tExt>
<pExt>*.plm</pExt> <pExt>*.plm</pExt>
<CppX>*.cpp</CppX> <CppX>*.cpp; *.cc; *.cxx</CppX>
<nMigrate>0</nMigrate> <nMigrate>0</nMigrate>
</Extensions> </Extensions>
@@ -93,7 +93,7 @@
<tRbreak>1</tRbreak> <tRbreak>1</tRbreak>
<tRwatch>1</tRwatch> <tRwatch>1</tRwatch>
<tRmem>1</tRmem> <tRmem>1</tRmem>
<tRfunc>1</tRfunc> <tRfunc>0</tRfunc>
<tRbox>1</tRbox> <tRbox>1</tRbox>
<tRtrace>1</tRtrace> <tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw> <sRSysVw>1</sRSysVw>
@@ -103,7 +103,7 @@
<bEvRecOn>1</bEvRecOn> <bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf> <bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf> <bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel> <nTsel>4</nTsel>
<sDll></sDll> <sDll></sDll>
<sDllPa></sDllPa> <sDllPa></sDllPa>
<sDlgDll></sDlgDll> <sDlgDll></sDlgDll>
@@ -114,44 +114,54 @@
<tDlgDll></tDlgDll> <tDlgDll></tDlgDll>
<tDlgPa></tDlgPa> <tDlgPa></tDlgPa>
<tIfile></tIfile> <tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon> <pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt> </DebugOpt>
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -N01("Unknown JTAG device") -D01(06413041) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F427ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>UL2CM3</Key> <Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F427ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM))</Name> <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F427ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM))</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U-O142 -O2190 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F427ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint> <Breakpoint/>
<Bp> <WatchWindow1>
<Number>0</Number> <Ww>
<Type>0</Type> <count>0</count>
<LineNumber>156</LineNumber> <WinNumber>1</WinNumber>
<EnabledFlag>1</EnabledFlag> <ItemText>uwTick,0x0A</ItemText>
<Address>0</Address> </Ww>
<ByteObject>0</ByteObject> </WatchWindow1>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\PowerMonitor\power_monitor.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>
<DebugFlag> <DebugFlag>
<trace>0</trace> <trace>0</trace>
<periodic>1</periodic> <periodic>0</periodic>
<aLwin>1</aLwin> <aLwin>1</aLwin>
<aCover>0</aCover> <aCover>0</aCover>
<aSer1>0</aSer1> <aSer1>0</aSer1>
@@ -170,7 +180,7 @@
<aPa1>0</aPa1> <aPa1>0</aPa1>
<AscS4>0</AscS4> <AscS4>0</AscS4>
<aSer4>0</aSer4> <aSer4>0</aSer4>
<StkLoc>1</StkLoc> <StkLoc>0</StkLoc>
<TrcWin>0</TrcWin> <TrcWin>0</TrcWin>
<newCpu>0</newCpu> <newCpu>0</newCpu>
<uProt>0</uProt> <uProt>0</uProt>
@@ -270,7 +280,7 @@
<tRbreak>1</tRbreak> <tRbreak>1</tRbreak>
<tRwatch>1</tRwatch> <tRwatch>1</tRwatch>
<tRmem>1</tRmem> <tRmem>1</tRmem>
<tRfunc>1</tRfunc> <tRfunc>0</tRfunc>
<tRbox>1</tRbox> <tRbox>1</tRbox>
<tRtrace>1</tRtrace> <tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw> <sRSysVw>1</sRSysVw>
@@ -294,11 +304,6 @@
<pMon>Segger\JL2CM3.dll</pMon> <pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt> </DebugOpt>
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U60145553 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -N01("Unknown JTAG device") -D01(06413041) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key> <Key>ARMRTXEVENTFLAGS</Key>
@@ -307,13 +312,18 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGTARM</Key> <Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=620,209,878,797,0)(1012=-1,-1,-1,-1,0)</Name> <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ARMDBGFLAGS</Key> <Key>ARMDBGFLAGS</Key>
<Name></Name> <Name></Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U-O14 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -N01("Unknown JTAG device") -D01(06413041) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGUARM</Key> <Key>DLGUARM</Key>
@@ -322,199 +332,59 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>UL2CM3</Key> <Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_1024 -FL0100000 -FS08000000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name> <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM))</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U005600373433510237363934 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131123 -TC168000000 -TT10000000 -TP21 -TDS800D -TDT1 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint/> <Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>50</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134253566</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>../Core/Src/usart.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Debug_F417\../Core/Src/usart.c\50</Expression>
</Bp>
</Breakpoint>
<WatchWindow1> <WatchWindow1>
<Ww> <Ww>
<count>0</count> <count>0</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>upp.call,0x0A</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>upp,0x0A</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>uwTick,0x0A</ItemText> <ItemText>uwTick,0x0A</ItemText>
</Ww> </Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>errors.prvt.f.err</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>errors.prvt.cnt</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>upp.pm.measured</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>hbt,0x0A</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>\\Debug_F417\../Core/UPP/upp_main.c\upp.pm.avg[5].dataProcessing</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>1</WinNumber>
<ItemText>dbg_polarity,0x0A</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>1</WinNumber>
<ItemText>dbg_iref</ItemText>
</Ww>
<Ww>
<count>10</count>
<WinNumber>1</WinNumber>
<ItemText>upp.pm.zc.Channel[0].HalfWave</ItemText>
</Ww>
<Ww>
<count>11</count>
<WinNumber>1</WinNumber>
<ItemText>\\Debug_F417\../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c\uwTick,0x0A</ItemText>
</Ww>
<Ww>
<count>12</count>
<WinNumber>1</WinNumber>
<ItemText>htim1</ItemText>
</Ww>
<Ww>
<count>13</count>
<WinNumber>1</WinNumber>
<ItemText>htim2</ItemText>
</Ww>
<Ww>
<count>14</count>
<WinNumber>1</WinNumber>
<ItemText>UPP_DIN,0x0A</ItemText>
</Ww>
<Ww>
<count>15</count>
<WinNumber>1</WinNumber>
<ItemText>\\Debug_F417\../Core/UPP/upp_io.c\UPP_DIN.Pusk.Sw_FilterDelay</ItemText>
</Ww>
<Ww>
<count>16</count>
<WinNumber>1</WinNumber>
<ItemText>hadc3</ItemText>
</Ww>
<Ww>
<count>17</count>
<WinNumber>1</WinNumber>
<ItemText>upp.hangle.Iref</ItemText>
</Ww>
<Ww>
<count>18</count>
<WinNumber>1</WinNumber>
<ItemText>upp.pm.measured.final.U[0]</ItemText>
</Ww>
</WatchWindow1>
<WatchWindow2>
<Ww>
<count>0</count>
<WinNumber>2</WinNumber>
<ItemText>MB_INTERNAL,0x0A</ItemText>
</Ww>
<Ww> <Ww>
<count>1</count> <count>1</count>
<WinNumber>2</WinNumber> <WinNumber>1</WinNumber>
<ItemText>MB_DATA,0x0A</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>2</WinNumber>
<ItemText>errors.prvt.f.err,0x0A</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>2</WinNumber>
<ItemText>errors.prvt.cnt,0x0A</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>2</WinNumber>
<ItemText>errors.pui,0x0A</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>2</WinNumber>
<ItemText>errors.common</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>2</WinNumber>
<ItemText>upp.pm.measured.slow.U[0]</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>2</WinNumber>
<ItemText>zc-&gt;Channel[channel1].PeriodStartTime,0x0A</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>2</WinNumber>
<ItemText>zc-&gt;Channel[channel2].PeriodStartTime,0x0A</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>2</WinNumber>
<ItemText>zc-&gt;Channel[channel1].PeriodStartTime - zc-&gt;Channel[channel2].PeriodStartTime,0x10</ItemText>
</Ww>
<Ww>
<count>10</count>
<WinNumber>2</WinNumber>
<ItemText>htim5.Instance,0x0A</ItemText>
</Ww>
<Ww>
<count>11</count>
<WinNumber>2</WinNumber>
<ItemText>iref_dbg</ItemText>
</Ww>
<Ww>
<count>12</count>
<WinNumber>2</WinNumber>
<ItemText>upp.pm.measured.slow.U[0]</ItemText>
</Ww>
<Ww>
<count>13</count>
<WinNumber>2</WinNumber>
<ItemText>upp,0x0A</ItemText> <ItemText>upp,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>14</count> <count>2</count>
<WinNumber>2</WinNumber> <WinNumber>1</WinNumber>
<ItemText>htim5,0x0A</ItemText> <ItemText>MB_DEVID</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>15</count> <count>3</count>
<WinNumber>2</WinNumber> <WinNumber>1</WinNumber>
<ItemText>htim3,0x0A</ItemText> <ItemText>hmodbus1,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>16</count> <count>4</count>
<WinNumber>2</WinNumber> <WinNumber>1</WinNumber>
<ItemText>htim5.Instance-&gt;CNT-2605346416,0x0A</ItemText> <ItemText>RS_Buffer</ItemText>
</Ww> </Ww>
</WatchWindow2> <Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>pclk,0x0A</ItemText>
</Ww>
</WatchWindow1>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
</Tracepoint> </Tracepoint>
@@ -539,7 +409,7 @@
<aPa1>0</aPa1> <aPa1>0</aPa1>
<AscS4>0</AscS4> <AscS4>0</AscS4>
<aSer4>0</aSer4> <aSer4>0</aSer4>
<StkLoc>1</StkLoc> <StkLoc>0</StkLoc>
<TrcWin>0</TrcWin> <TrcWin>0</TrcWin>
<newCpu>0</newCpu> <newCpu>0</newCpu>
<uProt>0</uProt> <uProt>0</uProt>
@@ -559,17 +429,17 @@
<pMultCmdsp></pMultCmdsp> <pMultCmdsp></pMultCmdsp>
<SystemViewers> <SystemViewers>
<Entry> <Entry>
<Name>System Viewer\ADC3</Name> <Name>System Viewer\GPIOB</Name>
<WinId>35905</WinId> <WinId>35905</WinId>
</Entry> </Entry>
<Entry> <Entry>
<Name>System Viewer\DMA2</Name> <Name>System Viewer\USART3</Name>
<WinId>35904</WinId> <WinId>35904</WinId>
</Entry> </Entry>
</SystemViewers> </SystemViewers>
<DebugDescription> <DebugDescription>
<Enable>1</Enable> <Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq> <EnableFlashSeq>1</EnableFlashSeq>
<EnableLog>0</EnableLog> <EnableLog>0</EnableLog>
<Protocol>2</Protocol> <Protocol>2</Protocol>
<DbgClock>10000000</DbgClock> <DbgClock>10000000</DbgClock>
@@ -1187,7 +1057,7 @@
<Group> <Group>
<GroupName>MyLibs</GroupName> <GroupName>MyLibs</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@@ -1859,7 +1729,7 @@
<Group> <Group>
<GroupName>Application/MDK-ARM</GroupName> <GroupName>Application/MDK-ARM</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@@ -1899,7 +1769,7 @@
<Group> <Group>
<GroupName>::Compiler</GroupName> <GroupName>::Compiler</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>1</RteFlg> <RteFlg>1</RteFlg>

View File

@@ -138,7 +138,7 @@
<DriverSelection>4101</DriverSelection> <DriverSelection>4101</DriverSelection>
</Flash1> </Flash1>
<bUseTDR>1</bUseTDR> <bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2V8M.DLL</Flash2> <Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3></Flash3> <Flash3></Flash3>
<Flash4></Flash4> <Flash4></Flash4>
<pFcarmOut></pFcarmOut> <pFcarmOut></pFcarmOut>

View File

@@ -164,10 +164,12 @@ NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.TIM1_UP_TIM10_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM1_UP_TIM10_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM8_BRK_TIM12_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM8_TRG_COM_TIM14_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true NVIC.TIM8_TRG_COM_TIM14_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true
NVIC.TIM8_UP_TIM13_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM8_UP_TIM13_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TimeBase=TIM8_TRG_COM_TIM14_IRQn NVIC.TimeBase=TIM8_TRG_COM_TIM14_IRQn
NVIC.TimeBaseIP=TIM14 NVIC.TimeBaseIP=TIM14
NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA10.GPIOParameters=GPIO_Label PA10.GPIOParameters=GPIO_Label
PA10.GPIO_Label=PWM3 PA10.GPIO_Label=PWM3