|
АЦП в PIC 16F876A, Нестабильные результаты |
|
|
|
Jan 8 2008, 09:37
|
Частый гость
 
Группа: Участник
Сообщений: 111
Регистрация: 8-01-08
Пользователь №: 33 892

|
Сразу прошу прощения, если что - это мое первое сообщение в ваш форум. Я - абсолютный чайник в электронике, и это мое первое устройство вообще (даже радио в детстве не собирал). Просто решил осуществить детскую мечту и собрать своими руками какое-либо электронное устройство. Решил сделать метеостанцию для начала.
Проблема следующая. Нужно оцифровать значения датчика давления MPX 4115A с помощью АЦП в PIC16F876A.
Датчик подключен согласно даташиту на него, есть все конденсаторы, указанные в нем. Выход датчика давления напрямую подключен к пику, между выходом и землей есть керамический конденсатор.
Интересующий диапазон давления датчика соответствует напряжению на его выходе от 3,785 до 4,205 вольт. Поэтому на АЦП контроллера я подвел два напряжения минимум - 3,785 и максимум 4,205В. Чтобы весь интересующий меня диапазон уложился в 1024 отсчета АЦП. Напряжения задал многооборотными переменными резисторами. Напряжения стабильны и со временем не меняются.
Вся схема (и датчик и контроллер) питается от м/сх REF195, имеющая на выходе довольно стабильные 5,00 В. REF также подключена с двумя электролитическими конденсаторами, согласно даташиту. Да, схема собрана на макетной плате (я только учусь), причем на плате в которую втыкается, а не паяется.
И в принципе все работает и все устраивает, но... Почему-то, когда напряжение на выходе датчика стабильно, например 3,975В, с АЦП идет не стабильный ответ, допустим (просто для примера) 375, 376, 372, 373, 375... Что для моих целей неприемлимо, ибо дает плохую повторяемость результатов (получается больше чем 0,1 атм давления, а надо меньше). Пришлось опрашивать АЦП в цикле, делать множество замеров и находить среднее значение. Со средним все отлично, можно мерить даже с точностью в сотые доли атм.
В чем причина нестабильности? Что можно сделать, чтобы опрашивать датчик один раз, а не в цикле и получать стабильный результат? Заранее спасибо.
Сообщение отредактировал Antarius - Jan 8 2008, 09:41
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 25)
|
Jan 11 2008, 18:13
|
Частый гость
 
Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656

|
Цитата(Antarius @ Jan 11 2008, 11:03)  Что касается времени заряда конденсатора, я опрашиваю датчик в цикле, между опросами задержка 20 мс. Этого достаточно для заряда? Пробовал 50 мс, разницы не заметил, но утверждать на 100% не буду. Если Вы не трогаете входной коммутатор, то и 20 мкс достаточно для заряда УВХ...
|
|
|
|
|
Jan 11 2008, 19:43
|
Частый гость
 
Группа: Участник
Сообщений: 111
Регистрация: 8-01-08
Пользователь №: 33 892

|
Цитата(Марк_Я @ Jan 11 2008, 21:13)  Если Вы не трогаете входной коммутатор, то и 20 мкс достаточно для заряда УВХ... Входной коммутатор - это регистр ADCON? Я его один раз перед циклом опросов трогаю, но потом жду 100 мс.
Сообщение отредактировал Antarius - Jan 11 2008, 19:45
|
|
|
|
|
Jan 11 2008, 20:30
|
Частый гость
 
Группа: Свой
Сообщений: 147
Регистрация: 24-01-07
Пользователь №: 24 741

|
Цитата(Antarius @ Jan 11 2008, 20:40)  между какие выводами конденсатор вешать? Между регулируемым выводом и землей? А зачем? Именно так - между регулируемым выводом и землей. Для уменьшения пульсаций опорных напряжений. При выборе емкости учитывайте время заряда вашей RC цепочки, т.е. чем больше емкость конденсатора, тем лучше (при прочих равных), но при этом увеличивается время выхода устройства в рабочий режим после подачи питания.
|
|
|
|
|
Jan 16 2008, 07:11
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
Цитата(XVR @ Jan 15 2008, 18:48)  ОЧЕНЬ рекомендуется (а при вашем диапазоне входных напряжений и вообще обязательно  ) переводить процессор в режим SLEEP во время измерения напряжения - ядро процесора довольно заметно шумит, его остановка позволяет от этого шума избавится. в свое время проводил эксперименты, даже усреднение на 4 полностью устраняет шум от ядра (по крайней мере небыло разницы между SLEEP и нормальным режимом, в обоих случаях +- 0,5 младшего разряда), гораздо больше зависит от правильной разводки и качества опоры. например при использовании двухвыводных ион (по типу стабилитронов, LM285, tl431) очень сказывается ток через этот стабилитрон, чем меньше ток тем больше шум. Поэтому конденсатор в опору однозначно необходим (между выводом опоры и землей). При выборе делителя также необходимо учитывать требуемый ток потребляемый пиком от опоры, а лучше включить ОУ в режиме повторителя м/у делителем опорного и входом опоры пика. еще грабли - в нормальном режиме (не SLEEP) нельзя тактировать от RC-генератора, правильно только делением основного, при RC шум больше, что то связаное с интерфенцией или несинхронным переключением еще один момент - если Вы собираетесь ставить промежуточный инстр усилитель, тогда однозачно стоит поднять опору до 5В а низ опоры заземлить, точноть при этом так же лучше будет (см. даташит на пик)
|
|
|
|
|
Jan 16 2008, 10:09
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
еще пара моментов вы в курсе что в этом диапазоне датчик обеспечивает 5,5 разрядную точность? MPX4115 по даташиту обеспечивает стабильность 0,5% от рабочего диапазона т.е. 25мВ) в требуемом диапазоне 3,8...4,2В (даже считая что вы его правильно усилили и оцифровали) сам датчик обеспечит точность всего в 45 единиц (4,2-3,8)/0,025 = 45 - результат округленно, но это ваша реальная стабильность от датчика, без учета основной точности в 1,5%  даже если вы и получите стабильные цифры, они мало общего будут иметь с реальным давлением так что имхо не стоит огород городить, оцифровывайте напрямую и работайте с полученным результатом, либо меняйте датчик есть еще один вариант, именно по оцифровке, искусственно получить 12 битный результат по принципу: сделать 16 десятибитных измерения, затем поделить на 4. Но это не повысит реальную точность датчика, хотя может позволить избежать применения дополнительных элементов, сохранив разрядность, примерно 9 бит в диапазоне 3,8...4,2В. а потом еще нужное кол-во таким образом полученных 12битных результатов усреднить на любом интервале времени и по усреднению - лучше всего делать 16 отсчетов за 20мс , т.е. с интервалом 1,25мс - в этом случае вы хорошо отфильтруете помеху 50Гц или в принципе, с любым интервалом кратным 10мс - получите тот же результат
|
|
|
|
|
Jan 16 2008, 12:13
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Antarius @ Jan 16 2008, 11:29)  Спасибо! Попробую. Правда никогда не сталкивался с режимом Sleep. Как я понимаю, это режим пониженного энергопотребления. Угу, совсем пониженного  Ядро останавливается Цитата Но программа все равно выполняется, правильно? Нет Цитата И опрос ацп мне вести в этом режиме? Да Цитата А как потом вывести контроллер из этого режима, прерыванием от таймера, запущенного перед циклом опросов? Прерыванием от АЦП по окончанию преобразования
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|