From 7f6932631e5706ea9dd2d05865b77f2dcd0fd277 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Wed, 18 Dec 2024 17:00:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A7=D1=83=D1=82=D1=8C=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=BA=D0=BE=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=20=D0=B8=20=D0=B7=D0=B0=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Tester_main/tester_adc_func.h | 19 ++-------- diode_tester/Core/Tester_main/tester_config.h | 2 +- diode_tester/Core/Tester_main/tester_func.c | 29 +++++++++------ diode_tester/Core/Tester_main/tester_func.h | 37 ++++++++++++------- diode_tester/Core/Tester_main/tester_main.h | 11 ++++-- 5 files changed, 52 insertions(+), 46 deletions(-) diff --git a/diode_tester/Core/Tester_main/tester_adc_func.h b/diode_tester/Core/Tester_main/tester_adc_func.h index 15f363e..03983a6 100644 --- a/diode_tester/Core/Tester_main/tester_adc_func.h +++ b/diode_tester/Core/Tester_main/tester_adc_func.h @@ -41,33 +41,19 @@ typedef struct uint16_t ADC_Max; uint16_t ADC_Min; + unsigned pulse_peak_ind; /* Parameter for calc voltage */ ADC_ParamsTypeDef s; - unsigned pulse_peak_ind; ADC_ChannelState state; ADCChannel_TrackerTypeDef adc_ch_err; }TESTER_ADCChannelTypeDef; -typedef struct -{ - int32_t t_current; - int32_t t_critical; - -#ifdef FOSTER_STUDENT_USER_T_CRITICAL -#else - uint8_t precise_table_ind; -#endif - uint16_t array_size; - -}TESTER_ADCFilterTypeDef; - - typedef struct { TESTER_ADCChannelTypeDef chAdc; @@ -99,8 +85,9 @@ void ADC_DMA_Handler(TESTER_ADCTypeDef *adc); void ADC_DMA_ProcessBufferForPeak(TESTER_ADCChannelTypeDef *adc_fc); void ADC_DMA_Channels_Prepare(TESTER_ADCChannelTypeDef *adc_fuel_cells, uint8_t MaskForChannels, uint8_t state); HAL_StatusTypeDef ADC_DMA_StartRead(TESTER_ADCTypeDef *adc); +/* Считать буфер DMA и найти в нем пик (скачок напряжения) */ HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout); - +/* Считывать АЦП, который работает в континуес режиме */ HAL_StatusTypeDef ADC_ReadContinuous(TESTER_ADCTypeDef *adc, uint32_t buff_size, uint32_t tickstart, uint32_t timeout); #ifndef printf_adc_result diff --git a/diode_tester/Core/Tester_main/tester_config.h b/diode_tester/Core/Tester_main/tester_config.h index f1c0669..9f5ff81 100644 --- a/diode_tester/Core/Tester_main/tester_config.h +++ b/diode_tester/Core/Tester_main/tester_config.h @@ -49,7 +49,7 @@ @{ */ -#define ADC_BUFF_SIZE (1000) ///< Размер буфера АЦП +#define ADC_BUFF_SIZE (200) ///< Размер буфера АЦП #define ADC_DMA_BUFF_SIZE (ADC_BUFF_SIZE) ///< Размер буфера ДМА (1 канал) #define ADC_U_CALIBR ((float)3.0) ///< Калибровочное напряжение diff --git a/diode_tester/Core/Tester_main/tester_func.c b/diode_tester/Core/Tester_main/tester_func.c index 6c98576..e0c1caf 100644 --- a/diode_tester/Core/Tester_main/tester_func.c +++ b/diode_tester/Core/Tester_main/tester_func.c @@ -29,11 +29,11 @@ void TESTER_HandleInit(TESTER_TestHandleTypeDef *htest) */ void TESTER_TestDiode_PositivePower(TESTER_TestHandleTypeDef *htest) { - /* Включение континиус АЦП */ - HAL_ADC_Start(htest->adc->hadc); + /* Задержка, перед началом работы */ + TESTER_Delay(&htest->SwTimings.ticks_before_test); - /* Задержка, перед подключением питания */ - TESTER_Delay(&htest->SwTimings.ticks_before_connect); + /* Включение континиус АЦП */ + HAL_ADC_Start(htest->adc->hadc); /* Подкючение питания к диоду */ TESTER_Connect_Power(&htest->DCPosSw); @@ -64,11 +64,14 @@ void TESTER_TestDiode_PositivePower(TESTER_TestHandleTypeDef *htest) */ void TESTER_TestDiode_NegativePower(TESTER_TestHandleTypeDef *htest) { + /* Задержка, перед началом работы */ + TESTER_Delay(&htest->SwTimings.ticks_before_test); + /* Включение АЦП */ ADC_DMA_StartRead(htest->adc); - /* Задержка, перед подключением питания */ - TESTER_Delay(&htest->SwTimings.ticks_before_connect); + /* Задержка, перед предполагаемым скачком */ + TESTER_Delay(&htest->SwTimings.ticks_before_go_to_peak); /* Подкючение питания к диоду */ TESTER_Connect_Power(&htest->DCNegSw); @@ -90,24 +93,26 @@ void TESTER_TestDiode_NegativePower(TESTER_TestHandleTypeDef *htest) */ void TESTER_TestDiode_PosNegPower(TESTER_TestHandleTypeDef *htest) { - - /* Задержка, перед подключением питания */ - TESTER_Delay(&htest->SwTimings.ticks_before_connect); + /* Задержка, перед началом работы */ + TESTER_Delay(&htest->SwTimings.ticks_before_test); /* Подкючение питания к диоду */ TESTER_Connect_Power(&htest->DCPosSw); - /* Подключение питания на определенное время */ - TESTER_Delay(&htest->SwTimings.ticks_before_reconnect); + /* Подкючение положительного питания к диоду */ + msDelay(htest->SwTimings.msticks_for_positive_dc); /* Включение АЦП */ ADC_DMA_StartRead(htest->adc); + /* Ожидается задержка, перед предполагаемым скачком */ + TESTER_Delay(&htest->SwTimings.ticks_before_go_to_peak); + /* Отключение питания от диода */ TESTER_Disconnect_Power(&htest->DCPosSw); TESTER_Connect_Power(&htest->DCNegSw); - /* Подключение питания на определенное время */ + /* Подключение отрицательного питания на определенное время */ TESTER_Delay(&htest->SwTimings.ticks_before_disconnect); /* Отключение питания от диода */ diff --git a/diode_tester/Core/Tester_main/tester_func.h b/diode_tester/Core/Tester_main/tester_func.h index 60f8f56..1d00537 100644 --- a/diode_tester/Core/Tester_main/tester_func.h +++ b/diode_tester/Core/Tester_main/tester_func.h @@ -14,39 +14,50 @@ #include "tester_adc_func.h" +/** + * @brief Структура для пинов, которые отвечают за ключи, которые подключают питание + */ typedef struct { - GPIO_TypeDef *SW1_Port; - uint32_t SW1_Pin; + GPIO_TypeDef *SW1_Port; ///< Порт пина первого ключа для питания + uint32_t SW1_Pin; ///< Пин первого ключа для питания - GPIO_TypeDef *SW2_Port; - uint32_t SW2_Pin; + GPIO_TypeDef *SW2_Port; ///< Порт пина второго ключа для питания + uint32_t SW2_Pin; ///< Пин второго ключа для питания }TESTER_PowerSwitchTypeDef; +/** + * @brief Структура для тайминга с флагом миллисекундой или тиковой (пустой for) задержкой + */ typedef struct { unsigned msdelay:1; uint32_t ticks; }TESTER_TicksDelayTypeDef; - +/** + * @brief Структура с таймингами для тестера + */ typedef struct { - uint32_t msticks_for_positive_dc; - TESTER_TicksDelayTypeDef ticks_before_connect; - TESTER_TicksDelayTypeDef ticks_before_disconnect; - TESTER_TicksDelayTypeDef ticks_before_reconnect; + uint32_t msticks_for_positive_dc; ///< миллисекундная задержка для положительного напряжения @ref TESTER_TestDiode_PositivePower + TESTER_TicksDelayTypeDef ticks_before_test; ///< задержка перед началом тестирования (мс или тики for()) + TESTER_TicksDelayTypeDef ticks_before_disconnect; ///< задержка перед выключением питания (мс или тики for()) + TESTER_TicksDelayTypeDef ticks_before_go_to_peak; ///< задержка между включением АЦП и предполагаемым скачком напряжения, чтобы точно поймать его в буфере АЦП (мс или тики for()) }TESTER_SwitchTimingsTypeDef; +/** + * @brief Структура-дескриптор для управления тестированием диодов + */ typedef struct { - TESTER_ADCTypeDef *adc; + TESTER_ADCTypeDef *adc; ///< указатель на структуру АЦП тестера - TESTER_SwitchTimingsTypeDef SwTimings; + TESTER_SwitchTimingsTypeDef SwTimings; ///< Тайминги для ключей - TESTER_PowerSwitchTypeDef DCPosSw; - TESTER_PowerSwitchTypeDef DCNegSw; + TESTER_PowerSwitchTypeDef DCPosSw; ///< Пины ключей для положительного источника + TESTER_PowerSwitchTypeDef DCNegSw; ///< Пины ключей для отрицательного источника uint32_t continuous_buff_size; diff --git a/diode_tester/Core/Tester_main/tester_main.h b/diode_tester/Core/Tester_main/tester_main.h index fb11c8e..eb6a5db 100644 --- a/diode_tester/Core/Tester_main/tester_main.h +++ b/diode_tester/Core/Tester_main/tester_main.h @@ -26,14 +26,17 @@ typedef struct unsigned disable_reset_call:1; }function_calls; +/** + * @brief Структура проекта тестер + */ typedef struct { - function_calls func; + function_calls func; ///< вызов разных функций - TESTER_TestHandleTypeDef *htest; + TESTER_TestHandleTypeDef *htest; ///< дескриптор тестера - uint32_t delay; - uint32_t delay_en:1; + uint32_t delay; ///< задержка главного цикла + uint32_t delay_en:1; ///< включить задержку в главном цикле }TESTER_ProjectTypeDef; extern TESTER_ProjectTypeDef TESTER;