Например TDA7294

Форум РадиоКот • Просмотр темы - Фильтр АЦП atmega 8 по нижней границе
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн дек 15, 2025 03:43:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 140 ]  1, , , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Пн мар 01, 2021 16:48:03 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
Всем привет! Начну с картинки мужики. В двух словах подаю на АКБ автомобильный напряжение 19В частотой 1кГц с заполнение 40%. Красный график это данные АЦП, зеленый это применен фильтр для АЦП - бегущее среднее. Мне же нужно отфильтроваться по нижней границе красного графика, применил еще фильтр - медиана 3 порядка, почти тож самое вышло что и красный, не отфильтровывает выбросы ШИМ сигнала. Как быть, подскажет мож у кого есть другой код фильтрации?
И еще момент, если спустить заполнение ШИМ до 10%, бегущее среднее работает по нижней границе красного графика. т.е. на малую скважность не обращает внимание.


Вложения:
Комментарий к файлу: красный - ацп
зеленый - фильтр бегущее среднее

3.jpg [252.61 KiB]
Скачиваний: 399
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Пн мар 01, 2021 20:02:02 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1480
Рейтинг сообщения: 0
Запускать АЦП между импульсами ШИМ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Пн мар 01, 2021 20:19:13 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
Запускать АЦП между импульсами ШИМ?

не катит, т.к. мы видим же наглядно не каждый импульс на графике, эти данные АЦП по UART передаются, на основе их строится график... только на малых частотах, в несколько герц еще может быть... тут же нужен алгоритм!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Пн мар 01, 2021 20:46:57 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
а бегущее среднее у тебя компьютер строит по данным UART? или МК это бегущее вычисляет?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Пн мар 01, 2021 22:02:56 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
а бегущее среднее у тебя компьютер строит по данным UART? или МК это бегущее вычисляет?

мк вычисляет по ацп, до алгоритма бегущее среднее ни каких обработок, ацп 10бит 125kHz , комп просто строит по данным из UART скорость 9600


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Пн мар 01, 2021 23:16:19 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Эмм... наверное не очень решение, но что в лоб пришло в голову - после среднего или медианного фильтра отсечь сэмплы выше оного и фильтрануть аналогично только оставшиеся?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 08:28:35 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
neid писал(а):
мк вычисляет по ацп
тогда еще вопрос - какая частота ШИМ и какая частота опроса АЦП?
и что может мешать запускать АЦП с частотой ШИМ, но в паузе ШИМ сигнала?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 10:33:44 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
тогда еще вопрос - какая частота ШИМ и какая частота опроса АЦП?
и что может мешать запускать АЦП с частотой ШИМ, но в паузе ШИМ сигнала?

Тогда начну с того что новичок, и может быть в моих суждениях есть ошибка, т.к. сначала изучу какой либо блок(АЦП UART и т.д.) в теории, потом пытаюсь писать код. Как выше уже писал, частота ШИМ 1kHz, скважность 40% в данном случае. АЦП тоже выше описал 125kHz, данные беру прям с read-adc(0) и все и ставлю в функцию среднего бегущего
Код:
#define K 0.1 //K - коэффициент фильтрации, 0.0-1.0
//*******ФУНКЦИЯ БЕГУЩЕЕ СРЕДНЕЕ АРИФМИТИЧЕСКОЕ**********************************
float expRunningAverage(float newVal) {
  static float filVal = 0;
  filVal += (newVal - filVal) * K; //K - коэффициент фильтрации, 0.0-1.0
  return filVal;
}

//*******************************************************************************
----прочий код-------
adc=expRunningAverage(read_adc(0));

и что может мешать запускать АЦП с частотой ШИМ, но в паузе ШИМ сигнала?

писал подобное что то не пошло((( шим настроен 1kHz
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=OCR1A
// OC1A output: Disconnected
// OC1B output: Inverted PWM
// Timer Period: 0,99925 ms
// Output Pulse(s):
// OC1B Period: 0,99925 ms Width: 0,99925 ms
// Compare A Match Interrupt: On

Код:
if(OCR1B>0 && OCR1B<PWR) {adc_max_pwr=expRunningAverage(read_adc(0));} //т.е. когда период ШИМ Toff то меряем напругу

или
Код:
if(OCR1B>0 && OCR1B<PWR) {adc_max_pwr=read_adc(0);} //т.е. когда период ШИМ Toff то меряем напругу без филтрации


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 14:45:48 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
ничего не понял.
прерывание по сравнению канала А, а ШИМ оказался на канале В ... и как это может работать?
как я понял, 125 кГц - это частота тактирования АЦП, а не частота опроса входа АЦП.
а я спрашивал, с какой частотой идет опрос входа АЦП. то есть, как часто вызывается твоя функция read_adc(0).

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 15:22:53 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Starichok51 писал(а):
то есть, как часто вызывается твоя функция read_adc(0).
Учитывая что
Код:
----прочий код-------
adc=expRunningAverage(read_adc(0));
то тут трудно посчитать с какой частотой вызывается функция, и вряд ли ТС на этот вопрос даст ответ.

Больше такой вопрос интересует:
neid писал(а):
В двух словах подаю на АКБ автомобильный напряжение 19В частотой 1кГц с заполнение 40%.
Не понятно? Полагаю что ТС на АКБ подаете фиксированное напряжение 19В через какой-то "ключ" на который завели ШИМ 1кГц. -?
Просто тема может вылиться еще в 5 страниц, а в результате на выходе у ТС стоит обыкновенный "линейный регулятор", а шим управляет этим регулятором через цепочку rc-rc.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 15:46:11 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
вообще-то, АКБ автомобильная. батарея же она, а не он.
и какие, на хрен, 19 Вольт, если на батарею нельзя подавать более 14,4 Вольта???

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 16:49:37 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
ничего не понял.
прерывание по сравнению канала А, а ШИМ оказался на канале В ... и как это может работать?

на этот вопрос я ответил настройками из codevisiona avr, но видимо не особо понимаете что там написано и как реализован шим, как еще на словах отвечу:
"нам ещё нужен ШИМ сигнал на выходе, ещё есть режимы PWM - выберем "fastPWM top OCR1A" и запишем наше число в OCR1A, теперь таймер работает с частотой 1 кГц и дает выход....
нет, выход он пока не даёт, его ещё подключить надо... компаратор "А" уже занят, подключим к "В": OutB - Inverted PWM
можно выбрать и неинвертируемый, но он не умеет полностью закрываться - маленькие иголочки при сбросе таймера будут просачиваться... поэтому берём инвертируемый, но в коде это учтём."
как я понял, 125 кГц - это частота тактирования АЦП, а не частота опроса входа АЦП.
а я спрашивал, с какой частотой идет опрос входа АЦП. то есть, как часто вызывается твоя функция read_adc(0).

как часто? так часто что опрос стоит while(1)... и я конечно только учусь... но что тут не понятного может быть))) научите меня я пока не знаю как ответить на ваш вопрос с какой частотой опрашивается АЦП(((

Dimon456 писал(а):
Dimon456
не хочу отвечать даже! вообще не о том речь! там просто Р-канальный мосфет и все.... на 5 страниц она выльется если подобные вопросы не в тему задавать)))

Starichok51 писал(а):
вообще-то, АКБ автомобильная. батарея же она, а не он.
и какие, на хрен, 19 Вольт, если на батарею нельзя подавать более 14,4 Вольта???

вообще то вы тоже не знаете многих схем как заряжать лучше акб... и подобный метод не только лучше заряжает са/са акб, но и десульфатацию производит попутно... вернемся к вопросу об ацп лучше, может тут истину проясним)) а эти учения как заряжать акб и русский язык оставим....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 17:16:29 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
neid писал(а):
не хочу отвечать даже! вообще не о том речь! там просто Р-канальный мосфет и все.... на 5 страниц она выльется если подобные вопросы не в тему задавать)))
вопрос в тему был.
Что весит на Compare A Match Interrupt: On ?
Что мешает выключать ШИМ на время измерения?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 17:32:26 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
Что весит на Compare A Match Interrupt: On ?
Что мешает выключать ШИМ на время измерения?

выше расписано по шим... измерения нужны при работающем ШИМ, т.е. идет заряд на акб в это время и надо следить по нижней границе, что будет адекватному напряжению акб бегущее среднее дает завышеный результат...
вы наверное забыли что общаетесь с дилетантом, но лично я вас понимаю, что вы хотите делать опрос АЦП в нулевом периоде ШИМ сигнала... тогда другой вопрос зачем его вообще выключать?
Уверенно движемся к 5 странице)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 17:56:24 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
neid писал(а):
на этот вопрос я ответил настройками из codevisiona avr,
это не настройки ты привел, а комментарии.
а из комментариев не понятно, какой режим задан таймеру.
что записывается в TCCR1A, что в TCCR1B, что в OCR1A и что в OCR1B.

ты все время твердишь про нижнюю границу на графике.
а нижняя граница получается, когда импульса ШИМ нет.
это ты движешься к 5 странице своим непониманием того, что тебе говорят.
чтобы всегда была твоя "нижняя граница" тебе и предлагают либо на время измерения отключать ШИМ либо делать измерения, когда в ШИМ проходит пауза.
зачем измерять во время действия импульса, если при этом ты получаешь неправильный (ненужный) результат?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 17:58:26 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
neid писал(а):
что вы хотите делать опрос АЦП в нулевом периоде ШИМ сигнала
Вам же писали
Demiurg писал(а):
Запускать АЦП между импульсами ШИМ
neid писал(а):
тогда другой вопрос зачем его вообще выключать?
так делается во многих промышленных зарядниках, что дает более оптимальное измерение напряжения на акб.
А вообще, судя по вашему графику, минимум измерения можно было давно взять еще с самого первого сообщения этой темы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 18:53:14 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
это не настройки ты привел, а комментарии.
а из комментариев не понятно, какой режим задан таймеру.
что записывается в TCCR1A, что в TCCR1B, что в OCR1A и что в OCR1B.


Код:
//*******Timer1 output compare A interrupt service routine***********************
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
timer++;                                                        //таймер шим 1кГц
OCR1B= (PERIOD_kHz*(1000-IGLA))*0.001;    //т.к С ИНВЕРСИЕЙ - считаем так
} // end Timer1
//**********************************************************************

// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=OCR1A
// OC1A output: Disconnected
// OC1B output: Inverted PWM
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 0,99925 ms
// Output Pulse(s):
// OC1B Period: 0,99925 ms Width: 0,99925 ms
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (1<<COM1B0) | (1<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x1F; // 1F3F(7999) - 1кГц - 1.0000 ms
OCR1AL=0x3F;
OCR1BH=0x00;
OCR1BL=0x00;


чтобы всегда была твоя "нижняя граница" тебе и предлагают либо на время измерения отключать ШИМ либо делать измерения, когда в ШИМ проходит пауза.
зачем измерять во время действия импульса, если при этом ты получаешь неправильный (ненужный) результат?

вот я и писал выше, т.е. "когда в ШИМ проходит пауза" это мое видение вашего совета, мож и не правильно, пока так!
Код:
if(OCR1B>0 && OCR1B<PWR) {adc_max_pwr=expRunningAverage(read_adc(0));} //т.е. когда период ШИМ Toff то меряем напругу


вопрос к вашему совету, зачем в это время выключать шим? и каким образом? таким?
Код:
TCCR1A &=~(1 << COM1B0);             
 TCCR1A &=~(1 << COM1B1);


Добавлено after 43 minutes 28 seconds:
судя по вашему графику, минимум измерения можно было давно взять еще с самого первого сообщения этой темы.

Наглядно можете показать в виде кода?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 18:58:09 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
neid писал(а):
if(OCR1B>0 && OCR1B<PWR)
как ты можешь сравнивать OCR1B, если у тебя там записан НОЛЬ, и это значение нигде не изменяется?
и что такое PWR, тоже не понятно.
OCR1A тоже нигде не изменяется и OCR1A задает частоту ШИМ.
изменяется только сам счетчик таймера TCNT1.
а вот где задается длительность импульса, чтобы получить 40% периода, я что-то нигде не увидел.

поскольку у тебя инверсный выход ШИМ, то сначала идет НОЛЬ (импульса нет).
поэтому мне видится, что нужно еще добавить прерывание по переполнению. и в этом прерывании, пока импульса нет, запустить замер АЦП.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 19:01:18 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Я бы код переписал, особенно вот этот участок
Код:
OCR1B= (PERIOD_kHz*(1000-IGLA))*0.001;
видимо одна из них переменная будет, а расчет с плавающей запятой и в прерывании - это жестко.

А на счет иголок в ШИМ, там 5 режимов ШИМ, не ужели на всех иголки идут? Может у вас мосфет не успевает закрываться?
Некоторые экстрималы умудряются dc-dc преобразователи строить на этих мегах.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Фильтр АЦП atmega 8 по нижней границе
СообщениеДобавлено: Вт мар 02, 2021 19:14:48 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2926
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18891
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
пардон, я прозевал этот момент, где изменяется OCR1B.
то есть, OCR1B задает длительность импульса.
и опять не дана информация, где объявляется IGLA и чему она равна.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 140 ]  1, , , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y