diplom/научка/code/pwm_motor_control/PWM/settings.h
2025-05-09 21:26:59 +03:00

161 lines
5.1 KiB
C

/********************************MODBUS*************************************
Данный файл содержит объявления базовых функции и дефайны для реализации
MODBUS.
Данный файл необходимо подключить в rs_message.h. После подключать rs_message.h
к основному проекту.
***************************************************************************/
#ifndef __PROJ_SETTINGS_H_
#define __PROJ_SETTINGS_H_
#include "stm32f4xx_hal.h"
//--------DEFINES FOR SETTING OF SETTINGS-----------
#define SETTINGS_FLASH_ADDRESS_SHIFT (0x10000)
#define SETTINGS_FLASH_ADDRESS (FLASH_BASE + SETTINGS_FLASH_ADDRESS_SHIFT)
#define EEPROM_BASE
#define SETTINGS_EEPROM_ADDRESS_SHIFT
#define SETTINGS_EEPROM_ADDRESS (EEPROM_BASE + SETTINGS_EEPROM_ADDRESS_SHIFT)
#ifdef USE_EEPROM
#define SETTINGS_ADDRESS SETTINGS_EEPROM_ADDRESS
#else // USE_EEPROM
#define SETTINGS_ADDRESS SETTINGS_FLASH_ADDRESS
#endif // USE_EEPROM
//--------------------------------------------------
//------------DEFINES FOR PWM SETTING---------------
// settings defines
#define HZ_TIMER_CTRL 400
#define HZ_TIMER_PWM 1000
#define PWM_RAMP_SPEED 20
// TIM PWM1 SETTINGS
#define PWM_MASTER_TIM_NUMB 4
#define TIMER_PWM_TICKBASE TIM_TickBase_1US
#define TIMER_PWM_AHB_FREQ 84
#define TIMER_PWM1_INSTANCE TIM4
#define TIMER_PWM1_TIM_CHANNEL1 TIM_CHANNEL_1
#define TIMER_PWM1_TIM_CHANNEL2 TIM_CHANNEL_2
#define TIMER_PWM1_GPIOx GPIOD
#define TIMER_PWM1_GPIO_PIN_X1 GPIO_PIN_12
#define TIMER_PWM1_GPIO_PIN_X2 GPIO_PIN_13
// TIM PWM2 SETTINGS
#define TIMER_PWM2_INSTANCE TIM3
#define TIMER_PWM2_TIM_CHANNEL1 TIM_CHANNEL_3
#define TIMER_PWM2_TIM_CHANNEL2 TIM_CHANNEL_4
#define TIMER_PWM2_GPIOx GPIOB
#define TIMER_PWM2_GPIO_PIN_X1 GPIO_PIN_0
#define TIMER_PWM2_GPIO_PIN_X2 GPIO_PIN_1
// TIM PWM3 SETTINGS
#define TIMER_PWM3_INSTANCE TIM1
#define TIMER_PWM3_TIM_CHANNEL1 TIM_CHANNEL_1
#define TIMER_PWM3_TIM_CHANNEL2 TIM_CHANNEL_2
#define TIMER_PWM3_GPIOx GPIOE
#define TIMER_PWM3_GPIO_PIN_X1 GPIO_PIN_9
#define TIMER_PWM3_GPIO_PIN_X2 GPIO_PIN_11
// TIM CTRL SETTINGS
#define TIMER_CTRL_INSTANCE TIM13
#define TIMER_CTRL_TICKBASE TIM_TickBase_1US
#define TIMER_CTRL_AHB_FREQ 84
// TIM ENCODER SETTINGS
#define TIMER_ENCODER_INSTANCE TIM5
#define TIMER_ENCODER_TICKBASE (TIM_TickBase_1US)
#define TIMER_ENCODER_AHB_FREQ 84
#define TIMER_ENCODER_PORT GPIOA
#define TIMER_ENCODER_PIN1 GPIO_PIN_0
#define TIMER_ENCODER_PIN2 GPIO_PIN_1
#define TIMER_ENCODER_PIN_SW GPIO_PIN_2
// PWM SETTINGS
#define SIN_TABLE_ORIGIN sin_table
#define SIN_TABLE_SIZE_MAX 1000
//--------------------------------------------------
//----------DEFINES FOR MODBUS SETTING--------------
#define MODBUS_UART_NUMB 3 // number of used uart
#define MODBUS_SPEED 115200
#define MODBUS_GPIOX GPIOB
#define MODBUS_GPIO_PIN_RX GPIO_PIN_11
#define MODBUS_GPIO_PIN_TX GPIO_PIN_10
/* accord to this define sets define USED_MB_UART = USARTx */
#define MODBUS_TIM_NUMB 7 // number of used uart
#define MODBUS_TIM_AHB_FREQ 84
/* accord to this define sets define USED_MB_TIM = TIMx */
/* defines for modbus behaviour */
#define MODBUS_DEVICE_ID 1 // number of used uart
#define MODBUS_MAX_TIMEOUT 5000 // is ms
// custom define for size of receive message
//--------------------------------------------------
typedef struct
{
// ctrl periph settings
uint32_t TIM_CTRL_TICKBASE;
uint32_t TIM_CTRL_AHB_FREQ;
// pwm peripth settings
uint32_t TIM_PWM_TICKBASE;
uint32_t TIM_PWM_AHB_FREQ;
// uint32_t TIM_PWM1_INSTANCE;
uint32_t TIM_PWM1_TIM_CHANNEL1;
uint32_t TIM_PWM1_TIM_CHANNEL2;
uint32_t TIM_PWM1_GPIOx;
uint32_t TIM_PWM1_GPIO_PIN_X1;
uint32_t TIM_PWM1_GPIO_PIN_X2;
uint32_t TIM_PWM2_INSTANCE;
uint32_t TIM_PWM2_TIM_CHANNEL1;
uint32_t TIM_PWM2_TIM_CHANNEL2;
uint32_t TIM_PWM2_GPIOx;
uint32_t TIM_PWM2_GPIO_PIN_X1;
uint32_t TIM_PWM2_GPIO_PIN_X2;
uint32_t TIM_PWM3_INSTANCE;
uint32_t TIM_PWM3_TIM_CHANNEL1;
uint32_t TIM_PWM3_TIM_CHANNEL2;
uint32_t TIM_PWM3_GPIOx;
uint32_t TIM_PWM3_GPIO_PIN_X1;
uint32_t TIM_PWM3_GPIO_PIN_X2;
// modbus peripth settings
uint32_t MB_DEVICE_ID;
uint32_t MB_SPEED;
uint32_t MB_GPIOX;
uint32_t MB_GPIO_PIN_RX;
uint32_t MB_GPIO_PIN_TX;
uint32_t MB_MAX_TIMEOUT;
uint32_t MB_TIM_AHB_FREQ;
// uint32_t MB_UART_NUMB;
// uint32_t MB_TIM_NUMB;
}ProjectSettings_TypeDef;
extern ProjectSettings_TypeDef PROJSET;
#define PROJSET_MEM ((ProjectSettings_TypeDef *)SETTINGS_ADDRESS)
//#define HAL_FLASH_GET_TYPEPROGRAM(_val_) (sizeof(PROJSET_MEM->MB_DEVICE_ID)/2 - 1)
#define HAL_FLASH_GET_TYPEPROGRAM(_val_) FLASH_TYPEPROGRAM_WORD
#define FLASH_WRITE_SETTING(_setting_, _val_) HAL_FLASH_Program(HAL_FLASH_GET_TYPEPROGRAM(_setting_), (uint32_t)(&_setting_), (uint32_t)_val_);
void SetFlagUpdateSettingsInMem(void);
void UpdateSettingsInMem(void);
void WriteSettingsToMem(void);
void FillSettingsWithDefines(void);
void CheckSettingsInFLASH(void);
int CheckIsSettingsValid(ProjectSettings_TypeDef *set_struct);
#endif // __PROJ_SETTINGS_H_