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

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Нелинейности внутреннего АЦП в STM32, STM32F103RET6 GH22S 9U
scifi
сообщение Feb 26 2014, 09:23
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(zWitCh @ Feb 26 2014, 11:27) *
не могу найти апнот по теме разводки питания цифрового и аналогового для STM32F10x, ссылкой не поделитесь?

AN2586
Но там практически только повторение сведений из даташита.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 26 2014, 09:27
Сообщение #17


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

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



Цитата(zWitCh @ Feb 26 2014, 10:27) *
ссылкой не поделитесь?

Ссылок не дам, а принципы везде одинаковые - как можно короче, шире (кроме инвертирующих входов усилителей).
Go to the top of the page
 
+Quote Post
zWitCh
сообщение Feb 26 2014, 11:11
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #19


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

Группа: Модераторы
Сообщений: 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
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 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
ViKo
сообщение Feb 26 2014, 12:00
Сообщение #21


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

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



Цитата(zWitCh @ Feb 26 2014, 14:56) *
Интересные помехи которые распределены во всем диапазоне равномерно а в определенных точках отсутствуют и сигнал в них идеально гладкий, ну да ладно...

Ничего не ладно. Вы знаете, как помехи по питанию влияют на АЦП? Да он у вас там не может алгоритм последовательного приближения выполнить.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Feb 26 2014, 12:04
Сообщение #22


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



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

Источник бы везде. Он ведь не знает про цифры внутри...
А вот если построить график напряжение - код-напряжение(как будто подсоединен виртуальный ЦАП), то что будет?
Будут ли две прямые со сдвигом - до и после магического числа? Если так, то калибровка внутри сбита - этот разряд значительно больше нормального и компаратор уже не добавляет несколько младших.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 26 2014, 12:10
Сообщение #23


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

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



Цитата(Tanya @ Feb 26 2014, 15:04) *
Источник бы везде. Он ведь не знает про цифры внутри...

На Дискавери нет источника. Она от USB питается. И провалов в кодах с АЦП, по уверению автора, на ней нет.
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 26 2014, 12:28
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Feb 26 2014, 16:00) *
Ничего не ладно. Вы знаете, как помехи по питанию влияют на АЦП? Да он у вас там не может алгоритм последовательного приближения выполнить.

+1. Кстати, в том же AN2586 сказано, что для фильтрации можно добавить ferrite bead перед Vdda и резистор перед Vref.
Go to the top of the page
 
+Quote Post
zWitCh
сообщение Feb 26 2014, 12:35
Сообщение #25


Участник
*

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



Цитата(ViKo @ Feb 26 2014, 16:10) *
На Дискавери нет источника. Она от USB питается. И провалов в кодах с АЦП, по уверению автора, на ней нет.

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

Цитата(scifi @ Feb 26 2014, 16:28) *
+1. Кстати, в том же AN2586 сказано, что для фильтрации можно добавить ferrite bead перед Vdda и резистор перед Vref.

Господа, пожалуйста будте внимательнее, у меня все блокирующие конденсаторы и дросели у VADD стоят, в цепи питания НЕТ ПОМЕХ! Зашумел помехой я сигнал который оцифровываю специально для эксперимента, что бы поиметь на выходе с АЦП более менее нормальное распределение!
Go to the top of the page
 
+Quote Post
Tanya
сообщение Feb 26 2014, 12:35
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(ViKo @ Feb 26 2014, 16:10) *
На Дискавери нет источника. Она от USB питается. И провалов в кодах с АЦП, по уверению автора, на ней нет.

А разве автор не руками выставляет измеряемое?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 26 2014, 12:36
Сообщение #27


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

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



Цитата(zWitCh @ Feb 26 2014, 15:35) *
...так что не очень понял причем тут помехи по питанию, в начале топика я уже писал, что питание проверил первым, в нем нет выбросов и провалов.
...
Господа, пожалуйста будте внимательнее, у меня все блокирующие конденсаторы и дросели у VADD стоят, в цепи питания НЕТ ПОМЕХ! Зашумел помехой я сигнал который оцифровываю специально для эксперимента, что бы поиметь на выходе с АЦП более менее нормальное распределение!


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

Чудеса... laughing.gif
Go to the top of the page
 
+Quote Post
zWitCh
сообщение Feb 26 2014, 12:37
Сообщение #28


Участник
*

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



Цитата(Tanya @ Feb 26 2014, 16:04) *
Источник бы везде. Он ведь не знает про цифры внутри...
А вот если построить график напряжение - код-напряжение(как будто подсоединен виртуальный ЦАП), то что будет?
Будут ли две прямые со сдвигом - до и после магического числа? Если так, то калибровка внутри сбита - этот разряд значительно больше нормального и компаратор уже не добавляет несколько младших.

вот тут была картинка в самом начале:
Прикрепленное изображение

там наглядно показано что выдает (оцифровывает АЦП), на входе напряжение при этом меняется линейно (проверено осциллографом на хорошей развертке)
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 26 2014, 12:38
Сообщение #29


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

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



Цитата(Tanya @ Feb 26 2014, 15:35) *
А разве автор не руками выставляет измеряемое?

А что? sm.gif
Go to the top of the page
 
+Quote Post
Tanya
сообщение Feb 26 2014, 12:39
Сообщение #30


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(zWitCh @ Feb 26 2014, 16:35) *
Господа, пожалуйста будте внимательнее, у меня все блокирующие конденсаторы и дросели у VADD стоят, в цепи питания НЕТ ПОМЕХ!

А вход опорного напряжения имеет адекватный конденсатор? А на входе?
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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