#3 Добавлена индикация перед началом теста и изменен механизм дедтайма и начало считывания АЦП
Теперь это считается в TESTER_Reconnect_TwoPhases: Если дедтайм меньше 100мкс, сначала начинает считывание АЦП, а потом переключаем ключи. Потому что функция запуска АЦП занимает 30мкс и в таком случае она будет сильно увеличивать заданный дедтайм. Иначе сначала диод отключается от всего, выжидается дедтайм, потом запускается АЦП и включается в обратном направлении. В таком порядке потому что запуск АЦП должен быть рядом с включем диода в обратном направлении, чтобы словить пик в буффере АЦП
This commit is contained in:
parent
0cba8cda8a
commit
15774d179b
@ -93,8 +93,8 @@ HAL_StatusTypeDef ADC_DMA_StartRead(TESTER_ADCTypeDef *adc)
|
||||
{
|
||||
HAL_StatusTypeDef res;
|
||||
|
||||
/* Очистка буферов каналов */
|
||||
ClearStruct(adc->chAdc.ADC_Buff);
|
||||
if(adc->f.adc_running)
|
||||
return HAL_BUSY;
|
||||
|
||||
/* Очистка флага какая половина DMA уже готова */
|
||||
adc->f.dmaBufferHalfDone = 0; // никакая, данные DMA пока не готовы в принципе
|
||||
|
@ -78,8 +78,8 @@
|
||||
#define LED1_Pin GPIO_PIN_13 ///< Пин светодиода (при перенастройке надо также перенастроить через cube)
|
||||
|
||||
/* Периоды моргания светодиода */
|
||||
#define LED_FORWARD_DIODE_PERIOD 250 ///< Моргание для индикации подключенного положительного напряжения
|
||||
#define LED_REVERSE_DIODE_PERIOD 25 ///< Моргание для индикации подключенного отрицательного напряжения
|
||||
#define LED_FORWARD_DIODE_PERIOD 250 ///< Моргание для индикации подключенного положительного напряжения
|
||||
#define LED_REVERSE_DIODE_PERIOD 25 ///< Моргание для индикации подключенного отрицательного напряжения
|
||||
#define LED_BLINK_AS_ON 5 ///< Моргание незаметное для глаза (светодиод просто включен)
|
||||
|
||||
|
||||
|
@ -21,7 +21,11 @@ void TESTER_HandleInit(TESTER_TestHandleTypeDef *htest, TESTER_LEDsTypeDef *leds
|
||||
*/
|
||||
void TESTER_TestDiode_Forward(TESTER_TestHandleTypeDef *htest)
|
||||
{
|
||||
/* Очистка буферов каналов */
|
||||
ClearStruct(htest->adc->chAdc.ADC_Buff);
|
||||
|
||||
/* Задержка, перед началом работы */
|
||||
TESTER_LED_TimeoutForStartTest(&htest->leds->LED1);
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_test, &hmcstim);
|
||||
TESTER_LED_TestingDiodeForward(&htest->leds->LED1);
|
||||
|
||||
@ -60,7 +64,11 @@ void TESTER_TestDiode_Forward(TESTER_TestHandleTypeDef *htest)
|
||||
*/
|
||||
void TESTER_TestDiode_Reverse(TESTER_TestHandleTypeDef *htest)
|
||||
{
|
||||
/* Очистка буферов каналов */
|
||||
ClearStruct(htest->adc->chAdc.ADC_Buff);
|
||||
|
||||
/* Задержка, перед началом работы */
|
||||
TESTER_LED_TimeoutForStartTest(&htest->leds->LED1);
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_test, &hmcstim);
|
||||
TESTER_LED_TestingDiodeReverse(&htest->leds->LED1);
|
||||
|
||||
@ -94,7 +102,11 @@ void TESTER_TestDiode_Reverse(TESTER_TestHandleTypeDef *htest)
|
||||
*/
|
||||
void TESTER_TestDiode_SwitchConnection(TESTER_TestHandleTypeDef *htest)
|
||||
{
|
||||
/* Очистка буферов каналов */
|
||||
ClearStruct(htest->adc->chAdc.ADC_Buff);
|
||||
|
||||
/* Задержка, перед началом работы */
|
||||
TESTER_LED_TimeoutForStartTest(&htest->leds->LED1);
|
||||
TESTER_Delay(&htest->SwTimings.ticks_before_test, &hmcstim);
|
||||
TESTER_LED_TestingDiodeForward(&htest->leds->LED1);
|
||||
|
||||
@ -160,7 +172,20 @@ void TESTER_Disconnect_Phase(TESTER_PhaseSwitchTypeDef *DCSw)
|
||||
*/
|
||||
void TESTER_Reconnect_TwoPhases(TESTER_PhaseSwitchTypeDef *SwPhaseA, TESTER_PhaseSwitchTypeDef *SwPhaseB, TESTER_TicksDelayTypeDef *deadtime)
|
||||
{
|
||||
/* Если дедтайм меньше 100 мкс, то сначала запускаем АЦП а потом дедтаймим */
|
||||
/* Потому что эта функция по длительности порядка 30 мкс, поэтому дедтайм получается не может быть меньше 30 мкс*/
|
||||
if(deadtime->msdelay == 0)
|
||||
{
|
||||
if(deadtime->ticks < 100)
|
||||
{
|
||||
/* Включение АЦП */
|
||||
ADC_DMA_StartRead(hTestDiode.adc);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef USE_HAL_GPIO_FUNCTIONS
|
||||
|
||||
HAL_GPIO_WritePin(SwPhaseA->SW_Port, SwPhaseA->SwHI_Pin | SwPhaseA->SwLO_Pin, PHASE_DISCONNECT);
|
||||
|
||||
#ifndef RECONNECT_WITHOUT_DEADTIME
|
||||
@ -186,22 +211,22 @@ void TESTER_Reconnect_TwoPhases(TESTER_PhaseSwitchTypeDef *SwPhaseA, TESTER_Phas
|
||||
#elif (PHASE_CONNECT == 1) && (PHASE_DISCONNECT == 0)
|
||||
SwPhaseA->SW_Port->BSRR = (((SwPhaseB->SwHI_Pin | SwPhaseB->SwLO_Pin) << 16)| (SwPhaseA->SwHI_Pin | SwPhaseA->SwLO_Pin));
|
||||
#endif //PHASE_CONNECT && PHASE_DISCONNECT
|
||||
|
||||
|
||||
#else //RECONNECT_WITHOUT_DEADTIME
|
||||
#if (PHASE_DISCONNECT == 0)
|
||||
SwPhaseA->SW_Port->BSRR = (SwPhaseA->SwHI_Pin | SwPhaseA->SwLO_Pin) << 16;
|
||||
#else //PHASE_DISCONNECT == 1
|
||||
SwPhaseA->SW_Port->BSRR = SwPhaseA->SwHI_Pin | SwPhaseA->SwLO_Pin;
|
||||
#endif //PHASE_DISCONNECT
|
||||
|
||||
|
||||
/* Ожидается задержка дедтайм */
|
||||
TESTER_Delay(deadtime, &hmcstim);
|
||||
|
||||
|
||||
/* Включение АЦП */
|
||||
ADC_DMA_StartRead(hTestDiode.adc);
|
||||
/* Ожидается задержка, перед предполагаемым скачком */
|
||||
TESTER_Delay(&hTestDiode.SwTimings.ticks_before_expected_peak, &hmcstim);
|
||||
|
||||
|
||||
#if (PHASE_CONNECT == 1)
|
||||
SwPhaseB->SW_Port->BSRR = SwPhaseB->SwHI_Pin | SwPhaseB->SwLO_Pin;
|
||||
#else //PHASE_CONNECT == 0
|
||||
|
@ -8,12 +8,20 @@ void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Включить индикацию таймаута старта при активации теста
|
||||
*/
|
||||
void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
TESTER_LED_Off(led);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Включить индикацию прямого подключения диода
|
||||
*/
|
||||
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_BLINKING;
|
||||
led->period = LED_FORWARD_DIODE_PERIOD;
|
||||
}
|
||||
/**
|
||||
@ -21,13 +29,16 @@ void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led)
|
||||
*/
|
||||
void TESTER_LED_TestingDiodeReverse(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_BLINKING;
|
||||
led->period = LED_REVERSE_DIODE_PERIOD;
|
||||
}
|
||||
/**
|
||||
* @brief Выключить индикацию ожидания комманды
|
||||
* @brief Выключить индикацию ожидания комманды
|
||||
* @details Сделано через моргание, чтобы понимать, что системные тики работают
|
||||
*/
|
||||
void TESTER_LED_WaitForAction(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_BLINKING;
|
||||
led->period = LED_BLINK_AS_ON;
|
||||
}
|
||||
|
||||
@ -63,6 +74,7 @@ uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart)
|
||||
*/
|
||||
void TESTER_LED_On(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_ON;
|
||||
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_ON);
|
||||
}
|
||||
/**
|
||||
@ -70,18 +82,30 @@ void TESTER_LED_On(TESTER_LEDTypeDef *led)
|
||||
*/
|
||||
void TESTER_LED_Off(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_OFF;
|
||||
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_OFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Активировать моргание светодиодом
|
||||
*/
|
||||
void TESTER_LED_Blink_Start(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
led->state = LED_IS_BLINKING;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Моргание светодиодом
|
||||
*/
|
||||
void TESTER_LED_Blink(TESTER_LEDTypeDef *led)
|
||||
void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led)
|
||||
{
|
||||
uint32_t tickcurrent = HAL_GetTick();
|
||||
if((tickcurrent - led->tickprev) > led->period)
|
||||
if(led->state == LED_IS_BLINKING)
|
||||
{
|
||||
HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
|
||||
led->tickprev = tickcurrent;
|
||||
uint32_t tickcurrent = HAL_GetTick();
|
||||
if((tickcurrent - led->tickprev) > led->period)
|
||||
{
|
||||
HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
|
||||
led->tickprev = tickcurrent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,9 +14,17 @@
|
||||
#include "mylibs_include.h"
|
||||
#include "rs_message.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LED_IS_OFF = 0,
|
||||
LED_IS_ON = 1,
|
||||
LED_IS_BLINKING = 2,
|
||||
}TESTER_LEDStateTypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TESTER_LEDStateTypeDef state;
|
||||
|
||||
GPIO_TypeDef *LED_Port;
|
||||
uint32_t LED_Pin;
|
||||
|
||||
@ -46,7 +54,8 @@ typedef struct
|
||||
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds);
|
||||
|
||||
|
||||
|
||||
/* Включить индикацию таймаута старта при активации теста */
|
||||
void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led);
|
||||
/* Включить индикацию прямого подключения диода */
|
||||
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led);
|
||||
/* Включить индикацию обратного подключения диода */
|
||||
@ -60,7 +69,9 @@ uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart);
|
||||
void TESTER_LED_On(TESTER_LEDTypeDef *led);
|
||||
/* Выключить светодиод */
|
||||
void TESTER_LED_Off(TESTER_LEDTypeDef *led);
|
||||
/* Активировать моргание светодиодом */
|
||||
void TESTER_LED_Blink_Start(TESTER_LEDTypeDef *led);
|
||||
/* Моргание светодиодом */
|
||||
void TESTER_LED_Blink(TESTER_LEDTypeDef *led);
|
||||
void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led);
|
||||
#endif //_TESTER_INTERFACE_FUNC_H_
|
||||
|
||||
|
@ -14,7 +14,7 @@ void TESTER_Init(TESTER_ProjectTypeDef *tester)
|
||||
|
||||
tester->delay = 250;
|
||||
tester->delay_en = 0;
|
||||
tester->htest->adc->chAdc.s
|
||||
|
||||
tester->func.disable_reset_call = 0;
|
||||
tester->htest = &hTestDiode;
|
||||
TESTER_HandleInit(tester->htest, &tester->leds);
|
||||
@ -136,7 +136,7 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
|
||||
}
|
||||
|
||||
|
||||
TESTER_LED_Blink(&tester->leds.LED1);
|
||||
TESTER_LEDBlink_Handle(&tester->leds.LED1);
|
||||
|
||||
}
|
||||
|
||||
|
@ -212,6 +212,11 @@
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>ADC_DMA_HalfBuff,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>6</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>\\diode_tester\../Core/Tester_main/tester_main.c\TESTER</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow2>
|
||||
<Tracepoint>
|
||||
<THDelay>0</THDelay>
|
||||
|
Loading…
Reference in New Issue
Block a user