|
АЦП в 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 >
|
 |
Ответов
(1 - 25)
|
Jan 8 2008, 10:24
|
Частый гость
 
Группа: Участник
Сообщений: 111
Регистрация: 8-01-08
Пользователь №: 33 892

|
Да нету никакой схемы, собирается на коленке  Датчик давления измеряет давление от 0 до 120 кпа, что соответствует напряжению на его выходе от 0 до 5 вольт. Я измеряю давление атмосферы, которое изменяется примерно от 90 до 105 кпа, что есть примерно 3,785 - 4,205 В на выходе датчика. Поэтому если я просто буду оцифровывать с помощью АЦП диапазон 0 - Vdd (+5В), интересующее меня давление будет слабо меняться на выходе АЦП. Поэтому с помощью регистра ADCON1 я переключаю АЦП в контроллере на работу с напряжениями Vref- и Vref+, вместо 0 - Vdd (см. стр. 128 англ. даташита на PIC 16F876A) Подаю на Vref- (RA.2) +3.785В, а на Vref+ (RA.3) + 4.205 В. И измеряю уже относительно этих напряжений. Ответ АЦП не стабилен, хотя напряжение с датчика стабильно (< +/- 0,001В). Почему?
|
|
|
|
|
Jan 8 2008, 10:48
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(Antarius @ Jan 8 2008, 13:24)  Да нету никакой схемы, собирается на коленке  Датчик давления измеряет давление от 0 до 120 кпа, что соответствует напряжению на его выходе от 0 до 5 вольт. Я измеряю давление атмосферы, которое изменяется примерно от 90 до 105 кпа, что есть примерно 3,785 - 4,205 В на выходе датчика. Поэтому если я просто буду оцифровывать с помощью АЦП диапазон 0 - Vdd (+5В), интересующее меня давление будет слабо меняться на выходе АЦП. Поэтому с помощью регистра ADCON1 я переключаю АЦП в контроллере на работу с напряжениями Vref- и Vref+, вместо 0 - Vdd (см. стр. 128 англ. даташита на PIC 16F876A) Подаю на Vref- (RA.2) +3.785В, а на Vref+ (RA.3) + 4.205 В. И измеряю уже относительно этих напряжений. Ответ АЦП не стабилен, хотя напряжение с датчика стабильно (< +/- 0,001В). Почему? Схема - это не изделие, а его схема. А мучаете Вы таким образом АЦП напрасно. Удивительно, что еще как-то работает! У Вас диапазон примерно 0.4 вольта. Вам бы его усилить раз в 10. Проще всего - инструментальным усилителем.
|
|
|
|
|
Jan 8 2008, 11:35
|
Местный
  
Группа: Свой
Сообщений: 492
Регистрация: 19-08-06
Пользователь №: 19 667

|
Цитата(Antarius @ Jan 8 2008, 12:24)  Поэтому с помощью регистра ADCON1 я переключаю АЦП в контроллере на работу с напряжениями Vref- и Vref+, вместо 0 - Vdd (см. стр. 128 англ. даташита на PIC 16F876A) Подаю на Vref- (RA.2) +3.785В, а на Vref+ (RA.3) + 4.205 В. И измеряю уже относительно этих напряжений. Возьмите даташит на свой микроконтроллер и уточните, какие минимальное и максимальное значения напряжений можно использовать для встроенного АЦП в качестве внешних опорных. Это в табл.17-14  А схемы рисовать нужно. Как минимум - перед тем, как задавать вопросы. Иначе вас не поймут (даже если захотят пытаться понимать без схемы).
|
|
|
|
|
Jan 8 2008, 12:11
|
Частый гость
 
Группа: Участник
Сообщений: 111
Регистрация: 8-01-08
Пользователь №: 33 892

|
О, спасибо, эту табличку я почему-то даже и не смотрел. Значит, проблема в том, что у меня не соблюдается Max Vref - = Vref+ - 2.0V. Спасибо большое! А кто подскажет как получить -5 В из +5В  Ой, уже оффтопик.
|
|
|
|
|
Jan 8 2008, 12:22
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(Antarius @ Jan 8 2008, 15:11)  О, спасибо, эту табличку я почему-то даже и не смотрел. Значит, проблема в том, что у меня не соблюдается Max Vref - = Vref+ - 2.0V. Спасибо большое! А кто подскажет как получить -5 В из +5В  Ой, уже оффтопик. AD22050 или подобное избавят Вас от второго питания....
|
|
|
|
|
Jan 10 2008, 15:34
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Antarius @ Jan 8 2008, 11:37)  Почему-то, когда напряжение на выходе датчика стабильно, например 3,975В, с АЦП идет не стабильный ответ, допустим (просто для примера) 375, 376, 372, 373, 375... Что для моих целей неприемлимо, ибо дает плохую повторяемость результатов (получается больше чем 0,1 атм давления, а надо меньше). Пришлось опрашивать АЦП в цикле, делать множество замеров и находить среднее значение. Со средним все отлично, можно мерить даже с точностью в сотые доли атм.
В чем причина нестабильности? Что можно сделать, чтобы опрашивать датчик один раз, а не в цикле и получать стабильный результат? Заранее спасибо. Вообще-то АЦП всегда болтает. И усреднять всегда надо. Вам еще повезло, что разброс болтанки меньше 3-4 разрядов при Вашей "схеме".
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Jan 10 2008, 15:53
|
Частый гость
 
Группа: Свой
Сообщений: 147
Регистрация: 24-01-07
Пользователь №: 24 741

|
Цитата(Antarius @ Jan 8 2008, 15:11)  О, спасибо, эту табличку я почему-то даже и не смотрел. Значит, проблема в том, что у меня не соблюдается Max Vref - = Vref+ - 2.0V. Я думаю проблема не в этом. Учитывая что превышение у Вас небольшое, это немного влияет на линейность работы АЦП, но не более. Проблема скорее всего в питании, возможно есть смысл увеличить емкости по питанию.
|
|
|
|
|
Jan 10 2008, 20:11
|
Местный
  
Группа: Свой
Сообщений: 492
Регистрация: 19-08-06
Пользователь №: 19 667

|
Цитата(Энтомолог @ Jan 10 2008, 17:53)  Я думаю проблема не в этом. Учитывая что превышение у Вас небольшое, это немного влияет на линейность работы АЦП, но не более. Проблема скорее всего в питании, возможно есть смысл увеличить емкости по питанию. Я в своем посте не имел в виду, что проблема нестабильных показаний - в величинах опорных напряжений. Просто указал, что заданы они неверно. Прошу прощения - не акцентировал внимания на этой мысли. Но не сказать, что "превышение небольшое": разница между верхней и нижней опорами около 300 мВ при требуемом "не менее 2000 мВ". А болтанка АЦП - да, от нее избавиться трудно. И вопрос не только в стабильности питания. Там могут и просто посторонние пульсации попадать на вход АЦП.
|
|
|
|
|
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
|
|
|