|
|
  |
STM32F4: цифровой фильтр АЦП |
|
|
|
Dec 29 2014, 04:12
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(kovigor @ Dec 26 2014, 16:30)  Делается. Если со схемотехникой и разводкой все в порядке, то этот метод вполне применим. Рискну спросить. А антиалиасный фильтр перед АЦП имеется ? Хотя бы простейшая RC - цепочка ? И насколько сложно будет исправить некорректно разведенную плату ? На входе АЦП простой резистивный делитель + кондер на GND На входе Vref рекомендуемая схема от ST Схема будет переделана в следующих ревизиях устройства, как только будут найдены источники помех и способы их устранения. Сейчас задача - улучших характеристики АЦП уже эксплуатируемых устройств (т.е. программно) Цитата(scifi @ Dec 26 2014, 17:02)  Вот простейший фильтр: CODE #define SHIFT 4 // filter time constant is T*2^SHIFT
static int acc;
// seed filter with initial value void filter_init(int a) { acc = a << SHIFT; }
// call this periodically and supply filter with input data void filter_advance(int a) { acc += a - (acc >> SHIFT); }
// filter output int filter_result(void) { return acc >> SHIFT; }
спасибо за пример. еще бы допереть как его использовать. можно в 2х словах?
|
|
|
|
|
Dec 29 2014, 06:58
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата спасибо за пример. еще бы допереть как его использовать. можно в 2х словах? идея в том что вы вызываете void filter_init(int a) с первым полученным от АЦП значением или 0 а далее каждое новое значение пихаете в void filter_advance(int a), и когда вам надо отфильтрованный результат, берете его в int filter_result(void) это обычная экспонента
|
|
|
|
|
Dec 29 2014, 09:21
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(adnega @ Dec 29 2014, 11:26)  Общеизвестно, что на сопротивление такого делителя накладываются ограничения. У вас R не больше предельного значения? В противном случае АПЦ превращается в показометр. плата разведена довольно неплохо, а вот схема питания устройства ( ... -> 5В -> 3.3В) так себе, соответственно Vref получается довольно шумным не смотря на фильтр. на самом деле железной частью устройства занимаюсь не я. я больше по программной части. Применил вышеописанный фильтр. Без подключенного измеряемого напряжения (на входе АЦП 0В): до применения показания были 0 - 0.3В после применения (результат берется из 100 измерений) 0.07-0.12В т.е. 0В никогда не бывает. В общем делаю вывод, что частота помехи слишком высокая и в измерения слишком часто попадают броски. Будь частота помехи пониже, от фильтра было бы больше пользы. Быть может у кого то еще появятся мысли о том, как мне победить помеху программным способом... Цитата(Golikov A. @ Dec 29 2014, 09:58)  идея в том что вы вызываете void filter_init(int a) с первым полученным от АЦП значением или 0
а далее каждое новое значение пихаете в void filter_advance(int a), и когда вам надо отфильтрованный результат, берете его в int filter_result(void)
это обычная экспонента спасибо. а чем такой способ отличается от медианного фильтра (в 2х словах, если не сложно) ?
|
|
|
|
|
Dec 29 2014, 09:30
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(k000858 @ Dec 29 2014, 12:21)  Применил вышеописанный фильтр. Без подключенного измеряемого напряжения (на входе АЦП 0В): до применения показания были 0 - 0.3В после применения (результат берется из 100 измерений) 0.07-0.12В т.е. 0В никогда не бывает. Можно предположить, что помеха настолько велика, что среднеквадратичное отклонение имеет порядок 0.1В, что и даёт такое среднее значение около 0 (потому что отрицательные значения на входе АЦП заменяются нулём, а положительные остаются). Это предположение нужно подтвердить. Оцифруйте 100...1000 отсчётов при ненулевом входе и посчитайте статистические показатели: среднее, мин., макс., среднеквадратичное отклонение. Если предположение подтвердится, то можно приподнять сигнал на входе АЦП ещё одним резистором (к Vref, например), чтобы сигнал на входе АЦП никогда не опускался ниже 0 даже в присутствии шумов. Ну а потом эту поправку от резистора учесть в расчётах, естественно.
|
|
|
|
|
Dec 29 2014, 12:07
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата а чем такой способ отличается от медианного фильтра (в 2х словах, если не сложно) ? можно ровно в 2 словах  "Ни чем"  )) это стандартный медианый целочисленный фильтр Цитата Если предположение подтвердится, то можно приподнять сигнал на входе АЦП ещё одним резистором (к Vref, например), чтобы сигнал на входе АЦП никогда не опускался ниже 0 даже в присутствии шумов. Ну а потом эту поправку от резистора учесть в расчётах, естественно. все бы вам резисторы паять... надо программно откалибровать и все... Проверьте на среднем значении. Если оно после усреднения будет ровное, то вам действительно надо просто учитывать что вблизи нуля отрицательный сигнал отваливается... и ввести еще одну коррекцию, как на спидометрах машин, загнуть хвост)
|
|
|
|
|
Dec 29 2014, 12:48
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата Сейчас задача - улучших характеристики АЦП уже эксплуатируемых устройств (т.е. программно) Увеличивать время семплирования до максимума. А можно посмотреть напряжение на ножке АЦП? Осциллограмму в студию! По картинке сразу будет виден и уровень шумов, и характер... Обсуждение сейчас - пальцем в небо.
|
|
|
|
|
Dec 29 2014, 14:22
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Отнюдь. Медианный фильтр просто отбрасывает, не использует значения, значительно отличающиеся от остальных. Он хорош для избавления от неправильных измерений при импульсных помехах. А блин! Точно. Термины уже попутал. Это обычный экспоненциальный фильтр. Медиана, классическая, берет 4 значения, максимум - минимум отбрасывает, 2 оставшихся усредняет. Это фильтр который создан отсекать случайные выбросы.
|
|
|
|
|
Dec 30 2014, 05:47
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
1) Vref 3.3В 2) Вход АЦП (после резистивного делителя и ёмкости, прямо возле ножки МК) без подключенного напряжения Шумит все, что можно: напряжение питания, опорное напряжение, вход АЦП. А вероятнее всего шумят земли. Понятное дело плату будут разводить, повторюсь, моя задача - улучшить показатели АЦП программно, насколько это возможно SamplingTime = ADC_SAMPLETIME_480CYCLES; АЦП конвертит беспрерывно и под DMA складывает результаты в память, а я из пати, когда мне надо забираю цифры (примерно раз в секунду)
Сообщение отредактировал IgorKossak - Jan 14 2015, 18:27
Причина редактирования: удалил "тяжёлые" картинки
|
|
|
|
|
Dec 30 2014, 07:33
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(scifi @ Dec 30 2014, 09:48)  Имя, сестра, имя! Номиналы резисторов!?
69.8K и 3.3К Цитата(scifi @ Dec 30 2014, 09:48)  Имя, сестра, имя! Номиналы резисторов!?
вот пример нескольких замеров АЦП (при разрешении 4095) Код 1: 4 2: 5 3: 0 4: 14 5: 1 6: 0 7: 0 8: 0 9: 4 10: 1 Код 1: 0 2: 0 3: 4 4: 0 5: 13 6: 3 7: 4 8: 2 9: 10 10: 6 вот отсуда и получаются эти 0 - 0.3В
|
|
|
|
|
Dec 30 2014, 07:57
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(adnega @ Dec 30 2014, 10:49)  max = 14
14 * 3300 мВ / 4096 = 11 мВ = 0.011В
А вы как считаете? * (R1 + R2)/R2 = 0.25В R1 R2 резистивный делитель Цитата(VAI @ Dec 30 2014, 09:04)  Вот здесь рассматривалось много разных медиан. применил способ Xenia 31 точка. в результате показания 0.02-0.07В при подключенных 0В может стоит изменить количество точек?
|
|
|
|
|
Jan 13 2015, 12:32
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37

|
Цитата может стоит изменить количество точек? Медианный фильтр не пропускает выбросы длительностью меньше половины ширины фильтра. Т.е. если у Вас 31 точка, то шумовые выбросы длительностью меньше или равно времени 15 отсчетов не пройдут через фильтр. Думайте сами. И после резестивного делителя повторитель поствьте.
--------------------
Если зайца бить, его можно и спички научить зажигать Сколько дурака не бей - умнее не будет. Зато опытнее
|
|
|
|
|
Jan 14 2015, 04:21
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(VAI @ Jan 13 2015, 15:32)  Медианный фильтр не пропускает выбросы длительностью меньше половины ширины фильтра. Т.е. если у Вас 31 точка, то шумовые выбросы длительностью меньше или равно времени 15 отсчетов не пройдут через фильтр. Думайте сами. И после резестивного делителя повторитель поствьте. т.е. допустим на входе АЦП 0В, после оцифровки 31 точки результаты: 0 0 0 0 0 0 0 0 0 0 10 10 0 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6, результаты 10 10 не попадут в результаты а 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 попадут. так? что будет с такого вида результатами? Код ADC_Volt_0: 8 ADC_Volt_1: 0 ADC_Volt_2: 0 ADC_Volt_3: 4 ADC_Volt_4: 11 ADC_Volt_5: 5 ADC_Volt_6: 0 ADC_Volt_7: 4 ADC_Volt_8: 3 ADC_Volt_9: 5 ADC_Volt_10: 5 ADC_Volt_11: 0 ADC_Volt_12: 0 ADC_Volt_13: 10 ADC_Volt_14: 0 ADC_Volt_15: 0 ADC_Volt_16: 5 ADC_Volt_17: 6 ADC_Volt_18: 6 ADC_Volt_19: 0 ADC_Volt_20: 3 ADC_Volt_21: 3 ADC_Volt_22: 6 ADC_Volt_23: 0 ADC_Volt_24: 0 ADC_Volt_25: 3 ADC_Volt_26: 5 ADC_Volt_27: 2 ADC_Volt_28: 0 ADC_Volt_29: 5 ADC_Volt_30: 11 Наткнулся на аппноут ST AN4073 http://www.st.com/web/en/resource/technica.../DM00050879.pdfОписанный в нем способ показал наилучшие результаты в моем случае (применил способ сортировка + усреднение) Как называется такой способ ? как выбрать оптимальные N и X ?
|
|
|
|
|
Jan 14 2015, 06:00
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
сортировка и усреднение - медиана?
классическая 4 точечная медиана. берет 4 значения, выкидывает из них самое большое и самое маленькое, два оставшихся усредняет.
дальше вы можете выбирать сколько самых больших и маленьких значений выкинуть, и сколько усреднить.
как вы сами понимаете если у вас значения вида
а а а а а а а а б б б б б а а а а а, где а - один уровень сигнала, а б - какой то то всплеск, то число отбрасываемых мидианой значений должно определяться длинной этих всплесков.
то есть к примеру у вас 4 точечная медиана
а а а а = а а а а б = а а а б б = (а+б)/2 а б б б = (а+б)/2 б б б б = б и дальше начнет спадать, ваш всплеск прошел. а если медиана будет отбрасывать по 5 значений, то все 5 б всегда будут в максимумах и отброшены и не пройдут на выход никогда. Но с другой стороны количество отброшенных значений определяет число накапливаемых результатов, и как следствие задержку выдачи сигнала, то есть в нашем же примере 4 точечной медианы допустим б - это не выброс а реальная смена сигнала, только через 4 значения после появления нового сигнала на входе, он появился на выходе. Опять же не только всплески, но и короткие изменения полезного сигнала будут отброшены, то есть при фильтрации синуса условно его горбы будут срезаны, то есть зарезана амплитуда.
вот из этих соображений и выбирайте, а других рецептов никто не даст. Баланс между шумом и правильностью измерений
|
|
|
|
|
Jan 14 2015, 07:28
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(Golikov A. @ Jan 14 2015, 09:00)  о! большое спасибо за объяснение. теперь все понял.
Сообщение отредактировал IgorKossak - Jan 14 2015, 09:53
Причина редактирования: бездумное цитирование
|
|
|
|
|
Jan 14 2015, 09:16
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
я имел ввиду про исходную последовательность.... ну то есть если у нас есть стабильный сигнал и в нем встречаются выбросы разной длительности, то до тех пор пока в окно фильтра не попадут отклонения суммарной длительностью больше отбрасываемой части, они не выйдут наружу... Цитата а б б б = б ? да, почему нет... допустим а меньше б. тогда самое маленькое из этих 4 что? а. самое большое из них что? б а и б отбрасывается остается б б (б+б)/2 = б я может ошибаюсь, но в том представлении что я имею о медианном фильтре отбрасываются не по значению а по количеству. То есть все входные данные сортируются и с начала и с конца отбрасывается заданное число значений, оставшиеся усредняются... это позволяет сигналам вида а а а а б а а а а а б а а а б а а а а а б а а а а а, то есть с единичными выбросами всегда от них избавляться... не зависимо от того куда эти выбросы вверх или вниз. при этом как бы числом отбрасываемых регулируется интенсивность выбросов, считая что окно фильтра пропорционально раздвигается... то есть 4 точечный уже почувствует влияние выбросов , если между ними будет менее 3 "правильных" сигналов, а увеличив число отбрасываемых значений и длину фильтра мы "затянем" фильтр ближе к более стабильному сигналу, и сможем откидывать более интенсивные выбросы. Цитата точечный медианный фильтр с усреднением - интересно, чувствую, что можно реализовать и аппаратно, в ПЛИС, например. не знаю, всегда считал что усреднение должно быть. Зачем забирать N значений N/2 от них выбрасывать, и из оставшихся N/2 значений использовать только 1, зачем остальные то были нужны? и как выбрать то единственное? если у нас 1 2 3 4, то что на выходе 2 или 3? Почему 2 или почему 3? а так на выходе 2.5 и никому не обидно при этом прелесть с усреднением в том что сигнал вида а б а б а б а б а б а б даст для 4 точечной медианы (а+б)/2, то есть как бы средний уровень, а сигнал с преобладанием а, будет ближе к а он будет выдавать то а, то (а+б)/2 и очень редко б. Мне кажется физически это верная работа В плис реализуется, однотактовый вариант не очень быстр, в силу необходимости сортировки и как следствие мультиплексоров, но конвейерный вполне и не только в 4 значения...
|
|
|
|
|
Jan 14 2015, 09:31
|

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

|
Цитата(Golikov A. @ Jan 14 2015, 12:16)  не знаю, всегда считал что усреднение должно быть. Зачем забирать N значений N/2 от них выбрасывать, и из оставшихся N/2 значений использовать только 1, зачем остальные то были нужны? и как выбрать то единственное? если у нас 1 2 3 4, то что на выходе 2 или 3? Почему 2 или почему 3? а так на выходе 2.5 и никому не обидно  Медиана по трем точкам. И, вообще, по нечетному количеству. Скажем, для 5 точек в середину попадет согласно сортировке, она же и выйдет наружу. И не один раз. А потом можно усреднять, сколько душа пожелает.
|
|
|
|
|
Jan 14 2015, 11:01
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Медиана по трем точкам. И, вообще, по нечетному количеству. Скажем, для 5 точек в середину попадет согласно сортировке, она же и выйдет наружу. И не один раз. А потом можно усреднять, сколько душа пожелает. ну может быть. Я почему то видел везде классическую реализацию с 4 точками и усреднением по 2. В целом главное знать что хочешь получить, а как это получить - уже второй момент  Цитата Прежде, чем колдовать с фильтрами, построили бы гистограмму, приподняв вход на 1 вольт. И автокорреляционную функцию. неплохо придавили)
|
|
|
|
|
Jan 14 2015, 11:32
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(Golikov A. @ Jan 14 2015, 13:01)  ну может быть. Я почему то видел везде классическую реализацию с 4 точками и усреднением по 2. В целом главное знать что хочешь получить, а как это получить - уже второй момент  Медианный фильтр классически по нечетному количеству точек делается. После сортировки берется то значение, которое в серединной точке, никакого усреднения. А для четного количества точек придуман костыль в виде среднего арифметического двух серединных точек, "виртуальная медиана массива". Где применять медианный фильтр а где усреднять всю выборку - зависит от характера возможных помех/наводок и от физики источника сигнала (сенсора). Я, как правило, применяю и то и другое: сначала медианный фильтр по окну последних измерений(чаще всего 5-точечный-уже длинный но еще быстрый) , а после него- среднее арифметическое по окну из последних значений, выданных медианным фильтром.
|
|
|
|
|
Jan 21 2015, 10:13
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
И все таки: какое количество точек для сортировки/усреднения в моем случае лучше взять? вот пример 4х замеров АЦП по 10 значений при 0В на входе АЦП? CODE ADC_Volt_0: 0 ADC_Volt_1: 10 ADC_Volt_2: 6 ADC_Volt_3: 1 ADC_Volt_4: 2 ADC_Volt_5: 4 ADC_Volt_6: 5 ADC_Volt_7: 7 ADC_Volt_8: 7 ADC_Volt_9: 5
ADC_Volt_0: 2 ADC_Volt_1: 0 ADC_Volt_2: 1 ADC_Volt_3: 5 ADC_Volt_4: 0 ADC_Volt_5: 4 ADC_Volt_6: 3 ADC_Volt_7: 5 ADC_Volt_8: 0 ADC_Volt_9: 4 ADC_Volt_0: 0
ADC_Volt_1: 10 ADC_Volt_2: 0 ADC_Volt_3: 0 ADC_Volt_4: 3 ADC_Volt_5: 4 ADC_Volt_6: 5 ADC_Volt_7: 13 ADC_Volt_8: 4 ADC_Volt_9: 0
ADC_Volt_0: 0 ADC_Volt_1: 6 ADC_Volt_2: 0 ADC_Volt_3: 0 ADC_Volt_4: 4 ADC_Volt_5: 4 ADC_Volt_6: 0 ADC_Volt_7: 3 ADC_Volt_8: 2 ADC_Volt_9: 0
Сообщение отредактировал IgorKossak - Jan 21 2015, 14:21
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Jan 21 2015, 11:16
|

Местный
  
Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978

|
Цитата(Golikov A. @ Jan 21 2015, 13:22)  вижу единичные большие выбросы, остальное ровненько, 3 точек хватит... в приведенном выше примере указывается 2 количества точек: 1) точки измерения (оцифровки) = точки сортировки 2) точки усреднения. Цитата(Golikov A. @ Jan 21 2015, 13:22)  есть у меня подозрение что сигнал у вас приподнят на некий уровень просто моменты оцифровки часто попадают на "шум" поэтому редко бывает 0 Цитата(Golikov A. @ Jan 21 2015, 13:22)  нету отрицательных значений разве такое может быть, учитывая что АЦП выдает от 0 до 4095?
|
|
|
|
|
Jan 21 2015, 11:25
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Именно потому что оно выдает 0 - 4095 у вас и нет -1.
если что-то шумит около 0, какие значения будут? только положительные, значит средний уровень какой? Больше нуля, чтобы в 0 попасть надо уметь мерить отрицательные значения.
Так что вы можете обфильтроваться около нуля у вас всегда будет значительная ошибка. При этом чем больше вы усредняете тем хуже будет результат, потому что сумма будет только расти.
на пальцах:
сигнал 0, реально он - 1 0 1 0 - 1 0 1 -1 0 1 -1 1 итак далее ваше АЦП его превращает в 0 0 1 0 0 0 1 0 0 1 0 1 и так далее сумма первого сигнала 0, сумма вашего сигнала 4 средние первого сигнала 0, среднее вашего сигнала 0.3
когда у вас есть шум и он сдвинут в какую - то сторону усреднение будет только увеличивать ошибку.... Та же история у вас будет возле максимума, после усреднения вы все дальше будите от максимума. Потому если вы хотите что-то мерить точно, оно должно быть внутри диапазона, а по краям всегда будет не точно
|
|
|
|
|
Jan 21 2015, 13:06
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
цифровая обработка только в кино про шпионов из размытой фотографии делает четкую картинку, где можно марку сигарет разглядеть.
Если у вас нет значений сигнала, никакая цифровая обработка их не восстановит. Улучшить можно, но все зависит от....
в вашем случае можно сделать так ваш сигнал от 0 до 4095 вы его немного растягиваете, сделав от 0 до 4099, например, и сдвигаете на 2 вниз, получая диапазон значение -2 до 4097 вы , конечно внесли искажения в сигнал, но зато выдвинули за границы диапазона, если сигнал растягивать и сдвигать на ваш характерный уровень шума, то это позволит более корректно определить ноль и диапазон.
Пишу более корректно, а не точно, потому что этими манипуляциями вы только помогаете усредняющим фильтрам не еузжать от нуля вверх и от диапазона вниз, а точность вы не увеличиваете, даже наоборот уменьшаете, во время растяжения вы растягиваете еще и шум.
Ваша проблема не нова, обратите внимания как много приборов которые работают с положительными величинами, не измеряют хорошо вблизи нуля, тот же спидометр машины, который из нуля выходит только после Н км в час.
|
|
|
|
|
Jun 3 2015, 14:07
|
Группа: Участник
Сообщений: 13
Регистрация: 15-10-06
Пользователь №: 21 331

|
Нужно мерять 16 каналов 1 раз в секунду. Реально достичь на STM32F4 +-0.1% ?
|
|
|
|
|
Jun 4 2015, 03:20
|
Местный
  
Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188

|
Цитата(Latch @ Jun 3 2015, 17:07)  Нужно мерять 16 каналов 1 раз в секунду. Реально достичь на STM32F4 +-0.1% ? Если: - 0.1% - это от всего диапазона (4096 попугаев) - спектр входных сигналов не содержит "высоких" (относительно частоты выборок АЦП) составляющих - выходные импедансы источников сигналов невысоки - источник опоры приличного качества и (по опыту) не менее 2 вольт - разводка, обвеска, питание соответствуют то реально...
|
|
|
|
|
Jun 5 2015, 09:54
|
Группа: Участник
Сообщений: 13
Регистрация: 15-10-06
Пользователь №: 21 331

|
всем спасибо... проделал следующее: опорное 2.5V крона 9V -> REF195 -> 5V -> делитель 20K 1K (конденсатора нет) -> ADC pin (~10% от диапазона) тестовый софт: АЦП 5 KHz, 4 канала, DMA, 256 усреднений в пакете (т.е выход ~19 остчетов в сек.) поиск мин. и макс. в течение получаса, результат: +-0.06%
Сообщение отредактировал Latch - Jun 5 2015, 09:55
|
|
|
|
|
Jul 22 2016, 08:10
|
Группа: Участник
Сообщений: 13
Регистрация: 8-06-12
Пользователь №: 72 222

|
Цитата(Latch @ Jun 3 2015, 17:07)  Нужно мерять 16 каналов 1 раз в секунду. Реально достичь на STM32F4 +-0.1% ? Не факт. Разрешение 0,1% получите без проблем. Точность же определяется не только количеством разрядов. Во первых, у любого АЦП есть погрешности (интегральная и дифференциальная нелинейности, дрейф сдвига и т.п.), и у этого встроенного они превышают МЗР. Плюс погрешности опорника. Во вторых, важна правильная разводка ПП. Обратите особое внимание на аналоговую землю (не зря же это отдельная ножка!!). Сопротивление делителя должно быть небольшим. Смотрите рекомендации в дш. Лучше, если не более нескольких кОм. И конденсатор максимально близко с чипу. Если важен участок около нуля, сделайте положительное смещение 5..10 МЗР. В зависимости от сопротивления резисторов делителя достаточно многомегаомного резистора на +реф. Программно этот нуль потом вычтете (после усреднения). АЦП на максимальную длительность. И пусть работает непрерывно. Усреднение лишним не бывает. Опорник, как уже написали, на максимальное напряжение, и диапазон по входу использовать максимально. З.Ы. Вообще, при таких требованиях целесообразно ставить внешнее АЦП. Я использую обычно AD7687, полная схема содержит еще мультиплексоры и инструментальные усилители. Погрешность преобразования с 32 каналов минимум на порядок ниже. Цитата(Latch @ Jun 5 2015, 12:54)  поиск мин. и макс. в течение получаса, результат: +-0.06% Уже хорошо, но этого мало, если Вам необходимо жестко 0,1%. Добавьте временной дрейф. Попробуйте во всём диапазоне рабочих температур. Соедините общий провод источника реального сигнала с вашей схемой, чтобы добавить реальные шумы. Измените влажность в помещении хотя бы на несколько часов. ...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|