diff --git a/diode_tester/Core/Interfaces/modbus_data.h b/diode_tester/Core/Interfaces/modbus_data.h index a25468a..9fcb038 100644 --- a/diode_tester/Core/Interfaces/modbus_data.h +++ b/diode_tester/Core/Interfaces/modbus_data.h @@ -48,10 +48,10 @@ typedef struct //MB_DataInRegsTypeDef typedef struct //MB_DataInRegsTypeDef { uint16_t TimeForForward; + uint16_t TimeForReverse; uint16_t TimeBeforeTest; uint16_t TimeDeadtime; uint16_t TimeBeforePeak; - uint16_t TimeBeforeDisconnect; uint16_t Adc_PulseWidth; uint16_t Adc_PulseSign; @@ -104,18 +104,19 @@ typedef struct //MB_DataCoilsTypeDef unsigned ForwardTest:1; unsigned ReverseTest:1; unsigned StartTest:1; - unsigned PhaseForwardHiTest:1; - unsigned PhaseForwardLoTest:1; - unsigned PhaseReverseHiTest:1; - unsigned PhaseReverseLoTest:1; + unsigned KeyForwardHiTest:1; + unsigned KeyForwardLoTest:1; + unsigned KeyReverseHiTest:1; + unsigned KeyReverseLoTest:1; unsigned reserved:9; /* reg 2 - settings */ + unsigned msTimeForForward_enable:1; + unsigned msTimeForReverse_enable:1; unsigned msTimeBeforeTest_enable:1; unsigned msTimeDeadtime_enable:1; unsigned msTimeBeforePeak_enable:1; - unsigned msTimeBeforeDisconnect_enable:1; unsigned reserved2:11; }MB_DataCoilsTypeDef; @@ -124,7 +125,7 @@ typedef struct //MB_DataCoilsTypeDef #define C_CONTROL_QNT 7 #define C_SETTINGS_ADDR 16 -#define C_SETTINGS_QNT 3 +#define C_SETTINGS_QNT 5 /** MODBUS_DATA_COILS_DEFINES * @} diff --git a/diode_tester/Core/Src/gpio.c b/diode_tester/Core/Src/gpio.c index fc4bdf5..7033e4f 100644 --- a/diode_tester/Core/Src/gpio.c +++ b/diode_tester/Core/Src/gpio.c @@ -67,7 +67,7 @@ void MX_GPIO_Init(void) /*Configure GPIO pin : PC14 */ GPIO_InitStruct.Pin = GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pins : PAPin PAPin PAPin PAPin */ diff --git a/diode_tester/Core/Tester_main/tester_config.h b/diode_tester/Core/Tester_main/tester_config.h index ca99197..66e6753 100644 --- a/diode_tester/Core/Tester_main/tester_config.h +++ b/diode_tester/Core/Tester_main/tester_config.h @@ -21,24 +21,31 @@ /** * @brief Задержка (миллисекундная) для положительного напряжения ПО УМОЛЧАНИЮ - * @details Пока только миллисекунды, т.к. меньше я пока не реализовал, да и как понимаю не требуется + * @details Задержка миллисекундная или микросекундная @ref TIME_BEFORE_TEST_MS_DELAY */ -#define DEF_MS_TIME_FOR_POSITIVE 2000 +#define DEF_TIME_FOR_FORWARD 100 +#define DEF_TIME_FOR_FORWARD_MS_DELAY 1 ///< включение миллисекундной задержки для @ref DEF_TIME_FOR_FORWARD по умолчанию +/** + * @brief Задержка перед окончанием тестирования (отключение питания) ПО УМОЛЧАНИЮ + * @details Задержка миллисекундная или микросекундная @ref TIME_FOR_REVERSE_MS_DELAY + */ +#define DEF_TIME_FOR_REVERSE 200 +#define DEF_TIME_FOR_REVERSE_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_FOR_REVERSE /** * @brief Задержка перед началом тестирования ПО УМОЛЧАНИЮ * @details Задержка миллисекундная или микросекундная @ref TIME_BEFORE_TEST_MS_DELAY */ -#define DEF_TIME_BEFORE_TEST 500 -#define DEF_TIME_BEFORE_TEST_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_TEST по умолчанию +#define DEF_TIME_BEFORE_TEST 500 +#define DEF_TIME_BEFORE_TEST_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_TEST по умолчанию /** * @brief Задержка для дедтайма ПО УМОЛЧАНИЮ * @details Задержка миллисекундная или микросекундная @ref DEF_DEADTIME_MS_DELAY */ -#define DEF_DEADTIME 500 -#define DEF_DEADTIME_MS_DELAY 0 ///< включение миллисекундной задержки для @ref DEF_DEADTIME по умолчанию +#define DEF_DEADTIME 0 +#define DEF_DEADTIME_MS_DELAY 0 ///< включение миллисекундной задержки для @ref DEF_DEADTIME по умолчанию /** * @brief Задержка между включением АЦП и предполагаемым скачком напряжения ПО УМОЛЧАНИЮ @@ -48,15 +55,8 @@ * @note Но если миллисекундная, то скорее всего скачок не попадет в буфер АЦП. * Поэтому желательно только микросекундная (@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 - -/** - * @brief Задержка перед окончанием тестирования (отключение питания) ПО УМОЛЧАНИЮ - * @details Задержка миллисекундная или микросекундная @ref TIME_BEFORE_DISCONNECT_MS_DELAY - */ -#define DEF_TIME_BEFORE_DISCONNECT 2000 -#define DEF_TIME_BEFORE_DISCONNECT_MS_DELAY 1 ///< включение миллисекундной задержки для @ref TIME_BEFORE_DISCONNECT +#define DEF_TIME_BEFORE_PEAK 5 +#define DEF_TIME_BEFORE_PEAK_MS_DELAY 0 ///< включение миллисекундной задержки для @ref TIME_BEFORE_PEAK /** TESTER_SW_TIMINGS_CONFIG * @} @@ -86,8 +86,8 @@ /* Дефайны для кнопки */ /* Состояния нажатой и отжатой кнопки */ -#define SW_ON 1 ///< Состояние нажатой кнопки -#define SW_OFF 0 ///< Состояние отжатой кнопки +#define SW_ON 0 ///< Состояние нажатой кнопки +#define SW_OFF 1 ///< Состояние отжатой кнопки /* Пин кнопки при перенастройке надо также перенастроить через cube) */ #define SWITCH_START_Port GPIOC ///< Порт кнокпи старта (при перенастройке надо также перенастроить через cube) @@ -107,7 +107,7 @@ @{ */ //#define USE_HAL_GPIO_FUNCTIONS ///< По этому дефайну для переключения пинов будут использоваться HAL_GPIO функции -//#define RECONNECT_WITHOUT_DEADTIME ///< По этому дефайну дедтайм отключается. Если отключить и USE_HAL_GPIO_FUNCTIONS, то переключатся фазы будут почти синхронно (160 нс) +#define RECONNECT_WITHOUT_DEADTIME ///< По этому дефайну дедтайм отключается. Если отключить и USE_HAL_GPIO_FUNCTIONS, то переключатся фазы будут почти синхронно (160 нс) /* Состояния ключей для подключения и откючения питания */ #define PHASE_CONNECT 1 ///< Ключ замкнут подключено в данном состоянии пина @@ -115,16 +115,15 @@ /* Ключи для прямого включения диода */ /* (при перенастройке надо также перенастроить через cube) */ -#define SWITCH_PHASE_FORWARD_Port GPIOB ///< Порт пина первого ключа для прямого включения диода -#define SWITCH_PHASE_FORWARD_HI_Pin GPIO_PIN_0 ///< Пин первого ключа для прямого включения диода -#define SWITCH_PHASE_FORWARD_LO_Pin GPIO_PIN_1 ///< Пин второго ключа для прямого включения диода +#define SWITCH_PHASES_Port GPIOB ///< Порт пина первого ключа для прямого включения диода +#define SWITCH_PHASE_A_POS_Pin GPIO_PIN_0 ///< Пин первого ключа для прямого включения диода +#define SWITCH_PHASE_B_NEG_Pin GPIO_PIN_1 ///< Пин второго ключа для прямого включения диода /* Ключи для обратного включения диода */ /* (при перенастройке надо также перенастроить через cube) */ -#define SWITCH_PHASE_REVERSE_Port GPIOB ///< Порт пина первого ключа для обратного включения диода -#define SWITCH_PHASE_REVERSE_HI_Pin GPIO_PIN_10 ///< Пин первого ключа для обратного включения диода -#define SWITCH_PHASE_REVERSE_LO_Pin GPIO_PIN_11 ///< Пин первого ключа для обратного включения диода +#define SWITCH_PHASE_A_NEG_Pin GPIO_PIN_10 ///< Пин первого ключа для обратного включения диода +#define SWITCH_PHASE_B_POS_Pin GPIO_PIN_11 ///< Пин первого ключа для обратного включения диода /** TESTER_PHASE_SW_CONFIG * @} diff --git a/diode_tester/Core/Tester_main/tester_func.c b/diode_tester/Core/Tester_main/tester_func.c index 5d4f90f..b8529fd 100644 --- a/diode_tester/Core/Tester_main/tester_func.c +++ b/diode_tester/Core/Tester_main/tester_func.c @@ -43,7 +43,7 @@ void TESTER_TestDiode_Forward(TESTER_TestHandleTypeDef *htest) while(1) { /* Считывание АЦП пока таймаут истечет */ - res = ADC_ReadContinuous(htest->adc, htest->continuous_buff_size, tickstart, htest->SwTimings.msticks_for_forward); + res = ADC_ReadContinuous(htest->adc, htest->continuous_buff_size, tickstart, htest->SwTimings.ticks_for_forward.ticks); if(res != HAL_OK) break; @@ -85,7 +85,7 @@ void TESTER_TestDiode_Reverse(TESTER_TestHandleTypeDef *htest) TESTER_Connect_Phase(&htest->SwPhaseReverse); /* Обратное включение на определенное время */ - TESTER_Delay(&htest->SwTimings.ticks_before_disconnect, &hmcstim); + TESTER_Delay(&htest->SwTimings.ticks_for_reverse, &hmcstim); /* Отключение питания от диода */ TESTER_Disconnect_AllPhases(&htest->SwPhaseReverse, &htest->SwPhaseForward); @@ -118,7 +118,7 @@ void TESTER_TestDiode_SwitchConnection(TESTER_TestHandleTypeDef *htest) TESTER_Connect_Phase(&htest->SwPhaseForward); /* Прямое включение на определенное время */ - msDelay(htest->SwTimings.msticks_for_forward); + TESTER_Delay(&htest->SwTimings.ticks_for_forward, &hmcstim); htest->DiodeForwardVolt = htest->adc->chAdc.U_Current; TESTER_LED_TestingDiodeReverse(&htest->leds->LED1); @@ -126,7 +126,7 @@ void TESTER_TestDiode_SwitchConnection(TESTER_TestHandleTypeDef *htest) TESTER_Reconnect_TwoPhases(&htest->SwPhaseForward, &htest->SwPhaseReverse, &htest->SwTimings.ticks_deadtime); /* Обратное включение на определенное время */ - TESTER_Delay(&htest->SwTimings.ticks_before_disconnect, &hmcstim); + TESTER_Delay(&htest->SwTimings.ticks_for_reverse, &hmcstim); /* Отключение питания от диода */ TESTER_Disconnect_AllPhases(&htest->SwPhaseReverse, &htest->SwPhaseForward); diff --git a/diode_tester/Core/Tester_main/tester_func.h b/diode_tester/Core/Tester_main/tester_func.h index 5ce0d83..044d12b 100644 --- a/diode_tester/Core/Tester_main/tester_func.h +++ b/diode_tester/Core/Tester_main/tester_func.h @@ -71,11 +71,11 @@ typedef struct */ typedef struct { - uint32_t msticks_for_forward; ///< миллисекундная задержка для положительного напряжения @ref TESTER_TestDiode_Forward + TESTER_TicksDelayTypeDef ticks_for_forward; ///< задержка для прямого включения @ref TESTER_TestDiode_Forward + TESTER_TicksDelayTypeDef ticks_for_reverse; ///< задержка для прямого включения @ref TESTER_TestDiode_Reverse TESTER_TicksDelayTypeDef ticks_before_test; ///< задержка перед началом тестирования (мс или мкс) TESTER_TicksDelayTypeDef ticks_deadtime; ///< задержка между включением АЦП и предполагаемым скачком напряжения, чтобы точно поймать его в буфере АЦП (мс или мкс) TESTER_TicksDelayTypeDef ticks_before_expected_peak; ///< задержка между включением АЦП и предполагаемым скачком напряжения, чтобы точно поймать его в буфере АЦП (мс или мкс) - TESTER_TicksDelayTypeDef ticks_before_disconnect; ///< задержка перед выключением фаз (мс или мкс) }TESTER_SwitchTimingsTypeDef; /** diff --git a/diode_tester/Core/Tester_main/tester_main.c b/diode_tester/Core/Tester_main/tester_main.c index b88c0c3..34a1269 100644 --- a/diode_tester/Core/Tester_main/tester_main.c +++ b/diode_tester/Core/Tester_main/tester_main.c @@ -54,13 +54,13 @@ void TESTER_main_while(TESTER_ProjectTypeDef *tester) /* ПОДТЯГИВАНИЕ СОСТОЯНИЯ КЛЮЧЕЙ С МОДБАС */ TESTER_TestOneSwitch(tester->htest->SwPhaseForward.SW_Port, tester->htest->SwPhaseForward.SwHI_Pin, - tester->mbdata->Coils.PhaseForwardHiTest); + tester->mbdata->Coils.KeyForwardHiTest); TESTER_TestOneSwitch(tester->htest->SwPhaseForward.SW_Port, tester->htest->SwPhaseForward.SwLO_Pin, - tester->mbdata->Coils.PhaseForwardLoTest); + tester->mbdata->Coils.KeyForwardLoTest); TESTER_TestOneSwitch(tester->htest->SwPhaseForward.SW_Port, tester->htest->SwPhaseReverse.SwHI_Pin, - tester->mbdata->Coils.PhaseReverseHiTest); + tester->mbdata->Coils.KeyReverseHiTest); TESTER_TestOneSwitch(tester->htest->SwPhaseForward.SW_Port, tester->htest->SwPhaseReverse.SwLO_Pin, - tester->mbdata->Coils.PhaseReverseLoTest); + tester->mbdata->Coils.KeyReverseLoTest); @@ -162,16 +162,17 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester) */ void TESTER_UpdateSettings(TESTER_TestHandleTypeDef *htest, MB_DataStructureTypeDef *mbdata) { - htest->SwTimings.ticks_before_disconnect.ticks = mbdata->HoldRegs.TimeBeforeDisconnect; + htest->SwTimings.ticks_for_reverse.ticks = mbdata->HoldRegs.TimeForReverse; htest->SwTimings.ticks_deadtime.ticks = mbdata->HoldRegs.TimeDeadtime; htest->SwTimings.ticks_before_expected_peak.ticks = mbdata->HoldRegs.TimeBeforePeak; htest->SwTimings.ticks_before_test.ticks = mbdata->HoldRegs.TimeBeforeTest; - htest->SwTimings.msticks_for_forward = mbdata->HoldRegs.TimeForForward; + htest->SwTimings.ticks_for_forward.ticks = mbdata->HoldRegs.TimeForForward; - htest->SwTimings.ticks_before_disconnect.msdelay = mbdata->Coils.msTimeBeforeDisconnect_enable; + htest->SwTimings.ticks_for_reverse.msdelay = mbdata->Coils.msTimeForReverse_enable; htest->SwTimings.ticks_deadtime.msdelay = mbdata->Coils.msTimeDeadtime_enable; htest->SwTimings.ticks_before_expected_peak.msdelay = mbdata->Coils.msTimeBeforePeak_enable; htest->SwTimings.ticks_before_test.msdelay = mbdata->Coils.msTimeBeforeTest_enable; + htest->SwTimings.ticks_before_test.msdelay = mbdata->Coils.msTimeForForward_enable; TESTER_ADC_UpdateSettings(htest->adc, mbdata); } @@ -185,15 +186,15 @@ void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester) tester->mbdata->Coils.ForwardTest = 1; tester->mbdata->Coils.ReverseTest = 1; - /* Настройка пинов для прямого включения */ - tester->htest->SwPhaseReverse.SW_Port = SWITCH_PHASE_REVERSE_Port; - tester->htest->SwPhaseReverse.SwHI_Pin = SWITCH_PHASE_REVERSE_HI_Pin; - tester->htest->SwPhaseReverse.SwLO_Pin = SWITCH_PHASE_REVERSE_LO_Pin; - /* Настройка пинов для обратного включения */ - tester->htest->SwPhaseForward.SW_Port = SWITCH_PHASE_FORWARD_Port; - tester->htest->SwPhaseForward.SwHI_Pin = SWITCH_PHASE_FORWARD_HI_Pin; - tester->htest->SwPhaseForward.SwLO_Pin = SWITCH_PHASE_FORWARD_LO_Pin; + tester->htest->SwPhaseForward.SW_Port = SWITCH_PHASES_Port; + tester->htest->SwPhaseForward.SwHI_Pin = SWITCH_PHASE_A_POS_Pin; + tester->htest->SwPhaseForward.SwLO_Pin = SWITCH_PHASE_B_NEG_Pin; + + /* Настройка пинов для прямого включения */ + tester->htest->SwPhaseReverse.SW_Port = SWITCH_PHASES_Port; + tester->htest->SwPhaseReverse.SwHI_Pin = SWITCH_PHASE_B_POS_Pin; + tester->htest->SwPhaseReverse.SwLO_Pin = SWITCH_PHASE_A_NEG_Pin; /* Настройка пинов для кнопки старта */ @@ -206,10 +207,14 @@ void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester) tester->leds.LED1.LED_Pin = LED1_Pin; /* Настройка таймингов по умолчанию для тестирования */ - tester->mbdata->HoldRegs.TimeForForward = DEF_MS_TIME_FOR_POSITIVE; + tester->mbdata->HoldRegs.TimeBeforeTest = DEF_TIME_BEFORE_TEST; + tester->mbdata->Coils.msTimeBeforeTest_enable = DEF_TIME_BEFORE_TEST_MS_DELAY; - tester->mbdata->HoldRegs.TimeBeforeDisconnect = DEF_TIME_BEFORE_DISCONNECT; - tester->mbdata->Coils.msTimeBeforeDisconnect_enable = DEF_TIME_BEFORE_DISCONNECT_MS_DELAY; + tester->mbdata->HoldRegs.TimeForReverse = DEF_TIME_FOR_REVERSE; + tester->mbdata->Coils.msTimeForReverse_enable = DEF_TIME_FOR_REVERSE_MS_DELAY; + + tester->mbdata->HoldRegs.TimeForForward = DEF_TIME_FOR_FORWARD; + tester->mbdata->Coils.msTimeForForward_enable = DEF_TIME_FOR_FORWARD_MS_DELAY; tester->mbdata->HoldRegs.TimeDeadtime = DEF_DEADTIME; tester->mbdata->Coils.msTimeDeadtime_enable = DEF_DEADTIME_MS_DELAY; @@ -217,9 +222,6 @@ void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester) 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_PULSE_EXPETCED_WIDTH; diff --git a/diode_tester/MDK-ARM/diode_tester.uvoptx b/diode_tester/MDK-ARM/diode_tester.uvoptx index 7ddebb9..3347148 100644 --- a/diode_tester/MDK-ARM/diode_tester.uvoptx +++ b/diode_tester/MDK-ARM/diode_tester.uvoptx @@ -145,7 +145,7 @@ 0 ST-LINKIII-KEIL_SWO - -U53FF72064980555724221187 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL08000 -FP0($$Device:STM32F103C6$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 + -U005600373433510237363934 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL08000 -FP0($$Device:STM32F103C6$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 @@ -190,6 +190,16 @@ 1 hmodbus1,0x0A + + 8 + 1 + MB_DATA,0x0A + + + 9 + 1 + \\diode_tester\../Core/Interfaces/modbus.c\MB_DATA.HoldRegs.TimeForForward + @@ -271,7 +281,7 @@ 0 0 0 - 0 + 1 1 0 0 diff --git a/docs/mb_adr.xlsx b/docs/mb_adr.xlsx index 2fc0eec..4ad9b08 100644 Binary files a/docs/mb_adr.xlsx and b/docs/mb_adr.xlsx differ