АПЦ в Stm32

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

АПЦ в Stm32

Сообщение pokk »

Добрый день, подключил ацп в stm32f103 на вход 3тьего канала подаю постоянное напряжение через переменный резистор.
Опорное напряжение Vdda=2.5в. Тактовая частота ядра 40Mhz пред делить АЦП=4 (ADCCLK=10Mhz) Период дискретизации 100ms.

Код инициализации.(режим одиночного преобразования)
Спойлер

Код: Выделить всё

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);					//ADC init


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);



RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);					//ADC init

RCC_ADCCLKConfig(RCC_PCLK2_Div4);

	ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
  	/* Now do the setup */
  	ADC_Init(ADC1, &ADC_InitStructure);
  	/* Enable ADC1 */
  	ADC_Cmd(ADC1, ENABLE);

  	/* Enable ADC1 reset calibaration register */
  	ADC_ResetCalibration(ADC1);
  	/* Check the end of ADC1 reset calibration register */
  	while(ADC_GetResetCalibrationStatus(ADC1));
  	/* Start ADC1 calibaration */
  	ADC_StartCalibration(ADC1);
  	/* Check the end of ADC1 calibration */
  	while(ADC_GetCalibrationStatus(ADC1));
Функция чтения АЦП
Спойлер

Код: Выделить всё

u16 adc_read(u8 channel)
{
  	ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_239Cycles5);
  	// Start the conversion
  	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  	// Wait until conversion completion
  	while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
  	// Get the conversion value
  	return ADC_GetConversionValue(ADC1);
}

Устанавливаю напряжение на входе АЦП =1В значение АЦП при минимальной времени выборки (ADC_SampleTime_1Cycles5 )
получается (1865 это 1.139В) при увеличении времени выборки значение напряжение увеличивается при ADC_SampleTime_239Cycles5 значение АЦП получается 3225(1.970В).

1) Из за чего такое может происходить ? ведь при увеличении времени выборки напряжение наоборот должно выравняться с входным.

2) откуда взялась погрешность в 0.130В при измерении на ADC_SampleTime_1Cycles5.
Реклама
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: АПЦ в Stm32

Сообщение Galizin »

Возможно Вам поможет объяснение Леонида Ивановича. Ищите в его блоге. Коротко говоря - вход потребляет ток, зависящий от входного уровня. Решение - ставьте буфер.
А может быть у вас что нибудь еще. Но почитать все равно стоит.
Реклама
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: АПЦ в Stm32

Сообщение pokk »

А это вы про статью "Демоны в АЦП STM32" уже читал, но не особо помогло =(
Аватара пользователя
qbit
Встал на лапы
Сообщения: 101
Зарегистрирован: Вт апр 02, 2013 10:03:29
Откуда: Санкт-Петербург
Контактная информация:

Re: АПЦ в Stm32

Сообщение qbit »

pokk писал(а):...подаю постоянное напряжение через переменный резистор...
Подайте с батарейки, со "свежей" батарейки.
Для связи email: info собака qbit.su
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «ARM»