Доработки по мониторингу сети и моделированию
Неудачная попытка добавить биквадратный фильтр для АЦП (уходит в разнос)
This commit is contained in:
parent
5299cc5b12
commit
e4f05bdf6a
@ -72,7 +72,7 @@ struct TIM_Sim
|
|||||||
int Updated; // счетчик таймера
|
int Updated; // счетчик таймера
|
||||||
double tx_cnt; // счетчик таймера
|
double tx_cnt; // счетчик таймера
|
||||||
double tx_step; // шаг счета за один шаг симуляции
|
double tx_step; // шаг счета за один шаг симуляции
|
||||||
int RELOAD; // буфер, если PRELOAD = 1
|
long long RELOAD; // буфер, если PRELOAD = 1
|
||||||
struct Channels_Sim Channels; // структура для симуляции каналов
|
struct Channels_Sim Channels; // структура для симуляции каналов
|
||||||
};
|
};
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@ -49,7 +49,7 @@ void deInitialize_MCU(void)
|
|||||||
ClearStruct(htim8);
|
ClearStruct(htim8);
|
||||||
ClearStruct(htim11);
|
ClearStruct(htim11);
|
||||||
ClearStruct(htim12);
|
ClearStruct(htim12);
|
||||||
ClearStruct(htim13);
|
ClearStruct(htim5);
|
||||||
ClearStruct(hadc3);
|
ClearStruct(hadc3);
|
||||||
ClearStruct(hdma_adc3);
|
ClearStruct(hdma_adc3);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,14 +37,16 @@ const int inOffsets[IN_PORT_NUMB] = {
|
|||||||
*/
|
*/
|
||||||
const int outLengths[OUT_PORT_NUMB] = {
|
const int outLengths[OUT_PORT_NUMB] = {
|
||||||
THYR_PORT_1_WIDTH,
|
THYR_PORT_1_WIDTH,
|
||||||
OUT_PORT_2_WIDTH
|
OUT_PORT_2_WIDTH,
|
||||||
|
OUT_PORT_3_WIDTH
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* @brief Таблица смещений в выходном массиве OUT
|
* @brief Таблица смещений в выходном массиве OUT
|
||||||
*/
|
*/
|
||||||
const int outOffsets[OUT_PORT_NUMB] = {
|
const int outOffsets[OUT_PORT_NUMB] = {
|
||||||
OFFSET_OUT_ARRAY_1,
|
OFFSET_OUT_ARRAY_1,
|
||||||
OFFSET_OUT_ARRAY_2
|
OFFSET_OUT_ARRAY_2,
|
||||||
|
OFFSET_OUT_ARRAY_3
|
||||||
};
|
};
|
||||||
|
|
||||||
// INPUT/OUTPUTS AUTO-PARAMS END
|
// INPUT/OUTPUTS AUTO-PARAMS END
|
||||||
|
|||||||
@ -53,9 +53,10 @@
|
|||||||
#define ADC_PORT_1_WIDTH 6
|
#define ADC_PORT_1_WIDTH 6
|
||||||
#define IN_PORT_2_WIDTH 1
|
#define IN_PORT_2_WIDTH 1
|
||||||
|
|
||||||
#define OUT_PORT_NUMB 2
|
#define OUT_PORT_NUMB 3
|
||||||
#define THYR_PORT_1_WIDTH 6
|
#define THYR_PORT_1_WIDTH 6
|
||||||
#define OUT_PORT_2_WIDTH 6
|
#define OUT_PORT_2_WIDTH 6
|
||||||
|
#define OUT_PORT_3_WIDTH 16
|
||||||
|
|
||||||
// INPUT/OUTPUTS PARAMS END
|
// INPUT/OUTPUTS PARAMS END
|
||||||
/** WRAPPER_CONF
|
/** WRAPPER_CONF
|
||||||
@ -94,11 +95,12 @@
|
|||||||
#define OFFSET_IN_ARRAY_2 (OFFSET_IN_ARRAY_1 + ADC_PORT_1_WIDTH)
|
#define OFFSET_IN_ARRAY_2 (OFFSET_IN_ARRAY_1 + ADC_PORT_1_WIDTH)
|
||||||
|
|
||||||
/// === Полный размер буфера ===
|
/// === Полный размер буфера ===
|
||||||
#define TOTAL_OUT_SIZE (THYR_PORT_1_WIDTH + OUT_PORT_2_WIDTH)
|
#define TOTAL_OUT_SIZE (THYR_PORT_1_WIDTH + OUT_PORT_2_WIDTH + OUT_PORT_3_WIDTH)
|
||||||
|
|
||||||
/// === Смещения массивов (внутри общего буфера) ===
|
/// === Смещения массивов (внутри общего буфера) ===
|
||||||
#define OFFSET_OUT_ARRAY_1 0
|
#define OFFSET_OUT_ARRAY_1 0
|
||||||
#define OFFSET_OUT_ARRAY_2 (OFFSET_OUT_ARRAY_1 + THYR_PORT_1_WIDTH)
|
#define OFFSET_OUT_ARRAY_2 (OFFSET_OUT_ARRAY_1 + THYR_PORT_1_WIDTH)
|
||||||
|
#define OFFSET_OUT_ARRAY_3 (OFFSET_OUT_ARRAY_2 + OUT_PORT_2_WIDTH)
|
||||||
|
|
||||||
// INPUT/OUTPUTS AUTO-PARAMS END
|
// INPUT/OUTPUTS AUTO-PARAMS END
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,7 @@ void app_init(void) {
|
|||||||
MX_TIM1_Init();
|
MX_TIM1_Init();
|
||||||
MX_TIM3_Init();
|
MX_TIM3_Init();
|
||||||
MX_TIM8_Init();
|
MX_TIM8_Init();
|
||||||
|
MX_TIM5_Init();
|
||||||
MX_ADC3_Init();
|
MX_ADC3_Init();
|
||||||
UPP_Init();
|
UPP_Init();
|
||||||
UPP_PreWhile();
|
UPP_PreWhile();
|
||||||
|
|||||||
@ -54,6 +54,10 @@ void app_writeOutputBuffer(real_T* Buffer) {
|
|||||||
{
|
{
|
||||||
WriteOutputArray(pm.ZC_Detected[i], 0, i);
|
WriteOutputArray(pm.ZC_Detected[i], 0, i);
|
||||||
}
|
}
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
WriteOutputArray(pm.zc.Channel[i].DebounceCounter, 0, i+2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern ADC_Periodic_t adc;
|
extern ADC_Periodic_t adc;
|
||||||
@ -61,5 +65,25 @@ void app_writeOutputBuffer(real_T* Buffer) {
|
|||||||
{
|
{
|
||||||
WriteOutputArray(pm.adc.Data[i], 1, i);
|
WriteOutputArray(pm.adc.Data[i], 1, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
WriteOutputArray(pm.U[i], 2, i);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
WriteOutputArray(pm.ZC_Detected[i], 2, i + 3);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
WriteOutputArray(pm.I[i], 2, i + 6);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
WriteOutputArray(pm.F[i], 2, i + 9);
|
||||||
|
}
|
||||||
// USER APP OUTPUT END
|
// USER APP OUTPUT END
|
||||||
}
|
}
|
||||||
Binary file not shown.
@ -1 +1 @@
|
|||||||
Subproject commit 9b9969dd7ce85e3e317e6fef71c9e1e591d52e46
|
Subproject commit 48daccef2d1fefe965f020e5b342ed683fe40a62
|
||||||
@ -14,10 +14,24 @@
|
|||||||
#define _UPP_CONFIG_H_
|
#define _UPP_CONFIG_H_
|
||||||
#include "stm32f4xx_hal.h"
|
#include "stm32f4xx_hal.h"
|
||||||
|
|
||||||
#define PM_ADC_PERIOD 1800-1
|
|
||||||
|
#define U_BA 0
|
||||||
|
#define U_AC 1
|
||||||
|
#define U_BC 2
|
||||||
|
#define I_C 0
|
||||||
|
#define I_A 1
|
||||||
|
#define I_B 2
|
||||||
|
#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_HYSTERESIS_V 10
|
||||||
#define PM_ZERO_CROSS_DEBOUNCE_10US 3
|
#define PM_ZERO_CROSS_DEBOUNCE_10US 2.5*100 // (2.5 * 100 = 2.5 мс)
|
||||||
|
|
||||||
|
|
||||||
|
// Рассчитанные дефайны
|
||||||
|
#define PM_ADC_PERIOD (180*PM_ADC_PERIOD_MKS)-1
|
||||||
|
|
||||||
#endif //_UPP_CONFIG_H_
|
#endif //_UPP_CONFIG_H_
|
||||||
|
|||||||
@ -40,7 +40,6 @@ extern "C" {
|
|||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
/* Exported types ------------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN ET */
|
/* USER CODE BEGIN ET */
|
||||||
|
|
||||||
/* USER CODE END ET */
|
/* USER CODE END ET */
|
||||||
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
/* Exported constants --------------------------------------------------------*/
|
||||||
@ -74,8 +73,9 @@ extern __IO uint32_t micros;
|
|||||||
#define adc_tim htim8
|
#define adc_tim htim8
|
||||||
#define hpwm2 htim2
|
#define hpwm2 htim2
|
||||||
#define mb_dbg_huart huart6
|
#define mb_dbg_huart huart6
|
||||||
#define ustim htim13
|
#define ustim htim5
|
||||||
#define hpwm1 htim1
|
#define hpwm1 htim1
|
||||||
|
#define usTick ustim.Instance->CNT
|
||||||
#define UM_LED_GREEN2_Pin GPIO_PIN_2
|
#define UM_LED_GREEN2_Pin GPIO_PIN_2
|
||||||
#define UM_LED_GREEN2_GPIO_Port GPIOE
|
#define UM_LED_GREEN2_GPIO_Port GPIOE
|
||||||
#define CEN_O_Pin GPIO_PIN_3
|
#define CEN_O_Pin GPIO_PIN_3
|
||||||
@ -168,7 +168,7 @@ extern __IO uint32_t micros;
|
|||||||
#define UM_LED_GREEN1_GPIO_Port GPIOE
|
#define UM_LED_GREEN1_GPIO_Port GPIOE
|
||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
|
extern TIM_HandleTypeDef ustim;
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@ -36,24 +36,24 @@ extern TIM_HandleTypeDef htim1;
|
|||||||
|
|
||||||
extern TIM_HandleTypeDef htim3;
|
extern TIM_HandleTypeDef htim3;
|
||||||
|
|
||||||
|
extern TIM_HandleTypeDef htim5;
|
||||||
|
|
||||||
extern TIM_HandleTypeDef htim8;
|
extern TIM_HandleTypeDef htim8;
|
||||||
|
|
||||||
extern TIM_HandleTypeDef htim11;
|
extern TIM_HandleTypeDef htim11;
|
||||||
|
|
||||||
extern TIM_HandleTypeDef htim12;
|
extern TIM_HandleTypeDef htim12;
|
||||||
|
|
||||||
extern TIM_HandleTypeDef htim13;
|
|
||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
/* USER CODE BEGIN Private defines */
|
||||||
|
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
void MX_TIM1_Init(void);
|
void MX_TIM1_Init(void);
|
||||||
void MX_TIM3_Init(void);
|
void MX_TIM3_Init(void);
|
||||||
|
void MX_TIM5_Init(void);
|
||||||
void MX_TIM8_Init(void);
|
void MX_TIM8_Init(void);
|
||||||
void MX_TIM11_Init(void);
|
void MX_TIM11_Init(void);
|
||||||
void MX_TIM12_Init(void);
|
void MX_TIM12_Init(void);
|
||||||
void MX_TIM13_Init(void);
|
|
||||||
|
|
||||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,31 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#include "adc_tools.h"
|
#include "adc_tools.h"
|
||||||
|
|
||||||
|
//Полосовой фильтр 45-55 Гц
|
||||||
|
static float coefs_biquad_U[5] = {
|
||||||
|
0.000010f, // b0
|
||||||
|
0.000020f, // b1
|
||||||
|
0.000010f, // b2
|
||||||
|
-1.900000f, // a1
|
||||||
|
0.950000f // a2
|
||||||
|
};
|
||||||
|
|
||||||
|
// ФНЧ 100 Гц
|
||||||
|
static float coefs_biquad_I[5] = {
|
||||||
|
0.000010f, // b0
|
||||||
|
0.000020f, // b1
|
||||||
|
0.000010f, // b2
|
||||||
|
-1.900000f, // a1
|
||||||
|
0.950000f // a2
|
||||||
|
};
|
||||||
|
// ФНЧ 10 Гц
|
||||||
|
static float coefs_biquad_T[5] = {
|
||||||
|
0.0002f, // b0
|
||||||
|
0.0004f, // b1
|
||||||
|
0.0002f, // b2
|
||||||
|
-1.98f, // a1
|
||||||
|
0.980f // a2
|
||||||
|
};
|
||||||
// Проверка корректности структуры АЦП
|
// Проверка корректности структуры АЦП
|
||||||
#define assert_adc(_adc_) check_null_ptr_2(_adc_, (_adc_)->f.Initialized)
|
#define assert_adc(_adc_) check_null_ptr_2(_adc_, (_adc_)->f.Initialized)
|
||||||
|
|
||||||
@ -20,11 +44,17 @@ static void ADC_EnableAllFilters(ADC_Periodic_t *adc)
|
|||||||
}
|
}
|
||||||
static void ADC_InitAllFilters(ADC_Periodic_t *adc)
|
static void ADC_InitAllFilters(ADC_Periodic_t *adc)
|
||||||
{
|
{
|
||||||
|
// Filter_Init(&adc->filter[ADC_CHANNEL_UBA], coefs_biquad_U);
|
||||||
|
// Filter_Init(&adc->filter[ADC_CHANNEL_UAC], coefs_biquad_U);
|
||||||
|
// Filter_Init(&adc->filter[ADC_CHANNEL_IC], coefs_biquad_I);
|
||||||
|
// Filter_Init(&adc->filter[ADC_CHANNEL_IA], coefs_biquad_I);
|
||||||
|
// Filter_Init(&adc->filter[ADC_CHANNEL_TEMP1], coefs_biquad_T);
|
||||||
|
// Filter_Init(&adc->filter[ADC_CHANNEL_TEMP2], coefs_biquad_T);
|
||||||
|
|
||||||
for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++)
|
for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++)
|
||||||
{
|
{
|
||||||
Filter_Init(&adc->filter[i], Filter_Coef);
|
Filter_Init(&adc->filter[i], Filter_Initializator);
|
||||||
}
|
}
|
||||||
|
|
||||||
FilterLUTInt_Init(&adc->temp_map[0],
|
FilterLUTInt_Init(&adc->temp_map[0],
|
||||||
(int32_t *)adc_temp_quants,
|
(int32_t *)adc_temp_quants,
|
||||||
(int32_t *)adc_temp_vals,
|
(int32_t *)adc_temp_vals,
|
||||||
@ -147,16 +177,6 @@ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc)
|
|||||||
uint16_t *raw = adc->RawData;
|
uint16_t *raw = adc->RawData;
|
||||||
float *data = adc->Data;
|
float *data = adc->Data;
|
||||||
|
|
||||||
// Фильтрация от шумов для всех каналов
|
|
||||||
for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++)
|
|
||||||
{
|
|
||||||
if(Filter_GetState(&adc->filter[i]) == FILTER_ENABLE)
|
|
||||||
{
|
|
||||||
// заменяем сырое на отфильтровоное сырое
|
|
||||||
raw[i] = Filter_Process(&adc->filter[i], raw[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Перерасчеты Напряжений/Токов в единицы измерения
|
// Перерасчеты Напряжений/Токов в единицы измерения
|
||||||
for(int i = 0; i < ADC_NUMB_OF_REGULAR_CHANNELS; i++)
|
for(int i = 0; i < ADC_NUMB_OF_REGULAR_CHANNELS; i++)
|
||||||
{
|
{
|
||||||
@ -165,6 +185,17 @@ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc)
|
|||||||
ADC_UpdateStatistics(adc, i, ADC_LEVEL_AC);
|
ADC_UpdateStatistics(adc, i, ADC_LEVEL_AC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Фильтрация от шумов для всех каналов
|
||||||
|
for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++)
|
||||||
|
{
|
||||||
|
if(Filter_isEnable(&adc->filter[i]))
|
||||||
|
{
|
||||||
|
// заменяем данные на отфильтрованные данные
|
||||||
|
data[i] = Filter_Process(&adc->filter[i], data[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Преобразования температуры по таблице
|
// Преобразования температуры по таблице
|
||||||
for (int i = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++)
|
for (int i = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++)
|
||||||
{
|
{
|
||||||
@ -221,7 +252,7 @@ void ADC_UpdateStatistics(ADC_Periodic_t *adc, uint8_t channel, ADC_StatLevel_t
|
|||||||
stat->SampleCount++;
|
stat->SampleCount++;
|
||||||
|
|
||||||
// Расчет Avg/RMS (периодически или по запросу)
|
// Расчет Avg/RMS (периодически или по запросу)
|
||||||
if (stat->SampleCount >= 1000) { // Пример: пересчет каждые 1000 samples
|
if (stat->SampleCount >= 4000) { // Пример: пересчет каждые 1000 samples
|
||||||
stat->Avg = stat->Sum / stat->SampleCount;
|
stat->Avg = stat->Sum / stat->SampleCount;
|
||||||
stat->RMS = sqrtf(stat->SumSquares / stat->SampleCount);
|
stat->RMS = sqrtf(stat->SumSquares / stat->SampleCount);
|
||||||
// Сброс накопителей
|
// Сброс накопителей
|
||||||
|
|||||||
@ -51,10 +51,9 @@
|
|||||||
static const int32_t adc_temp_vals[] = ADC_TEMPERATURES;
|
static const int32_t adc_temp_vals[] = ADC_TEMPERATURES;
|
||||||
static const int32_t adc_temp_quants[] = ADC_TEMPERATURES_QUANTS;
|
static const int32_t adc_temp_quants[] = ADC_TEMPERATURES_QUANTS;
|
||||||
|
|
||||||
#define Filter_t FilterMedianInt_t
|
#define Filter_t FilterMedian_t
|
||||||
#define Filter_Init FilterMedianInt_Init
|
#define Filter_Init FilterMedian_Init
|
||||||
#define Filter_Process FilterMedianInt_Process
|
#define Filter_Initializator 5
|
||||||
#define Filter_Coef 10
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Коэфициенты канала АЦП для пересчета в единицы измерения
|
* @brief Коэфициенты канала АЦП для пересчета в единицы измерения
|
||||||
@ -88,8 +87,6 @@ typedef struct
|
|||||||
float SumSquares; ///< Накопитель для RMS
|
float SumSquares; ///< Накопитель для RMS
|
||||||
}ADC_Statistics;
|
}ADC_Statistics;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Хендл АЦП
|
* @brief Хендл АЦП
|
||||||
*/
|
*/
|
||||||
@ -104,6 +101,7 @@ typedef struct
|
|||||||
ADC_Coefs_t Coefs[ADC_NUMB_OF_REGULAR_CHANNELS]; ///< Коэффициенты @ref ADC_Coefs_t для регулярных каналов (не температуры)
|
ADC_Coefs_t Coefs[ADC_NUMB_OF_REGULAR_CHANNELS]; ///< Коэффициенты @ref ADC_Coefs_t для регулярных каналов (не температуры)
|
||||||
|
|
||||||
Filter_t filter[ADC_NUMB_OF_CHANNELS]; ///< Фильтр от шумов АЦП
|
Filter_t filter[ADC_NUMB_OF_CHANNELS]; ///< Фильтр от шумов АЦП
|
||||||
|
|
||||||
FilterLUTInt_t temp_map[2]; ///< Коррекция нелинейности датчиков температуры
|
FilterLUTInt_t temp_map[2]; ///< Коррекция нелинейности датчиков температуры
|
||||||
|
|
||||||
float Data[ADC_NUMB_OF_CHANNELS]; ///< Пересчитанные значения АЦП (в Вольтах/Амперах)
|
float Data[ADC_NUMB_OF_CHANNELS]; ///< Пересчитанные значения АЦП (в Вольтах/Амперах)
|
||||||
|
|||||||
@ -15,23 +15,25 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm)
|
|||||||
if(ADC_Init(&hpm->adc, &adc_tim, &hadc3) != HAL_OK)
|
if(ADC_Init(&hpm->adc, &adc_tim, &hadc3) != HAL_OK)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_UBA, 2048, 1216, 4095) != HAL_OK)
|
if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_UBA, 2048, PM_U_BASE, 4095) != HAL_OK)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_UAC, 2048, 1216, 4095) != HAL_OK)
|
if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_UAC, 2048, PM_U_BASE, 4095) != HAL_OK)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_IC, 2048, 53, 4095) != HAL_OK)
|
if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_IC, 2048, PM_I_BASE, 4095) != HAL_OK)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_IA, 2048, 53, 4095) != HAL_OK)
|
if(ADC_ConfigChannel(&hpm->adc, ADC_CHANNEL_IA, 2048, PM_I_BASE, 4095) != HAL_OK)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
|
|
||||||
if(ZC_Init(&hpm->zc, ADC_NUMB_OF_U_CHANNELS, PM_ZERO_CROSS_HYSTERESIS_V, PM_ZERO_CROSS_DEBOUNCE_10US) != HAL_OK)
|
if(ZC_Init(&hpm->zc, 3, PM_ZERO_CROSS_HYSTERESIS_V, PM_ZERO_CROSS_DEBOUNCE_10US) != HAL_OK)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
if(ZC_ConfigChannel(&hpm->zc, ADC_CHANNEL_UBA, ZC_BOTH_EDGES) != HAL_OK)
|
if(ZC_ConfigChannel(&hpm->zc, U_BA, ZC_BOTH_EDGES) != HAL_OK)
|
||||||
return HAL_ERROR;
|
|
||||||
if(ZC_ConfigChannel(&hpm->zc, ADC_CHANNEL_UAC, ZC_BOTH_EDGES) != HAL_OK)
|
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
if(ZC_ConfigChannel(&hpm->zc, U_AC, ZC_BOTH_EDGES) != HAL_OK)
|
||||||
|
return HAL_ERROR;
|
||||||
|
if(ZC_ConfigChannel(&hpm->zc, U_BC, ZC_BOTH_EDGES) != HAL_OK)
|
||||||
|
return HAL_ERROR;
|
||||||
|
|
||||||
return HAL_OK;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
@ -49,15 +51,31 @@ HAL_StatusTypeDef PowerMonitor_Start(PowerMonitor_t *hpm)
|
|||||||
|
|
||||||
void PowerMonitor_Handle(PowerMonitor_t *hpm)
|
void PowerMonitor_Handle(PowerMonitor_t *hpm)
|
||||||
{
|
{
|
||||||
static uint32_t last_zc_cnt[ADC_NUMB_OF_U_CHANNELS] = {0};
|
static uint32_t last_zc_state[ADC_NUMB_OF_U_CHANNELS] = {0};
|
||||||
ADC_Handle(&hpm->adc);
|
ADC_Handle(&hpm->adc);
|
||||||
ZC_ProcessAllChannels(&hpm->zc, hpm->adc.Data, uwTick);
|
|
||||||
for(int i = 0; i < ADC_NUMB_OF_U_CHANNELS; i++)
|
hpm->U[U_BA] = hpm->adc.Data[ADC_CHANNEL_UBA];
|
||||||
|
hpm->U[U_AC] = hpm->adc.Data[ADC_CHANNEL_UAC];
|
||||||
|
hpm->U[U_BC] = -hpm->U[U_BA] - hpm->U[U_AC];
|
||||||
|
|
||||||
|
hpm->I[I_C] = hpm->adc.Data[ADC_CHANNEL_IC];
|
||||||
|
hpm->I[I_A] = hpm->adc.Data[ADC_CHANNEL_IA];
|
||||||
|
hpm->I[I_B] = -hpm->I[I_A] - hpm->I[I_C];
|
||||||
|
|
||||||
|
hpm->T[TEMP_1] = hpm->adc.Data[ADC_CHANNEL_TEMP1];
|
||||||
|
hpm->T[TEMP_2] = hpm->adc.Data[ADC_CHANNEL_TEMP2];
|
||||||
|
|
||||||
|
ZC_ProcessAllChannels(&hpm->zc, hpm->U, usTick);
|
||||||
|
for(int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
if(last_zc_cnt[i] != ZC_GetCrossCount(&hpm->zc, i))
|
if(last_zc_state[i] != ZC_GetStableState(&hpm->zc, i))
|
||||||
{
|
{
|
||||||
last_zc_cnt[i] = ZC_GetCrossCount(&hpm->zc, i);
|
last_zc_state[i] = ZC_GetStableState(&hpm->zc, i);
|
||||||
hpm->ZC_Detected[i] = !hpm->ZC_Detected[i];
|
hpm->ZC_Detected[i] = !hpm->ZC_Detected[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hpm->F[U_BA] = (hpm->zc.Channel[U_BA].Frequency) / 2;
|
||||||
|
hpm->F[U_AC] = (hpm->zc.Channel[U_AC].Frequency) / 2;
|
||||||
|
hpm->F[U_BC] = (hpm->zc.Channel[U_BC].Frequency) / 2;
|
||||||
}
|
}
|
||||||
@ -14,12 +14,12 @@ typedef struct
|
|||||||
{
|
{
|
||||||
ADC_Periodic_t adc;
|
ADC_Periodic_t adc;
|
||||||
ZeroCross_Handle_t zc;
|
ZeroCross_Handle_t zc;
|
||||||
uint32_t ZC_Detected[ADC_NUMB_OF_U_CHANNELS];
|
uint32_t ZC_Detected[3];
|
||||||
|
|
||||||
float U[3];
|
float U[3];
|
||||||
|
float F[3];
|
||||||
float I[3];
|
float I[3];
|
||||||
float T[3];
|
float T[3];
|
||||||
|
|
||||||
}PowerMonitor_t;
|
}PowerMonitor_t;
|
||||||
extern PowerMonitor_t pm;
|
extern PowerMonitor_t pm;
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
* @return HAL Status.
|
* @return HAL Status.
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef ZC_Init(ZeroCross_Handle_t *zc, uint8_t num_channels,
|
HAL_StatusTypeDef ZC_Init(ZeroCross_Handle_t *zc, uint8_t num_channels,
|
||||||
float hysteresis, uint8_t debounce_samples)
|
float hysteresis, uint16_t debounce_samples)
|
||||||
{
|
{
|
||||||
if (zc == NULL || num_channels == 0 || num_channels > ZC_MAX_CHANNELS) {
|
if (zc == NULL || num_channels == 0 || num_channels > ZC_MAX_CHANNELS) {
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
@ -93,18 +93,18 @@ void ZC_ProcessChannel(ZeroCross_Handle_t *zc, uint8_t channel, float value, uin
|
|||||||
{
|
{
|
||||||
if (zc == NULL || !zc->f.Initialized || !zc->f.Monitoring) {
|
if (zc == NULL || !zc->f.Initialized || !zc->f.Monitoring) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (channel >= zc->NumChannels) {
|
if (channel >= zc->NumChannels) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
int zc_detected = 0;
|
||||||
|
|
||||||
ZC_Channel_t *zc_ch = &zc->Channel[channel];
|
ZC_Channel_t *zc_ch = &zc->Channel[channel];
|
||||||
zc_ch->CurrentValue = value;
|
zc_ch->CurrentValue = value;
|
||||||
|
|
||||||
|
|
||||||
// Фильтрация дребезга
|
// Фильтрация дребезга
|
||||||
if(zc_ch->DebounceCounter)
|
if(zc_ch->DebounceCounter > 0)
|
||||||
{
|
{
|
||||||
zc_ch->DebounceCounter--;
|
zc_ch->DebounceCounter--;
|
||||||
return;
|
return;
|
||||||
@ -112,43 +112,59 @@ void ZC_ProcessChannel(ZeroCross_Handle_t *zc, uint8_t channel, float value, uin
|
|||||||
|
|
||||||
// Детектирование rising edge (отрицательное -> положительное)
|
// Детектирование rising edge (отрицательное -> положительное)
|
||||||
if ((zc_ch->LastValue <= -zc->Hysteresis) &&
|
if ((zc_ch->LastValue <= -zc->Hysteresis) &&
|
||||||
(value >= zc->Hysteresis)) {
|
(value >= zc->Hysteresis))
|
||||||
|
{
|
||||||
|
|
||||||
if (zc_ch->EdgeType == ZC_RISING_EDGE || zc_ch->EdgeType == ZC_BOTH_EDGES) {
|
if (zc_ch->EdgeType == ZC_RISING_EDGE || zc_ch->EdgeType == ZC_BOTH_EDGES) {
|
||||||
// Переход подтвержден сразу (без дебаунса)
|
if(zc->DebounceSamples)
|
||||||
if (zc_ch->LastCrossTime != 0) {
|
{
|
||||||
// Расчет периода и частоты
|
if(zc_ch->DebounceCounter == 0)
|
||||||
zc_ch->Period = timestamp - zc_ch->LastCrossTime;
|
{
|
||||||
if (zc_ch->Period > 0) {
|
zc_ch->DebounceCounter = zc->DebounceSamples;
|
||||||
zc_ch->Frequency = 1000000.0f / zc_ch->Period;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zc_ch->LastCrossTime = timestamp;
|
zc_detected = 1;
|
||||||
zc_ch->CrossCount++;
|
|
||||||
zc_ch->StableState = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Детектирование falling edge (положительное -> отрицательное)
|
// Детектирование falling edge (положительное -> отрицательное)
|
||||||
else if ((zc_ch->LastValue >= zc->Hysteresis) &&
|
else if ((zc_ch->LastValue >= zc->Hysteresis) &&
|
||||||
(value <= -zc->Hysteresis)) {
|
(value <= -zc->Hysteresis))
|
||||||
|
{
|
||||||
|
|
||||||
if (zc_ch->EdgeType == ZC_FALLING_EDGE || zc_ch->EdgeType == ZC_BOTH_EDGES) {
|
if (zc_ch->EdgeType == ZC_FALLING_EDGE || zc_ch->EdgeType == ZC_BOTH_EDGES) {
|
||||||
// Переход подтвержден сразу (без дебаунса)
|
if(zc->DebounceSamples)
|
||||||
if (zc_ch->LastCrossTime != 0) {
|
{
|
||||||
// Расчет периода и частоты
|
if(zc_ch->DebounceCounter == 0)
|
||||||
zc_ch->Period = timestamp - zc_ch->LastCrossTime;
|
{
|
||||||
if (zc_ch->Period > 0) {
|
zc_ch->DebounceCounter = zc->DebounceSamples;
|
||||||
zc_ch->Frequency = 1000000.0f / zc_ch->Period;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zc_ch->LastCrossTime = timestamp;
|
zc_detected = -1;
|
||||||
zc_ch->CrossCount++;
|
|
||||||
zc_ch->StableState = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(zc_detected)
|
||||||
|
{
|
||||||
|
zc_ch->StableState = zc_detected == 1? 1:0;
|
||||||
|
|
||||||
|
uint32_t RealTimeShift = zc->DebounceSamples*(timestamp - zc->LastTick); // коло-во тиков * период вызова функции
|
||||||
|
|
||||||
|
// Переход подтвержден сразу
|
||||||
|
uint32_t RealTimestamp = timestamp-RealTimeShift;
|
||||||
|
if (zc_ch->LastCrossTime != 0) {
|
||||||
|
// Расчет периода и частоты
|
||||||
|
zc_ch->Period = RealTimestamp - zc_ch->LastCrossTime;
|
||||||
|
if (zc_ch->Period > 0) {
|
||||||
|
zc_ch->Frequency = 1000000.0f / zc_ch->Period;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
zc_ch->LastCrossTime = RealTimestamp;
|
||||||
|
zc_ch->CrossCount++;
|
||||||
|
}
|
||||||
|
|
||||||
// Сохраняем текущее значение для следующей итерации в случае если оно не в мертвой зоне
|
// Сохраняем текущее значение для следующей итерации в случае если оно не в мертвой зоне
|
||||||
if((value > zc->Hysteresis) || (value < -zc->Hysteresis))
|
if((value > zc->Hysteresis) || (value < -zc->Hysteresis))
|
||||||
{
|
{
|
||||||
@ -162,7 +178,7 @@ void ZC_ProcessChannel(ZeroCross_Handle_t *zc, uint8_t channel, float value, uin
|
|||||||
* @param values Массив значений сигналов
|
* @param values Массив значений сигналов
|
||||||
* @param timestamp Временная метка измерения
|
* @param timestamp Временная метка измерения
|
||||||
*/
|
*/
|
||||||
void ZC_ProcessAllChannels(ZeroCross_Handle_t *zc, float values[], uint32_t timestamp)
|
void ZC_ProcessAllChannels(ZeroCross_Handle_t *zc, float *values, uint32_t timestamp)
|
||||||
{
|
{
|
||||||
if (zc == NULL || !zc->f.Initialized || !zc->f.Monitoring || values == NULL) {
|
if (zc == NULL || !zc->f.Initialized || !zc->f.Monitoring || values == NULL) {
|
||||||
return;
|
return;
|
||||||
@ -171,6 +187,8 @@ void ZC_ProcessAllChannels(ZeroCross_Handle_t *zc, float values[], uint32_t time
|
|||||||
for (int ch = 0; ch < zc->NumChannels; ch++) {
|
for (int ch = 0; ch < zc->NumChannels; ch++) {
|
||||||
ZC_ProcessChannel(zc, ch, values[ch], timestamp);
|
ZC_ProcessChannel(zc, ch, values[ch], timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
zc->LastTick = timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -296,46 +314,4 @@ void ZC_Reset(ZeroCross_Handle_t *zc, uint8_t channel)
|
|||||||
zc->Channel[i].CrossCount = 0;
|
zc->Channel[i].CrossCount = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка гистерезиса для хендла.
|
|
||||||
* @param zc Указатель на хендл детектора нуля
|
|
||||||
* @param hysteresis Значение гистерезиса
|
|
||||||
*/
|
|
||||||
void ZC_SetHysteresis(ZeroCross_Handle_t *zc, float hysteresis)
|
|
||||||
{
|
|
||||||
if (zc == NULL || !zc->f.Initialized) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
zc->Hysteresis = hysteresis;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Установка дебаунс samples для хендла.
|
|
||||||
* @param zc Указатель на хендл детектора нуля
|
|
||||||
* @param debounce_samples Количество samples для антидребезга
|
|
||||||
*/
|
|
||||||
void ZC_SetDebounceSamples(ZeroCross_Handle_t *zc, uint8_t debounce_samples)
|
|
||||||
{
|
|
||||||
if (zc == NULL || !zc->f.Initialized) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
zc->DebounceSamples = debounce_samples;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Получение количества каналов хендла.
|
|
||||||
* @param zc Указатель на хендл детектора нуля
|
|
||||||
* @return Количество каналов.
|
|
||||||
*/
|
|
||||||
uint8_t ZC_GetNumChannels(ZeroCross_Handle_t *zc)
|
|
||||||
{
|
|
||||||
if (zc == NULL || !zc->f.Initialized) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return zc->NumChannels;
|
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ ZC_Init(&zc_low_sensitivity, 2, 0.5f, 2); // 0.5 гистерезис, 2 samp
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#ifndef ZC_MAX_CHANNELS
|
#ifndef ZC_MAX_CHANNELS
|
||||||
#define ZC_MAX_CHANNELS 8 ///< Максимальное количество каналов на хендл
|
#define ZC_MAX_CHANNELS 3 ///< Максимальное количество каналов на хендл
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -91,7 +91,7 @@ typedef struct {
|
|||||||
uint32_t CrossCount; ///< Счетчик переходов
|
uint32_t CrossCount; ///< Счетчик переходов
|
||||||
float LastValue; ///< Предыдущее значение
|
float LastValue; ///< Предыдущее значение
|
||||||
float CurrentValue; ///< Текущее значение
|
float CurrentValue; ///< Текущее значение
|
||||||
uint8_t DebounceCounter; ///< Счетчик антидребезга
|
uint16_t DebounceCounter; ///< Счетчик антидребезга
|
||||||
uint8_t StableState; ///< Стабильное состояние (0=отриц, 1=полож)
|
uint8_t StableState; ///< Стабильное состояние (0=отриц, 1=полож)
|
||||||
uint32_t LastCrossTime; ///< Время последнего перехода
|
uint32_t LastCrossTime; ///< Время последнего перехода
|
||||||
uint32_t Period; ///< Период сигнала (в тактах таймера)
|
uint32_t Period; ///< Период сигнала (в тактах таймера)
|
||||||
@ -106,16 +106,19 @@ typedef struct {
|
|||||||
ZC_Channel_t Channel[ZC_MAX_CHANNELS]; ///< Каналы @ref ZC_Channel_t
|
ZC_Channel_t Channel[ZC_MAX_CHANNELS]; ///< Каналы @ref ZC_Channel_t
|
||||||
uint8_t NumChannels; ///< Количество используемых каналов для этого хендла
|
uint8_t NumChannels; ///< Количество используемых каналов для этого хендла
|
||||||
float Hysteresis; ///< Гистерезис для избежания дребезга
|
float Hysteresis; ///< Гистерезис для избежания дребезга
|
||||||
uint8_t DebounceSamples; ///< Количество samples для антидребезга
|
uint16_t DebounceSamples; ///< Количество samples для антидребезга
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
unsigned Initialized:1; ///< Флаг инициализации
|
unsigned Initialized:1; ///< Флаг инициализации
|
||||||
unsigned Monitoring:1; ///< Флаг активности мониторинга
|
unsigned Monitoring:1; ///< Флаг активности мониторинга
|
||||||
} f; ///< Флаги
|
} f; ///< Флаги
|
||||||
|
|
||||||
|
uint32_t LastTick; ///< Послднее время вызова
|
||||||
} ZeroCross_Handle_t;
|
} ZeroCross_Handle_t;
|
||||||
|
|
||||||
/* Инициализация детектора нуля с индивидуальными настройками */
|
/* Инициализация детектора нуля с индивидуальными настройками */
|
||||||
HAL_StatusTypeDef ZC_Init(ZeroCross_Handle_t *zc, uint8_t num_channels,
|
HAL_StatusTypeDef ZC_Init(ZeroCross_Handle_t *zc, uint8_t num_channels,
|
||||||
float hysteresis, uint8_t debounce_samples);
|
float hysteresis, uint16_t debounce_samples);
|
||||||
|
|
||||||
/* Настройка канала детектора */
|
/* Настройка канала детектора */
|
||||||
HAL_StatusTypeDef ZC_ConfigChannel(ZeroCross_Handle_t *zc, uint8_t channel,
|
HAL_StatusTypeDef ZC_ConfigChannel(ZeroCross_Handle_t *zc, uint8_t channel,
|
||||||
@ -126,7 +129,7 @@ void ZC_ProcessChannel(ZeroCross_Handle_t *zc, uint8_t channel, float value,
|
|||||||
uint32_t timestamp);
|
uint32_t timestamp);
|
||||||
|
|
||||||
/* Пакетная обработка всех каналов */
|
/* Пакетная обработка всех каналов */
|
||||||
void ZC_ProcessAllChannels(ZeroCross_Handle_t *zc, float values[],
|
void ZC_ProcessAllChannels(ZeroCross_Handle_t *zc, float *values,
|
||||||
uint32_t timestamp);
|
uint32_t timestamp);
|
||||||
|
|
||||||
/* Получение частоты сигнала */
|
/* Получение частоты сигнала */
|
||||||
|
|||||||
@ -98,7 +98,6 @@ int main(void)
|
|||||||
MX_USART3_UART_Init();
|
MX_USART3_UART_Init();
|
||||||
MX_CAN1_Init();
|
MX_CAN1_Init();
|
||||||
MX_IWDG_Init();
|
MX_IWDG_Init();
|
||||||
MX_TIM13_Init();
|
|
||||||
MX_RTC_Init();
|
MX_RTC_Init();
|
||||||
MX_TIM1_Init();
|
MX_TIM1_Init();
|
||||||
MX_TIM3_Init();
|
MX_TIM3_Init();
|
||||||
@ -107,6 +106,7 @@ int main(void)
|
|||||||
MX_TIM11_Init();
|
MX_TIM11_Init();
|
||||||
MX_TIM12_Init();
|
MX_TIM12_Init();
|
||||||
MX_TIM8_Init();
|
MX_TIM8_Init();
|
||||||
|
MX_TIM5_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
#else //MATLAB
|
#else //MATLAB
|
||||||
#endif //MATLAB
|
#endif //MATLAB
|
||||||
|
|||||||
@ -26,10 +26,10 @@
|
|||||||
|
|
||||||
TIM_HandleTypeDef htim1;
|
TIM_HandleTypeDef htim1;
|
||||||
TIM_HandleTypeDef htim3;
|
TIM_HandleTypeDef htim3;
|
||||||
|
TIM_HandleTypeDef htim5;
|
||||||
TIM_HandleTypeDef htim8;
|
TIM_HandleTypeDef htim8;
|
||||||
TIM_HandleTypeDef htim11;
|
TIM_HandleTypeDef htim11;
|
||||||
TIM_HandleTypeDef htim12;
|
TIM_HandleTypeDef htim12;
|
||||||
TIM_HandleTypeDef htim13;
|
|
||||||
|
|
||||||
/* TIM1 init function */
|
/* TIM1 init function */
|
||||||
void MX_TIM1_Init(void)
|
void MX_TIM1_Init(void)
|
||||||
@ -170,6 +170,49 @@ void MX_TIM3_Init(void)
|
|||||||
/* USER CODE END TIM3_Init 2 */
|
/* USER CODE END TIM3_Init 2 */
|
||||||
HAL_TIM_MspPostInit(&htim3);
|
HAL_TIM_MspPostInit(&htim3);
|
||||||
|
|
||||||
|
}
|
||||||
|
/* TIM5 init function */
|
||||||
|
void MX_TIM5_Init(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM5_Init 0 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_Init 0 */
|
||||||
|
|
||||||
|
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||||
|
TIM_IC_InitTypeDef sConfigIC = {0};
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM5_Init 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_Init 1 */
|
||||||
|
htim5.Instance = TIM5;
|
||||||
|
htim5.Init.Prescaler = 90-1;
|
||||||
|
htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||||
|
htim5.Init.Period = 4294967295;
|
||||||
|
htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||||
|
htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||||
|
if (HAL_TIM_IC_Init(&htim5) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||||
|
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||||
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
|
||||||
|
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
|
||||||
|
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
|
||||||
|
sConfigIC.ICFilter = 0;
|
||||||
|
if (HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* USER CODE BEGIN TIM5_Init 2 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_Init 2 */
|
||||||
|
|
||||||
}
|
}
|
||||||
/* TIM8 init function */
|
/* TIM8 init function */
|
||||||
void MX_TIM8_Init(void)
|
void MX_TIM8_Init(void)
|
||||||
@ -270,32 +313,6 @@ void MX_TIM12_Init(void)
|
|||||||
|
|
||||||
/* USER CODE END TIM12_Init 2 */
|
/* USER CODE END TIM12_Init 2 */
|
||||||
|
|
||||||
}
|
|
||||||
/* TIM13 init function */
|
|
||||||
void MX_TIM13_Init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM13_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM13_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN TIM13_Init 1 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM13_Init 1 */
|
|
||||||
htim13.Instance = TIM13;
|
|
||||||
htim13.Init.Prescaler = 90-1;
|
|
||||||
htim13.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
||||||
htim13.Init.Period = 65535;
|
|
||||||
htim13.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
|
||||||
htim13.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
||||||
if (HAL_TIM_Base_Init(&htim13) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
/* USER CODE BEGIN TIM13_Init 2 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM13_Init 2 */
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||||
@ -360,16 +377,34 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
|
|
||||||
/* USER CODE END TIM12_MspInit 1 */
|
/* USER CODE END TIM12_MspInit 1 */
|
||||||
}
|
}
|
||||||
else if(tim_baseHandle->Instance==TIM13)
|
}
|
||||||
|
|
||||||
|
void HAL_TIM_IC_MspInit(TIM_HandleTypeDef* tim_icHandle)
|
||||||
|
{
|
||||||
|
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
if(tim_icHandle->Instance==TIM5)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM13_MspInit 0 */
|
/* USER CODE BEGIN TIM5_MspInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM13_MspInit 0 */
|
/* USER CODE END TIM5_MspInit 0 */
|
||||||
/* TIM13 clock enable */
|
/* TIM5 clock enable */
|
||||||
__HAL_RCC_TIM13_CLK_ENABLE();
|
__HAL_RCC_TIM5_CLK_ENABLE();
|
||||||
/* USER CODE BEGIN TIM13_MspInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM13_MspInit 1 */
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
/**TIM5 GPIO Configuration
|
||||||
|
PA0/WKUP ------> TIM5_CH1
|
||||||
|
*/
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_0;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF2_TIM5;
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM5_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_MspInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
|
||||||
@ -485,16 +520,27 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
|
|
||||||
/* USER CODE END TIM12_MspDeInit 1 */
|
/* USER CODE END TIM12_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
else if(tim_baseHandle->Instance==TIM13)
|
}
|
||||||
|
|
||||||
|
void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef* tim_icHandle)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(tim_icHandle->Instance==TIM5)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN TIM13_MspDeInit 0 */
|
/* USER CODE BEGIN TIM5_MspDeInit 0 */
|
||||||
|
|
||||||
/* USER CODE END TIM13_MspDeInit 0 */
|
/* USER CODE END TIM5_MspDeInit 0 */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_TIM13_CLK_DISABLE();
|
__HAL_RCC_TIM5_CLK_DISABLE();
|
||||||
/* USER CODE BEGIN TIM13_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END TIM13_MspDeInit 1 */
|
/**TIM5 GPIO Configuration
|
||||||
|
PA0/WKUP ------> TIM5_CH1
|
||||||
|
*/
|
||||||
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN TIM5_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END TIM5_MspDeInit 1 */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@ PowerMonitor_t pm;
|
|||||||
*/
|
*/
|
||||||
int UPP_Init(void)
|
int UPP_Init(void)
|
||||||
{
|
{
|
||||||
|
HAL_TIM_Base_Start(&ustim);
|
||||||
PowerMonitor_Init(&pm);
|
PowerMonitor_Init(&pm);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1283,7 +1283,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>::Compiler</GroupName>
|
<GroupName>::Compiler</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>1</RteFlg>
|
<RteFlg>1</RteFlg>
|
||||||
|
|||||||
@ -339,7 +339,7 @@
|
|||||||
<v6Rtti>0</v6Rtti>
|
<v6Rtti>0</v6Rtti>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define>USE_HAL_DRIVER,STM32F427xx</Define>
|
<Define>USE_HAL_DRIVER,STM32F427xx, ARM_MATH_CM4</Define>
|
||||||
<Undefine></Undefine>
|
<Undefine></Undefine>
|
||||||
<IncludePath>../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../AllLibs/ExtMemory/Inc;../AllLibs/Modbus/Inc;../AllLibs/MyLibs/MyLibs/Inc;../AllLibs/MyLibs/RTT;../AllLibs/PeriphGeneral/Inc;../Core/Configs;../Core/PowerMonitor;../Core/Thyristors;../Core/UPP</IncludePath>
|
<IncludePath>../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../AllLibs/ExtMemory/Inc;../AllLibs/Modbus/Inc;../AllLibs/MyLibs/MyLibs/Inc;../AllLibs/MyLibs/RTT;../AllLibs/PeriphGeneral/Inc;../Core/Configs;../Core/PowerMonitor;../Core/Thyristors;../Core/UPP</IncludePath>
|
||||||
</VariousControls>
|
</VariousControls>
|
||||||
|
|||||||
116
UPP/UPP.ioc
116
UPP/UPP.ioc
@ -55,10 +55,10 @@ Mcu.Family=STM32F4
|
|||||||
Mcu.IP0=ADC3
|
Mcu.IP0=ADC3
|
||||||
Mcu.IP1=CAN1
|
Mcu.IP1=CAN1
|
||||||
Mcu.IP10=TIM3
|
Mcu.IP10=TIM3
|
||||||
Mcu.IP11=TIM8
|
Mcu.IP11=TIM5
|
||||||
Mcu.IP12=TIM11
|
Mcu.IP12=TIM8
|
||||||
Mcu.IP13=TIM12
|
Mcu.IP13=TIM11
|
||||||
Mcu.IP14=TIM13
|
Mcu.IP14=TIM12
|
||||||
Mcu.IP15=USART3
|
Mcu.IP15=USART3
|
||||||
Mcu.IP16=USART6
|
Mcu.IP16=USART6
|
||||||
Mcu.IP2=DMA
|
Mcu.IP2=DMA
|
||||||
@ -80,64 +80,64 @@ Mcu.Pin12=PF10
|
|||||||
Mcu.Pin13=PH0/OSC_IN
|
Mcu.Pin13=PH0/OSC_IN
|
||||||
Mcu.Pin14=PH1/OSC_OUT
|
Mcu.Pin14=PH1/OSC_OUT
|
||||||
Mcu.Pin15=PC0
|
Mcu.Pin15=PC0
|
||||||
Mcu.Pin16=PA4
|
Mcu.Pin16=PA0/WKUP
|
||||||
Mcu.Pin17=PA5
|
Mcu.Pin17=PA4
|
||||||
Mcu.Pin18=PA6
|
Mcu.Pin18=PA5
|
||||||
Mcu.Pin19=PB0
|
Mcu.Pin19=PA6
|
||||||
Mcu.Pin2=PE4
|
Mcu.Pin2=PE4
|
||||||
Mcu.Pin20=PB1
|
Mcu.Pin20=PB0
|
||||||
Mcu.Pin21=PF11
|
Mcu.Pin21=PB1
|
||||||
Mcu.Pin22=PB10
|
Mcu.Pin22=PF11
|
||||||
Mcu.Pin23=PB11
|
Mcu.Pin23=PB10
|
||||||
Mcu.Pin24=PB13
|
Mcu.Pin24=PB11
|
||||||
Mcu.Pin25=PG6
|
Mcu.Pin25=PB13
|
||||||
Mcu.Pin26=PC6
|
Mcu.Pin26=PG6
|
||||||
Mcu.Pin27=PC7
|
Mcu.Pin27=PC6
|
||||||
Mcu.Pin28=PC8
|
Mcu.Pin28=PC7
|
||||||
Mcu.Pin29=PC9
|
Mcu.Pin29=PC8
|
||||||
Mcu.Pin3=PE5
|
Mcu.Pin3=PE5
|
||||||
Mcu.Pin30=PA8
|
Mcu.Pin30=PC9
|
||||||
Mcu.Pin31=PA9
|
Mcu.Pin31=PA8
|
||||||
Mcu.Pin32=PA10
|
Mcu.Pin32=PA9
|
||||||
Mcu.Pin33=PA11
|
Mcu.Pin33=PA10
|
||||||
Mcu.Pin34=PA12
|
Mcu.Pin34=PA11
|
||||||
Mcu.Pin35=PA13
|
Mcu.Pin35=PA12
|
||||||
Mcu.Pin36=PA14
|
Mcu.Pin36=PA13
|
||||||
Mcu.Pin37=PA15
|
Mcu.Pin37=PA14
|
||||||
Mcu.Pin38=PC10
|
Mcu.Pin38=PA15
|
||||||
Mcu.Pin39=PC11
|
Mcu.Pin39=PC10
|
||||||
Mcu.Pin4=PE6
|
Mcu.Pin4=PE6
|
||||||
Mcu.Pin40=PC12
|
Mcu.Pin40=PC11
|
||||||
Mcu.Pin41=PD2
|
Mcu.Pin41=PC12
|
||||||
Mcu.Pin42=PD3
|
Mcu.Pin42=PD2
|
||||||
Mcu.Pin43=PD6
|
Mcu.Pin43=PD3
|
||||||
Mcu.Pin44=PG12
|
Mcu.Pin44=PD6
|
||||||
Mcu.Pin45=PG15
|
Mcu.Pin45=PG12
|
||||||
Mcu.Pin46=PB3
|
Mcu.Pin46=PG15
|
||||||
Mcu.Pin47=PB6
|
Mcu.Pin47=PB3
|
||||||
Mcu.Pin48=PB7
|
Mcu.Pin48=PB6
|
||||||
Mcu.Pin49=PB8
|
Mcu.Pin49=PB7
|
||||||
Mcu.Pin5=PC13
|
Mcu.Pin5=PC13
|
||||||
Mcu.Pin50=PB9
|
Mcu.Pin50=PB8
|
||||||
Mcu.Pin51=PE0
|
Mcu.Pin51=PB9
|
||||||
Mcu.Pin52=PE1
|
Mcu.Pin52=PE0
|
||||||
Mcu.Pin53=VP_IWDG_VS_IWDG
|
Mcu.Pin53=PE1
|
||||||
Mcu.Pin54=VP_RTC_VS_RTC_Activate
|
Mcu.Pin54=VP_IWDG_VS_IWDG
|
||||||
Mcu.Pin55=VP_RTC_VS_RTC_Calendar
|
Mcu.Pin55=VP_RTC_VS_RTC_Activate
|
||||||
Mcu.Pin56=VP_SYS_VS_tim14
|
Mcu.Pin56=VP_RTC_VS_RTC_Calendar
|
||||||
Mcu.Pin57=VP_TIM1_VS_ClockSourceINT
|
Mcu.Pin57=VP_SYS_VS_tim14
|
||||||
Mcu.Pin58=VP_TIM3_VS_ClockSourceINT
|
Mcu.Pin58=VP_TIM1_VS_ClockSourceINT
|
||||||
Mcu.Pin59=VP_TIM8_VS_ClockSourceINT
|
Mcu.Pin59=VP_TIM3_VS_ClockSourceINT
|
||||||
Mcu.Pin6=PC14/OSC32_IN
|
Mcu.Pin6=PC14/OSC32_IN
|
||||||
Mcu.Pin60=VP_TIM11_VS_ClockSourceINT
|
Mcu.Pin60=VP_TIM8_VS_ClockSourceINT
|
||||||
Mcu.Pin61=VP_TIM12_VS_ClockSourceINT
|
Mcu.Pin61=VP_TIM11_VS_ClockSourceINT
|
||||||
Mcu.Pin62=VP_TIM13_VS_ClockSourceINT
|
Mcu.Pin62=VP_TIM12_VS_ClockSourceINT
|
||||||
Mcu.Pin7=PC15/OSC32_OUT
|
Mcu.Pin7=PC15/OSC32_OUT
|
||||||
Mcu.Pin8=PF6
|
Mcu.Pin8=PF6
|
||||||
Mcu.Pin9=PF7
|
Mcu.Pin9=PF7
|
||||||
Mcu.PinsNb=63
|
Mcu.PinsNb=63
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=mb_huart,huart3;mbdbg_htim,htim11;PWM_CHANNEL_1,TIM_CHANNEL_1;PWM_CHANNEL_2,TIM_CHANNEL_2;PWM_CHANNEL_3,TIM_CHANNEL_3;PWM_CHANNEL_4,TIM_CHANNEL_4;mem_hspi,hspi3;PWM_CHANNEL_5,TIM_CHANNEL_3;PWM_CHANNEL_6,TIM_CHANNEL_4;mb_htim,htim12;adc_tim,htim8;hpwm2,htim2;mb_dbg_huart,huart6;ustim,htim13;hpwm1,htim1
|
Mcu.UserConstants=mb_huart,huart3;mbdbg_htim,htim11;PWM_CHANNEL_1,TIM_CHANNEL_1;PWM_CHANNEL_2,TIM_CHANNEL_2;PWM_CHANNEL_3,TIM_CHANNEL_3;PWM_CHANNEL_4,TIM_CHANNEL_4;mem_hspi,hspi3;PWM_CHANNEL_5,TIM_CHANNEL_3;PWM_CHANNEL_6,TIM_CHANNEL_4;mb_htim,htim12;adc_tim,htim8;hpwm2,htim2;mb_dbg_huart,huart6;ustim,htim5;hpwm1,htim1;usTick,ustim.Instance->CNT
|
||||||
Mcu.UserName=STM32F427ZGTx
|
Mcu.UserName=STM32F427ZGTx
|
||||||
MxCube.Version=6.12.1
|
MxCube.Version=6.12.1
|
||||||
MxDb.Version=DB.6.0.121
|
MxDb.Version=DB.6.0.121
|
||||||
@ -156,6 +156,7 @@ NVIC.TIM8_TRG_COM_TIM14_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true
|
|||||||
NVIC.TimeBase=TIM8_TRG_COM_TIM14_IRQn
|
NVIC.TimeBase=TIM8_TRG_COM_TIM14_IRQn
|
||||||
NVIC.TimeBaseIP=TIM14
|
NVIC.TimeBaseIP=TIM14
|
||||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
PA0/WKUP.Signal=S_TIM5_CH1
|
||||||
PA10.GPIOParameters=GPIO_Label
|
PA10.GPIOParameters=GPIO_Label
|
||||||
PA10.GPIO_Label=PWM3
|
PA10.GPIO_Label=PWM3
|
||||||
PA10.Locked=true
|
PA10.Locked=true
|
||||||
@ -394,7 +395,7 @@ ProjectManager.ToolChainLocation=
|
|||||||
ProjectManager.UAScriptAfterPath=
|
ProjectManager.UAScriptAfterPath=
|
||||||
ProjectManager.UAScriptBeforePath=
|
ProjectManager.UAScriptBeforePath=
|
||||||
ProjectManager.UnderRoot=false
|
ProjectManager.UnderRoot=false
|
||||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-true-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC3_Init-ADC3-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true,6-MX_CAN1_Init-CAN1-false-HAL-true,7-MX_IWDG_Init-IWDG-false-HAL-true,8-MX_TIM13_Init-TIM13-false-HAL-true,9-MX_RTC_Init-RTC-false-HAL-true,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_TIM3_Init-TIM3-false-HAL-true,12-MX_USART6_UART_Init-USART6-false-HAL-true,13-MX_SPI3_Init-SPI3-false-HAL-true,14-MX_TIM11_Init-TIM11-false-HAL-true,15-MX_TIM12_Init-TIM12-false-HAL-true,16-MX_TIM8_Init-TIM8-false-HAL-true
|
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-true-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC3_Init-ADC3-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true,6-MX_CAN1_Init-CAN1-false-HAL-true,7-MX_IWDG_Init-IWDG-false-HAL-true,8-MX_TIM13_Init-TIM13-false-HAL-true,8-MX_RTC_Init-RTC-false-HAL-true,9-MX_TIM1_Init-TIM1-false-HAL-true,10-MX_TIM3_Init-TIM3-false-HAL-true,11-MX_USART6_UART_Init-USART6-false-HAL-true,12-MX_SPI3_Init-SPI3-false-HAL-true,13-MX_TIM11_Init-TIM11-false-HAL-true,14-MX_TIM12_Init-TIM12-false-HAL-true,15-MX_TIM8_Init-TIM8-false-HAL-true
|
||||||
RCC.48MHZClocksFreq_Value=90000000
|
RCC.48MHZClocksFreq_Value=90000000
|
||||||
RCC.AHBFreq_Value=180000000
|
RCC.AHBFreq_Value=180000000
|
||||||
RCC.APB1CLKDivider=RCC_HCLK_DIV4
|
RCC.APB1CLKDivider=RCC_HCLK_DIV4
|
||||||
@ -453,6 +454,8 @@ SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3
|
|||||||
SH.S_TIM3_CH3.ConfNb=1
|
SH.S_TIM3_CH3.ConfNb=1
|
||||||
SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4
|
SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4
|
||||||
SH.S_TIM3_CH4.ConfNb=1
|
SH.S_TIM3_CH4.ConfNb=1
|
||||||
|
SH.S_TIM5_CH1.0=TIM5_CH1,Input_Capture1_from_TI1
|
||||||
|
SH.S_TIM5_CH1.ConfNb=1
|
||||||
SPI3.CalculateBaudRate=22.5 MBits/s
|
SPI3.CalculateBaudRate=22.5 MBits/s
|
||||||
SPI3.Direction=SPI_DIRECTION_2LINES
|
SPI3.Direction=SPI_DIRECTION_2LINES
|
||||||
SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
|
SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
|
||||||
@ -468,11 +471,12 @@ TIM11.IPParameters=Prescaler
|
|||||||
TIM11.Prescaler=180-1
|
TIM11.Prescaler=180-1
|
||||||
TIM12.IPParameters=Prescaler
|
TIM12.IPParameters=Prescaler
|
||||||
TIM12.Prescaler=90-1
|
TIM12.Prescaler=90-1
|
||||||
TIM13.IPParameters=Prescaler
|
|
||||||
TIM13.Prescaler=90-1
|
|
||||||
TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
|
||||||
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
||||||
TIM3.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4
|
TIM3.IPParameters=Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4
|
||||||
|
TIM5.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
|
||||||
|
TIM5.IPParameters=Channel-Input_Capture1_from_TI1,Prescaler
|
||||||
|
TIM5.Prescaler=90-1
|
||||||
TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger
|
TIM8.IPParameters=Prescaler,Period,TIM_MasterSlaveMode,TIM_MasterOutputTrigger
|
||||||
TIM8.Period=1800-1
|
TIM8.Period=1800-1
|
||||||
TIM8.Prescaler=0
|
TIM8.Prescaler=0
|
||||||
@ -494,8 +498,6 @@ VP_TIM11_VS_ClockSourceINT.Mode=Enable_Timer
|
|||||||
VP_TIM11_VS_ClockSourceINT.Signal=TIM11_VS_ClockSourceINT
|
VP_TIM11_VS_ClockSourceINT.Signal=TIM11_VS_ClockSourceINT
|
||||||
VP_TIM12_VS_ClockSourceINT.Mode=Internal
|
VP_TIM12_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT
|
VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT
|
||||||
VP_TIM13_VS_ClockSourceINT.Mode=Enable_Timer
|
|
||||||
VP_TIM13_VS_ClockSourceINT.Signal=TIM13_VS_ClockSourceINT
|
|
||||||
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
||||||
VP_TIM3_VS_ClockSourceINT.Mode=Internal
|
VP_TIM3_VS_ClockSourceINT.Mode=Internal
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user