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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Алгоритм отображения температуры, С дискретностью 0.1С
Vitek885
сообщение Jul 18 2009, 16:34
Сообщение #16





Группа: Участник
Сообщений: 11
Регистрация: 19-05-09
Пользователь №: 49 265



Цитата(Leonmezon @ Jul 18 2009, 19:05) *
Неверно посчитали, получаться 1 разряд АЦП равен 0,15 град. С .

Это если бы характеристика датчика была бы линейной, а она не линейная
см. вложение в 11 посте
Цитата(Leonmezon @ Jul 18 2009, 19:05) *
или используя встроенное АЦП алгоритмом повысить разрядность с 10 бит до 12 бит (необходим запас).

можно подробнее про этот алгоритм

Сообщение отредактировал Vitek885 - Jul 18 2009, 16:34
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 18 2009, 19:06
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Vitek885 @ Jul 18 2009, 17:45) *
...Еще раз извеняюсь, но я начинающий, светодиодом помигал, напрядение встоенным а мегу АЦП померял хочу двигатся дальше

Все делаете правильно, и постановка задачи стандартная - сделать вид, что прибор работает хорошо.
Одно непонятно - почему точность всего лишь 1 градус. Даже с фиговым датчиком и встроенным АЦП должно получиться лучше. Огласите схему подключения, диапазон температуры и прочее. Что-то тут не так.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Vitek885
сообщение Jul 19 2009, 03:44
Сообщение #18





Группа: Участник
Сообщений: 11
Регистрация: 19-05-09
Пользователь №: 49 265



Цитата(Dog Pawlowa @ Jul 18 2009, 23:06) *
Все делаете правильно, и постановка задачи стандартная - сделать вид, что прибор работает хорошо.
Одно непонятно - почему точность всего лишь 1 градус. Даже с фиговым датчиком и встроенным АЦП должно получиться лучше. Огласите схему подключения, диапазон температуры и прочее. Что-то тут не так.

Я рассуждал так
Сопротивление латчика при -50С 329200 Ом, при +110С 757Ом, надо работать во всем диапазоне температур.
Весь диапазон измерений 329200-757=328443 Ом
10 разрядный АЦП может замерить 1024 значения, значит на значение АЦП приходится 328443/1024=320,75 Ом

Значит изменение температуры с -45 до -50 включает в себя (329200-247500)/320,75=254 измерения АЦП т.е. дискретность даже выше чем 0,1 градус
Зато изменение температуры с +105 по +110 вызовет изменение сопротивления датчика на 857-757= 100 Ом, а так как "чувствительность" АЦП - 320 ом, то здесь десятыми долями градуса даже и не пахнет
Если я ошибся просьба указать где
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 19 2009, 17:51
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Vitek885 @ Jul 19 2009, 06:44) *
Я рассуждал так

Вы не все рассказали. Вы используете делитель или генератор тока?
Если делитель, то рассуждения не совсем корректны, потому что датчик включен последовательно с резистором, который привносит компенсирующую нелинейность. Т.е. "чувствительность АЦП" по сопротивлению исходно непостоянна.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
kolisnichenko_r
сообщение Jul 20 2009, 11:51
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 435
Регистрация: 12-09-07
Пользователь №: 30 482



Можно применить усилитель с управляемым коэфициентом усиления. На отрицательных температурах, один коэф. усиления, на положительных - другой.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jul 20 2009, 12:23
Сообщение #21


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



(кросс-пост в http://www.microchip.su/)

При измерении температуры, поскольку она меняется медленно, возможны всякие красивые трюки и фокусы.

Во-первых, можно легко и просто увеличить эквивалентную разрядность АЦП, тем самым увеличив разрешение. В "общем виде" для этого ко входному сигналу надо подмешать ма-аленькую долю сигнала от некого ЦАП-чика, а потом проделать серию A/D преобразований, последовательно увеличивая сигнал на выходе ЦАП-а и суммируя результат. Например, если АЦП 8-битный, и в наличии есть 3-битный ЦАП, то разрядность АЦП можно увеличить до 11 бит, если сигнал с выхода ЦАПа подмешать на вход АЦП с такой пропорции, чтобы 1 шаг ЦАП-а соответствовал 1/8 от одного шага АЦП.

В случае с NTC этот фокус производится при помощи 3 резисторов с дискретных выходов мелкоконтроллера на вход АЦП. Вернее, при помощи 5 высокоомных резисторов одного номинала: старший разряд - два резистора в параллель, средний разряд - один резистор, младший разряд - два резистора последовательно. Конечно, величина пропорции подмешивания в каждый момент отчасти зависит от величины сопротивления NTC, т.е. от температуры. Поэтому разогнать до 11 бит во всем диапазоне не получится, но примерно 10-битное разрешение вытягивается без проблем. У меня такой "разогнанный" термометр чувствувал, когда я подносил к термистору руку на расстояние ~20 см.

Во-вторых, после того, как разрядность АЦП разогнана до такого уровня, что младшие разряды становятся просто шумом (это важно, чтобы они шумели, иначе не выйдет), дальнейшее увеличение разрядности практически бесплатно получается за счет использования предельно упрощенного варианта фильтра Калмана, т.е. рекурсивного фильтра, который при смешном минимуме задействованных ресурсов обеспечит такой же результат, как метод наименьших квадратов.

Если "на пальцах", то сделать можно так (как вариант).
- Измеряете температуру "разогнанным" (шумным) АЦП, получившееся значение обозначим X (что есть сумма 8 последовательных измерений при пошаговом нарастании кода на выходе 3-битного псевдо-ЦАПа)
- Измеренному значению X верите не безоговорочно, а чуть-чуть, скажем всего на 1/16. То есть, текущее значение температуры вычисляете так:

T = T - T/16 + X

Понятно, что самое первое значение 11-битной температуры загоняете в 16-битную переменную напрямую:

T = X*16, или, если на си, то T = (X << 4);

А все последующие уже вычисляете по "недоверчивой" формуле

T = T - (T >> 4) + X;

В сумме у вас получится примерно 14-битное разрешение на 8-битном АЦП. Вуаля!
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 20 2009, 18:42
Сообщение #22


Гуру
******

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



Цитата(=AK= @ Jul 20 2009, 18:23) *
(кросс-пост в http://www.microchip.su/)
Это надо уметь написать так, чтобы не было ничего понятно, но зато создавалась иллюзия простоты реализации. sad.gif
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jul 20 2009, 22:36
Сообщение #23


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(rezident @ Jul 21 2009, 04:12) *
Это надо уметь написать так, чтобы не было ничего понятно, но зато создавалась иллюзия простоты реализации.


1. Схема подключения датчика понятна? Если не сильно углубляться в нюансы: NTC термистор одним концом подключен к питанию, вторым - к эталонному резистору Rref. Эталонный резистор вторым концом подключен к земле. АЦП в качестве опорного напряжения использует питание. Точка соединения термистора и эталонного резистора заведена на вход АЦП, но не напрямую, а через резистор Rs величиной в несколько кОм. Этот дополнительный резистор не обязателен, но он полезен для того, чтобы сгладить вариации сопротивления источника сигнала. Зачем это нужно - см. п.2.

2. Устройство псевдо-ЦАПа понятно? 3 разряда любого порта ввода-вывода микроконтроллера настроены на вывод. Обозначим их DAC0 (младший бит ЦАПа), DAC1 и DAC2 (старший бит).
- Между DAC0 и входом АЦП стоит цепочка из двух последовательно включенных высокоомных резисторов номинала Rx, в сумме 2*Rx.
- Между DAC1 и входом АЦП включен один резистор номинала Rx.
- Между DAC2 и входом АЦП включены два резистора номинала Rx в параллель, в сумме Rx/2.
Номинал Rx соотносится с Rref и Rs таким образом, чтобы при изменении сигнала на выходе DAC0 из 0 в 1 (или из 1 в 0) сигнал на входе АЦП менялся чуть больше, чем на 1/8 от его дискретности. Например, при питании в 5 В и разрядности АЦП 10 бит дискретность АЦП составляет примерно 4.9 мВ. Значит, резисторы надо выбрать так, чтобы при изменении DAC0 сигнал на входе АЦП сдвинyлся примерно на 0.62 мВ.

3. Как получить результат от "разогнанного АЦП" - понятно? По шагам:
3.1. Устанавливаем DAC2=0, DAC1=0, DAC0=0. Делаем АЦП преобразование, результат заносим в 16-битную переменную Х.
3.2. Устанавливаем DAC2=0, DAC1=0, DAC0=1. Делаем АЦП преобразование, результат прибавляем к 16-битной переменной Х.
3.3. Устанавливаем DAC2=0, DAC1=1, DAC0=0. Делаем АЦП преобразование, результат прибавляем к 16-битной переменной Х.
...
3.8. Устанавливаем DAC2=1, DAC1=1, DAC0=1. Делаем АЦП преобразование, результат прибавляем к 16-битной переменной Х.
Если АЦП 10-битный, в переменной Х получился 13-битный результат.

4. Как сделать псевдо-фильтр Калмана (или максимально упрощенный tracking g-h filter, если угодно) - понятно?
4.1. При инициализации делаем первое АЦП-преобразование (как в п.3), умножаем результат X на 8 (т.е. сдвигаем 13-битный результат X на 3 разряда влево (X << 3)) и запоминаем в 16-битной переменной Т. То есть, "вес" переменной Т в восемь раз больше, чем "вес" одного измерения X.
4.2. Все последующие результаты X, полученные от АЦП п.3, добавляем к Т без сдвига, предварительно вычтя из T одну восьмую. Одна восьмaя получается, если T сдвинуть вправо на 3 разряда. На cи это выглядит так:

T = T - (T >> 3) + X;

Естественно, чтобы успевать отследить колебания температуры, измерения надо теперь делать в несколько раз чаще.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 21 2009, 18:35
Сообщение #24


Гуру
******

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



=AK=, вы меня не поняли. sad.gif Я имел в виду, что описание вашего алгоритма нужно было бы предварить методологической частью. Т.е. описанием "откуда что берется", "что от чего зависит" и "почему делаем именно так, как делаем". Топикстартер в начале темы просил функцию визуализации промежуточных (дробных) "виртуальных" значений измеряемой величины. А сейчас речь пошла о математических приемах при реализации увеличения разрядности АЦП для получения этих недостающих дробных значений. Но вы описываете алгоритм без пояснения критериев его применимости (частота оцифровки/оверсэмплинга, частота генерируемого "шума", время измерения, период фильтрации, время готовности результата и т.п.). Вот это и было сутью моего замечания к вашему посту #21.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jul 22 2009, 01:59
Сообщение #25


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(rezident @ Jul 22 2009, 04:05) *
вы описываете алгоритм без пояснения критериев его применимости (частота оцифровки/оверсэмплинга, частота генерируемого "шума", время измерения, период фильтрации, время готовности результата и т.п.).

Эти вопросы были в достаточной, на мой взгляд, степени были освещены в данной теме ранее, в том числе вами. Что касается следящих фильтров, упомянутых в п.4, то я дал ссылку на книгу (она, кстати, есть на ftp), кому интересно - прочтет.

После ваших разъяснений мне стало непонятным: что вы имели ввиду, говоря об "иллюзии простоты реализации"? Это стало звучать так, будто вы знаете еще более простые, но эффективные методы. Интересно было бы ознакомиться, если это не секрет.
Go to the top of the page
 
+Quote Post
Troll
сообщение Jul 22 2009, 10:26
Сообщение #26


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

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Цитата(Vitek885 @ Jul 19 2009, 10:44) *
10 разрядный АЦП может замерить 1024 значения, значит на значение АЦП приходится 328443/1024=320,75 Ом
Обычно это называется цена/значение единицы младшего разряда.

Цитата(Vitek885 @ Jul 19 2009, 10:44) *
Значит изменение температуры с -45 до -50
Зато изменение температуры с +105 по +110 вызовет изменение сопротивления датчика на 857-757= 100 Ом,
В обоих случаях разница dC = 5. И разница в Омах, тоже должна быть одинаковой. У Вас значения температуры это числа со знаком.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post

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

 


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


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