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

 
 
> Фильтр для выделения прямоугольных импульсов
mempfis_
сообщение May 14 2012, 08:24
Сообщение #1


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

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



Всем добрый день.
При разработке нового прибора возникли проблемы с подсчётом прямоугольных импульсов на входе процессор.
Стоит задача подсчитать кол-во прямоугольных импульсов (предположительно меандр) с периодом от 15-20 мС до 10 С. Входные импульсы ограниченные амплитудой 3В через диод подаются на параллельную RC-цепочку 100k 0,1uF. RC-цепочка одним входом подключена напрямую к ножке процессора (LPC17) а вторым на землю. На пине процессора отключены pullup/pulldown.
В лабораторных условиях подсчёт импульсов происходит точно. При установке аппарата на транспортное средство появляется значительный пересчёт.
Импульсы считаются программно - идёт выборка состояния пина раз в 2 мС, выполняется медианная фильтрация настроенная на фиксацию импульсов от 10 мС (т.е. буффер на 9 отсчётов).
Источник проблемы пока не выяснен, поэтому стоит задача программно обойти проблему. Как я вижу медианной фильтрации недостаточно (или она неправильно настроена). Поэтому вопрос к тем кто сталкивался с подобной задачей - есть ли какие-либо программные фильтры для подобных задача? Поделитесь плиз ссылкой или идеей. Заранее благодарен за любую инфу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=AK=
сообщение May 14 2012, 09:26
Сообщение #2


pontificator
******

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



Цитата(mempfis_ @ May 14 2012, 17:54) *
Входные импульсы ограниченные амплитудой 3В через диод подаются на параллельную RC-цепочку 100k 0,1uF. RC-цепочка одним входом подключена напрямую к ножке процессора (LPC17) а вторым на землю.

То есть, у вас пиковый детектор на входе стоит. С постоянной времени разряда 100к*100n=10 мс и задним фронтом 2.2*R*C = 22мс. При этом время заряда конденсатора неизвестно, оно определяется выходным сопротивлением источника сигнала. Непонятно, почему вы используете пиковый детектор, а не обычный RC фильтр. Я бы вместо диода поставил резистор 33к, а резистор на землю увеличил бы до 1М.

Цитата(mempfis_ @ May 14 2012, 17:54) *
При установке аппарата на транспортное средство появляется значительный пересчёт.

Надо полагать, помехи. А пиковый детектор редкие помехи не фильтрует, он их регистрирует. sm.gif

Цитата(mempfis_ @ May 14 2012, 17:54) *
Импульсы считаются программно - идёт выборка состояния пина раз в 2 мС, выполняется медианная фильтрация настроенная на фиксацию импульсов от 10 мС (т.е. буффер на 9 отсчётов).

Если 9 отсчетов по 2мс, это 18мс получается, а не 10.

Медианный фильтр - лишняя сущность. Используйте простой "антидребезговый" алгоритм: берите отсчеты раз в миллисекунду и вдвигайте их в однобайтный сдвиговый регистр; если в сдвиговом регистре все восемь бит равны 0 - устанавливайте выходную переменную в ноль, если все восемь бит равны 1 - устанавливайте ее в единицу.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение May 14 2012, 10:05
Сообщение #3


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

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



Цитата(=AK= @ May 14 2012, 12:26) *
То есть, у вас пиковый детектор на входе стоит. С постоянной времени разряда 100к*100n=10 мс и задним фронтом 2.2*R*C = 22мс.


Надо полагать, помехи. А пиковый детектор редкие помехи не фильтрует, он их регистрирует. sm.gif

Если 9 отсчетов по 2мс, это 18мс получается, а не 10.


Схему составлял не я - возможно это есть пиковый детектор реагирующий на помехи. Я только программирую плату.
Вот схема. Резистор сверху 4к7 подключён к +3В, снизу 100к. Конденсатор 0,1uF. диодная сборка BTA54. Значёк сапрессора не нашёл - заменил на закарлючку.
Эта схема позволяет подавать на вход до 12В. Реагирует на подачу 0.
Медианный фильтр просимулирован и работает корректно - сохраняет в буффер на место самого старого отсчёта новый, сортирует по возрастанию и возвращает 9/2=4 й элемент буффера - поэтому 5*2 = 10мС.

Если ничего нельзя поменять в схеме то если я увеличу период фильтра до 20-30 мС возможно ли улучшение работы?
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 14 2012, 11:09
Сообщение #4


pontificator
******

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



Цитата(mempfis_ @ May 14 2012, 19:35) *
Вот схема. Резистор сверху 4к7 подключён к +3В, снизу 100к. Конденсатор 0,1uF. диодная сборка BTA54. Значёк сапрессора не нашёл - заменил на закарлючку.

Слава богу, есть резистор 4.7к, значит, короткая помеха все-таки будет отфильтрована. Хотя фильтр все-таки нелинейный.

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

Цитата(mempfis_ @ May 14 2012, 19:35) *
Медианный фильтр просимулирован и работает корректно - сохраняет в буффер на место самого старого отсчёта новый, сортирует по возрастанию и возвращает 9/2=4 й элемент буффера - поэтому 5*2 = 10мС.

Вы опять говорите о медианном фильтре. Вы что, сигнал при помощи АЦП получаете, что ли? Вы, наверное, в книгу рекордов Гиннеса хотели попасть?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение May 14 2012, 15:43
Сообщение #5


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

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



Цитата(=AK= @ May 14 2012, 14:09) *
Интересно, куда на плате подключен земляной вывод супрессора. Если разводка земли некачественная, то из-за супрессора по земле могут бегать серьезные помехи.

Вы опять говорите о медианном фильтре. Вы что, сигнал при помощи АЦП получаете, что ли? Вы, наверное, в книгу рекордов Гиннеса хотели попасть?


Про разводку платы и её качество ничего сказать не могу. Думаю что разведено нормально - схемотехник опытный.
Как влияет сапрессор на вход тоже ничего сказать не могу.
Моё мнение что проблема в параметрах входного фильтра - кажется завышена тау RC-цепочки и слишком затянут задний фронт.


По поводу медианной фильтрации.
Сигнал получаю опросом входа - т.е. 0 или 1. В программе используется процедура медианной фильтрации показаний АЦП.
Применил её для фильтрации цифровых входов. Поначалу думал просто фиксировать состояния пинов в массив и если весь массив конкретного пина == 1 то вход в 1, и наоборот - если весь массив == 0 то вход в 0. Но тогда пришлось бы запоминать какое текущее состояние пина чтобы знать что мы ожидаем - заполнение нулями или еденицей. С медианным фильтром всё проще. Сохраняю текущее значение всех пинов в массив на место самого старого. Обнуляю переменную текущего состояния пинов, сколько пинов столько раз выполняю сортировку массива по возрастанию для каждого пина (массив копируется в промежуточный буффер с наложенной маской пина на каждый элемент, потом сортируется и возвращается средний элемент промежуточного буффера который содержит отфильтрованное состояние пина). Делаю OR переменной текущего состояния пинов с результатом фильтрации. И всё.
Комуто покажется что громоздко - на самом деле очень просто и удобно. А главное эффективно фильтрует позволяя избавиться от дребезга (переходов 0-1 1-0 в пределах нескольких отсчётов) + легко расширяемо до 32х входов.

Увеличил период до 20 мС. Ввёл некоторый контроль длительности как самого импульса так и его HIGH-части.
Жаль нет возможности уменьшить конденсатор т.к. платы далеко.
Посмотрим на результаты испытаний....
Всем спасибо за ответы.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:31
Рейтинг@Mail.ru


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