Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 26.01.2019, 15:43   #1
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Здравствуйте, уважаемые коллеги! Столкнулся с некоторой проблемой при использовании как Input Capture, так и Gated Timer в режиме измерения длительности импульса. Допустим, что период инкремента таймера, привязанного к IC1, равен 25 нс. На вход IC1 подается импульс длительностью 425 нс. То есть IC1 должен выдать измеренное значение, равное 17. Также, если подать на вход импульс длительностью 450 нс, то IC1 выдаст число 18. Все вроде нормально. Но если подать на вход IC1 импульсы, длительность которых не кратна 25, например, 438 нс, то значение на выходе IC1 будет колебаться между 17 и 18 с некоторой вероятностью (как я понимаю из-за некоторой несинхронности тактирования таймера и внешнего сигнала). Вопрос: как сделать так, чтобы это значение не колебалось (не важно, будет оно 17 или 18). Я так понял нужно каким-то образом фильтровать выходное значение, но сделать это не хватает знаний - высшая математика не мой конёк. Прошу помощи!
Lum1noFor вне форума   Ответить с цитированием
Старый 26.01.2019, 17:38   #2
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,435
Вес репутации: 3365/100
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Первый вариант фильтрации. Фильтр КИХ - FIR с прямоугольным окном.
Создаете кольцевой буфер (например из 16 значений) и пишите в него по кругу (с инкрементом индекса) значения с Input Capture. Каждый раз после записи суммируете все значения в буфере и делите сумму на 16 (логическим, если переменная unsigned, правым сдвигом на 4) - это будет выходной сигнал (значение).
Можете разделить на 8 (или 4). Получите лишний разряд (или два разряда) в разрешении. Двоичное дробное с одним или двумя дробными разрядами.
Второй вариант. Экспоненциальный фильтр (БИХ - IIR первого порядка).
Выходное значение фильтра равно:
F[i] =(a*f[i])+((1-a)*F[i-1]), где
f[i] - новое значение измерений
F[i-1] - предыдущее выходное значение фильтра
а - коэффициент 0<a<1
При а=0 фильтр будет иметь бесконечную инерционность (ничего копить не будет)
При а=1 фильтр не будет иметь никакой инерционности и на выходе будет входной сигнал.
Меняя коэффициент, можно задать необходимый коэффициент сглаживания.
Экспоненциальный фильтр требует запаса по разрядности, иначе у него образуется порог чувствительности связанный с умножением входного сигнала на дробное число меньше 1.
Марк вне форума   Ответить с цитированием
Старый 26.01.2019, 20:27   #3
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,597
Вес репутации: 4445/127
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от Марк Посмотреть сообщение
Первый вариант фильтрации. Фильтр КИХ - FIR с прямоугольным окном
...
Второй вариант. Экспоненциальный фильтр (БИХ - IIR первого порядка).
Выходное значение фильтра равно:...
Марк, спасибо! Приятно читать текст понимающего человека. Вот теория - вот применение. Кратенько так и все понятно.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 26.01.2019, 21:32   #4
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,485
Вес репутации: 4787/113
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Марк, спасибо! Приятно читать текст понимающего человека. Вот теория - вот применение. Кратенько так и все понятно.
только последний разряд так и будет предательски болтаться, да хоть медианный фильтр прикручивай, все равно.
ampersant на форуме   Ответить с цитированием
Старый 26.01.2019, 22:28   #5
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,485
Вес репутации: 4787/113
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

если мало ресурсов в МК то предложенную F[i] =(a*f[i])+((1-a)*F[i-1]),
которая сильно пропускает верхние частоты чуток поправить до
F[i] =(a*(f[i]+f[i-1])/2)+((1-a)*F[i-1]) - так хоть будет больше походить на ФНЧ 1 порядка.
ampersant на форуме   Ответить с цитированием
Старый 27.01.2019, 02:44   #6
mos
Senior Member
 
Регистрация: 12.04.2008
Сообщений: 640
Вес репутации: 731/54
mos is a splendid one to beholdmos is a splendid one to beholdmos is a splendid one to beholdmos is a splendid one to beholdmos is a splendid one to beholdmos is a splendid one to beholdmos is a splendid one to behold
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Почему нельзя просто применить скользящее среднее?
mos вне форума   Ответить с цитированием
Старый 27.01.2019, 07:24   #7
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,435
Вес репутации: 3365/100
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от ampersant Посмотреть сообщение
F[i] =(a*(f[i]+f[i-1])/2)+((1-a)*F[i-1]) - так хоть будет больше походить на ФНЧ 1 порядка.
Это не ФНЧ 1 порядка. Это просто последовательно соединенный КИХ 2 порядка и экспоненциальный БИХ 1-го.
Будет болтаться последний разряд или не будет, зависит от шумности самого измерения, выбранной инерционности и матожидания измеряемой величины.
Если оное матожидание лежит в районе половины дискрета измерений, то НИКАКАЯ ЛИНЕЙНАЯ ФИЛЬТРАЦИЯ не избавит от болтанки между соседними значениями. Болтанка останется, только ее спектр будет ближе к нулевой частоте.
Для стабилизации младшего разряда нужен либо гистерезис, либо наличие ЕЩЕ БОЛЕЕ МЛАДШЕГО разряда, который и будет болтаться.

Последний раз редактировалось Марк; 27.01.2019 в 07:35.
Марк вне форума   Ответить с цитированием
Старый 27.01.2019, 07:29   #8
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,435
Вес репутации: 3365/100
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от mos Посмотреть сообщение
Почему нельзя просто применить скользящее среднее?
А что было предложено? И экспоненциальный IIR и FIR с прямоугольным окном и есть скользящее среднее. Если Вы намекаете на прореживание с длиной в окно (без кольцевого накопления), то это лишь приведет к скачкам выходных значений (эквивалентно уменьшению частоты дискретизации).
Марк вне форума   Ответить с цитированием
Старый 27.01.2019, 07:43   #9
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,435
Вес репутации: 3365/100
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от ampersant Посмотреть сообщение
которая сильно пропускает верхние частоты
Экспоненциальным этот фильтр назван потому, что его АЧХ имеет экспоненциальный характер.
Уровень подавления ВЧ в данном фильтре определяется исключительно значением коэффициента а. И может быть любым наперед заданным.
Правда от этого же коэффициента зависит и задержка в фильтре. Но это так в любом ФНЧ. Порядок влияет на задержку.
Марк вне форума   Ответить с цитированием
Старый 28.01.2019, 13:06   #10
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,082
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Марк
Вы написали отличное руководство по решению затруднения.

Форум к сожалению не дает поставить Вам плюс.
besogon вне форума   Ответить с цитированием
Старый 29.01.2019, 18:53   #11
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от Марк Посмотреть сообщение
Второй вариант. Экспоненциальный фильтр (БИХ - IIR первого порядка).

Ув. Марк, спасибо за Ваш совет - применил экспоненциальный фильтр и все получилось! Отфильтровал значение с Gated Timer и тупо присвоил получившееся значение с точкой другой переменной типа unsigned int. В результате присваивания компилятор просто отбросил всю дробную часть, оставив лишь нужное мне не болтающеейся число.



Может, кому понадобится (заранее прошу прощения за кривое оформление кода - я ассемблерщик, с Сями полный новичок, а привычки остались):


Код:
volatile float PreSignalWidth;
.....
.....
.....

void T2() iv IVT_ADDR_T2INTERRUPT ics ICS_OFF {
float Temp;
unsigned int SignalWidth;

if (PreSignalWidth == 0) {
   PreSignalWidth           = TMR2                              ; // Если это первый импульс, то присвоить предыдущему значению текущее.
}

Temp                        = 0.4*TMR2+0.6*PreSignalWidth       ; // Применяем фильтр.
SignalWidth                 = Temp                              ; // Отбрасываем дробную часть.

// Здесь остальной код прерывания.

PreSignalWidth              = Temp                              ; // Записываем в PreSignalWidth предыдущее значение таймера.
TMR2                        = 0                                 ; // Clear TMR2 counter.
IFS0bits.T2IF               = 0                                 ; // Clear TMR2 interrupt flag.
}
Lum1noFor вне форума   Ответить с цитированием
Старый 29.01.2019, 21:08   #12
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,485
Вес репутации: 4787/113
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

тогда у меня вопрос:
вот любой линейный фильтр на входе 450 +-10нс (понятия не имею какой разброс в задаче, и каков джиттер в проце с тактированием) что получаем на выходе?
ampersant на форуме   Ответить с цитированием
Старый 30.01.2019, 07:00   #13
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от ampersant Посмотреть сообщение
тогда у меня вопрос:
вот любой линейный фильтр на входе 450 +-10нс (понятия не имею какой разброс в задаче, и каков джиттер в проце с тактированием) что получаем на выходе?

Задача такова: есть входной непрерывный сигнал (импульсы) длительностью от 500 до 2000 нс. Нужно измерить каждый импульс, проверить его длительность и, если эта длительность соответствует определённом условию, выдать такой же импульс на выход. Фаза входного и выходного сигнала не важна. Я реализовал это методом считывания Gated Timer'ом. Затем это же число записывается в период обычного таймера 1, и он уже даёт спадающий фронт на выход. Необходимая точность - плюс минус 50 наносекунд, но вышла меньше 25. Джиттер выходного сигнала 22 пикосекунды.
Lum1noFor вне форума   Ответить с цитированием
Старый 30.01.2019, 09:18   #14
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,082
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Lum1noFor
работа с плавающей точкой в прерывании не то, к чему надо стремиться.
вселенные рождаются и умирают в этом коде.

может быть стоит с целыми?
Код:
const u32 tmr2_enh = TMR2 << 12;
const u32 psw_enh = PreSignalWidth << 12;

temp = ((tmr2_enh * 4 + PreSignalWidth * 6)/10) >> 12;
besogon вне форума   Ответить с цитированием
Старый 30.01.2019, 09:21   #15
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,485
Вес репутации: 4787/113
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от besogon Посмотреть сообщение
Lum1noFor
работа с плавающей точкой в прерывании не то, к чему надо стремиться.
вселенные рождаются и умирают в этом коде.

может быть стоит с целыми?
Код:
const u32 tmr2_enh = TMR2 << 15;
const u32 psw_enh = PreSignalWidth << 15;

temp = ((tmr2_enh * 4 + PreSignalWidth * 6)/10) >> 15;
А вас не смутила вообще целесообразность проходящей операции фильтрации после уточнения что собственно делается?
ampersant на форуме   Ответить с цитированием
Старый 30.01.2019, 09:51   #16
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,082
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

ampersant
к большому сожалению не смог вникнуть достаточно глубоко.
besogon вне форума   Ответить с цитированием
Старый 30.01.2019, 12:20   #17
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,435
Вес репутации: 3365/100
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от besogon Посмотреть сообщение
temp = ((tmr2_enh * 4 + PreSignalWidth * 6)/10) >> 12;
Для коэффициента 0,25/0,75 - fix point 30.2:
Код:
temp = ((tmr2_enh<<2)*1 + (PreSignalWidth<<2)*3 ) >> 2
Для коэффициента 0,125/0,875 - fix point 29.3:
Код:
temp = ((tmr2_enh<<3)*1 + (PreSignalWidth<<3)*7 ) >> 3
Для коэффициента 0,375/0,625 - fix point 29.3:
Код:
temp = ((tmr2_enh<<3)*3 + (PreSignalWidth<<3)*5 ) >> 3
И т.д. в зависимости от РАЗРЯДНОСТИ коэффициента

Последний раз редактировалось Марк; 30.01.2019 в 12:26.
Марк вне форума   Ответить с цитированием
Старый 30.01.2019, 12:49   #18
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,082
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Марк
я скорее обратил внимание на математику с плавающей точкой в прерывании.

по моему опыту операции с плавающей точкой для контроллеров у которых нет блока для ее аппаратной поддержки происходят очень медленно.

вполне может быть, что вот эти вот три несчастные операции будут выполняться уйму времени. сотни инструкций.

по поводу конкретной реализации - уверен, есть возможности оптимальней, чем я привел в примере.
besogon вне форума   Ответить с цитированием
Старый 30.01.2019, 17:19   #19
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от besogon Посмотреть сообщение
Марк
я скорее обратил внимание на математику с плавающей точкой в прерывании.

по моему опыту операции с плавающей точкой для контроллеров у которых нет блока для ее аппаратной поддержки происходят очень медленно.

вполне может быть, что вот эти вот три несчастные операции будут выполняться уйму времени. сотни инструкций.

по поводу конкретной реализации - уверен, есть возможности оптимальней, чем я привел в примере.

Расчёт действительно довольно медлителен, около 20 микросекунд. Но в условиях данной задачи (период входного сигнала больше 800 мкс) это время особой роли не играет. Но я согласен с Вами на 100%, что лучше сделать без точки. Думаю, так и сделаю. Спасибо за совет!
Lum1noFor вне форума   Ответить с цитированием
Старый 30.01.2019, 17:30   #20
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от ampersant Посмотреть сообщение
А вас не смутила вообще целесообразность проходящей операции фильтрации после уточнения что собственно делается?

А что конкретно вызвало у Вас вопросы? Ситуация такова: если на вход подать сигнал, длительность импульса которого не кратна 25 (например, 436 нс), то значение, которое выдаст таймер с затвором, будет прыгать между 17 и 18 с некоторой вероятностью. При этом это же самое прыгающее значение будет записано в выходной таймер. Следовательно, при подаче выходного сигнала с длительностью импульса 438 нс, на выходе сигнал будет "болтаться" между 425 и 450 нс, что выражается на осциллографе как двоение спадающего фронта в пределах 25 нс. Применяя фильтр, я могу убрать это двоение, а несоответствие длительности выходного импульса и входного из-за фильтрации компенсировать записью в период выходного таймера поправочной константы. Если у Вас есть какие-то предложения или возражения по поводу этого алгоритма, я Вас с удовольствием выслушаю и приму к сведению!
Lum1noFor вне форума   Ответить с цитированием
Старый 30.01.2019, 19:17   #21
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,485
Вес репутации: 4787/113
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от Lum1noFor Посмотреть сообщение
А что конкретно вызвало у Вас вопросы? Ситуация такова: если на вход подать сигнал, длительность импульса которого не кратна 25 (например, 436 нс), то значение, которое выдаст таймер с затвором, будет прыгать между 17 и 18 с некоторой вероятностью. При этом это же самое прыгающее значение будет записано в выходной таймер. Следовательно, при подаче выходного сигнала с длительностью импульса 438 нс, на выходе сигнал будет "болтаться" между 425 и 450 нс, что выражается на осциллографе как двоение спадающего фронта в пределах 25 нс. Применяя фильтр, я могу убрать это двоение, а несоответствие длительности выходного импульса и входного из-за фильтрации компенсировать записью в период выходного таймера поправочной константы. Если у Вас есть какие-то предложения или возражения по поводу этого алгоритма, я Вас с удовольствием выслушаю и приму к сведению!
Написал много, но потом все удалил, раз вам все нравится - значит все хорошо.
Экспоненциальным фильтром не пользуюсь лет 20 ввиду его ущербности.
А Вы можете использовать дробную часть для коррекции. Только с фиксированной точкой вычисляйте (об этом уже было)
Не хотите чтобы болталось - гистерезис.
ampersant на форуме   Ответить с цитированием
Старый 30.01.2019, 19:46   #22
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,840
Вес репутации: 5553/168
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от ampersant Посмотреть сообщение
Экспоненциальным фильтром не пользуюсь лет 20 ввиду его ущербности.
а что взамен? при такой простоте
Greg вне форума   Ответить с цитированием
Старый 30.01.2019, 20:00   #23
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,435
Вес репутации: 3365/100
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от ampersant Посмотреть сообщение
.
Экспоненциальным фильтром не пользуюсь лет 20 ввиду его ущербности.
Нет там никакой ущербности.
При вертикальном накоплении практически безальтернативен.
Если только не требуется нелинейная фильтрация.
Марк вне форума   Ответить с цитированием
Старый 30.01.2019, 21:13   #24
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,485
Вес репутации: 4787/113
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Цитата:
Сообщение от Greg Посмотреть сообщение
а что взамен? при такой простоте
Думал - думал чего лезу, короче скучаю видимо по всей вот этой кухне.


По теме, всю задачу надо видеть, чтобы её эффективно решать,
Никто с осциллографом не будет проверять как оно там мандражит.
Только кто будет вместо ТС решать за него эту задачу, у всех своих по уши.

Ну и для примера, никому нет дела до I2C шины при софтовой работе, да еще если прерывания есть, и задачи переключаются на другие. Протокол сработает т.к. синхронный, а то, что там неравномерная каша и перекуры - так то фигня. С осциллографом туда юзер не полезет. Ему главное, чтобы работало.
ampersant на форуме   Ответить с цитированием
Старый 30.01.2019, 21:27   #25
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,435
Вес репутации: 3365/100
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: "Болтанка" значения, выданного с Input Capture и Gated Timer'а

Измерения с неопределенным интервалом не эффективно фильтровать обычными фильтрами (ФНЧ, ФВЧ, ПФ). Это практически и есть вертикальное накопление. Линейная фильтрация в котором целесообразна как раз экспоненциальным или медианным фильтром. Но от медианного до нелинейного типа "трех сигм" - один шаг. А эффективность в разы выше.
Гистерезис - это из разряда "улучшайзеров".
Марк вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
dapic33EP Input Capture jammer Вопросы начинающих 0 01.05.2014 18:41
MPLAB не находит c018i.o qwerty1 Продукция MICROCHIP 45 22.04.2011 12:14


Часовой пояс GMT +3, время: 16:57.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot