реклама на сайте
подробности

 
 
> STM32L052 АЦП, Считывает одинаковые значения с двух разных каналов
war4one
сообщение Feb 23 2016, 13:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 16-07-05
Из: г. Уфа
Пользователь №: 6 851



Запускаю АЦП на STM32L052. Нужно читать два канала, 0 и 5, с ADC1. Скорость неважна. Если про инициализировать один канал, то все считывается нормально, и 0, и 5 показывают напряжение, приложенное к ним. Но если пытаться считывать два канала по очереди, то с обеих каналов считывается одно значение, а именно то, которое соответствует каналу, инициализированному раньше. Нашел совет полностью отключать и снова включать АЦП перед работой с другим каналом, но картина аналогичная. На настоящий момент код имеет следующий вид (засунул инициализацию в код для наглядности):

CODE
while(1)
{
AdcHandle.Instance = ADC1;
AdcHandle.Init.OversamplingMode = DISABLE;
AdcHandle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1;
AdcHandle.Init.LowPowerAutoPowerOff = DISABLE;
AdcHandle.Init.LowPowerFrequencyMode = ENABLE;
AdcHandle.Init.LowPowerAutoWait = DISABLE;
AdcHandle.Init.Resolution = ADC_RESOLUTION_12B;
AdcHandle.Init.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;
AdcHandle.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
AdcHandle.Init.ContinuousConvMode = ENABLE;
AdcHandle.Init.DiscontinuousConvMode = DISABLE;
AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
AdcHandle.Init.DMAContinuousRequests = DISABLE;

HAL_ADC_Init(&AdcHandle);
HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED);
sConfig.Channel = ADC_CHANNEL_0;
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
HAL_ADC_Start(&AdcHandle);
HAL_ADC_PollForConversion(&AdcHandle, 1000);
if ((HAL_ADC_GetState(&AdcHandle) & HAL_ADC_STATE_REG_EOC) == HAL_ADC_STATE_REG_EOC)
{
ADCValueSensor = HAL_ADC_GetValue(&AdcHandle);
}
HAL_ADC_Stop(&AdcHandle);
HAL_ADC_DeInit(&AdcHandle);
ADC_Disable(&AdcHandle);

HAL_Delay(100);

HAL_ADC_Init(&AdcHandle);
HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED);
sConfig.Channel = ADC_CHANNEL_5;
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
HAL_ADC_Start(&AdcHandle);
HAL_ADC_PollForConversion(&AdcHandle, 1000);
if ((HAL_ADC_GetState(&AdcHandle) & HAL_ADC_STATE_REG_EOC) == HAL_ADC_STATE_REG_EOC)
{
ADCValuePower = HAL_ADC_GetValue(&AdcHandle);
}
HAL_ADC_Stop(&AdcHandle);
HAL_ADC_DeInit(&AdcHandle);
ADC_Disable(&AdcHandle);

HAL_Delay(100);
}


В переменных ADCValueSensor и ADCValuePower оседают одинаковые значения. Подскажите, куда рыть.

Сообщение отредактировал IgorKossak - Feb 23 2016, 19:44
Причина редактирования: [codeebox] для длинного кода, [code] - для короткого!


--------------------
Электронные устройства Open Hardware
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- war4one   STM32L052 АЦП   Feb 23 2016, 13:55


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01349 секунд с 7
ELECTRONIX ©2004-2016