#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 пока не готовы в принципе
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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 Выключить индикацию ожидания комманды
 | 
			
		||||
  * @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,13 +82,24 @@ 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)
 | 
			
		||||
{
 | 
			
		||||
  if(led->state == LED_IS_BLINKING)
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t tickcurrent = HAL_GetTick();
 | 
			
		||||
    if((tickcurrent - led->tickprev) > led->period)
 | 
			
		||||
@ -85,3 +108,4 @@ void TESTER_LED_Blink(TESTER_LEDTypeDef *led)
 | 
			
		||||
      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