Страница 1 из 1

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

Добавлено: Пт июл 11, 2014 18:35:44
saund7901
Доброго времени суток:) я тут новый, так что мяу:) работаю я автоэлектриком, собрал себе стенд для заправки кондиционеров. долго изучал тензодатчики, операционные усилители, в конце концов была собрана плата, заказаны все недостающие детали. и что вышло: показания веса на дисплее прыгают туда-сюда, в довольно большом пределе, около 300 гр. что то читал про "шумящие биты" в ацп, но толком не понял. помогите пожалуйста разобраться. буду очень признателен.

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

Добавлено: Пт июл 11, 2014 18:46:53
Adagumer
Вы бы схемку для начала представили.

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

Добавлено: Пт июл 11, 2014 23:47:05
mrFox
вопросы по схеме и разводке
1 развязка МК и силовой части
2 насколько чистое питания аналоговой части МК
3 "чистый" земляной полигон под МК
4 "чистый" земляной полигон под аналоговой частью схемы

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

Добавлено: Сб июл 12, 2014 01:40:04
АлександрЛ
Ещё бы неплохо было бы вход АЦП зашунтировать конденсатором...

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

Добавлено: Пн июл 14, 2014 09:11:24
saund7901
что касается схемы, то у меня ее нет:):):) собирал слету на монтажной плате. питание пробывал менять, вплоть до того, что на батарейках запускал. плата с операционным усилителем для тензодатчика отдельно собрана. я читал, что "шумит" сам ацп, можно усреднить програмно, но как это сделать - ума не приложу:)
еще раз на счет схемы - закончу, выложу и схемы и прошивки и исходники. думаю будет интересно

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

Добавлено: Пн июл 14, 2014 09:38:27
Adagumer
saund7901 писал(а): можно усреднить программно, но как это сделать
Запускаете цикл for на определённое количество шагов, в цикле с каждым
шагом суммируете значения АЦП, по завершению цикла делите получившийся результат на
количество шагов цикла.

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

Добавлено: Пн июл 14, 2014 11:10:13
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
подскажите, как именно мне заставить контроллер среднее вычислять!
работаю в баскоме, новичек-самоучка, это только третий мой самостоятельный проэкт

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

Добавлено: Пн июл 14, 2014 16:03:03
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 ;

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

Добавлено: Пн июл 21, 2014 10:18:17
saund7901
огромное спасибо, Adagumer, ваш пример помог мне разобраться. немного поменял алгоритм опроса тензодатчика, все заработало, показания стабилизировались. стенд сдан в эксплуатацию. если будет интересно, то могу написать статью про него и выложить модели в протеусе и исходники. из моих проектов есть еще контроль запуска двигателя авто одной кнопкой (не отличишь от лексуса или бмв), управление вентиляцией и заслонками на котле под твердое топливо(в боксе такой стоит, после доработки повысилась теплоотдача и выровнялся расход топлива или электроэнергии) ну и стенд для чистки форсунок на бензиновых авто. опять же, могу выложить, если будет интерес у котов, лиш бы сильно не пинали:)

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

Добавлено: Пн июл 21, 2014 21:13:28
Adagumer
По Баскому есть специализированный ресурс:
http://bascomavr.3bb.ru/

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

Добавлено: Ср июл 23, 2014 00:49:09
watchmaker
Кстати, для бОльшей точности рекомендуется мегу на время измерения отправлять в слип, для этого есть специальный режим. Не уверен, что это есть в 8535, в 88 и выше точно есть.

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

Добавлено: Вт июл 29, 2014 14:08:24
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-пишите нули-тогда не будет проблем с ненулевыми показаниями АЦП при отсутствии сигнала
Далее-совет:
При циклической основной программе и опросе нескольких портов АЦП за цикл программы-может тупо не хватить времени цикла
программы на опрос всех портов-поэтому я в своей программе использую арбитраж-последовательный опрос по одному каналу в каждом цикле программы