#3 Настройки перенесены в модбас, все подтягивается оттуда
- В modbus коилах задается режим и выставляется флаг запустить тест. Запустить тест также можно по кнопке - Добавлена функция для выставления дефолтных настроек TESTER_Set_Default_Settings: она выставляет все настройки в modbus по дефолту и еще некоторые не modbus настройки (порты и пины ключей, кнопок, светодиодов) - Добавлена функция для обновления настроек тестера TESTER_UpdateSettings: она подтягивает все настроки из modbus в соответствующие структуры тестера. Вызывается каждый раз перед тестированием
This commit is contained in:
parent
a5704ae4be
commit
24b6295935
@ -262,13 +262,8 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
|
|||||||
|
|
||||||
if(RegisterType == RegisterType_Holding)
|
if(RegisterType == RegisterType_Holding)
|
||||||
{
|
{
|
||||||
// Устаки для напряжений ТЭ: предупреждения аварии
|
// Устаки для тестера
|
||||||
if(MB_Check_Address_For_Arr(Addr, Qnt, R_SETPOINTS_ADDR, R_SETPOINTS_QNT) == NO_ERRORS)
|
if(MB_Check_Address_For_Arr(Addr, Qnt, R_SETTINGS_ADDR, R_SETTINGS_QNT) == NO_ERRORS)
|
||||||
{
|
|
||||||
*pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr); // начало регистров хранения/входных
|
|
||||||
}
|
|
||||||
// Устаки для настройки МЗКТЭ: запрет опроса и настройки общения (MODBUS/UART)
|
|
||||||
else if(MB_Check_Address_For_Arr(Addr, Qnt, R_SETTINGS_ADDR, R_SETTINGS_QNT) == NO_ERRORS)
|
|
||||||
{
|
{
|
||||||
*pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr); // начало регистров хранения/входных
|
*pRegs = MB_Set_Register_Ptr(&MB_DATA.HoldRegs, Addr); // начало регистров хранения/входных
|
||||||
}
|
}
|
||||||
@ -280,13 +275,8 @@ MB_ExceptionTypeDef MB_DefineRegistersAddress(uint16_t **pRegs, uint16_t Addr, u
|
|||||||
}
|
}
|
||||||
else if(RegisterType == RegisterType_Input)
|
else if(RegisterType == RegisterType_Input)
|
||||||
{
|
{
|
||||||
// Напряжения на ТЭ
|
// Измеренные параметры диода
|
||||||
if(MB_Check_Address_For_Arr(Addr, Qnt, R_TE_VOLTAGE_ADDR, R_TE_VOLTAGE_QNT) == NO_ERRORS)
|
if(MB_Check_Address_For_Arr(Addr, Qnt, R_MEASURED_ADDR, R_MEASURED_QNT) == NO_ERRORS)
|
||||||
{
|
|
||||||
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // начало регистров хранения/входных
|
|
||||||
}
|
|
||||||
// Статус регистр МЗКТЭ
|
|
||||||
else if(MB_Check_Address_For_Arr(Addr, Qnt, R_STATUS_REG_ADDR, R_STATUS_REG_QNT) == NO_ERRORS)
|
|
||||||
{
|
{
|
||||||
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // начало регистров хранения/входных
|
*pRegs = MB_Set_Register_Ptr(&MB_DATA.InRegs, Addr); // начало регистров хранения/входных
|
||||||
}
|
}
|
||||||
@ -323,10 +313,14 @@ MB_ExceptionTypeDef MB_DefineCoilsAddress(uint16_t **pCoils, uint16_t Addr, uint
|
|||||||
return ILLEGAL_DATA_VALUE; // return exception code
|
return ILLEGAL_DATA_VALUE; // return exception code
|
||||||
}
|
}
|
||||||
|
|
||||||
// peripheral control coils
|
// tester settings coils
|
||||||
if(MB_Check_Address_For_Arr(Addr, Qnt, C_TE_EXCLUDE_ADDR, C_TE_EXCLUDE_QNT) == NO_ERRORS)
|
if(MB_Check_Address_For_Arr(Addr, Qnt, C_SETTINGS_ADDR, C_SETTINGS_QNT) == NO_ERRORS)
|
||||||
{
|
{
|
||||||
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr-C_TE_EXCLUDE_ADDR);
|
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr);
|
||||||
|
}// tester control coils
|
||||||
|
else if(MB_Check_Address_For_Arr(Addr, Qnt, C_CONTROL_ADDR, C_CONTROL_QNT) == NO_ERRORS)
|
||||||
|
{
|
||||||
|
*pCoils = MB_Set_Coil_Reg_Ptr(&MB_DATA.Coils, Addr);
|
||||||
}
|
}
|
||||||
// if address doesnt match any array - return illegal data address response
|
// if address doesnt match any array - return illegal data address response
|
||||||
else
|
else
|
||||||
|
@ -37,7 +37,8 @@
|
|||||||
*/
|
*/
|
||||||
typedef struct //MB_DataInRegsTypeDef
|
typedef struct //MB_DataInRegsTypeDef
|
||||||
{
|
{
|
||||||
unsigned DUMMY;
|
uint16_t ForwardVoltage;
|
||||||
|
uint16_t PeakVoltage;
|
||||||
}MB_DataInRegsTypeDef;
|
}MB_DataInRegsTypeDef;
|
||||||
|
|
||||||
|
|
||||||
@ -46,23 +47,26 @@ typedef struct //MB_DataInRegsTypeDef
|
|||||||
*/
|
*/
|
||||||
typedef struct //MB_DataInRegsTypeDef
|
typedef struct //MB_DataInRegsTypeDef
|
||||||
{
|
{
|
||||||
unsigned DUMMY;
|
uint16_t TimeForPositiveDC;
|
||||||
|
uint16_t TimeBeforeTest;
|
||||||
|
uint16_t TimeBeforePeak;
|
||||||
|
uint16_t TimeBeforeDisconnect;
|
||||||
|
|
||||||
|
uint16_t Adc_PulseWidth;
|
||||||
|
uint16_t Adc_PulseSign;
|
||||||
|
uint16_t Adc_CalibrValue;
|
||||||
|
uint16_t Adc_ZeroValue;
|
||||||
|
uint16_t Adc_U_Calibr;
|
||||||
}MB_DataHoldRegsTypeDef;
|
}MB_DataHoldRegsTypeDef;
|
||||||
|
|
||||||
|
|
||||||
// DEFINES FOR INPUT REGISTERS ARRAYS
|
// DEFINES FOR INPUT REGISTERS ARRAYS
|
||||||
#define R_TE_VOLTAGE_ADDR 0
|
#define R_MEASURED_ADDR 0
|
||||||
#define R_TE_VOLTAGE_QNT 85
|
#define R_MEASURED_QNT 1
|
||||||
|
|
||||||
#define R_STATUS_REG_ADDR 85
|
|
||||||
#define R_STATUS_REG_QNT 1
|
|
||||||
|
|
||||||
// DEFINES FOR HOLDING REGISTERS ARRAYS
|
// DEFINES FOR HOLDING REGISTERS ARRAYS
|
||||||
#define R_SETPOINTS_ADDR 0
|
#define R_SETTINGS_ADDR 0
|
||||||
#define R_SETPOINTS_QNT 170
|
#define R_SETTINGS_QNT 4
|
||||||
|
|
||||||
#define R_SETTINGS_ADDR 170
|
|
||||||
#define R_SETTINGS_QNT 5
|
|
||||||
|
|
||||||
|
|
||||||
// DEFINES FOR REGISTERS LOCAL ADDRESSES
|
// DEFINES FOR REGISTERS LOCAL ADDRESSES
|
||||||
@ -95,12 +99,24 @@ typedef struct //MB_DataInRegsTypeDef
|
|||||||
*/
|
*/
|
||||||
typedef struct //MB_DataCoilsTypeDef
|
typedef struct //MB_DataCoilsTypeDef
|
||||||
{
|
{
|
||||||
unsigned DUMMY;
|
/* reg 1 */
|
||||||
|
unsigned PositiveTest:1;
|
||||||
|
unsigned NegativeTest:1;
|
||||||
|
unsigned StartTest:1;
|
||||||
|
unsigned reserved:13;
|
||||||
|
|
||||||
|
/* reg 2 */
|
||||||
|
unsigned msTimeBeforeTest_enable:1;
|
||||||
|
unsigned msTimeBeforePeak_enable:1;
|
||||||
|
unsigned msTimeBeforeDisconnect_enable:1;
|
||||||
}MB_DataCoilsTypeDef;
|
}MB_DataCoilsTypeDef;
|
||||||
|
|
||||||
// DEFINES FOR COIL ARRAYS
|
// DEFINES FOR COIL ARRAYS
|
||||||
#define C_TE_EXCLUDE_ADDR 0
|
#define C_CONTROL_ADDR 0
|
||||||
#define C_TE_EXCLUDE_QNT 85
|
#define C_CONTROL_QNT 3
|
||||||
|
|
||||||
|
#define C_SETTINGS_ADDR 16
|
||||||
|
#define C_SETTINGS_QNT 3
|
||||||
|
|
||||||
/** MODBUS_DATA_COILS_DEFINES
|
/** MODBUS_DATA_COILS_DEFINES
|
||||||
* @}
|
* @}
|
||||||
|
@ -186,7 +186,7 @@ RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_H
|
|||||||
UART_Base_Init(suart);
|
UART_Base_Init(suart);
|
||||||
hRS->huart = &suart->huart;
|
hRS->huart = &suart->huart;
|
||||||
#else
|
#else
|
||||||
RS_UART_Init();
|
// RS_UART_Init();
|
||||||
hRS->huart = huart;
|
hRS->huart = huart;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ RS_StatusTypeDef RS_Init(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huart, TIM_H
|
|||||||
hRS->htim = &stim->htim;
|
hRS->htim = &stim->htim;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
RS_TIM_Init();
|
// RS_TIM_Init();
|
||||||
hRS->htim = htim;
|
hRS->htim = htim;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -251,8 +251,6 @@ HAL_StatusTypeDef RS_ReInit_UART(RS_HandleTypeDef *hRS, UART_HandleTypeDef *huar
|
|||||||
|
|
||||||
RS_RES = UART_Base_Init(suart);
|
RS_RES = UART_Base_Init(suart);
|
||||||
|
|
||||||
RS_RES = RS_UART_Init()
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// // check is settings are valid
|
// // check is settings are valid
|
||||||
// if(Check_UART_Init_Struct(suart) != HAL_OK)
|
// if(Check_UART_Init_Struct(suart) != HAL_OK)
|
||||||
|
@ -77,12 +77,17 @@ void TESTER_ADC_StructInit(TESTER_ADCTypeDef *adc)
|
|||||||
{
|
{
|
||||||
ClearStruct(*adc);
|
ClearStruct(*adc);
|
||||||
adc->hadc = &hadc1;
|
adc->hadc = &hadc1;
|
||||||
adc->chAdc.s.pulse_width = TESTER_PULES_EXPETCED_WIDTH;
|
|
||||||
adc->chAdc.s.ADC_calibr = ADC_VALUE_CALIBR;
|
|
||||||
adc->chAdc.s.ADC_zero = ADC_VALUE_ZERO;
|
|
||||||
adc->chAdc.s.U_step = ADC_U_CALIBR/adc->chAdc.s.ADC_calibr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TESTER_ADC_UpdateSettings(TESTER_ADCTypeDef *adc, MB_DataStructureTypeDef *mbdata)
|
||||||
|
{
|
||||||
|
adc->chAdc.s.ADC_calibr = mbdata->HoldRegs.Adc_CalibrValue;
|
||||||
|
adc->chAdc.s.ADC_zero = mbdata->HoldRegs.Adc_ZeroValue;
|
||||||
|
adc->chAdc.s.expected_pulse_sign = mbdata->HoldRegs.Adc_PulseSign;
|
||||||
|
adc->chAdc.s.pulse_width = mbdata->HoldRegs.Adc_PulseWidth;
|
||||||
|
|
||||||
|
adc->chAdc.s.U_step = (float)mbdata->HoldRegs.Adc_U_Calibr/(adc->chAdc.s.ADC_calibr - adc->chAdc.s.ADC_zero);
|
||||||
|
}
|
||||||
|
|
||||||
HAL_StatusTypeDef ADC_DMA_StartRead(TESTER_ADCTypeDef *adc)
|
HAL_StatusTypeDef ADC_DMA_StartRead(TESTER_ADCTypeDef *adc)
|
||||||
{
|
{
|
||||||
@ -235,7 +240,7 @@ HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
|||||||
uint16_t filter_halfend = ADC_BUFF_SIZE/2;
|
uint16_t filter_halfend = ADC_BUFF_SIZE/2;
|
||||||
uint16_t filter_end = ADC_BUFF_SIZE;
|
uint16_t filter_end = ADC_BUFF_SIZE;
|
||||||
uint8_t run_adc_check = 0;
|
uint8_t run_adc_check = 0;
|
||||||
uint8_t expected_dmaBufferHalf = 1;
|
uint8_t expected_dmaBufferHalf = 2;
|
||||||
|
|
||||||
/* Обработка АЦП */
|
/* Обработка АЦП */
|
||||||
while(1)
|
while(1)
|
||||||
@ -273,7 +278,7 @@ HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
|||||||
|
|
||||||
|
|
||||||
/* Переход на следующие во времени значения каналов АЦП */
|
/* Переход на следующие во времени значения каналов АЦП */
|
||||||
adc_buff_ind++;
|
// adc_buff_ind++;
|
||||||
/* если это первая половина DMA буфера */
|
/* если это первая половина DMA буфера */
|
||||||
if(expected_dmaBufferHalf == 1)
|
if(expected_dmaBufferHalf == 1)
|
||||||
{
|
{
|
||||||
@ -298,15 +303,15 @@ HAL_StatusTypeDef ADC_DMA_ReadForPeak(TESTER_ADCTypeDef *adc, uint32_t Timeout)
|
|||||||
printf_adc_processing(": wait for processing complete...");
|
printf_adc_processing(": wait for processing complete...");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(adc_buff_ind > filter_end) // Проверка первой половины закончена
|
// if(adc_buff_ind > filter_end) // Проверка первой половины закончена
|
||||||
{
|
// {
|
||||||
adc_buff_ind = 0; // Выставляем индекс на первую половину
|
adc_buff_ind = 0; // Выставляем индекс на первую половину
|
||||||
run_adc_check = 0; // Сбрасываем флаг проверки каналов
|
run_adc_check = 0; // Сбрасываем флаг проверки каналов
|
||||||
expected_dmaBufferHalf = 1; // Устанавливаем ожидание готовности первой половины данных DMA буфера
|
expected_dmaBufferHalf = 1; // Устанавливаем ожидание готовности первой половины данных DMA буфера
|
||||||
|
|
||||||
printf_adc_processing("\n%d: ADC Processing DMA complete", uwTick);
|
printf_adc_processing("\n%d: ADC Processing DMA complete", uwTick);
|
||||||
break;
|
break;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
/* если это "никакая" половина DMA буфера */
|
/* если это "никакая" половина DMA буфера */
|
||||||
else
|
else
|
||||||
@ -333,16 +338,16 @@ 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)
|
HAL_StatusTypeDef ADC_ReadContinuous(TESTER_ADCTypeDef *adc, uint32_t buff_size, uint32_t tickstart, uint32_t timeout)
|
||||||
{
|
{
|
||||||
HAL_StatusTypeDef res = HAL_OK;
|
HAL_StatusTypeDef res = HAL_OK;
|
||||||
uint16_t val_sum;
|
uint16_t val_sum = 0;
|
||||||
if(buff_size == 0)
|
if(buff_size == 0)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
int i = 0;
|
||||||
for(int i = 0; i < buff_size; i++)
|
for(i = 0; i < buff_size; i++)
|
||||||
{
|
{
|
||||||
if(HAL_GetTick() - tickstart > timeout)
|
if(HAL_GetTick() - tickstart > timeout)
|
||||||
{
|
{
|
||||||
res = HAL_TIMEOUT;
|
res = HAL_TIMEOUT;
|
||||||
break;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL_ADC_PollForConversion(adc->hadc, 1);
|
HAL_ADC_PollForConversion(adc->hadc, 1);
|
||||||
@ -350,7 +355,7 @@ HAL_StatusTypeDef ADC_ReadContinuous(TESTER_ADCTypeDef *adc, uint32_t buff_size,
|
|||||||
val_sum += adc->chAdc.ADC_Buff[i];
|
val_sum += adc->chAdc.ADC_Buff[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
adc->chAdc.ADC_Filtered = val_sum/(buff_size);
|
adc->chAdc.ADC_Filtered = val_sum/(i);
|
||||||
adc->chAdc.U_Current = adc->chAdc.s.U_step*adc->chAdc.ADC_Filtered;
|
adc->chAdc.U_Current = adc->chAdc.s.U_step*adc->chAdc.ADC_Filtered;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,7 @@ extern uint16_t ADC_DMA_HalfBuff[ADC_DMA_BUFF_SIZE/2];
|
|||||||
|
|
||||||
void TESTER_ADC_StructInit(TESTER_ADCTypeDef *adc);
|
void TESTER_ADC_StructInit(TESTER_ADCTypeDef *adc);
|
||||||
|
|
||||||
|
void TESTER_ADC_UpdateSettings(TESTER_ADCTypeDef *adc, MB_DataStructureTypeDef *mbdata);
|
||||||
void ADC_DMA_Handler(TESTER_ADCTypeDef *adc);
|
void ADC_DMA_Handler(TESTER_ADCTypeDef *adc);
|
||||||
|
|
||||||
void ADC_DMA_ProcessBufferForPeak(TESTER_ADCChannelTypeDef *adc_fc);
|
void ADC_DMA_ProcessBufferForPeak(TESTER_ADCChannelTypeDef *adc_fc);
|
||||||
|
@ -12,7 +12,48 @@
|
|||||||
#define _TESTER_CONFIG_H_
|
#define _TESTER_CONFIG_H_
|
||||||
|
|
||||||
|
|
||||||
#define TESTER_PULES_EXPETCED_WIDTH 4 ///< Предполагаемая длительность пика в отчетах ацп
|
/**
|
||||||
|
* @addtogroup TESTER_SW_TIMINGS_CONFIG Configs for switching timings
|
||||||
|
* @ingroup TESTER_CONFIGS
|
||||||
|
* @brief Конфигурации таймингов для ключей питания
|
||||||
|
@{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Задержка (миллисекундная) для положительного напряжения ПО УМОЛЧАНИЮ
|
||||||
|
* @details Пока только миллисекунды, т.к. меньше я пока не реализовал, да и как понимаю не требуется
|
||||||
|
*/
|
||||||
|
#define DEF_MS_TIME_FOR_POSITIVE 1500
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Задержка перед началом тестирования ПО УМОЛЧАНИЮ
|
||||||
|
* @details Задержка миллисекундная или тики for() @ref TIME_BEFORE_TEST_MS_DELAY
|
||||||
|
*/
|
||||||
|
#define DEF_TIME_BEFORE_TEST 500
|
||||||
|
#define DEF_TIME_BEFORE_TEST_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_TEST по умолчанию
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Задержка между включением АЦП и предполагаемым скачком напряжения ПО УМОЛЧАНИЮ
|
||||||
|
* @details Задержка нужна, чтобы точно поймать его в буфере АЦП.
|
||||||
|
*
|
||||||
|
* Задержка миллисекундная или тики for() @ref TIME_BEFORE_TEST_MS_DELAY
|
||||||
|
* @note Но если миллисекундная, то скорее всего скачок не попадет в буфер АЦП.
|
||||||
|
* Поэтому желательно только тики for() (@ref TIME_BEFORE_PEAK_MS_DELAY = 0)
|
||||||
|
*/
|
||||||
|
#define DEF_TIME_BEFORE_PEAK 5
|
||||||
|
#define DEF_TIME_BEFORE_PEAK_MS_DELAY 0 ///< включение миллисекундной задержки для @ref TIME_BEFORE_PEAK(0 - задержка for(), 1 - миллисекундная)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Задержка перед окончанием тестирования (отключение питания) ПО УМОЛЧАНИЮ
|
||||||
|
* @details Задержка миллисекундная или тики for() @ref TIME_BEFORE_DISCONNECT_MS_DELAY
|
||||||
|
*/
|
||||||
|
#define DEF_TIME_BEFORE_DISCONNECT 200
|
||||||
|
#define DEF_TIME_BEFORE_DISCONNECT_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_DISCONNECT (0 - задержка for(), 1 - миллисекундная)
|
||||||
|
|
||||||
|
/** TESTER_SW_TIMINGS_CONFIG
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup TESTER_INTERFACE_CONFIG Configs for interface of tester
|
* @addtogroup TESTER_INTERFACE_CONFIG Configs for interface of tester
|
||||||
@ -47,52 +88,9 @@
|
|||||||
/* Задержка для компенсации дребезга (в миллисекундах) */
|
/* Задержка для компенсации дребезга (в миллисекундах) */
|
||||||
#define SWITCH_ANTI_DREBEZG_DELAY 50 ///< Время которое выжидается для окончания дребезга
|
#define SWITCH_ANTI_DREBEZG_DELAY 50 ///< Время которое выжидается для окончания дребезга
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** TESTER_INTERFACE_CONFIG
|
/** TESTER_INTERFACE_CONFIG
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
/**
|
|
||||||
* @addtogroup TESTER_SW_TIMINGS_CONFIG Configs for switching timings
|
|
||||||
* @ingroup TESTER_CONFIGS
|
|
||||||
* @brief Конфигурации таймингов для ключей питания
|
|
||||||
@{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Задержка (миллисекундная) для положительного напряжения ПО УМОЛЧАНИЮ
|
|
||||||
* @details Пока только миллисекунды, т.к. меньше я пока не реализовал, да и как понимаю не требуется
|
|
||||||
*/
|
|
||||||
#define DEF_MS_TIME_FOR_POSITIVE 1000
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Задержка перед началом тестирования ПО УМОЛЧАНИЮ
|
|
||||||
* @details Задержка миллисекундная или тики for() @ref TIME_BEFORE_TEST_MS_DELAY
|
|
||||||
*/
|
|
||||||
#define DEF_TIME_BEFORE_TEST 500
|
|
||||||
#define DEF_TIME_BEFORE_TEST_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_TEST по умолчанию
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Задержка между включением АЦП и предполагаемым скачком напряжения ПО УМОЛЧАНИЮ
|
|
||||||
* @details Задержка нужна, чтобы точно поймать его в буфере АЦП.
|
|
||||||
*
|
|
||||||
* Задержка миллисекундная или тики for() @ref TIME_BEFORE_TEST_MS_DELAY
|
|
||||||
* @note Но если миллисекундная, то скорее всего скачок не попадет в буфер АЦП.
|
|
||||||
* Поэтому желательно только тики for() (@ref TIME_BEFORE_PEAK_MS_DELAY = 0)
|
|
||||||
*/
|
|
||||||
#define DEF_TIME_BEFORE_PEAK 5
|
|
||||||
#define DEF_TIME_BEFORE_PEAK_MS_DELAY 0 ///< включение миллисекундной задержки для @ref TIME_BEFORE_PEAK(0 - задержка for(), 1 - миллисекундная)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Задержка перед окончанием тестирования (отключение питания) ПО УМОЛЧАНИЮ
|
|
||||||
* @details Задержка миллисекундная или тики for() @ref TIME_BEFORE_DISCONNECT_MS_DELAY
|
|
||||||
*/
|
|
||||||
#define DEF_TIME_BEFORE_DISCONNECT 50
|
|
||||||
#define DEF_TIME_BEFORE_DISCONNECT_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_DISCONNECT (0 - задержка for(), 1 - миллисекундная)
|
|
||||||
|
|
||||||
/** TESTER_SW_TIMINGS_CONFIG
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup TESTER_POWER_SW_CONFIG Configs for switches for power
|
* @addtogroup TESTER_POWER_SW_CONFIG Configs for switches for power
|
||||||
@ -101,7 +99,7 @@
|
|||||||
@{
|
@{
|
||||||
*/
|
*/
|
||||||
//#define USE_HAL_GPIO_FUNCTIONS ///< Использовать для переключения пинов HAL функции
|
//#define USE_HAL_GPIO_FUNCTIONS ///< Использовать для переключения пинов HAL функции
|
||||||
//#define ALL_SW_USE_SAME_PORT ///< Дефайн указывающий что все пины будут иметь один порт (для ускорения переключения)
|
#define ALL_SW_USE_SAME_PORT ///< Дефайн указывающий что все пины будут иметь один порт (для ускорения переключения)
|
||||||
|
|
||||||
/* Состояния ключей для подключения и откючения питания */
|
/* Состояния ключей для подключения и откючения питания */
|
||||||
#define POWER_CONNECT 1 ///< Питание подключено в данном состоянии пина
|
#define POWER_CONNECT 1 ///< Питание подключено в данном состоянии пина
|
||||||
@ -140,6 +138,8 @@
|
|||||||
|
|
||||||
#define ADC_READ_TIMEOUT_MS 20 ///< Таймаут на ожидание разрядки конденсатора
|
#define ADC_READ_TIMEOUT_MS 20 ///< Таймаут на ожидание разрядки конденсатора
|
||||||
|
|
||||||
|
#define TESTER_ADC_PULES_EXPETCED_WIDTH 4 ///< Предполагаемая длительность пика в отчетах ацп
|
||||||
|
|
||||||
/** TESTER_ADC_CONFIG
|
/** TESTER_ADC_CONFIG
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
@ -12,30 +12,6 @@ void TESTER_HandleInit(TESTER_TestHandleTypeDef *htest, TESTER_LEDsTypeDef *leds
|
|||||||
htest->leds = leds;
|
htest->leds = leds;
|
||||||
TESTER_ADC_StructInit(htest->adc);
|
TESTER_ADC_StructInit(htest->adc);
|
||||||
|
|
||||||
/* Настройка пинов для подключения отрицательного источника */
|
|
||||||
htest->DCNegSw.SW_Port = SWITCH_DC_NEGATIVE_Port;
|
|
||||||
htest->DCNegSw.SwGND_Pin = SWITCH_DC_NEGATIVE_GND_Pin;
|
|
||||||
htest->DCNegSw.SwVDD_Pin = SWITCH_DC_NEGATIVE_VDD_Pin;
|
|
||||||
|
|
||||||
/* Настройка пинов для подключения положительного источника */
|
|
||||||
htest->DCPosSw.SW_Port = SWITCH_DC_POSITIVE_Port;
|
|
||||||
htest->DCPosSw.SwGND_Pin = SWITCH_DC_POSITIVE_GND_Pin;
|
|
||||||
htest->DCPosSw.SwVDD_Pin = SWITCH_DC_POSITIVE_VDD_Pin;
|
|
||||||
|
|
||||||
|
|
||||||
/* Настройка таймингов по умолчанию для тестирования */
|
|
||||||
htest->SwTimings.msticks_for_positive_dc = DEF_MS_TIME_FOR_POSITIVE;
|
|
||||||
|
|
||||||
htest->SwTimings.ticks_before_disconnect.ticks = DEF_TIME_BEFORE_DISCONNECT;
|
|
||||||
htest->SwTimings.ticks_before_disconnect.msdelay = DEF_TIME_BEFORE_DISCONNECT_MS_DELAY;
|
|
||||||
|
|
||||||
htest->SwTimings.ticks_before_go_to_peak.ticks = DEF_TIME_BEFORE_PEAK;
|
|
||||||
htest->SwTimings.ticks_before_go_to_peak.msdelay = DEF_TIME_BEFORE_PEAK_MS_DELAY;
|
|
||||||
|
|
||||||
htest->SwTimings.ticks_before_test.ticks = DEF_TIME_BEFORE_TEST;
|
|
||||||
htest->SwTimings.ticks_before_test.msdelay = DEF_TIME_BEFORE_TEST_MS_DELAY;
|
|
||||||
|
|
||||||
|
|
||||||
htest->continuous_buff_size = 20;
|
htest->continuous_buff_size = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,6 +51,8 @@ void TESTER_TestDiode_PositivePower(TESTER_TestHandleTypeDef *htest)
|
|||||||
HAL_ADC_Stop(htest->adc->hadc);
|
HAL_ADC_Stop(htest->adc->hadc);
|
||||||
|
|
||||||
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
||||||
|
|
||||||
|
htest->DiodeForwardVolt = htest->adc->chAdc.U_Current;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,6 +83,8 @@ void TESTER_TestDiode_NegativePower(TESTER_TestHandleTypeDef *htest)
|
|||||||
ADC_DMA_ReadForPeak(htest->adc, ADC_READ_TIMEOUT_MS);
|
ADC_DMA_ReadForPeak(htest->adc, ADC_READ_TIMEOUT_MS);
|
||||||
|
|
||||||
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
||||||
|
|
||||||
|
htest->DiodePeakVolt = htest->adc->chAdc.U_Current;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -122,6 +102,7 @@ void TESTER_TestDiode_PosNegPower(TESTER_TestHandleTypeDef *htest)
|
|||||||
|
|
||||||
/* Подкючение положительного питания к диоду */
|
/* Подкючение положительного питания к диоду */
|
||||||
msDelay(htest->SwTimings.msticks_for_positive_dc);
|
msDelay(htest->SwTimings.msticks_for_positive_dc);
|
||||||
|
htest->DiodeForwardVolt = htest->adc->chAdc.U_Current;
|
||||||
TESTER_LED_TestingDiode_Negative(&htest->leds->LED1);
|
TESTER_LED_TestingDiode_Negative(&htest->leds->LED1);
|
||||||
|
|
||||||
/* Включение АЦП */
|
/* Включение АЦП */
|
||||||
@ -143,6 +124,8 @@ void TESTER_TestDiode_PosNegPower(TESTER_TestHandleTypeDef *htest)
|
|||||||
ADC_DMA_ReadForPeak(htest->adc, ADC_READ_TIMEOUT_MS);
|
ADC_DMA_ReadForPeak(htest->adc, ADC_READ_TIMEOUT_MS);
|
||||||
|
|
||||||
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
TESTER_LED_TestingDiode_End(&htest->leds->LED1);
|
||||||
|
|
||||||
|
htest->DiodePeakVolt = htest->adc->chAdc.U_Current;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -206,6 +189,7 @@ void TESTER_Reconnect_Power(TESTER_PowerSwitchTypeDef *DCPosSw, TESTER_PowerSwit
|
|||||||
#endif //ALL_SW_USE_SAME_PORT
|
#endif //ALL_SW_USE_SAME_PORT
|
||||||
#endif //USE_HAL_GPIO_FUNCTIONS
|
#endif //USE_HAL_GPIO_FUNCTIONS
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Формирование задержки (в тиках или миллисекундная)
|
* @brief Формирование задержки (в тиках или миллисекундная)
|
||||||
*/
|
*/
|
||||||
|
@ -60,7 +60,8 @@ typedef struct
|
|||||||
|
|
||||||
uint32_t continuous_buff_size;
|
uint32_t continuous_buff_size;
|
||||||
|
|
||||||
float DiodeVolt;
|
float DiodeForwardVolt;
|
||||||
|
float DiodePeakVolt;
|
||||||
|
|
||||||
TESTER_LEDsTypeDef *leds;
|
TESTER_LEDsTypeDef *leds;
|
||||||
}TESTER_TestHandleTypeDef;
|
}TESTER_TestHandleTypeDef;
|
||||||
|
@ -6,14 +6,6 @@
|
|||||||
*/
|
*/
|
||||||
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds)
|
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds)
|
||||||
{
|
{
|
||||||
swstart->Sw_Port = SWITCH_START_Port;
|
|
||||||
swstart->Sw_Pin = SWITCH_START_Pin;
|
|
||||||
swstart->Sw_FilterDelay = SWITCH_ANTI_DREBEZG_DELAY;
|
|
||||||
|
|
||||||
|
|
||||||
leds->LED1.LED_Port = LED1_Port;
|
|
||||||
leds->LED1.LED_Pin = LED1_Pin;
|
|
||||||
leds->LED1.period = LED_BLINK_AS_ON;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#define _TESTER_INTERFACE_FUNC_H_
|
#define _TESTER_INTERFACE_FUNC_H_
|
||||||
|
|
||||||
#include "mylibs_include.h"
|
#include "mylibs_include.h"
|
||||||
|
#include "rs_message.h"
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -18,8 +18,10 @@ void TESTER_Init(TESTER_ProjectTypeDef *tester)
|
|||||||
tester->func.disable_reset_call = 0;
|
tester->func.disable_reset_call = 0;
|
||||||
tester->htest = &hTestDiode;
|
tester->htest = &hTestDiode;
|
||||||
TESTER_HandleInit(tester->htest, &tester->leds);
|
TESTER_HandleInit(tester->htest, &tester->leds);
|
||||||
tester->f.flag_init_done = 1;
|
|
||||||
|
|
||||||
|
tester->hmodbus = &hmodbus1;
|
||||||
|
tester->mbdata = &MB_DATA;
|
||||||
|
MODBUS_FirstInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -28,7 +30,12 @@ void TESTER_Init(TESTER_ProjectTypeDef *tester)
|
|||||||
*/
|
*/
|
||||||
void TESTER_pre_while(TESTER_ProjectTypeDef *tester)
|
void TESTER_pre_while(TESTER_ProjectTypeDef *tester)
|
||||||
{
|
{
|
||||||
|
TESTER_Set_Default_Settings(tester);
|
||||||
|
TESTER_UpdateSettings(tester->htest, tester->mbdata);
|
||||||
|
|
||||||
|
RS_Receive_IT(tester->hmodbus, &MODBUS_MSG);
|
||||||
tester->leds.LED1.period = LED_BLINK_AS_ON;
|
tester->leds.LED1.period = LED_BLINK_AS_ON;
|
||||||
|
tester->f.flag_init_done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -44,27 +51,46 @@ void TESTER_main_while(TESTER_ProjectTypeDef *tester)
|
|||||||
/* ТЕСТ В ОБРАТНОМ ВКЛЮЧЕНИИ */
|
/* ТЕСТ В ОБРАТНОМ ВКЛЮЧЕНИИ */
|
||||||
if(tester->func.test_diode_neg)
|
if(tester->func.test_diode_neg)
|
||||||
{
|
{
|
||||||
|
tester->f.flag_test_active = 1;
|
||||||
TESTER_TestDiode_NegativePower(tester->htest);
|
TESTER_TestDiode_NegativePower(tester->htest);
|
||||||
|
|
||||||
|
/* Запись данных в modbus */
|
||||||
|
tester->mbdata->InRegs.PeakVoltage = tester->htest->DiodePeakVolt*1000;
|
||||||
|
|
||||||
if(tester->func.disable_reset_call == 0)
|
if(tester->func.disable_reset_call == 0)
|
||||||
tester->func.test_diode_neg = 0;
|
tester->func.test_diode_neg = 0;
|
||||||
|
|
||||||
|
tester->f.flag_test_active = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ТЕСТ В ПРЯМОМ ВКЛЮЧЕНИИ */
|
/* ТЕСТ В ПРЯМОМ ВКЛЮЧЕНИИ */
|
||||||
if(tester->func.test_diode_pos)
|
if(tester->func.test_diode_pos)
|
||||||
{
|
{
|
||||||
|
tester->f.flag_test_active = 1;
|
||||||
TESTER_TestDiode_PositivePower(tester->htest);
|
TESTER_TestDiode_PositivePower(tester->htest);
|
||||||
|
|
||||||
|
/* Запись данных в modbus */
|
||||||
|
tester->mbdata->InRegs.ForwardVoltage = tester->htest->DiodeForwardVolt*1000;
|
||||||
|
|
||||||
if(tester->func.disable_reset_call == 0)
|
if(tester->func.disable_reset_call == 0)
|
||||||
tester->func.test_diode_pos = 0;
|
tester->func.test_diode_pos = 0;
|
||||||
|
|
||||||
|
tester->f.flag_test_active = 0;
|
||||||
}
|
}
|
||||||
/* ТЕСТ ПЕРЕХОДА ИЗ ПРЯМОГО В ОБРАТНОЕ ВКЛЮЧЕНИЯ*/
|
/* ТЕСТ ПЕРЕХОДА ИЗ ПРЯМОГО В ОБРАТНОЕ ВКЛЮЧЕНИЯ*/
|
||||||
if(tester->func.test_diode_posneg)
|
if(tester->func.test_diode_posneg)
|
||||||
{
|
{
|
||||||
|
tester->f.flag_test_active = 1;
|
||||||
TESTER_TestDiode_PosNegPower(tester->htest);
|
TESTER_TestDiode_PosNegPower(tester->htest);
|
||||||
|
|
||||||
|
/* Запись данных в modbus */
|
||||||
|
tester->mbdata->InRegs.PeakVoltage = tester->htest->DiodePeakVolt*1000;
|
||||||
|
tester->mbdata->InRegs.ForwardVoltage = tester->htest->DiodeForwardVolt*1000;
|
||||||
|
|
||||||
if(tester->func.disable_reset_call == 0)
|
if(tester->func.disable_reset_call == 0)
|
||||||
tester->func.test_diode_posneg = 0;
|
tester->func.test_diode_posneg = 0;
|
||||||
|
|
||||||
|
tester->f.flag_test_active = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,16 +106,108 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(TESTER_ReadSwichStart(&tester->SwStart))
|
|
||||||
|
/* считывание режима тестера с модбас */
|
||||||
|
tester->mode = *((TESTER_TestModeTypeDef *)&tester->mbdata->Coils);
|
||||||
|
|
||||||
|
/* если кнопка нажата или пришла соответствующая комманда модбас */
|
||||||
|
if(TESTER_ReadSwichStart(&tester->SwStart) || tester->mbdata->Coils.StartTest)
|
||||||
{
|
{
|
||||||
|
/* Обновление настроек тестера */
|
||||||
|
TESTER_UpdateSettings(tester->htest, tester->mbdata);
|
||||||
|
switch(tester->mode)
|
||||||
|
{
|
||||||
|
case TEST_POSITIVE:
|
||||||
|
tester->func.test_diode_pos = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TEST_NEGATIVE:
|
||||||
|
tester->func.test_diode_neg = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TEST_POSNEG:
|
||||||
tester->func.test_diode_posneg = 1;
|
tester->func.test_diode_posneg = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TESTER_LED_Blink(&tester->leds.LED1);
|
TESTER_LED_Blink(&tester->leds.LED1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Обновление настроек тестера
|
||||||
|
*/
|
||||||
|
void TESTER_UpdateSettings(TESTER_TestHandleTypeDef *htest, MB_DataStructureTypeDef *mbdata)
|
||||||
|
{
|
||||||
|
htest->SwTimings.ticks_before_disconnect.ticks = mbdata->HoldRegs.TimeBeforeDisconnect;
|
||||||
|
htest->SwTimings.ticks_before_go_to_peak.ticks = mbdata->HoldRegs.TimeBeforePeak;
|
||||||
|
htest->SwTimings.ticks_before_test.ticks = mbdata->HoldRegs.TimeBeforeTest;
|
||||||
|
htest->SwTimings.msticks_for_positive_dc = mbdata->HoldRegs.TimeForPositiveDC;
|
||||||
|
|
||||||
|
htest->SwTimings.ticks_before_disconnect.msdelay = mbdata->Coils.msTimeBeforeDisconnect_enable;
|
||||||
|
htest->SwTimings.ticks_before_go_to_peak.msdelay = mbdata->Coils.msTimeBeforePeak_enable;
|
||||||
|
htest->SwTimings.ticks_before_test.msdelay = mbdata->Coils.msTimeBeforeTest_enable;
|
||||||
|
|
||||||
|
TESTER_ADC_UpdateSettings(htest->adc, mbdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Инициализация тестера по дефолтным настрйокам в tester_config.h
|
||||||
|
*/
|
||||||
|
void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester)
|
||||||
|
{
|
||||||
|
tester->mbdata->Coils.PositiveTest = 1;
|
||||||
|
tester->mbdata->Coils.NegativeTest = 1;
|
||||||
|
|
||||||
|
/* Настройка пинов для подключения отрицательного источника */
|
||||||
|
tester->htest->DCNegSw.SW_Port = SWITCH_DC_NEGATIVE_Port;
|
||||||
|
tester->htest->DCNegSw.SwGND_Pin = SWITCH_DC_NEGATIVE_GND_Pin;
|
||||||
|
tester->htest->DCNegSw.SwVDD_Pin = SWITCH_DC_NEGATIVE_VDD_Pin;
|
||||||
|
|
||||||
|
/* Настройка пинов для подключения положительного источника */
|
||||||
|
tester->htest->DCPosSw.SW_Port = SWITCH_DC_POSITIVE_Port;
|
||||||
|
tester->htest->DCPosSw.SwGND_Pin = SWITCH_DC_POSITIVE_GND_Pin;
|
||||||
|
tester->htest->DCPosSw.SwVDD_Pin = SWITCH_DC_POSITIVE_VDD_Pin;
|
||||||
|
|
||||||
|
|
||||||
|
/* Настройка пинов для кнопки старта */
|
||||||
|
tester->SwStart.Sw_Port = SWITCH_START_Port;
|
||||||
|
tester->SwStart.Sw_Pin = SWITCH_START_Pin;
|
||||||
|
tester->SwStart.Sw_FilterDelay = SWITCH_ANTI_DREBEZG_DELAY;
|
||||||
|
|
||||||
|
/* Настройка пинов для светодиода*/
|
||||||
|
tester->leds.LED1.LED_Port = LED1_Port;
|
||||||
|
tester->leds.LED1.LED_Pin = LED1_Pin;
|
||||||
|
tester->leds.LED1.period = LED_BLINK_AS_ON;
|
||||||
|
|
||||||
|
|
||||||
|
/* Настройка таймингов по умолчанию для тестирования */
|
||||||
|
tester->mbdata->HoldRegs.TimeForPositiveDC = DEF_MS_TIME_FOR_POSITIVE;
|
||||||
|
|
||||||
|
tester->mbdata->HoldRegs.TimeBeforeDisconnect = DEF_TIME_BEFORE_DISCONNECT;
|
||||||
|
tester->mbdata->Coils.msTimeBeforeDisconnect_enable = DEF_TIME_BEFORE_DISCONNECT_MS_DELAY;
|
||||||
|
|
||||||
|
tester->mbdata->HoldRegs.TimeBeforePeak = DEF_TIME_BEFORE_PEAK;
|
||||||
|
tester->mbdata->Coils.msTimeBeforePeak_enable = DEF_TIME_BEFORE_PEAK_MS_DELAY;
|
||||||
|
|
||||||
|
tester->mbdata->HoldRegs.TimeBeforeTest = DEF_TIME_BEFORE_TEST;
|
||||||
|
tester->mbdata->Coils.msTimeBeforeTest_enable = DEF_TIME_BEFORE_TEST_MS_DELAY;
|
||||||
|
|
||||||
|
|
||||||
|
/* Настройка АЦП */
|
||||||
|
tester->mbdata->HoldRegs.Adc_PulseWidth = TESTER_ADC_PULES_EXPETCED_WIDTH;
|
||||||
|
tester->mbdata->HoldRegs.Adc_CalibrValue = ADC_VALUE_CALIBR;
|
||||||
|
tester->mbdata->HoldRegs.Adc_ZeroValue = ADC_VALUE_ZERO;
|
||||||
|
tester->mbdata->HoldRegs.Adc_U_Calibr = ADC_U_CALIBR;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Задеркжка главного цикла
|
* @brief Задеркжка главного цикла
|
||||||
*/
|
*/
|
||||||
|
@ -32,8 +32,18 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
unsigned flag_init_done:1;
|
unsigned flag_init_done:1;
|
||||||
|
unsigned flag_test_active:1;
|
||||||
}TESTER_FlagsTypeDef;
|
}TESTER_FlagsTypeDef;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TEST_DISABLE = 0,
|
||||||
|
TEST_POSITIVE = 1,
|
||||||
|
TEST_NEGATIVE = 2,
|
||||||
|
TEST_POSNEG = 3
|
||||||
|
}TESTER_TestModeTypeDef;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Структура проекта тестер
|
* @brief Структура проекта тестер
|
||||||
*/
|
*/
|
||||||
@ -41,8 +51,14 @@ typedef struct
|
|||||||
{
|
{
|
||||||
function_calls func; ///< вызов разных функций
|
function_calls func; ///< вызов разных функций
|
||||||
|
|
||||||
|
TESTER_TestModeTypeDef mode; ///< режим тестера
|
||||||
|
|
||||||
TESTER_TestHandleTypeDef *htest; ///< дескриптор тестера
|
TESTER_TestHandleTypeDef *htest; ///< дескриптор тестера
|
||||||
|
|
||||||
|
RS_HandleTypeDef *hmodbus;
|
||||||
|
MB_DataStructureTypeDef *mbdata;
|
||||||
|
|
||||||
|
|
||||||
TESTER_SwitchStartTypeDef SwStart; ///< структура кнопки старта
|
TESTER_SwitchStartTypeDef SwStart; ///< структура кнопки старта
|
||||||
TESTER_LEDsTypeDef leds; ///< структура светодиодов
|
TESTER_LEDsTypeDef leds; ///< структура светодиодов
|
||||||
|
|
||||||
@ -64,6 +80,10 @@ void TESTER_pre_while(TESTER_ProjectTypeDef *tester);
|
|||||||
void TESTER_main_while(TESTER_ProjectTypeDef *tester);
|
void TESTER_main_while(TESTER_ProjectTypeDef *tester);
|
||||||
/* Функция работы интерфейса */
|
/* Функция работы интерфейса */
|
||||||
void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester);
|
void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester);
|
||||||
|
/* Обновление настроек тестера */
|
||||||
|
void TESTER_UpdateSettings(TESTER_TestHandleTypeDef *htest, MB_DataStructureTypeDef *mbdata);
|
||||||
|
/* Инициализация тестера по дефолтным настрйокам в tester_config.h */
|
||||||
|
void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester);
|
||||||
/*Задеркжка главного цикла */
|
/*Задеркжка главного цикла */
|
||||||
void TESTER_main_delay(TESTER_ProjectTypeDef *tester);
|
void TESTER_main_delay(TESTER_ProjectTypeDef *tester);
|
||||||
#endif //_TESTER_MAIN_H_
|
#endif //_TESTER_MAIN_H_
|
||||||
|
@ -182,6 +182,11 @@
|
|||||||
<WinNumber>2</WinNumber>
|
<WinNumber>2</WinNumber>
|
||||||
<ItemText>timeout,0x0A</ItemText>
|
<ItemText>timeout,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>4</count>
|
||||||
|
<WinNumber>2</WinNumber>
|
||||||
|
<ItemText>val_sum,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow2>
|
</WatchWindow2>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
<THDelay>0</THDelay>
|
<THDelay>0</THDelay>
|
||||||
|
@ -158,8 +158,8 @@ RCC.VCOOutput2Freq_Value=8000000
|
|||||||
SH.ADCx_IN0.0=ADC1_IN0,IN0
|
SH.ADCx_IN0.0=ADC1_IN0,IN0
|
||||||
SH.ADCx_IN0.ConfNb=1
|
SH.ADCx_IN0.ConfNb=1
|
||||||
TIM3.IPParameters=Period,Prescaler,TIM_MasterOutputTrigger
|
TIM3.IPParameters=Period,Prescaler,TIM_MasterOutputTrigger
|
||||||
TIM3.Period=8999
|
TIM3.Period=10000
|
||||||
TIM3.Prescaler=0
|
TIM3.Prescaler=72-1
|
||||||
TIM3.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
TIM3.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
||||||
USART1.IPParameters=VirtualMode
|
USART1.IPParameters=VirtualMode
|
||||||
USART1.VirtualMode=VM_ASYNC
|
USART1.VirtualMode=VM_ASYNC
|
||||||
|
Loading…
Reference in New Issue
Block a user