реклама на сайте
подробности

 
 
7 страниц V  « < 3 4 5 6 7 >  
Reply to this topicStart new topic
> терморегулятор, помогите
domowoj
сообщение Aug 3 2008, 17:43
Сообщение #61


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



ADC=1023*Vin/Vref

так будет понятней.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Aug 3 2008, 19:56
Сообщение #62


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(domowoj @ Aug 3 2008, 21:17) *
А ЖК от чего?


не помню.

Цитата(rezident @ Aug 3 2008, 21:34) *
Вас в школе пропорцию составлять учили? Когда Vin=Vref получаем максимальное число которое
ADC=Vin/Vref*1023


с какого перепуга в ДАТАШИТЕ пишут 1024???
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 3 2008, 20:38
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Lost_Viking @ Aug 4 2008, 01:56) *
с какого перепуга в ДАТАШИТЕ пишут 1024???

Господи, как же тяжело с недоученными школьниками! sad.gif
В микроконтроллере AVR 10-ти разрядный АЦП. С помощью 10-и двоичных разрядов можно представить 1024 числа, но максимальное значение такого 10-и разрядного числа составляет 0b1111111111=0x03FF=1023. Если мне не верите, воспользуйтесь виндовым калькулятором для перевода из одной системы счисления в другую wink.gif Также не нужно забывать о том, что нуль это тоже число! 1023+1=1024 числа. Так понятно?
Ну про прямую линию, ее графическое изображение и аналитическое представление (в виде формулы y=a*x+b ) вам надеюсь все-же объяснить не нужно?
АЦП квантует входной сигнал по линейному закону (по крайней мере разработчики АЦП к этому очень стремятся smile.gif )
_y_ = ________________ a _______________ *_x_ + __b__
ADC=(ADC(max)-ADC(min))/(Uref(max)-Uref(min))*Uin+ADC(min)

поскольку значения ADC(min)=0 и Uref(min)=0V, а ADC(max)=1023, то формула приводится к виду
ADC=1023/Uref(max)*Uin=1023*Uin/Uref(max)
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Aug 3 2008, 22:34
Сообщение #64


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



вопрос остается открытым: почему в Даташите в этой формуле стоит 1024? Я-то прекрасно понимаю, что нуль - это тоже число, но мне непонятно почему в ДАТАШИТЕ для рассчета значения АЦП используют 1024. Ведь при этом совсем другое значение. Не веришь - сам посмотри, только там есть небольшая поправка к этому.
Go to the top of the page
 
+Quote Post
domowoj
сообщение Aug 4 2008, 00:13
Сообщение #65


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Если в даташите написано - верь,
но тогда диапазон входных будет от 0 до (Uref-Uref/1024)


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Dopler
сообщение Aug 4 2008, 08:13
Сообщение #66


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата
where VIN is the voltage on the selected input pin and VREF the selected voltage reference (see
Table 22-2 on page 255 and Table 22-3 on page 256). 0x000 represents analog ground, and
0x3FF represents the selected reference voltage minus one LSB.


Вот что написано в документации, а переводится это так - значение 0 говорит о том, что входное напряжение равно земле, значение 0x3FF говорит о том, что входное напряжение равно опорному минус напряжение одного младшего разряда (а не опорному!), т.е. верна формула из документации и в эксель надо писать 1024.
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Aug 4 2008, 14:39
Сообщение #67


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(Dopler @ Aug 4 2008, 12:13) *
Вот что написано в документации, а переводится это так - значение 0 говорит о том, что входное напряжение равно земле, значение 0x3FF говорит о том, что входное напряжение равно опорному минус напряжение одного младшего разряда (а не опорному!), т.е. верна формула из документации и в эксель надо писать 1024.


Короче, почти понятно.

Нашел в инете понятный учебник по цифорвым фильтрам, в отличие от того, который мне тут предлагали.
Вот ссылка. Там найдете "Уолт Кестер - Цифровые Фильтры". Кроме этого там много чего есть!

Попробовал сделать осреднение результата АЦП. Примерно так:
  • АЦП в режиме постоянного преобразования (free run)
  • По совпадению таймера с OCR0 вызывается прерывание, при помощи которого реализована дин.индикация
  • В этом же обработчике прерывания:
Код
1 for (i=1;i<=9;i++)
2     {current_temp=ADCL;
3     current_temp+=((int)ADCH << 8);
4     summ+=current_temp;}
5 current_temp=summ/9;
6 summ=0;
/*дальше идет разбиение числа по десятичным разрядам*/


Т.е. просто суммирую девять преобразований, и делю на их число. Т.е. нахожу среднее значение.
В итоге младший разряд на индикаторе по-меньше стал дрыгаться. Noice Reduction (с прерыванием) не особо помог. Сдается мне, что у меня что-то работает как антена smile.gif. Сделал отдельный провод со входа АЦП, что бы вольтметром мерить напряжение на нем, и при касании этого провода рукой - циферки начинают бегать вплоть до второго разряда.

Или все-таки в "коленной" разводке? Все сделано на макетке, спаяно медным лакированным проводом 0.2мм. Земля приходит почти везде в одну точку. Вот только аналоговая часть ненмого крива разведена. Вобщем, буду травить плату, посмотрю что получится.

Как я понял рекомендации такие: разявязать аналоговую часть от цифровой конденсаторами, все землянные выводы в одну точку, конденсаторы по-ближе к микросхеме, на вход АЦП RC ФНЧ с частотой среза 10..50Гц. Так?

Завтра попробую создать промежутки между включением анодов, что бы в эти промежутки впихнуть измерение сигнала.
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 4 2008, 16:01
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Lost_Viking @ Aug 4 2008, 04:34) *
вопрос остается открытым: почему в Даташите в этой формуле стоит 1024? Я-то прекрасно понимаю, что нуль - это тоже число, но мне непонятно почему в ДАТАШИТЕ для рассчета значения АЦП используют 1024. Ведь при этом совсем другое значение. Не веришь - сам посмотри, только там есть небольшая поправка к этому.
Ну раз в даташите написано, то спорить не буду. laughing.gif Тем более, что там в самом начале раздела описания ADC указано
Цитата
The ADC converts an analog input voltage to a 10-bit digital value through successive approxi-
mation. The minimum value represents GND and the maximum value represents the voltage on
the AREF pin minus 1 LSB.

Т.е. входной диапазон напряжений для ADC: Uin(min)=0V, Uin(max)=Uref-Uref/1024 и на вход АЦП напряжение равное AREF подавать нельзя. Точнее конечно можно, но не имеет смысла.
Тогда вполне логично получается. Подставляем в вышеуказанноую мной формулу
ADC=(ADC(max)-ADC(min))/(Uref(max)-Uref(min))*Uin+ADC(min)
значения ADC(max)=1023, ADC(min)=0, Uref(min)=0V, Uref(max)=Uref-Uref/1024=(1023*Uref)/1024 и получаем
ADC=(1023-0)/((1023*Uref)/1024)-0V)*Uin+0, а после преобразований
ADC=1024/Uref*Uin.
Выходит формула в даташите верная. Просто таковы особенности этого АЦП в AVR, о которых я не знал.
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Aug 4 2008, 18:56
Сообщение #69


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(xemul @ Aug 1 2008, 01:29) *
Попробуйте смоделировать (хоть в ёкселе) реакцию фильтра на единичный скачок (x=0 при i<0, x=1 при i>=0), поиграйтесь с A, и все станет просто и понятно.

07.gif a14.gif и уважуха!
Все, теперь я знаю "Простое скользящее среднее", "Взвешенное скользящее среднее" и "Экспоненциальное скользящее среднее".

Возникло сразу несколько вопросов:

(WMA) - как правильно рассчитать коэффициенты? Я пока беру 4 отсчета, соответственно ставлю 1/4.
(EMA) - было бы интересно привязать коэфф. "А" к помехам, т.е. если вдруг начинается частое мельтишение младших разрядов, то уменьшить А.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 4 2008, 20:57
Сообщение #70


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Lost_Viking @ Aug 4 2008, 18:56) *
Все, теперь я знаю "Простое скользящее среднее", "Взвешенное скользящее среднее" и "Экспоненциальное скользящее среднее".

Бугагага:
// SMA - Simple Moving Average
// EMA - Exponential Moving Average
// WMA - Weighted Moving Average
// DEMA - Double Exponential Moving Average
// TEMA - Triple Exponential Moving Average
// TRIMA - Triangular Moving Average
// KAMA - Kaufman Adaptive Moving Average
// MAMA - MESA Adaptive Moving Average
// T3 - Triple Exponential Moving Average
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Aug 5 2008, 07:05
Сообщение #71


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(Огурцов @ Aug 5 2008, 00:57) *
Бугагага:
// SMA - Simple Moving Average
// EMA - Exponential Moving Average
// WMA - Weighted Moving Average
// DEMA - Double Exponential Moving Average
// TEMA - Triple Exponential Moving Average
// TRIMA - Triangular Moving Average
// KAMA - Kaufman Adaptive Moving Average
// MAMA - MESA Adaptive Moving Average
// T3 - Triple Exponential Moving Average


пилять! 07.gif
Вопрос такой: при использовании EMA метода, коэфф-т A должен быть вещественным. Т.е. в итоге функция получается вещественной. Но у меня дальше идет оператор "остаток от деления". Как мне согласовать вщественный тип с получением остатка от деления? Простое приведение типов не катит - нет округления. Т.е. мне нужно вещественное число округлить, а потом это число привести в целый тип. Как это реализовать на Си?
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Aug 5 2008, 08:16
Сообщение #72


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Так, все сделал. Сглаживает здорово!
Огурцов, можешь дать ссылки на формулы для DEMA...MAMA?
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 5 2008, 09:04
Сообщение #73



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Lost_Viking @ Aug 5 2008, 11:05) *
Вопрос такой: при использовании EMA метода, коэфф-т A должен быть вещественным. Т.е. в итоге функция получается вещественной. Но у меня дальше идет оператор "остаток от деления". Как мне согласовать вщественный тип с получением остатка от деления? Простое приведение типов не катит - нет округления. Т.е. мне нужно вещественное число округлить, а потом это число привести в целый тип. Как это реализовать на Си?

Помните, что такое подмножество рациональных чисел? Правильно, это подмножество чисел, которые могут быть представлены в виде отношения (ratio = дробь, отношение) двух целых чисел. И примерно в то же время Вам должны были сообщить, что любое вещественное число может быть с любой точностью приближено рациональным (хотя нет - года на 3-4 позже). Дальше сами догадаетесь?
Это в качестве посказки:
Цитата(xemul @ Jul 31 2008, 21:17) *
Простейший НЧ фильтр 1-го порядка: Yi = a * Yi-1 + b * Xi, a+b = 1
Т.е.
Код
Y = a * Y + b * X;

Для целочисленной арифметики удобно делать a=c/2^N, b=(2^N-c)/2^N.
Чтобы не набегала погрешность при обработке, разрядность Y должна быть не менее (разрядность X) + N.

Y = a * Y + b * X; // это фильтр на С; X - новое входное значение, Y - справа предыдущее выходное значение, слева - новое.
Цитата(xemul @ Jul 31 2008, 22:10) *
Код
u16_t Yavg;

for(;;)
{
   Yavg -= Yavg/256;
   Yavg += ADCH;
}

А это целочисленная реализация приведенного выше фильтра с коэффиентами a=255/256, b=1/256.
Ну и уж совсем на всякий случай: деление целого числа на 2^N компилятор заменит на N сдвигов вправо. 256 = 2^8.

ЗЫЖ я к своему детенышу (которому, думаю, примерно столько же годочков, сколько и Вам) за серьезной беседой обращаюсь на "Вы".
ЗЗЫЖ радует, что в Ваших постах не так уж много проблем с русским языком.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Aug 5 2008, 14:41
Сообщение #74


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Lost_Viking @ Aug 5 2008, 08:16) *
Огурцов, можешь дать ссылки на формулы для DEMA...MAMA?

Держи http://ta-lib.org/hdr_dw.html Надеюсь, дальше сам найдешь.
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Aug 5 2008, 14:50
Сообщение #75


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(xemul @ Aug 5 2008, 13:04) *
ЗЫЖ я к своему детенышу (которому, думаю, примерно столько же годочков, сколько и Вам) за серьезной беседой обращаюсь на "Вы".
ЗЗЫЖ радует, что в Ваших постах не так уж много проблем с русским языком.


Ну, извинните, я думал, что тут люди простые. Лично я не люблю когда меня на "Вы". Мне проще на "Ты". Сразо как-то "по-свойски". Если чем-то задел, то прошу прощения.

Кстати, я себе EMA сделал. смотрю на девайс и радуюсь =) Позже поэксперементирую с другими фильтрами.

Ко всем: EMA - это КИХ или БИХ?
Go to the top of the page
 
+Quote Post

7 страниц V  « < 3 4 5 6 7 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 00:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.0142 секунд с 7
ELECTRONIX ©2004-2016