Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 28.02.2011, 23:09  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

niXto,
Цитата:
10 бит вам в руки. ОБЯЗАТЕЛЬНО нужны 2...3 "лишних" бита
С этим сейчас попробую.
Цитата:
И частоту поставьте 5...10 ксэмплов
А лучше по больше или поменьше. А то я за ради интересу гонял на 142 кГц и разницы не замтил, работает так же. А сейчас Гоняю на 14 кГц.
Реклама:
7Fantomas7 вне форума  
Непрочитано 28.02.2011, 23:15  
true71
Почётный гражданин KAZUS.RU
 
Аватар для true71
 
Регистрация: 23.09.2008
Адрес: Козьмодемьянск. Это на Волге.
Сообщений: 2,399
Сказал спасибо: 5,548
Сказали Спасибо 1,049 раз(а) в 605 сообщении(ях)
true71 на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

Сообщение от 7Fantomas7 Посмотреть сообщение
Код:
   I_ADC=ADCH;        //передали значение тока в переменную
   calculator_bufer_I[14]=calculator_bufer_I[13];
   calculator_bufer_I[13]=calculator_bufer_I[12];
   calculator_bufer_I[12]=calculator_bufer_I[11];
   calculator_bufer_I[11]=calculator_bufer_I[10];
   calculator_bufer_I[10]=calculator_bufer_I[9];
   calculator_bufer_I[9]=calculator_bufer_I[8];
   calculator_bufer_I[8]=calculator_bufer_I[7];
   calculator_bufer_I[7]=calculator_bufer_I[6];
   calculator_bufer_I[6]=calculator_bufer_I[5];
   calculator_bufer_I[5]=calculator_bufer_I[4];
   calculator_bufer_I[4]=calculator_bufer_I[3];
   calculator_bufer_I[3]=calculator_bufer_I[2];
   calculator_bufer_I[2]=calculator_bufer_I[1];
   calculator_bufer_I[1]=calculator_bufer_I[0];
   calculator_bufer_I[0]=I_ADC;
Вот это вот зачем?
Если сделаете цикл типа:
Код:
calculator_bufer_I[Counter]=I_ADC;
   Counter++;
 if (Counter›15){Counter=0;}
То Вам не надо будет всё сдвигать.
Все Ваши сдвигания уместились в три строчки...
И называться это будет кольцевой буфер, причем, этот цикл можно сделать в итерации основной программы.


Сообщение от 7Fantomas7 Посмотреть сообщение
[/CODE]
izmerenoe_I=(calculator_bufer_I[0]+calculator_bufer_I[1]+calculator_bufer_I[2]+
calculator_bufer_I[3]+calculator_bufer_I[4]+calculator_bufer_I[5]+calculator_bufer_I[6]+
calculator_bufer_I[7]+calculator_bufer_I[8]+calculator_bufer_I[9]+calculator_bufer_I[10]+
calculator_bufer_I[11]+calculator_bufer_I[12]+calculator_bufer_I[13]+
calculator_bufer_I[14])/15;
indy_I=izmerenoe_I; //переменной которую будем передавать в }
[/CODE]

А здесь я бы сделал вот так:
Код:
 izmerenoe_I=0; 
 for(Counter_1=0;Counter_1‹16;Counter_1++){
    izmerenoe_I=izmerenoe_I+calculator_bufer_I[Counter_1];
   }
  izmerenoe_I=izmerenoe_I/15;
PS: Паскалеобразно написал, чтобы было понятнее.

Как тут уже пытались Вам объяснить, полностью снять дрожание последней цифры не получится, слишком от многих факторов от Вас не зависящих, это зависит.

Последний раз редактировалось true71; 28.02.2011 в 23:19.
true71 вне форума  
Сказали "Спасибо" true71
7Fantomas7 (28.02.2011)
Непрочитано 01.03.2011, 00:01  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

Сообщение от 7Fantomas7 Посмотреть сообщение
Только вот как из ситуации выйти другими словами застабилизировать как. Дело в том что если б был необходим показометр то может что и придумал бы.
Вот как раз для показометра решения и нет. При любой фильтрации (и программной и схематической) и любой разрядности АЦП обязательно будут такие значения входного сигнала, при котором отфильтрованное значение окажется на границе целого числа +/- 0.00001. Просто частота прыгания последнего разряда будет разная.
Даже применение вещественных чисел здесь не спасет, т.к. получится все то же самое, только с границей на уровне xxx.49999-xxx.50000.

Цитата:
Только от результата измерения завист на прямую ШИМ.
А вот здесь как раз спасет увеличение разрядности АЦП (т.е. брать все 10 разрядов), увеличение количества выборок для усреднения и увеличение разрядности ШИМ (если возможно).
testerplus вне форума  
Сказали "Спасибо" testerplus
7Fantomas7 (01.03.2011)
Непрочитано 01.03.2011, 00:20  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

Понял.
Еще глупый вопрос.
А как красиво записать значения ADCH+ADCL в переменную int. Ну так чтоб по правилам. Если можно с коментариями.
7Fantomas7 вне форума  
Непрочитано 01.03.2011, 02:17  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

Сообщение от 7Fantomas7 Посмотреть сообщение
Еще глупый вопрос.
А как красиво записать значения ADCH+ADCL в переменную int.
Полезно заглядывать в заголовочные файлы.
ADCW
testerplus вне форума  
Непрочитано 01.03.2011, 02:55  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

Оно то может и полезно только Вы это про что?
7Fantomas7 вне форума  
Непрочитано 01.03.2011, 02:59  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

Сообщение от 7Fantomas7 Посмотреть сообщение
Оно то может и полезно только Вы это про что?
Код:
int i;
...
i = ADCW;
testerplus вне форума  
Сказали "Спасибо" testerplus
7Fantomas7 (01.03.2011)
Непрочитано 01.03.2011, 03:25  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

testerplus,
Оромнейше спасибо.
Блин век живи, век учись, дураком сдохнеш.
Вобшем тема ичерпана. Добился очень нормального результата. Значение прыгает на 1, раз в секунд в 30, что для меня очень даже и достаточно.
true71
Спасибо за кольцевой буфер, сам бы я его не знаю как придумывал. А вот стем что паскалеобразно написано не въехал.
И вообще всем кто принимал участие спасибо.
Начну теперь ШИМ бороть.
7Fantomas7 вне форума  
Непрочитано 01.03.2011, 03:47  
testerplus
Прописка
 
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
testerplus на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

Сообщение от 7Fantomas7 Посмотреть сообщение
true71
Спасибо за кольцевой буфер, сам бы я его не знаю как придумывал.
Насчет Ваших плясок с буфером. Замените его на простейший цифровой фильтр:
Код:
unsigned int Filter;
unsigned int Average;
...
Average = Filter ›› 4;
Filter += ADCW - Average;
Это усреднение 16 выборок (результат - в переменной Average). не нужно никаких буферов, и по скорости много выиграете. Замените 4 на 5 - получите усреднение 32 выборок, на 6 - 64.

Добавлено: вообще, когда речь идет о цифровом фильтре, не совсем правильно говорить об усреднении какого-то количества выборок. Загнав в этот фильтр 16 значений 512, мы не получим на выходе число 512 (оно устаканится только к 80ой или 120ой выборке). Фильтры характеризуются несколько другими параметрами.

Последний раз редактировалось testerplus; 01.03.2011 в 04:21.
testerplus вне форума  
Непрочитано 01.03.2011, 08:33  
Zeman1979
Прописка
 
Регистрация: 16.07.2010
Сообщений: 150
Сказал спасибо: 19
Сказали Спасибо 29 раз(а) в 23 сообщении(ях)
Zeman1979 на пути к лучшему
По умолчанию Re: Сбилизация измерения АЦП ATMega8535

Сообщение от 7Fantomas7 Посмотреть сообщение
Не приведу, счастья не будет.
Мне необходимо мерять от 0 -255 например вольт с точностью 1вольт.
Просто я подал в качестве теста половину, подавал и 2,55 в принципе при четком среднем арифметическом соответвуют 1 в 1.
Так как я беру результаты измерений из регистра ADCH то это 8 бит, 2 бита из ADCL я просто игнорирую. Понятно что ADCH+ADCL выровнены по левому краю. Поэтому опору трогать не вижу смысла, сделано класически.
Доперло как сделать. Смотрите, резултат преобразования ACDH+ACDL, у вас идет нормальное преобразование в 10 бит, но 2 первых бита вы не учитываете и считаете, что преобразование 8 бит и делите на 256. Вот тут и ошибка, преобразование нормальное в 10 бит и результат преобразования не 256, а 1024 за минусом значений младших разрядов.

И пример что бы была понятна математика:
Измерили значение 1,27. При этом цена одного разряда 0,00996В, при опоре 2.55, выходит измеренное значение 127.51. Если же считаем 10 бит, то получим цену разряда 0,00249 и измеренное значение уже будет 510, но два младших разряда откинуться и получится значение 508, которое вы и считаете в ACDH. При обратом пересчете 508*0,00249=1,2699. Вот и все, округляя до второго знака после запятой получаем 1,27 все классно, все довольны и никаких прыжков в младшем разряде.

Последний раз редактировалось Zeman1979; 01.03.2011 в 10:17.
Zeman1979 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Видео уроки dosikus Микроконтроллеры, АЦП, память и т.д 61 23.01.2012 21:06
Помогите с регистрами АЦП ATMega8535 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 13 04.11.2010 22:32
Конфликт прерываний таймера и АЦП ask_e Микроконтроллеры, АЦП, память и т.д 11 08.08.2010 01:28
Помогите с ЦАП AD7708/AD7718 или их аналогами ST_Senya Микроконтроллеры, АЦП, память и т.д 9 30.11.2009 19:03


Часовой пояс GMT +4, время: 09:21.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot