Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: уменьшение шумов при АЦП
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
jorikdima
Приветствую.
Трудно сказать в этот ли раздел пишу, может про МСП надо... но тем не менее.
При обработке измерений, полученных с АЦП, хотелось бы легким способом добиться снижения шумов. Мне представляется возможным сделать это путем осреднения нескольких результатов, полученных примерно в один момент времени. То есть интересующая меня частота дискретизация находится в пределах ~500 Гц, но каждые 2 мс я делаю преобразование не 1 раз, а скажем 10 раз подряд с частотой >> 500 Гц, чтоб выборки относились к, условно, одному моменту времени.
Но посматривая документацию по встроенному в МСП430 1611 АЦП я увидел, что там есть возможность (стр 17-7 UserGuide http://www.ti.com/litv/pdf/slau049f ) управлять длительностью выборки (sample time). Там даны минимальные времена, необходимые, чтоб конвертация была валидной, но ничего не сказано про влияние увеличения этого времени. Правильно ли я понимаю, что увеличение этого времени приведет к результатам эквивалентным описанным выше, то есть к осреднению нормального шума в сконвертированном сигнале. И вместо 10 конвертаций каждые 2 мс я могу сделать одно "длинную".
alexkok
Цитата(jorikdima @ Mar 2 2009, 00:21) *
Правильно ли я понимаю, что увеличение этого времени приведет к результатам эквивалентным описанным выше, то есть к осреднению нормального шума в сконвертированном сигнале. И вместо 10 конвертаций каждые 2 мс я могу сделать одно "длинную".

Нет, не правильно, увеличение времени выборки уменьшит только ошибку времени установления УВХ, а на шумы не повлияет.
Но если Вы хотите усреднением увеличить разрешение АЦП, а не уменьшить внешние шумы, то и время выборки надо увеличивать тоже, на 2-3 тау для усреднения по 10 отсчетам.
rezident
Чтобы уменьшить шумы при преобразовании для MSP430 рекомендуется на время преобразования "усыплять" ядро МК (включать LMP0). Ну и PWM во вермя преобразования тоже может мешаться, если разводка питаний неправильно выполнена. Увеличение же времени сэмплирования вовсе не эквивалентно oversampling с усреднением. Но и при передискретизации и последующем усреднении есть возможность увеличить отношение С/Ш только, если он (шум) внеполосный.
MrYuran
В мсп ещё есть режим группового преобразования, когда последовательно выполняются несколько преобразований и затем результаты заносятся во очереди в регистры ADC12MEM0 ... ADC12MEM7
Вот этот режим по-моему как раз подходит для оверсемплинга.
Правда, фильтрацию всё равно вручную делать, хотя бы среднее высчитать
jorikdima
Цитата(MrYuran @ Mar 2 2009, 08:21) *
В мсп ещё есть режим группового преобразования, когда последовательно выполняются несколько преобразований и затем результаты заносятся во очереди в регистры ADC12MEM0 ... ADC12MEM7
Вот этот режим по-моему как раз подходит для оверсемплинга.
Правда, фильтрацию всё равно вручную делать, хотя бы среднее высчитать

Есть такой, но это поканально. То есть в регистры ADC12MEM0 ... ADC12MEM7 запишуться данные с 8 разных входов АЦП.
Всем спасибо, очень ценные для меня ответы!
MrYuran
Цитата(jorikdima @ Mar 2 2009, 09:50) *
Есть такой, но это поканально. То есть в регистры ADC12MEM0 ... ADC12MEM7 запишуться данные с 8 разных входов АЦП.

В зависимости от конфигурации АЦП можно и с одного канала снимать, а в конце выставлять прерывание
Код
ADC12CTL0 = ADC12ON+MSC+SHT0_15+SHT1_15;  // On, автомат. преобр,1024цикла,вкл.опор.напр.(1,5В)-???!
    ADC12CTL1 = CONSEQ_1+ADC12SSEL_0+ADC12DIV_7+CSTARTADD_0+SHS_0+SHP;
    ADC12MEM0 = 0;ADC12MEM1 = 0;ADC12MEM2 = 0;ADC12MEM3 = 0;
    ADC12MEM4 = 0;ADC12MEM5 = 0;ADC12MEM6 = 0;ADC12MEM7 = 0;
    switch(chanel)
    {
        case ChanTemp:
            ADC12CTL0 |= REFON;
            Delay(10);
        ADC12MCTL0 = INCH_6+SREF_1;
        ADC12MCTL1 = INCH_6+SREF_1;
        ADC12MCTL2 = INCH_6+SREF_1;
        ADC12MCTL3 = INCH_6+SREF_1;
        ADC12MCTL4 = INCH_6+SREF_1;
        ADC12MCTL5 = INCH_6+SREF_1;
        ADC12MCTL6 = INCH_6+SREF_1;
        ADC12MCTL7 = EOS+INCH_6+SREF_1;
        break;

Что-то типа вот так
jorikdima
Цитата(MrYuran @ Mar 2 2009, 10:02) *
ADC12MCTL0 = INCH_6+SREF_1;
ADC12MCTL1 = INCH_6+SREF_1;
ADC12MCTL2 = INCH_6+SREF_1;
ADC12MCTL3 = INCH_6+SREF_1;
ADC12MCTL4 = INCH_6+SREF_1;
ADC12MCTL5 = INCH_6+SREF_1;
ADC12MCTL6 = INCH_6+SREF_1;
ADC12MCTL7 = EOS+INCH_6+SREF_1;

Ааа, вот это мне в голову как-то не пришло, что все входы на один канал назначить biggrin.gif Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.