Перейти к содержанию
    

Нелинейности внутреннего АЦП в STM32

не могу найти апнот по теме разводки питания цифрового и аналогового для STM32F10x, ссылкой не поделитесь?

AN2586

Но там практически только повторение сведений из даташита.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ссылкой не поделитесь?

Ссылок не дам, а принципы везде одинаковые - как можно короче, шире (кроме инвертирующих входов усилителей).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

post-19654-1393412481_thumb.jpg

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

post-19654-1393412641_thumb.png

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

post-19654-1393412743_thumb.png

 

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

 

Обнаружив такую особенность я достал старую добрую STM32-Discovery и запустил тот же код на ней, там все ок, таких особенностей работы АЦП не заметил...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

...

Обнаружив такую особенность я достал старую добрую STM32-Discovery и запустил тот же код на ней, там все ок, таких особенностей работы АЦП не заметил...

Так не в источнике питания ли дело? Что, если подать питание через дроссель, LC фильтр? Там помехи бегают...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так не в источнике питания ли дело? Что, если подать питание через дроссель, 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);
}

 

И вот что мы имеем на выходе:

post-19654-1393415449_thumb.png

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересные помехи которые распределены во всем диапазоне равномерно а в определенных точках отсутствуют и сигнал в них идеально гладкий, ну да ладно...

Ничего не ладно. Вы знаете, как помехи по питанию влияют на АЦП? Да он у вас там не может алгоритм последовательного приближения выполнить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так не в источнике питания ли дело? Что, если подать питание через дроссель, LC фильтр? Там помехи бегают...

Источник бы везде. Он ведь не знает про цифры внутри...

А вот если построить график напряжение - код-напряжение(как будто подсоединен виртуальный ЦАП), то что будет?

Будут ли две прямые со сдвигом - до и после магического числа? Если так, то калибровка внутри сбита - этот разряд значительно больше нормального и компаратор уже не добавляет несколько младших.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Источник бы везде. Он ведь не знает про цифры внутри...

На Дискавери нет источника. Она от USB питается. И провалов в кодах с АЦП, по уверению автора, на ней нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего не ладно. Вы знаете, как помехи по питанию влияют на АЦП? Да он у вас там не может алгоритм последовательного приближения выполнить.

+1. Кстати, в том же AN2586 сказано, что для фильтрации можно добавить ferrite bead перед Vdda и резистор перед Vref.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На Дискавери нет источника. Она от USB питается. И провалов в кодах с АЦП, по уверению автора, на ней нет.

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

 

+1. Кстати, в том же AN2586 сказано, что для фильтрации можно добавить ferrite bead перед Vdda и резистор перед Vref.

Господа, пожалуйста будте внимательнее, у меня все блокирующие конденсаторы и дросели у VADD стоят, в цепи питания НЕТ ПОМЕХ! Зашумел помехой я сигнал который оцифровываю специально для эксперимента, что бы поиметь на выходе с АЦП более менее нормальное распределение!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На Дискавери нет источника. Она от USB питается. И провалов в кодах с АЦП, по уверению автора, на ней нет.

А разве автор не руками выставляет измеряемое?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...так что не очень понял причем тут помехи по питанию, в начале топика я уже писал, что питание проверил первым, в нем нет выбросов и провалов.

...

Господа, пожалуйста будте внимательнее, у меня все блокирующие конденсаторы и дросели у VADD стоят, в цепи питания НЕТ ПОМЕХ! Зашумел помехой я сигнал который оцифровываю специально для эксперимента, что бы поиметь на выходе с АЦП более менее нормальное распределение!

 

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

 

Чудеса... :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Источник бы везде. Он ведь не знает про цифры внутри...

А вот если построить график напряжение - код-напряжение(как будто подсоединен виртуальный ЦАП), то что будет?

Будут ли две прямые со сдвигом - до и после магического числа? Если так, то калибровка внутри сбита - этот разряд значительно больше нормального и компаратор уже не добавляет несколько младших.

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

post-19654-1393418267_thumb.png

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А разве автор не руками выставляет измеряемое?

А что? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа, пожалуйста будте внимательнее, у меня все блокирующие конденсаторы и дросели у VADD стоят, в цепи питания НЕТ ПОМЕХ!

А вход опорного напряжения имеет адекватный конденсатор? А на входе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...