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

добавлен, но не запущен модбас
фиксы симуляции и тесты с двигателем в матлаб
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)))
/* Use of CMSIS compiler intrinsics for register exclusive access */
/* Atomic 32-bit register access macro to set one or several bits */
/* Atomic operations for MinGW/GCC */
/* Atomic 32-bit register access macro to set one or several bits */
#define ATOMIC_SET_BIT(REG, BIT) \
do { \
uint32_t val; \
do { \
val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT); \
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
__sync_fetch_and_or(&(REG), (BIT)); \
} while(0)
/* Atomic 32-bit register access macro to clear one or several bits */
#define ATOMIC_CLEAR_BIT(REG, BIT) \
do { \
uint32_t val; \
do { \
val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT); \
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
__sync_fetch_and_and(&(REG), ~(BIT)); \
} while(0)
/* Atomic 32-bit register access macro to clear and set one or several bits */
#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) \
do { \
uint32_t val; \
do { \
val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
} while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK) \
do { \
uint32_t old_val, new_val; \
do { \
old_val = (REG); \
new_val = (old_val & ~(CLEARMSK)) | (SETMASK); \
} while (!__sync_bool_compare_and_swap(&(REG), old_val, new_val)); \
} while(0)
/* Atomic 16-bit register access macro to set one or several bits */
#define ATOMIC_SETH_BIT(REG, BIT) \
do { \
uint16_t val; \
do { \
val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT); \
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
__sync_fetch_and_or((uint16_t *)&(REG), (BIT)); \
} while(0)
/* Atomic 16-bit register access macro to clear one or several bits */
#define ATOMIC_CLEARH_BIT(REG, BIT) \
do { \
uint16_t val; \
do { \
val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT); \
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
__sync_fetch_and_and((uint16_t *)&(REG), ~(BIT)); \
} while(0)
/* 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 { \
uint16_t val; \
uint16_t old_val, new_val; \
do { \
val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
} while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
old_val = (REG); \
new_val = (old_val & ~(CLEARMSK)) | (SETMASK); \
} while (!__sync_bool_compare_and_swap((uint16_t *)&(REG), old_val, new_val)); \
} while(0)
/**
* @}
*/

View File

@@ -167,7 +167,7 @@ typedef struct {
unsigned fInitDone : 1; ///< флаг для выхода из потока программы МК
double SimTime; ///< Текущее время симуляции
long SystemClock; ///< Счетчик тактов для симуляции системных тиков (в целочисленном формате)
long long SystemClock; ///< Счетчик тактов для симуляции системных тиков (в целочисленном формате)
double SystemClockDouble; ///< Счетчик в формате 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_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_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_adc.c

View File

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

View File

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

Binary file not shown.