|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 9:58 pm
| Автор |
Съобщение |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
 ADC - стабилност
Използвам PIC16F874A с кварц на 20 MHz и кондензатори 15pF. не съм сложил съпротивлението Rs което е показано в datasheet-а че "може и да трябва". Избрал съм такт на АЦП - Fosc/64:
Ползвам порт AN1. Дават Tad >=1.6us за да работи АЦП-то стабилно. При такт на АЦП-то Fosc/32 Tad е 1.6 us, а аз съм избрал Fosc/64 - 3.2us.
Ползвам светлинен сензор TSL257.
Проблемът, че показанията много подскачат. Показвам старшия байт (ADRESH) на LCD дисплей и резултата се мени от 25 до 31. При 5/256 (8 битов защото ползвам само старшите 8 бита за сега) едно деление е 19.53 mV. Общо резултата варира с около 117 mV. Показанието на мултицета е около 500 mV и е доста стабилно. Не мърда дори с 1 mV.
Защо АЦП-то ми играе с >10%? На какво може да се дължи. Опитах с различни кондензатори на аналоговия вход да намаля колебанията, но резултата е същия. Изчаквам 40us преди всяко измерване, защото не знам колко всъщност трябва да изчаквам. Но дори и да не изчаквах правя измерване до 3-4 пъти на сек.
Единственото което ми хрумна е импеданса на източника - пише че не трябва да превишава 2.5 kO
Или е нормално това за вградените АЦП-та. Ако е така предложете ми някой 10+ битов ацп който може да ми държи стабилна стойност +- няколко деления.
|
| Пон Фев 15, 2010 4:41 am |
|
 |
|
tgi
Ранг: Форумен бог
Регистриран на: Нед Юни 10, 2007 2:22 pm Мнения: 6492 Местоположение: София
|
Пробвай със серийно 2 кила преди кондензатора (който към 100 нанофарада е добре).
Не познавам точно това MCU, но скачания повече от 1 LSB заради самото ADC не са
нормални.
В случая вероятно става дума за прехвърляне на заряд между съседни входни канали,
повечето ако не всички MCU-та ги правят с charge redistribution ADC-та, затова и
нещо като 2к/100 нано на всеки ползван вход е необходимо в повечето случаи.
Ако и това не помогне, има някакъв аналогов проблем по платката - скачащ ref или
кой знае какво.
_________________------------------- www.tgi-sci.com------------------- http://www.flickr.com/photos/didi_tgi/
|
| Пон Фев 15, 2010 5:33 am |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
 Re: ADC - стабилност
А не допускаш ли, че не "играе" АЦП-то, нито сензорът, ами лампата, дето го осветява?
Слагаш филтър да ти изреже всичко над половината от честотата, с която семплираш, след това усредняваш отчетите за време, кратно на 10 милисекунди, за да отрежеш 100-те херца на лампата. Ако избереш кратно на 50 мс, ще подтискаш едновременно 100 и 120 Hz.
|
| Пон Фев 15, 2010 10:18 am |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
Като каза лампата ме озари надежда, но старшите 8 бита показват по сред бял ден стойности от 46 до 50 което си е 3 бита от старшите + младшите 2 = 4-5 бита колебание.
Все пак има разлика от лампата до дневна светлина.
Възможно е останалото да от мрежови колебания, макар че не знам дали мрежовата честота минава през импулсно захранване. Всъщност импулсното захранване не работеше ли на голяма честота - може от там да са смущенията (VDD и VSS са мо VREF+ и VREF-)
Може би е добре да взема отделен източник на опорно напрежение.
Въпреки че малко ме съмнява защото схемата точи до няколко mA, а преди и след стабилизатора има 220 и 100 uF кондензатори. Има и 100nF близо до стабилизатора и друг 100nF близо до крачетата на MCU-то.
|
| Пон Фев 15, 2010 11:42 am |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
За да не ти играе LSB много важно условие е да имаш много стабилно опорно напрежение за ADC. Твоето какво е? От захранването ли? Не става. Колкото и чисто да си мислиш че е, за 2-3 ADC LSB не става а и нямаш температурна компенсация. Закачи някой опорен източник според Vref което ти е за тоя чип и тогава постни резултата. Търси в Гугъл "Voltage Reference" и си избери нещо което върши работа.
|
| Пон Фев 15, 2010 11:59 am |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
kiiid, не е стабилно, но е до толкова стабилно че да закрепи дори младшия бит. Това че колебания в мрежата могат да направят измерването неточно не е чак такъв проблем.
Направих следния опит. Сложих 1к тример и въртях. показах и младшите битове за по-голяма точност. Като пусна тримера показанието заспива и много рядко мръдва с 1 lsb. Веднъж го видях да мръдва и с 2 lsb (от 1 до 3), но през повечето време държи стабилно (поне достатъчно стабилно).
от datasheet-a:
The maximum recommended impedance for analog sources is 2.5 kΩ.
Според мен проблема е във изходния импеданс на измервания източник. Въпроса е как да понижа импеданса? Позабравил съм транзисторите ... Коя схема се ползва за нисък изходен импеданс - ОК? Знам че на крайните стъпала слагат ОК. Може би един транзистор с по-линейна характеристика ще свърши работа. Ще съм благодарен на схеми/линкове.
П.П. На практика когато АЦП-то се използва напрежението никога няма да пада до 0. може би минимално ще е около 1-1.5в. Т.е. ако е един транзистор - ще е в линейната част от характеристиката си.
|
| Пон Фев 15, 2010 12:37 pm |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
Уфф, референс от захранването, че и импулсен стабилизатор на всичкото отгоре. Да се чуди човек още какво си спестил от постановката. Че на всичкото отгоре не слушаш какво те съветват хората. Защо тогава пускаш тема, като си ги знаеш нещата?
Експериментът с тримера е порнография и не доказва нищо. АЦП мери съотношение между вход и референс. С тримера задаваш на входа напрежение, което е пропорционално на референса. Захранването може и с цял волт да плува, и АЦП-то пак ще отчита един и същ резултат. Ако подадеш стабилно напрежение на входа обаче ще измериш боза.
Направи каквото ти е казал kiiid. Ако нямаш под ръка опорен източник, за проба направи с делител опорно нопрежение на около 80% от захранването с резистори от порядъка на няколко килоома, и сложи няколкостотин микрофарада + 100 нФ кондензатори в паралел към маса. Може да вържеш сериино на референс пина на контролера стотина ома, за да не се разрежда кондензаторът директно през входа когато махнеш захранването.
И не включвай директно кондензатори в изхода на сензора, както си писал, че операционният усилвател вътре може да стане нестабилен. Слагай и сериен резистор, за да нямаш ядове.
|
| Пон Фев 15, 2010 1:37 pm |
|
 |
|
rumen65
Ранг: Новодошъл
Регистриран на: Чет Окт 06, 2005 2:06 pm Мнения: 194 Местоположение: Sofia
|
Едва ли проблема ти е в изходния импеданс, както го дават в описанието датчика е с изход операционен усилвател. По скоро сигнала от него си излиза със шум, най-добре го виж с осцилоскоп. А това че уреда показва постоянно напрежение, не е критерии. Той интегрира за няколко стотин милисекунди и много силно подтиска смущения с мрежовата честота. Ако и ти направиш интегриране, примерно 200 измервания за 200 милисекунди и след това намериш средната стойност, няма да се променя показанието.
|
| Пон Фев 15, 2010 1:54 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
741 не се дразни. Ценя и вземам в предвид всички съвети. Просто налучквам докато чакам отговори.
Сложих резистор сериино на кондензатора
Oпределено тримера нищо не доказва. взех алкална батерия - мултицета показва 1.44V. Показанието е 72 старши и 1 младши битове -> 72*4+1 = 297. VDD = 5.05V/1024 = 0.004931640625 * 297 = 1.46V Показанието е стабилно.
Друга проба - температурен датчик TC1047A показанието е почти стабилно - играе само 1 лсб.
rumen65 - това е следващата стъпка в графика, но ми се щеше данаправя поне малко по-стабилно отчитане преди да започна със средна стойност.
Ето как мисля да направя средна стойност:
Сумирам 16 измервания и шифт надясно с 4 (4 пъти rrf). Евентуално пробно ще се реши точния брой на измерванията - от 8 до 256, степен на 2. Коментари и съвети тук също са добре дошли.
Възможно ли е самия светлинен датчик да дава колебания. Т.е. да е със слаба резолюция. Всъщност измерен с мултицет има колебания около 4-5 mV (като се има в предвид че най-вероятно мултицета усреднява.). Обаче при температурния датчик колебанието е също 4 mV измерено с мултицет - това е нормално като се има в предвид че има колебания в захранването.
Едно уточнение: след импулсното захранване - 9V има 220 uF кондензатор, после 7805, после 100uF + 100nF на изхода на 7805.
|
| Пон Фев 15, 2010 2:19 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
между другото целта ми е да следя процес който приключва за част от секундата. Светлината намалява от 100% до 20-50% (образно казано) за около 200 до 500 ms и след това спира да намалява (което е края на процеса). Така че не мога да правя много измервания. Трябва за тези примерно 500 ms да мога да спра процеса при зададена стойност, така че да се получат 256 нива на светлината (или колкото е възможно - 64-128). Това прави близо 1-2 ms на измерване. Ако едно измерване е 40 us мога да направя не повече от 16 измервания (степен на 2).
|
| Пон Фев 15, 2010 2:54 pm |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
ОК, това с батерията вече е по-сериозно, значи причината не е опорното напрежение.
А това с усредняването принципно върши работа, ама е замитане на проблема под килима. Виж кое ти вкарва тоя голям шум, отстрани го, пък след това усреднявай. Като гледам спецификацията за шума на сензора, не би трябвало да е от него.
Филтриращ кондензатор 100 нФ в захранването плътно до сензора имаш ли? Добави и RC-групата на входа на контролера, както ти е казал tgi.
Горе пишеш, че чакаш 40 мкс преди мерене, ама не става ясно какво чакаш и кога. Постни ако искаш и кода на процедурата по меренето с АЦП-то.
|
| Пон Фев 15, 2010 2:56 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
100nF плътно до сензора нямам - ще сложа. На изхода на сензора има 330pF + 1кО. Може би не са най-подходящите стойности ...
Тия двата макроса ги пускам един след друг. 40 us закъснение е за да съм сигурен че всичко е наред - кондензатора е зареден и т.н. При 10kO импеданс на източника го дават 19.72 µs При 50Ом = 10.61 µs Когато няма горна граница винаги удвоявам за да съм сигурен Ето инициализацията:
|
| Пон Фев 15, 2010 3:57 pm |
|
 |
|
npelov
Ранг: Почетен член
Регистриран на: Пет Яну 22, 2010 5:46 pm Мнения: 680
|
Захраних сензора с батерия - никаква промяна. Вадя полезни 4 бита. Не знам друго от какво може да е.
Ще взема TSL230BRP и ще броя импулси.
|
| Вто Фев 16, 2010 12:55 am |
|
 |
|
Edesign
Ранг: Форумен бог
Регистриран на: Сря Авг 31, 2005 1:57 pm Мнения: 1103
|
А осцилоскоп за да погледнеш сигнала все пак нямаш ли?
Като гедам всичко си направил ОК.
Но на втора страница в пдфа във втората таблица има нещо интересно :
V Maximum output voltage swing
VDD = 4.5 V, No Load 4.49V
VDD = 4.5 V, RL = 10 k 4.2V
Това какво ли трбява да значи...... Входното ти съпротивление на АЦПто е около 10к. Да не би когато прави измерване да шашка нещо изхода. Това е много кратък процес - микросекунди и без осцилоскоп с мултимер няма как да го видиш.
Можеш да сложиш 50к последователно на входа да видим какво ще стане или най-добре буферирай с един ОУ (ЛМ358 например)
|
| Вто Фев 16, 2010 7:27 am |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
От значение е и интервалът през който се правят измерванията.
|
| Вто Фев 16, 2010 10:00 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 10 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|