Делимся опытом Наступив на грабли - сообщи другим! Обмен опытом разработки и ремонта электронных устройств. |
22.02.2011, 18:21
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Измерение и фильтрация температуры
Подключил к ПК через адаптер датчик DS1821. Показания температуры сохранял в текстовый файл, и вот что получилось, когда появились помехи:
Код:
|
18:28:55 -21
18:28:57 00
18:28:59 00
18:29:01 00
18:29:03 00
18:29:04 -22
18:29:06 -22
18:29:08 -22
18:29:10 00
18:29:12 00
18:29:14 -22
18:29:16 -21
18:29:18 00
18:29:20 00
18:29:21 -22
18:29:23 00
18:29:25 -22
18:29:27 -21
18:29:29 -21
18:29:31 -21
18:29:33 -21
18:29:34 -21
18:29:36 00
18:29:38 00
18:29:40 -01
18:29:42 00
18:29:44 00
18:29:46 00
18:29:48 00
18:29:49 -22
18:29:51 -22
18:29:53 00
18:29:55 00
18:29:57 00
18:29:59 -22
18:30:01 -22
18:30:03 -22
18:30:04 -22
18:30:06 -22
18:30:08 -22
18:30:10 -22
18:30:12 -22
18:30:14 -22
18:30:16 -22
18:30:18 -21
18:30:20 00
18:30:21 -22
18:30:23 -01
18:30:25 00
18:30:27 00
18:30:29 -22
18:30:31 -22
18:30:33 -22
18:30:35 -65
18:30:36 -22
18:30:38 -22
18:30:40 -21
18:30:42 -21
18:30:44 -21
18:30:46 -21
18:30:48 -21
18:30:50 -21
18:30:51 -21
18:30:53 -21
18:30:55 -21 |
В общем-то видно, что средняя температура = -21,5 теперь только надо отфильтровать ошибки.
Написал алгоритм для фильтрации 1 ошибки (при 2 и более ошибках подряд не работает).
Код:
|
For i3:=nacalo to konec do
begin
If (abs(MassivTemperatur[i3-1]-MassivTemperatur[i3]))‹=2 then
begin
OsibkaTemperatur:=MassivTemperatur[i3];
SummaTemperatur:=SummaTemperatur+MassivTemperatur[i3];
end else SummaTemperatur:=SummaTemperatur+OsibkaTemperatur;
end;
Temperatura:=SummaTemperatur/(konec-nacalo+1); |
Может у кого будут оригинальные идеи по этому поводу?
Последний раз редактировалось Slava-martyn; 22.02.2011 в 18:23.
|
|
|
|
22.02.2011, 23:06
|
|
Вид на жительство
Регистрация: 13.05.2005
Сообщений: 386
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
|
Re: Измерение и фильтрация температуры
ИМХО, выяснить откуда идет ошибка, а не лечить заплаткой.
Что за адаптер? питание датчика прямое или паразитное?
кстати, частый опрос 1820 и 1821 приводит к их внутреннему разогреву. Я для себя нашел - оптимально 1 раз в 10секунд.
__________________
В технике главное - кувалда. (с)
|
|
|
|
22.02.2011, 23:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Измерение и фильтрация температуры
Этот алгоритм не имеет возможности определить, какое значение верное. Он может только сравнивать с первым значением, и если следующее сильно отличается, то его отбраковывает. С таким же точно успехом могут казаться верными значения 00 и -01, а -20 отбраковываться.
Поэтому надо принимать меры для устранения влияния помех. Или хотя бы значительного их ослабления, чтобы ложные результаты были намного реже. Или взять другой термодатчик. Например, аналоговый. Его легко можно отфильтровать перед АЦП.
|
|
|
|
23.02.2011, 00:14
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Измерение и фильтрация температуры
Обычно ошибки приходят крайне редко (за сутки не более 5 при измерении 1 раз в 2 секунды) - мой алгоритм с этими ошибками справляется. А внешние помехи - сварка, молния, атомный взрыв, да мало ли что может быть... В данном случае импульсный блок питания от сканера расположен был рядом с адаптером.
1 раз в 10 сек. учту на будущее. Сейчас мысль появилась ввести ещё 1 переменную - тогда можно будет гораздо больше ложных значений отфильтровывать.
|
|
|
|
23.02.2011, 11:05
|
|
Вид на жительство
Регистрация: 13.05.2005
Сообщений: 386
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
|
Re: Измерение и фильтрация температуры
не, я все таки не понимаю, откуда берутся ошибки? Причем строго 0 или 1. Может у вас 1821 чем-то занят и не отвечает в эти моменты. Хорошо бы осциллом посмотреть шину 1wire. А может адаптер через себя не все пропускает... А вам именно термостат 1821 нужен?
У меня лично ds18b20 на 10 метрах провода при прямом питании 1раз в 10секунд измеряет температуру в теплице, отдает атмеге16 9 байт, в том числе и CRC, и у меня даже мысли не возникало на этапе написания прошивки, что нужно что-то отсеивать.
ИЩИТЕ ПРИЧИНУ ОШИБКИ, а клейте заплатки на не известно что.
__________________
В технике главное - кувалда. (с)
|
|
|
|
23.02.2011, 11:20
|
|
Гражданин KAZUS.RU
Регистрация: 09.12.2007
Сообщений: 536
Сказал спасибо: 57
Сказали Спасибо 53 раз(а) в 45 сообщении(ях)
|
Re: Измерение и фильтрация температуры
действительно CRC не должно давать проскакивать неверным данным
проверка на код ошибки осуществляется в программе?
если в шине помехи или просто датчик не ответил по какой то причине, то кроме числового значения температуы возвращается код ошибки
|
|
|
|
23.02.2011, 13:09
|
|
Вид на жительство
Регистрация: 07.09.2007
Адрес: Дерёвня Ишимбай
Сообщений: 419
Сказал спасибо: 65
Сказали Спасибо 136 раз(а) в 87 сообщении(ях)
|
Re: Измерение и фильтрация температуры
Вот скриншот и код, а есть ли там контроль CRC я не знаю (пока не разобрался).
Вложения:
|
1.rar (416.3 Кб, 75 просмотров) |
|
|
|
|
23.02.2011, 16:47
|
|
Вид на жительство
Регистрация: 13.05.2005
Сообщений: 386
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
|
Re: Измерение и фильтрация температуры
igel_izh2126, у 1821 нет пакета данных. Там спрашивается только одно число. ...что и плохо.
Slava-martyn, да вы что... я в этом "ни бельмеса". повторяю, надо смотреть, что на шине реально творится.
__________________
В технике главное - кувалда. (с)
Последний раз редактировалось chapa; 23.02.2011 в 16:50.
|
|
|
|
23.02.2011, 19:48
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Измерение и фильтрация температуры
Этот датчик не должен давать таких ошибок, когда я писал под него прогу на VB использую стандартную библиотеку производителя, то пришлось фильтровать только два значения температуры, это 127 градусов Цельсия и 85.
Причем фильтр просто не записывал в базу эти показания, но по хорошему нужно смотреть предыдущее значение и отсекать резкие скачки температуры до таких значений и не писать их в БД.
Вообщем не лечите следствие, лечите причину - адаптер и линию связи.
Вот мои опыты с датчиком : http://rn3aig.ru/phpBB3/viewtopic.php?f=3&t=5
|
|
|
Сказали "Спасибо" TechMike
|
|
|
24.02.2011, 00:42
|
|
Вид на жительство
Регистрация: 13.05.2005
Сообщений: 386
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
|
Re: Измерение и фильтрация температуры
Сообщение от TechMike
|
Вообщем не лечите следствие, лечите причину - адаптер и линию связи.
|
Так и я про то же.
__________________
В технике главное - кувалда. (с)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:41.
|
|