Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.02.2011, 23:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Сбилизация измерения АЦП ATMega8535
niXto,
Цитата:
|
10 бит вам в руки. ОБЯЗАТЕЛЬНО нужны 2...3 "лишних" бита
|
С этим сейчас попробую.
Цитата:
|
И частоту поставьте 5...10 ксэмплов
|
А лучше по больше или поменьше. А то я за ради интересу гонял на 142 кГц и разницы не замтил, работает так же. А сейчас Гоняю на 14 кГц.
|
|
|
|
28.02.2011, 23:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 23.09.2008
Адрес: Козьмодемьянск. Это на Волге.
Сообщений: 2,400
Сказал спасибо: 5,548
Сказали Спасибо 1,049 раз(а) в 605 сообщении(ях)
|
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.
|
|
|
|
01.03.2011, 00:01
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Сбилизация измерения АЦП ATMega8535
Сообщение от 7Fantomas7
|
Только вот как из ситуации выйти другими словами застабилизировать как. Дело в том что если б был необходим показометр то может что и придумал бы.
|
Вот как раз для показометра решения и нет. При любой фильтрации (и программной и схематической) и любой разрядности АЦП обязательно будут такие значения входного сигнала, при котором отфильтрованное значение окажется на границе целого числа +/- 0.00001. Просто частота прыгания последнего разряда будет разная.
Даже применение вещественных чисел здесь не спасет, т.к. получится все то же самое, только с границей на уровне xxx.49999-xxx.50000.
Цитата:
|
Только от результата измерения завист на прямую ШИМ.
|
А вот здесь как раз спасет увеличение разрядности АЦП (т.е. брать все 10 разрядов), увеличение количества выборок для усреднения и увеличение разрядности ШИМ (если возможно).
|
|
|
Сказали "Спасибо" testerplus
|
|
|
01.03.2011, 00:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Сбилизация измерения АЦП ATMega8535
Понял.
Еще глупый вопрос.
А как красиво записать значения ADCH+ADCL в переменную int. Ну так чтоб по правилам. Если можно с коментариями.
|
|
|
|
01.03.2011, 02:17
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Сбилизация измерения АЦП ATMega8535
Сообщение от 7Fantomas7
|
Еще глупый вопрос.
А как красиво записать значения ADCH+ADCL в переменную int.
|
Полезно заглядывать в заголовочные файлы.
ADCW
|
|
|
|
01.03.2011, 02:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Сбилизация измерения АЦП ATMega8535
Оно то может и полезно только Вы это про что?
|
|
|
|
01.03.2011, 02:59
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
Re: Сбилизация измерения АЦП ATMega8535
Сообщение от 7Fantomas7
|
Оно то может и полезно только Вы это про что?
|
Код:
|
int i;
...
i = ADCW; |
|
|
|
Сказали "Спасибо" testerplus
|
|
|
01.03.2011, 03:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Сбилизация измерения АЦП ATMega8535
testerplus,
Оромнейше спасибо.
Блин век живи, век учись, дураком сдохнеш.
Вобшем тема ичерпана. Добился очень нормального результата. Значение прыгает на 1, раз в секунд в 30, что для меня очень даже и достаточно.
true71
Спасибо за кольцевой буфер, сам бы я его не знаю как придумывал. А вот стем что паскалеобразно написано не въехал.
И вообще всем кто принимал участие спасибо.
Начну теперь ШИМ бороть.
|
|
|
|
01.03.2011, 03:47
|
|
Прописка
Регистрация: 26.01.2009
Сообщений: 249
Сказал спасибо: 23
Сказали Спасибо 102 раз(а) в 61 сообщении(ях)
|
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.
|
|
|
|
01.03.2011, 08:33
|
|
Прописка
Регистрация: 16.07.2010
Сообщений: 150
Сказал спасибо: 19
Сказали Спасибо 29 раз(а) в 23 сообщении(ях)
|
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.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:14.
|
|