Перейти к содержанию

Serhii Serheiev

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Serhii Serheiev

  1. Помогите пожалуйста советом. Бьюсь несколько дней с опцией ADC.

    Я использую двухканальный АЦП IN0 и IN1 на микроконтроллере STM32L010RB через библиотеку HAL.

    Если проверять по отдельности, все в порядке, но когда я проверяю вместе, у меня все время одна и та же проблема: первый канал перезаписывает данные на втором канале, и у меня одинаковые данные на IN0 и IN1 в терминале

    Функция для выбора IN0.

    void ADC_Select_CH0(void) 
    { 
    ADC_ChannelConfTypeDef sConfig_0 = {0}; 
    sConfig_0.Channel = ADC_CHANNEL_0; 
    sConfig_0.Rank = 0; 
     if (HAL_ADC_ConfigChannel(&hadc, &sConfig_0) != HAL_OK) 
     { 
      Error_Handler(); 
     } 
    }

    Функция для выбора IN1

    void ADC_Select_CH1(void) 
    { 
    ADC_ChannelConfTypeDef sConfig_1 = {0}; 
    sConfig_1.Channel = ADC_CHANNEL_1; 
    sConfig_1.Rank = 0; 
     if (HAL_ADC_ConfigChannel(&hadc, &sConfig_1) != HAL_OK) 
     { 
      Error_Handler(); 
     } 
    }

    основной цикл

    while(1)
    {
      ADC_Select_CH0();
        HAL_ADC_Start(&hadc);
        HAL_ADC_PollForConversion(&hadc, 100);
      Axis[0] = HAL_ADC_GetValue(&hadc);
        HAL_ADC_Stop(&hadc);
    
      ADC_Select_CH1();
        HAL_ADC_Start(&hadc);
        HAL_ADC_PollForConversion(&hadc, 100);
      Axis[1] = HAL_ADC_GetValue(&hadc);
        HAL_ADC_Stop(&hadc);
    
      sprintf(Tx_Data, "Axis X: %d;\r\nAxis Y: %d;\r\n\n\n", Axis[0], Axis[1]);
        HAL_UART_Transmit(&huart2, (uint8_t*)Tx_Data, strlen(Tx_Data), 1000);
    }

    ADC конфигурация:

    static void MX_ADC_Init(void)
    {
      hadc.Instance = ADC1;
      hadc.Init.OversamplingMode = DISABLE;
      hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
      hadc.Init.Resolution = ADC_RESOLUTION_12B;
      hadc.Init.SamplingTime = ADC_SAMPLETIME_160CYCLES_5;
      hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
      hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
      hadc.Init.ContinuousConvMode = ENABLE;
      hadc.Init.DiscontinuousConvMode = DISABLE;
      hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
      hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
      hadc.Init.DMAContinuousRequests = DISABLE;
      hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
      hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;
      hadc.Init.LowPowerAutoWait = DISABLE;
      hadc.Init.LowPowerFrequencyMode = DISABLE;
      hadc.Init.LowPowerAutoPowerOff = DISABLE;
      if (HAL_ADC_Init(&hadc) != HAL_OK)
      {
        Error_Handler();
      }
    }

     

×
×
  • Создать...