|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:16 am
Въпрос за термометър (PIC)
| Автор |
Съобщение |
|
Иво
Ранг: Минаващ
Регистриран на: Чет Окт 06, 2005 3:08 pm Мнения: 98 Местоположение: София
|
 Въпрос за термометър (PIC)
Здравейте, ползвам PIC16F870 и LM335. Ето я програмата:
Формулата temp=(read_adc()*0.48828)-273.15 я видях от един форум, обаче не е много точна. Лошото е, че температурата се извежда през 0.5C, а при по високи стойности на променливата пак се мени през 0.5, но не на кръгла стойност (примерно 48.1, 48.6, 49,1...). Как може да се направи да работи с точност 0.1C ?
Благодаря предварително !
|
| Чет Фев 15, 2007 12:48 pm |
|
 |
|
valioman
Ранг: Почетен член
Регистриран на: Съб Сеп 17, 2005 5:07 pm Мнения: 813 Местоположение: Сливен
|
 Re: Въпрос за термометър (PIC)
ЗАщо делиш измерената стойнос на 2 т.е(read_adc()*0.488...) си е почти делене на две .
Точността ти идва от датчика т.е. моя въпрос е .
Как се именя напрежението от него в зависимост от температурата опитно...
и пробвай да зададеш опорно напрежение на пика Vref и мери в по тесни граници.
Така ще получиш по голяма точност мисля....
|
| Чет Фев 15, 2007 4:50 pm |
|
 |
|
Иво
Ранг: Минаващ
Регистриран на: Чет Окт 06, 2005 3:08 pm Мнения: 98 Местоположение: София
|
Здрасти, може би темата е а раздел Академия, оправих се  Промених #device ADC=16 за да връща резултата в 16 битов INT и после делих на 1023 (макс. стойност) и температурата излезе почти точна. Малкото разминаване от няколко десети оправих като просто коригирах резултата, който се извежда на LCD .
|
| Чет Фев 15, 2007 8:30 pm |
|
 |
|
Иво
Ранг: Минаващ
Регистриран на: Чет Окт 06, 2005 3:08 pm Мнения: 98 Местоположение: София
|
Дааа... Обаче се оказва, че не е така. Сега при промяна на околната температура с 5 градуса/C, показанията се променят с 0.1....
|
| Чет Фев 15, 2007 8:51 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Пробвай с едно (float) пред read_adc()
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Чет Фев 15, 2007 10:19 pm |
|
 |
|
Иво
Ранг: Минаващ
Регистриран на: Чет Окт 06, 2005 3:08 pm Мнения: 98 Местоположение: София
|
Здрасти, сложих (float), но нищо не се промени. Отново мери през 0.5 C.
|
| Чет Фев 15, 2007 11:27 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Ако използваш 5V за опорно напрежение, при 10-битово АЦП, се получава разделителна способност от 4,88mV. При положение, че LM335 генерира на изхода си 10mV/C, то на 0,5C ще е 5mV, или приблизително колкото ти е разделителната способност на АЦП-то.
Има 2 начина да увеличиш разделителната способност: софтуерен и хардуерен.
Софтуерния е да направиш множество измервания, примерно 1024, като сумираш резултата след всяко измерване в 32-битово цяло число. След 1024 измервания, на теория, ще имаш резултат като от 20 битово АЦП. На практика обаче не е така. Чрез софтуерно увеличаване на разредността на АЦП-то можеш да го направиш най-много до 13-14 битово. Но и това е достатъчно, защото при 14-битово АЦП и 5V опорно напрежение ще получиш за тегло на 1 бит 0,610mV, което е по-малко от 1/10 от напрежението, което генерира LM335 при промяна на температурата с 1C.
Хардуерния начин е описан много подробно в "Designing With The LM335 Temperature Sensor", by Mark E. Nurczyk, списание "Circuit Cellar", мисля от Feb 1992. Виж си PM.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Фев 16, 2007 12:55 am |
|
 |
|
SpeedyX
Ранг: Минаващ
Регистриран на: Съб Май 27, 2006 12:42 am Мнения: 14
|
Ако мериш няколко пъти (oversampling), ще е по-добре, и да не забравиш dead band...
и дефинициите : значи рутина за измерването ще е: и за по-добрo измерване, забавим АЦП-то
Ако правиш ето така, с 10 битов ацп, можеш да получиш 12,13 битовa информация.
Така, както ти написа програма, не може да стане това. трябва да използваш Vref пиновете, и търси за "Ratiometric Measurement" и ако искаш да напредваш повече, ще прочетеш за "auto range" 
|
| Сря Фев 28, 2007 8:14 pm |
|
 |
|
sthx
Ранг: Форумен бог
Регистриран на: Съб Юни 24, 2006 8:25 pm Мнения: 2292
|
Toва статистическо увеличаване на рарешаващата способност на АЦП е хитринка, която се получава благодарение на шумовете на сигнала и на самото АЦП. Аз също съм ползват тази хватка, но практиката ми показва, че е ефективна само за увеличаване на разрешаващата способност с 1 разряд. Не ми се вярва от 10 битово АЦП да се получи 14 битово.
_________________ Две плюс две е приблизително равно на четири. Факт!
|
| Сря Фев 28, 2007 9:56 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Ами не може! Дори и да го изпишеш някак си на дисплея показанието просто няма да е вярно. Самия датчик не е разчетен за такава точност. А и да е разчетен ,съмнявам се ,че ще можеш да го калибрираш да показва реалната температура. Точност 0.5С си е максималната за тоя хардуер дето ползваш.
|
| Сря Фев 28, 2007 10:55 pm |
|
 |
|
sthx
Ранг: Форумен бог
Регистриран на: Съб Юни 24, 2006 8:25 pm Мнения: 2292
|
Не ми се искаше да засягам въпроса с точността на измерване, но ще подкрепя жичката. Може и да се направи показанието да се изменя през 0.1 градуса, но това едва ли ще е вярно. Калибрирането на такъв термометър е сериозен проблем. Виж - за домашно ползване става. 
_________________ Две плюс две е приблизително равно на четири. Факт!
|
| Сря Фев 28, 2007 11:18 pm |
|
 |
|
SpeedyX
Ранг: Минаващ
Регистриран на: Съб Май 27, 2006 12:42 am Мнения: 14
|
|
| Чет Мар 01, 2007 12:16 am |
|
 |
|
sthx
Ранг: Форумен бог
Регистриран на: Съб Юни 24, 2006 8:25 pm Мнения: 2292
|
Mнооого готина табличка. Просто на човек му удва на сърце да я допълни до 24 битово АЦП. И да се чуди що се правят все още АЦП-та като схеми и да смята отношението на цените на 1 пин на процесорчето и едно АЦП. Хартията и без това търпи всичко. Чел съм българска статия по проблема, но авторът и нямаше такъв оптимизъм. Ето още едно оптимистично решение на Analog Devices :
http://mcu-bg.com/mcu_site/viewtopic.php?t=2790
Moята практика е следната. Ползвах 8 битово АЦП. Правех 256 измервания и делях на 128. Така получавах 9-битово АЦП, което не ми създаваше проблеми. Когато се опитах да го вдигна на 10-битово, започна да се наблюдава прескачане на стойности. Ако някой има практика с тоя род шмекерлъци, нека да сподели.
_________________ Две плюс две е приблизително равно на четири. Факт!
|
| Чет Мар 01, 2007 10:47 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Точно LM335, захранен с токов генратор (0.5mA), измерване с 10-bit ADC на PIC18F2520, правя oversampling до 14-bit ADC и няма никакви прескачания в показанията, Vref=4.096V, без ОУ, през НЧФ RC филтър директно на входа на ADC-то, 1/10 от градуса резолюция на дисплея.
Като си доближа ръката на около 3-4 см от сензора и показанието на дисплея веднага мръдва с 2-3 десети от градуса.
Калибровка с метода на "мишницата"  - сензора под мишница за 4-5 минути, телесната ми температура е 36,4C ( ако не съм нещо настинал ), коригирвам показанието ( чрез промяна на тока на токовия генератор ) докато дисплея покаже 36,4 без да се мандахерца. Все пак, когато реша да понастина, си меря телесната температура с класическия живачен термометър 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Чет Мар 01, 2007 11:44 pm |
|
 |
|
sthx
Ранг: Форумен бог
Регистриран на: Съб Юни 24, 2006 8:25 pm Мнения: 2292
|
Пирев, тебе съм те признал в много отношения. С това твое ново качество, би бил безценен инструмент в която и да е сериозна метрологична служба. Даже съм чувал от докторите, че аналният метод е по-точен от метода под мишницата и с него вероятно би хванал и стотна от градуса. Но това вероятно ще се докаже от компетентните специалисти след многобройни тестове.
Пак от лекари съм чувал, че на по-обикновените хора температурата се мени циклично в денонощието и зависи от много фактори.
По света се продават и други симулатори на температура и температурни датчици, но обикновено не достигат точностите, които си достигнал.
http://www.fluke.nl/comx/show_product.a ... &pid=23623
http://www.fluke.nl/comx/show_product.a ... &pid=19351
http://www.shopping.com/xFS?KW=Fluke+724&CLT=SCH
http://www.shopping.com/xFS?KW=Fluke+744&CLT=SCH
Аз определено не вярвам на себе си , та камо ли да разчитам на телесната си температура и затова използвам стари бабешки методи за калибрация.
Определено на полупроводников датчик не мога да разчитам за по-отговорни приложения, най-малкото поради по-големия ефект на стареене при полупроводниците. Предпочитам да използвам терморезистори от вида Pt100 и Pt1000. Тези, които се продават масово са с клас на точност +/-0.3 градуса при нула градуса по целзии. Явно е необходима калибровка, като всеки датчик си върви с термометъра. Калибровката я правя в 2 точки, защото за повече ме мързи , а да калибрирам само в една точка ми се струва несериозно.
Относно разредността , която може да се получи от АЦП-то, чрез метода на осредняване на голямо количество резултати. Тука има един парадокс. Колкото са повече флуктуациите, толкова по-голяма разрешаваща способност можеш да докараш. Ако АЦП-то, опорният източник и източника на сигнала са ти идеални, то всички резултати ще са едни и същи и кокото измервания да правиш, няма да постигнеш по-голяма разрешаваща способност. Явно в моя случай шумките са били по-малко и е трябвало да вкарам някак си повече смущения, за да постигна по-добър резултат. 
_________________ Две плюс две е приблизително равно на четири. Факт!
|
| Пет Мар 02, 2007 9:36 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|