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

 
 
> проблема с АЦП, stm32f100
Mikron
сообщение Dec 3 2014, 10:10
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



привет, помогите с непонятной проблемой. Код стандартный

измеряю значение опорного напряжения, Vref подключено к питанию, измеряю его ADC_Channel_17, должно быть 0xfff. Получаю 0x03B2
В чем ошибка?

Код
uint16_t   adcVal;

void RCC_Configuration(void)
{
   SystemInit();

   RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1|
                     RCC_APB2Periph_GPIOA |
                     RCC_APB2Periph_GPIOB |
                     RCC_APB2Periph_GPIOC |
                     RCC_APB2Periph_GPIOD |
                     RCC_APB2Periph_GPIOE |
                     RCC_APB2Periph_AFIO  |
                     RCC_APB2Periph_ADC1,
                     ENABLE);
}

void init_adc(void)
{
   ADC_InitTypeDef ADC_InitStructure;
   ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
   ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
   ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
   ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
   ADC_InitStructure.ADC_NbrOfChannel=1;
   ADC_InitStructure.ADC_ScanConvMode=DISABLE;
   ADC_Init(ADC1,&ADC_InitStructure);

   ADC_RegularChannelConfig(ADC1,ADC_Channel_17,1,ADC_SampleTime_1Cycles5);
   ADC_Cmd(ADC1,ENABLE);

   ADC_ResetCalibration(ADC1);
   while(ADC_GetCalibrationStatus(ADC1));
   ADC_StartCalibration(ADC1);
   while(ADC_GetCalibrationStatus(ADC1));
}

int main(void)
{
   RCC_Configuration();

   init_led();
   init_usart();
   init_adc();

   ADC_SoftwareStartConvCmd(ADC1,ENABLE);
   while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
   adcVal=ADC_GetConversionValue(ADC1);

   GPIO_SetBits(GPIOB,GPIO_Pin_5);

    while(1){
    }
}


Еще странность, когда изменяю коэффициент тактирования, изменяются и показания
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Dec 3 2014, 10:51
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



В описании сказано:
Цитата
Note: The TSVREFE bit must be set to enable both internal channels: ADCx_IN16 (temperature sensor) and ADCx_IN17 (VREFINT) conversion.
Я не знаю как и когда включает библиотека этот бит. Проверьте, включает ли она его. В даташите указано типичное время выборки при оцифровке канала внутренней опоры - 5.1...171 мкс. В вашем коде не вижу ни настройки тактирования (не могу определить время выборки по умолчанию), ни настройки времени выборки. Настройку времени нашел - 5 циклов. Но настройку тактирования все равно не вижу. Если АЦП работает на максимальной частоте 12 МГц, то 5 циклов - это примерно 417 нс, что значительно меньше необходимого.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
adnega
сообщение Dec 3 2014, 11:27
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Сергей Борщ @ Dec 3 2014, 14:51) *
Настройку времени нашел - 5 циклов.

На самом деле там 1.5 цикла. Слово "Cycles" - это положение десятичной точки.
К этому времени нужно добавить 12.5 цикла.

CODE
#define ADC_SampleTime_1Cycles5 ((uint8_t)0x00)
#define ADC_SampleTime_7Cycles5 ((uint8_t)0x01)
#define ADC_SampleTime_13Cycles5 ((uint8_t)0x02)
#define ADC_SampleTime_28Cycles5 ((uint8_t)0x03)
#define ADC_SampleTime_41Cycles5 ((uint8_t)0x04)
#define ADC_SampleTime_55Cycles5 ((uint8_t)0x05)
#define ADC_SampleTime_71Cycles5 ((uint8_t)0x06)
#define ADC_SampleTime_239Cycles5 ((uint8_t)0x07)


Подробности в RM
Цитата
Example:
With an ADCCLK = 14 MHz and a sampling time of 1.5 cycles:
Tconv = 1.5 + 12.5 = 14 cycles = 1 μs


Насчет 17 канала АЦП: кто сказал, что там должно быть напряжение Vref АЦП?
Вроде там всегда было Vrefint = 1.20 В.


Цитата
VREFINT Internal reference voltage (Min Typ Max Unit)
–40 °C < TA < +105 °C 1.16 1.20 1.26 V
–40 °C < TA < +85 °C 1.16 1.20 1.24 V
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 3 2014, 12:30
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(adnega @ Dec 3 2014, 13:27) *
К этому времени нужно добавить 12.5 цикла.
Зачем добавлять? Нас интересует время выборки, а не общее время преобразования.
Цитата(adnega @ Dec 3 2014, 13:27) *
Насчет 17 канала АЦП: кто сказал, что там должно быть напряжение Vref АЦП?
Вроде там всегда было Vrefint = 1.20 В.
В самом деле.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Mikron   проблема с АЦП   Dec 3 2014, 10:10
- - ДЕЙЛ   Мошть вывод Vref нельзя соединять со входом? Если ...   Dec 3 2014, 10:34
- - Mikron   Всем спасибо за помощь TSVREFE устанавливается AD...   Dec 4 2014, 10:53
- - Mikron   Появился еще вопрос. Правильно ли что для измерени...   Dec 5 2014, 13:28
- - adnega   Странный какой-то у вас матан... Temperature (in ...   Dec 5 2014, 13:54
- - Сергей Борщ   А вот тут мы можем плавно перейти к решению предыд...   Dec 5 2014, 18:32
|- - adnega   Цитата(Сергей Борщ @ Dec 5 2014, 22:32) т...   Dec 5 2014, 20:07
- - Mikron   Возникла еще одна проблема с ацп + dma, прошу помо...   Dec 12 2014, 10:27
- - kan35   Код ADC_RegularChannelConfig(ADC1,ADC_Channe...   Dec 19 2014, 18:58
- - VVS_   Здравствуйте! Не могу запустить АЦП та STM32F0...   Feb 11 2015, 12:04
|- - A. Fig Lee   Цитата(VVS_ @ Feb 11 2015, 07:04) Здравст...   Feb 11 2015, 13:10
- - VVS_   Стоит вот так. Файлы компилятор находит, т.к. если...   Feb 11 2015, 13:25
- - nill   ADC_InitStructure - это структура типа ADC_InitTyp...   Feb 12 2015, 07:37


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:07
Рейтинг@Mail.ru


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