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

 
 
> Нелинейности внутреннего АЦП в STM32, STM32F103RET6 GH22S 9U
zWitCh
сообщение Feb 25 2014, 09:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-08-06
Пользователь №: 19 654



И так работаю с контроллером STM32F103RET6 GH22S 9U (это полная маркировка, вдруг важно), работаю на частоте 72 МГц, и вот какая проблема, не зависимо от времени семплирования и настроек АЦП при подачи на вход плавно меняющейся функции (и сигнал с датчика температуры - терморезистора, так и просто источник опорного напряжения регулируемый пробовал) на выходи имеем нелинейности - ступеньки на определенных значениях, см. вложение.

И так поиск по интернету не дал ответа на вопрос что это и как исправлять (ну кроме смены процессора, просто неисправность камня я исключил так как попробовал на двух идентичных контроллерах), положение ступенек не зависит от напряжения, то есть при изменении опорного напряжения ступеньки остаются в тех же точках, хоть это уже другие напряжения, точки в которых есть ступеньки характерные, в них одновременно сменяется сразу много разрядов (отметил это на графике).

Прикрепленное изображение


Сообщение отредактировал zWitCh - Feb 25 2014, 09:10
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zWitCh
сообщение Feb 26 2014, 11:11
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-08-06
Пользователь №: 19 654



продолжил свои изыскания, взял я совершенно другую плату (на STM32F103RBT6):
Прикрепленное изображение

проводами на один из входов подключил источник питания регулируемый, и начал плавно его регулировать попутно записывая все измерения (код программы тот же что и ранее), вот что вышло:
Прикрепленное изображение

Вроде все хорошо, помехи и выбросы есть и на осциллограмме, они связаны с тем что источник плохой и длинными проводами подключен, но если рассмотреть участок вблизи моей злополучной точке "1023" то мы увидим все ту же проблему:
Прикрепленное изображение


Тут хорошо видно что вблизи точки "1023" (значение выдаваемое АЦП) полностью отсутствуют значения в диапазоне от 1024 до 1048 и все они заменяются на мои 1023! Дальше я просто посмотрел а АЦП хоть когда либо выдает ли мне на выходе цифры в диапазоне 1024 - 1048, и выяснились что нет, на двух совершенно разных платах и немного разных процессорах...

Обнаружив такую особенность я достал старую добрую STM32-Discovery и запустил тот же код на ней, там все ок, таких особенностей работы АЦП не заметил...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 26 2014, 11:19
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(zWitCh @ Feb 26 2014, 14:11) *
Вроде все хорошо, помехи и выбросы есть и на осциллограмме, они связаны с тем что источник плохой и длинными проводами подключен, но если рассмотреть участок вблизи моей злополучной точке "1023" то мы увидим все ту же проблему:
...
Обнаружив такую особенность я достал старую добрую STM32-Discovery и запустил тот же код на ней, там все ок, таких особенностей работы АЦП не заметил...

Так не в источнике питания ли дело? Что, если подать питание через дроссель, LC фильтр? Там помехи бегают...
Go to the top of the page
 
+Quote Post
zWitCh
сообщение Feb 26 2014, 11:56
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-08-06
Пользователь №: 19 654



Цитата(ViKo @ Feb 26 2014, 15:19) *
Так не в источнике питания ли дело? Что, если подать питание через дроссель, LC фильтр? Там помехи бегают...

Интересные помехи которые распределены во всем диапазоне равномерно а в определенных точках отсутствуют и сигнал в них идеально гладкий, ну да ладно, пошел дальше в изысканиях, немного переписал код, теперь я просто считаю сколько раз я с выхода АЦП имею определенное значение, а на вход подал просто шум, ниже код и результат.
Код
uint16_t arr[4096], indx;

int main(void)
{

    uint32_t i;
    GPIO_InitTypeDef PORT;

    // Initialize USART1 (для рабочей платы)
    /*
    USART_InitTypeDef USART_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    AFIO->MAPR |= AFIO_MAPR_USART1_REMAP;
    PORT.GPIO_Pin = GPIO_Pin_6;
    PORT.GPIO_Speed = GPIO_Speed_2MHz;
    PORT.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &PORT); //*/


    // Initialize USART1 (для стартика MINI_STM32_V3)
    USART_InitTypeDef USART_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    PORT.GPIO_Pin = GPIO_Pin_9;
    PORT.GPIO_Speed = GPIO_Speed_2MHz;
    PORT.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &PORT);


    USART_InitStructure.USART_BaudRate = 115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Tx;
    USART_Init(USART1, &USART_InitStructure);
    USART_Cmd(USART1, ENABLE);


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE);
    ADC1->CR2 |= ADC_CR2_CAL;
    while (!(ADC1->CR2 & ADC_CR2_CAL))
    ADC1->CR1 |= ADC_CR1_SCAN;
    ADC1->CR2 |= ADC_CR2_EXTSEL;
    ADC1->CR2 |= ADC_CR2_EXTTRIG;
    ADC1->SQR3 |= (ADC_SQR3_SQ1_3|ADC_SQR3_SQ1_2|ADC_SQR3_SQ1_1|ADC_SQR3_SQ1_0); // вход AN15
    ADC1->CR2 |= ADC_CR2_ADON;
    ADC1->CR2 |= ADC_CR2_SWSTART;
    while (!(ADC1->SR & ADC_SR_EOC));
    _debug_print_str("\r\n *** TEST *** \r\n");

    while(1)
    {
        ADC1->CR2 |= ADC_CR2_SWSTART;
        while (!(ADC1->SR & ADC_SR_EOC));

        indx = ADC1->DR;
        if(arr[indx] < 0x1FFF)
            arr[indx]++;
        if(arr[4090] > 100)
            break;
    }

    i = 4096;
    while(i--){
        _debug_print_num(i);
        _debug_print_str(";");
        _debug_print_num(arr[i]);
        _debug_print_str(";\r\n");

    }
    while(1);
}


И вот что мы имеем на выходе:
Прикрепленное изображение


Тут отчетливо видно что есть значения которые АЦП на выходе не выдает никогда, я лично очень сомневаюсь что тот сигнал что я подавал на вход (шум), действительно имеет такие дырки (я его формировал крутя потенциометр в зад - перед раз 20, в конце выкрутил в крайнее положение и мой код отследил приход значений соответствующих крайнему положению и выдал результат в UART).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zWitCh   Нелинейности внутреннего АЦП в STM32   Feb 25 2014, 09:09
- - MrYuran   Это называется "missing code", место сши...   Feb 25 2014, 11:08
|- - ViKo   Цитата(MrYuran @ Feb 25 2014, 14:08) Это ...   Feb 25 2014, 11:26
- - scifi   Может быть, не была проделана процедура автоматиче...   Feb 25 2014, 11:18
|- - MrYuran   Цитата(scifi @ Feb 25 2014, 15:18) Может ...   Feb 25 2014, 11:34
|- - scifi   Цитата(MrYuran @ Feb 25 2014, 15:34) А че...   Feb 25 2014, 11:56
|- - MrYuran   Цитата(scifi @ Feb 25 2014, 15:56) Вы, ви...   Feb 25 2014, 12:11
|- - zWitCh   Цитата(scifi @ Feb 25 2014, 15:56) Вы, ви...   Feb 25 2014, 14:30
|- - scifi   Цитата(zWitCh @ Feb 25 2014, 18:30) прост...   Feb 25 2014, 14:40
- - Aner   Программная проблема, разбирайтесь с прерываниями ...   Feb 25 2014, 11:32
- - ViKo   ЦитатаThe ADC has an built-in self calibration mod...   Feb 25 2014, 12:48
- - Aner   Схему, прогу в студию. Телепатов пока нема. Может ...   Feb 25 2014, 14:59
|- - zWitCh   Цитата(Aner @ Feb 25 2014, 18:59) Схему, ...   Feb 25 2014, 15:41
|- - Леонид Иванович   Цитата(zWitCh @ Feb 25 2014, 19:41) И так...   Mar 1 2014, 19:42
|- - adnega   Цитата(Леонид Иванович @ Mar 1 2014, 23:4...   Mar 1 2014, 20:02
- - ViKo   http://electronix.ru/forum/index.php?showt...088...   Feb 25 2014, 19:43
|- - zWitCh   Цитата(ViKo @ Feb 25 2014, 23:43) http://...   Feb 26 2014, 07:27
|- - scifi   Цитата(zWitCh @ Feb 26 2014, 11:27) не мо...   Feb 26 2014, 09:23
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 10:27) ссылк...   Feb 26 2014, 09:27
||- - ViKo   Цитата(zWitCh @ Feb 26 2014, 14:56) Интер...   Feb 26 2014, 12:00
||- - scifi   Цитата(ViKo @ Feb 26 2014, 16:00) Ничего ...   Feb 26 2014, 12:28
|- - Tanya   Цитата(ViKo @ Feb 26 2014, 15:19) Так не ...   Feb 26 2014, 12:04
|- - ViKo   Цитата(Tanya @ Feb 26 2014, 15:04) Источн...   Feb 26 2014, 12:10
||- - zWitCh   Цитата(ViKo @ Feb 26 2014, 16:10) На Диск...   Feb 26 2014, 12:35
|||- - ViKo   Цитата(zWitCh @ Feb 26 2014, 15:35) ...та...   Feb 26 2014, 12:36
||||- - zWitCh   Цитата(ViKo @ Feb 26 2014, 16:36) А это н...   Feb 26 2014, 12:39
|||- - Tanya   Цитата(zWitCh @ Feb 26 2014, 16:35) Госпо...   Feb 26 2014, 12:39
|||- - zWitCh   Цитата(Tanya @ Feb 26 2014, 16:39) А вход...   Feb 26 2014, 12:42
|||- - Tanya   Цитата(zWitCh @ Feb 26 2014, 16:42) вход ...   Feb 26 2014, 12:45
||- - Tanya   Цитата(ViKo @ Feb 26 2014, 16:10) На Диск...   Feb 26 2014, 12:35
||- - ViKo   Цитата(Tanya @ Feb 26 2014, 15:35) А разв...   Feb 26 2014, 12:38
|- - zWitCh   Цитата(Tanya @ Feb 26 2014, 16:04) Источн...   Feb 26 2014, 12:37
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 15:37) (пров...   Feb 26 2014, 12:41
|- - Tanya   Цитата(zWitCh @ Feb 26 2014, 16:37) вот т...   Feb 26 2014, 12:41
|- - zWitCh   Цитата(Tanya @ Feb 26 2014, 16:41) Нет, я...   Feb 26 2014, 12:56
|- - Tanya   Цитата(zWitCh @ Feb 26 2014, 16:56) кажет...   Feb 26 2014, 13:10
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 15:56) Зачем...   Feb 26 2014, 13:11
|- - Tanya   Цитата(ViKo @ Feb 26 2014, 17:11) Еще раз...   Feb 26 2014, 13:36
|- - zWitCh   Цитата(Tanya @ Feb 26 2014, 17:36) Какая-...   Feb 26 2014, 13:43
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 16:43) так в...   Feb 26 2014, 13:45
|- - Tanya   Цитата(zWitCh @ Feb 26 2014, 17:43) да вс...   Feb 26 2014, 13:56
|- - zWitCh   Цитата(Tanya @ Feb 26 2014, 17:56) Так мо...   Feb 26 2014, 14:16
|- - Tanya   Цитата(zWitCh @ Feb 26 2014, 18:16) - 24 ...   Feb 26 2014, 14:39
- - zWitCh   Занизил частоту ADCCLK поделил на 16, все стало ок...   Feb 26 2014, 14:40
|- - scifi   Цитата(zWitCh @ Feb 26 2014, 18:40) Заниз...   Feb 26 2014, 14:45
|- - zWitCh   Цитата(scifi @ Feb 26 2014, 18:45) Семён ...   Feb 26 2014, 15:10
- - ViKo   Найдите у STMicroelectronics AN3137, там показано ...   Mar 2 2014, 18:59
|- - Леонид Иванович   Документ AN3137 во многом повторяет AN2834. Там со...   Mar 2 2014, 21:22
|- - ViKo   Цитата(Леонид Иванович @ Mar 3 2014, 00:2...   Mar 3 2014, 11:50
|- - Леонид Иванович   Цитата(ViKo @ Mar 3 2014, 14:50) Этот сов...   Mar 3 2014, 12:34
- - ViKo   Входной ток у АЦП - это ток заряда внутреннего кон...   Mar 3 2014, 13:06
|- - Леонид Иванович   Цитата(ViKo @ Mar 3 2014, 16:06) Если бы ...   Mar 3 2014, 14:25
|- - ViKo   Цитата(Леонид Иванович @ Mar 3 2014, 17:2...   Mar 3 2014, 17:46
|- - Леонид Иванович   Цитата(ViKo @ Mar 3 2014, 20:46) Чем боль...   Mar 3 2014, 21:54
- - ViKo   Если от Cext не зависит, то почему вы назвали сове...   Mar 4 2014, 08:03
|- - Леонид Иванович   Цитата(ViKo @ Mar 4 2014, 11:03) Если от ...   Mar 4 2014, 09:02
- - ViKo   Если не трудно, покажите, что будет при Cext = 200...   Mar 4 2014, 09:50
|- - Леонид Иванович   Без проблем. Видно, что время переходного процесса...   Mar 4 2014, 10:02
- - ViKo   Вы правы. Попробую сам в LTspice.   Mar 4 2014, 10:53
|- - Леонид Иванович   Вообще, выводы находятся в соответствии с рекоменд...   Mar 4 2014, 11:25
- - ViKo   Возник один вопрос, вспомнил про эту тему. Зачем в...   Mar 28 2014, 08:31
- - Леонид Иванович   Увеличение времени выборки ts может потребоваться ...   Mar 28 2014, 16:15


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:05
Рейтинг@Mail.ru


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