Отговори на тема  [ 90 мнения ]  Отиди на страница 1, 2, 3, 4, 5, 6  Следваща
ADC - стабилност 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение ADC - стабилност
Използвам PIC16F874A с кварц на 20 MHz и кондензатори 15pF. не съм сложил съпротивлението Rs което е показано в datasheet-а че "може и да трябва". Избрал съм такт на АЦП - Fosc/64:

Код:
ADCON0 -> 0x89 ; 1000 1001
ADCON1 -> 0xC2 ; 1100 0010


Ползвам порт 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юни 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Сеп 15, 2009 10:44 am
Мнения: 1034
Мнение Re: ADC - стабилност
npelov написа:
Защо АЦП-то ми играе с >10%? На какво може да се дължи.

А не допускаш ли, че не "играе" АЦП-то, нито сензорът, ами лампата, дето го осветява? :)
Слагаш филтър да ти изреже всичко над половината от честотата, с която семплираш, след това усредняваш отчетите за време, кратно на 10 милисекунди, за да отрежеш 100-те херца на лампата. Ако избереш кратно на 50 мс, ще подтискаш едновременно 100 и 120 Hz.


Пон Фев 15, 2010 10:18 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 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
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Сеп 24, 2005 2:00 pm
Мнения: 787
Мнение 
За да не ти играе LSB много важно условие е да имаш много стабилно опорно напрежение за ADC. Твоето какво е? От захранването ли? Не става. Колкото и чисто да си мислиш че е, за 2-3 ADC LSB не става а и нямаш температурна компенсация. Закачи някой опорен източник според Vref което ти е за тоя чип и тогава постни резултата. Търси в Гугъл "Voltage Reference" и си избери нещо което върши работа.


Пон Фев 15, 2010 11:59 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Сеп 15, 2009 10:44 am
Мнения: 1034
Мнение 
Уфф, референс от захранването, че и импулсен стабилизатор на всичкото отгоре. Да се чуди човек още какво си спестил от постановката. Че на всичкото отгоре не слушаш какво те съветват хората. Защо тогава пускаш тема, като си ги знаеш нещата?

Експериментът с тримера е порнография и не доказва нищо. АЦП мери съотношение между вход и референс. С тримера задаваш на входа напрежение, което е пропорционално на референса. Захранването може и с цял волт да плува, и АЦП-то пак ще отчита един и същ резултат. Ако подадеш стабилно напрежение на входа обаче ще измериш боза.

Направи каквото ти е казал kiiid. Ако нямаш под ръка опорен източник, за проба направи с делител опорно нопрежение на около 80% от захранването с резистори от порядъка на няколко килоома, и сложи няколкостотин микрофарада + 100 нФ кондензатори в паралел към маса. Може да вържеш сериино на референс пина на контролера стотина ома, за да не се разрежда кондензаторът директно през входа когато махнеш захранването.

И не включвай директно кондензатори в изхода на сензора, както си писал, че операционният усилвател вътре може да стане нестабилен. Слагай и сериен резистор, за да нямаш ядове.


Пон Фев 15, 2010 1:37 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 06, 2005 2:06 pm
Мнения: 194
Местоположение: Sofia
Мнение 
Едва ли проблема ти е в изходния импеданс, както го дават в описанието датчика е с изход операционен усилвател. По скоро сигнала от него си излиза със шум, най-добре го виж с осцилоскоп. А това че уреда показва постоянно напрежение, не е критерии. Той интегрира за няколко стотин милисекунди и много силно подтиска смущения с мрежовата честота. Ако и ти направиш интегриране, примерно 200 измервания за 200 милисекунди и след това намериш средната стойност, няма да се променя показанието.


Пон Фев 15, 2010 1:54 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 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. Коментари и съвети тук също са добре дошли.

Код:
BCF  STATUS, C
RRF  highByte ; rotate през Carry
RRF  lowByte
; това n на брой пъти


Възможно ли е самия светлинен датчик да дава колебания. Т.е. да е със слаба резолюция. Всъщност измерен с мултицет има колебания около 4-5 mV (като се има в предвид че най-вероятно мултицета усреднява.). Обаче при температурния датчик колебанието е също 4 mV измерено с мултицет - това е нормално като се има в предвид че има колебания в захранването.

Едно уточнение: след импулсното захранване - 9V има 220 uF кондензатор, после 7805, после 100uF + 100nF на изхода на 7805.


Пон Фев 15, 2010 2:19 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Сеп 15, 2009 10:44 am
Мнения: 1034
Мнение 
ОК, това с батерията вече е по-сериозно, значи причината не е опорното напрежение.
А това с усредняването принципно върши работа, ама е замитане на проблема под килима. Виж кое ти вкарва тоя голям шум, отстрани го, пък след това усреднявай. Като гледам спецификацията за шума на сензора, не би трябвало да е от него.
Филтриращ кондензатор 100 нФ в захранването плътно до сензора имаш ли? Добави и RC-групата на входа на контролера, както ти е казал tgi.
Горе пишеш, че чакаш 40 мкс преди мерене, ама не става ясно какво чакаш и кога. Постни ако искаш и кода на процедурата по меренето с АЦП-то.


Пон Фев 15, 2010 2:56 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение 
100nF плътно до сензора нямам - ще сложа. На изхода на сензора има 330pF + 1кО. Може би не са най-подходящите стойности ...

Код:
startAdc   macro
   callw   delayus,   .40
   banksel   ADCON0
   bsf      ADCON0, GO
   endm
waitAdc      macro
   banksel   ADCON0
   btfsc   ADCON0, GO_DONE
   goto   $-1
   endm


Тия двата макроса ги пускам един след друг.

40 us закъснение е за да съм сигурен че всичко е наред - кондензатора е зареден и т.н.

Цитат:
Equation 23-1: Acquisition Time
TACQ = Amplifier Settling Time +
Holding Capacitor Charging Time +
Temperature Coefficient
=TAMP + TC + TCOFF



При 10kO импеданс на източника го дават 19.72 µs
При 50Ом = 10.61 µs
Когато няма горна граница винаги удвоявам за да съм сигурен


Ето инициализацията:
Код:
   ; ADC initialization

   banksel   ADCON1
   movlw   0x02   ; 0000 0010;   portE - dig, left aligned
   movwf   ADCON1
   bcf      ADCON1, 7 ; 1 - right aligned, 0 left aligned
   bsf      ADCON1, 6 ; ADCS2: if 1 -> ADCS1:0 ->10 -> Fosc/64, if 0 -> Fosc/32


   banksel   ADCON0
   movlw   0x89   ; 1000 1001
   movwf   ADCON0


Пон Фев 15, 2010 3:57 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение 
Захраних сензора с батерия - никаква промяна. Вадя полезни 4 бита. Не знам друго от какво може да е.

Ще взема TSL230BRP и ще броя импулси.


Вто Фев 16, 2010 12:55 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Авг 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение 
От значение е и интервалът през който се правят измерванията.


Вто Фев 16, 2010 10:00 am
Профил ICQ WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 90 мнения ]  Отиди на страница 1, 2, 3, 4, 5, 6  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни