АЦП в ATMEGA 8535 нестабильные показания

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 5
Зарегистрирован: Пт июл 11, 2014 17:57:21

Сообщение saund7901 »

Доброго времени суток:) я тут новый, так что мяу:) работаю я автоэлектриком, собрал себе стенд для заправки кондиционеров. долго изучал тензодатчики, операционные усилители, в конце концов была собрана плата, заказаны все недостающие детали. и что вышло: показания веса на дисплее прыгают туда-сюда, в довольно большом пределе, около 300 гр. что то читал про "шумящие биты" в ацп, но толком не понял. помогите пожалуйста разобраться. буду очень признателен.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2311
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Сообщение Adagumer »

Вы бы схемку для начала представили.
Реклама
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Пт сен 21, 2007 17:53:23
Откуда: Зарайск

Сообщение mrFox »

вопросы по схеме и разводке
1 развязка МК и силовой части
2 насколько чистое питания аналоговой части МК
3 "чистый" земляной полигон под МК
4 "чистый" земляной полигон под аналоговой частью схемы
Друг Кота
Аватара пользователя
Сообщения: 43973
Зарегистрирован: Пн ноя 30, 2009 03:00:01
Откуда: Нерезиновая

Сообщение АлександрЛ »

Ещё бы неплохо было бы вход АЦП зашунтировать конденсатором...
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 5
Зарегистрирован: Пт июл 11, 2014 17:57:21

Сообщение saund7901 »

что касается схемы, то у меня ее нет:):):) собирал слету на монтажной плате. питание пробывал менять, вплоть до того, что на батарейках запускал. плата с операционным усилителем для тензодатчика отдельно собрана. я читал, что "шумит" сам ацп, можно усреднить програмно, но как это сделать - ума не приложу:)
еще раз на счет схемы - закончу, выложу и схемы и прошивки и исходники. думаю будет интересно
Последний раз редактировалось ibiza11 Вт авг 05, 2014 09:29:09, всего редактировалось 1 раз.
Причина: 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2311
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Сообщение Adagumer »

saund7901 писал(а): можно усреднить программно, но как это сделать
Запускаете цикл for на определённое количество шагов, в цикле с каждым
шагом суммируете значения АЦП, по завершению цикла делите получившийся результат на
количество шагов цикла.
Реклама
Родился
Сообщения: 5
Зарегистрирован: Пт июл 11, 2014 17:57:21

Сообщение saund7901 »

добрый день:)
у меня это выглядит так:

Код: Выделить всё

Tenzo:
Vesiz = Getadc(0)
If Vesiz < 440 Then Vesiz = 440
Vesiz = Vesiz - 440 
Vesiz = Vesiz * 16
Waitms 500
Y = Str(vesiz)
Y = Format(y , "00.000")
Locate 2 , 1
Lcd Y

Return
подскажите, как именно мне заставить контроллер среднее вычислять!
работаю в баскоме, новичек-самоучка, это только третий мой самостоятельный проэкт
Последний раз редактировалось ibiza11 Вт авг 05, 2014 09:29:47, всего редактировалось 1 раз.
Причина: Тег Code
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2311
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Сообщение Adagumer »

Код: Выделить всё

Start Adc

   By1 = 0
   For Schet = 1 To 100
    Temp = Getadc(0)
    By1 = By1 + Temp
   Next
   W_adc = By1 / 100

Cls

Lcd W_adc ;
Родился
Сообщения: 5
Зарегистрирован: Пт июл 11, 2014 17:57:21

Сообщение saund7901 »

огромное спасибо, Adagumer, ваш пример помог мне разобраться. немного поменял алгоритм опроса тензодатчика, все заработало, показания стабилизировались. стенд сдан в эксплуатацию. если будет интересно, то могу написать статью про него и выложить модели в протеусе и исходники. из моих проектов есть еще контроль запуска двигателя авто одной кнопкой (не отличишь от лексуса или бмв), управление вентиляцией и заслонками на котле под твердое топливо(в боксе такой стоит, после доработки повысилась теплоотдача и выровнялся расход топлива или электроэнергии) ну и стенд для чистки форсунок на бензиновых авто. опять же, могу выложить, если будет интерес у котов, лиш бы сильно не пинали:)
Последний раз редактировалось ibiza11 Вт авг 05, 2014 09:30:18, всего редактировалось 1 раз.
Причина: 2.2 Запрещается создание нескольких сообщений подряд в одной теме. Если вы хотите что-то добавить к своему, уже написанному сообщению, воспользуйтесь кнопкой "Правка".
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2311
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

Сообщение Adagumer »

По Баскому есть специализированный ресурс:
http://bascomavr.3bb.ru/
Поставщик валерьянки для Кота
Сообщения: 2186
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков

Сообщение watchmaker »

Кстати, для бОльшей точности рекомендуется мегу на время измерения отправлять в слип, для этого есть специальный режим. Не уверен, что это есть в 8535, в 88 и выше точно есть.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Контактная информация:
Родился
Сообщения: 7
Зарегистрирован: Пн июл 28, 2014 12:26:37

Сообщение Durumka »

Стабильность показаний АЦП-во первых-всего 10 бит-соответственно плавают младшие разряды
Во вторых-каково значение и стабильность опорного внешнего ИОНа?-источника опорного напряжения-
Зная полный диапазон сигнала тензодатчика-и зная опорное напряжение-вычислите значение показаний, приходящихся на младший разряд
Третье-как преобразуете полученное значение в нужный формат-нет ли ошибок
Режим сна в меге8535 есть-я его использую:
Фрагмент программы для меги8535:

Код: Выделить всё

         ldi temp, 0x02             ;- выбор канала ADC2+внешний REF
         out ADMUX, temp        ;- выбираем канал ADC2 и коэффициент деления предделителя		 		 
         rcall measpress           ;- вызов подпрограммы запуска АЦП
		 sleep                  ;- переход в спящий режим
cont_u_adc:
          in temp, ADCL         ;- считывание данных АЦП из младшего регистра
		  mov r26, temp         ;- перемещение в нижний регистр данных напряжения
		  in temp, ADCH         ;- считывание данных АЦП из старшего регистра
		  mov r27, temp         ;- перемещение в верхний регистр данных напряжения
......
где:
         measpress:
		  ldi temp, 0x8F  ;
		  out ADCSRA, temp;-включаем АЦП и разрешаем прерывание от АЦП
		  in temp, MCUCR  ;
		  andi temp, 0xC3 ;- очистка 7-4 биты
		  ori temp, 0x28  ;
		  out MCUCR, temp ;- разрешение перехода в спящий режим ADC
		  ldi temp, 0xCF  ;
		  out ADCSRA, temp;- старт преобразования
		  ret             ;- выход из подпрограммы
Для указанного фрагмента в таблице векторов прерываний напротив прерывания от ADC - ставим RETI
ВАЖНО!!!
Столкнулся с таким глюком-при нулевом входном сигнале АЦП показывает некую величину-это связано с тем, что при определении портов АЦП как входы - далее в регистр PORTA были записаны единицы-что привело к подключению внутренних подтягивающих резисторов-а они в свою очередь совместно с внутренним выходным сопротивлением источника сигнала образовали делитель напряжения-что и привело к этому явлению-поэтому, при описании портов АЦП в начале программы-НЕ ЗАПИСЫВАЙТЕ единицы в регистры PORTX-пишите нули-тогда не будет проблем с ненулевыми показаниями АЦП при отсутствии сигнала
Далее-совет:
При циклической основной программе и опросе нескольких портов АЦП за цикл программы-может тупо не хватить времени цикла
программы на опрос всех портов-поэтому я в своей программе использую арбитраж-последовательный опрос по одному каналу в каждом цикле программы
Последний раз редактировалось ibiza11 Вт авг 05, 2014 09:31:16, всего редактировалось 1 раз.
Причина: офрмляем исходники, заключая их в тег Code
Ответить

Вернуться в «AVR»