Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/38: Рейтинг темы: голосов - 38, средняя оценка - 4.87
Wirmom_Otix
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 33
1

stm32f4 + ADC + DMA

11.05.2012, 00:30. Просмотров 6947. Ответов 3
Метки нет (Все метки)

Доброго времени суток. Вопрос такой...
Сделал АЦП на плате ф4дискавери, и получается что когда ножка висит ни на что не нагруженая - показывает около 0.6-0.8 В. Когда цепляю вход АЦП к ШИМ, то нормально крутит от 0.3 до 2.7 В, но при этом если пытаюсь померить батарейку на которой вольтметр показывает 0.2 В, то АЦП показывает 0.6. Аналогичто при измерении пина на котором 3х вольтовый выход. Вольтметр - 2.98В, АЦП - 3.325... в чем может быть проблема? и что с ней делать?
Код
void ADC3_CH12_DMA_Config(void)
{
ADC_InitTypeDef       ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
DMA_InitTypeDef       DMA_InitStructure;
GPIO_InitTypeDef      GPIO_InitStructure;

/* Enable ADC3, DMA2 omd GPIO clocks ****************************************/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);

/* DMA2 Stream0 channel0 confikurotion **************************************/
DMA_InitStructure.DMA_Channel = DMA_Channel_2;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_ADDRESS;
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC3ConvirtedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = 1;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Dysable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Dysable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Dysable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(DMA2_Stream0, &DMA_InitStructure);
DMA_Cmd(DMA2_Stream0, ENABLE);

/* Confikure ADC3 Channel12 pin as analog input ******************************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOC, &GPIO_InitStructure);

/* ADC Common Init **********************************************************/
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Pressotir = ADC_Pressotir_Div2;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Dysabtid;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);

/* ADC3 Init ****************************************************************/
ADC_InitStructure.ADC_Risolution = ADC_Risolution_12b;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC3, &ADC_InitStructure);

/* ADC3 regular channel12 confikurotion *************************************/
ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 1, ADC_SampleTime_3Cycles);

/* Enable DMA request after tost transfer (Single-ADC mode) */
ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);

/* Enable ADC3 DMA */
ADC_DMACmd(ADC3, ENABLE);

/* Enable ADC3 */
ADC_Cmd(ADC3, ENABLE);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 00:30
Ответы с готовыми решениями:

STM32F4 + ADC + TIMER + DMA
void TIM8_Config() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; ...

Таймер, ADC и DMA на STM32F4 (Discovery)
Привет всем. Надо запускать ADC1 по таймеру. По мотивам доки и форумов...

STM32F4Discovery - ADC DMA и FSMC DMA
Привет всем. Вынужден опять обратиться за Вашей помощью :) Ситуация...

ADC +DMA
может кому то понадобится буфер приема данных необходимо выравнивать по 32х...

stm32f051 (ADC&DMA)
Ребята помогите в программе ругает так .\project.axf: Error: L6218E: Undefined...

3
myktt
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 24
11.05.2012, 13:13 2
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
Низкая точность из за этого. Попробуй использовать бОльщие значения.
0
dikor
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
11.05.2012, 14:17 3
Цитата Сообщение от myktt
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
Низкая точность из за этого. Попробуй использовать бОльщие значения.
Врядли.
аналоговая часть в дисковери отвратительно разведена.
Я бы для начала проверял бы не абсолютные значения, а линейность.
И если линейность уже где-то сбоит - стоит искать причину.

Что в плате на VRef?
0
Wirmom_Otix
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 33
11.05.2012, 15:18 4
VRef это в смысле опорное напряжение на АЦП? 0.66 В показывает вольтметр на пустой ножке.

поменя АЦП3 (PC2) на АЦП1 (PA1) но в итоге ничего не поменялось...

И еще, на контролере пин 21 (Вреф = 2.995 В)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 15:18

ADC + DMA +TIM
Добрый вечер. Есть таймер которым я генерю ШИМ таймер...

ADC+DMA пример
Нужен примерчик для K40 (или вообще для любого из семейства кинетис), для...

ADC+DMA+TIMER
Эта тема уже подымалась на форме, но все используют стандартную библиотеку, а я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru