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