Jump to content

    
Sign in to follow this  
Nameless19

Фильтр на ATmega16

Recommended Posts

Здравствуйте!

Нужна помощь с моделированием в Proteus цифрового фильтра Чебышева 4 порядка (режекторный фильтр). Используются мк ATmega16, АЦП MCP3201 и ЦАП MCP4921. Нужно собрать схему, а вот как ее лучше сделать - понять не могу, несмотря на множество прочитанных статей. Может у кого есть идеи или какая-нибудь информация о том как собрать модель?

 

Share this post


Link to post
Share on other sites

Если описать решение задачи в самом общем виде, то это будет выглядеть примерно так:

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

Для моделирования необходимо в соответствии с даташитами на все три микросхемы правильно соединить между собой контроллер, АЦП и ЦАП, правильно подключить к ним необходимые внешние элементы. Затем написать для контроллера программный код на ассемблере или на языке более высокого уровня с учетом особенностей работы АЦП и ЦАП, и использованных внешних портов ввода-вывода. При этом предполагается, что вы хотя бы немного умеете работать с Proteus и с какой либо программой-компилятором для Mega16, а также владеете хотя бы начальными знаниями по программированию контроллеров семейства AVR. В противном случае весь дальнейший разговор становится беспредметным, а ваш вопрос превращается просто в предложение на каких-то условиях решить эту задачу за вас.

Share this post


Link to post
Share on other sites
Если описать решение задачи в самом общем виде, то это будет выглядеть примерно так:

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

 

То, что вы написали, предельно очевидно. Было бы неожиданным, если бы данные получал не АЦП, выдавал не ЦАП, а фильтр считал не МК. :) Т.е. даже вообразить нельзя, чтобы эту схему можно было собрать как-то иначе.

 

Интересно было бы услышать другой комментарий - по поводу того, способна ли эта схема работать в непрерывном режиме или нет. А если да, то с какой приблизительно скоростью?

 

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

 

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

 

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

 

В последнем случае периодичность вроде бы сохраняется, но за счет страшной медлительности - после каждой новой оцифрованной точки следует задержка "на обдумывание хода", как в шахматах. А учитывая, что думать здесь будет ATmega16, надяться на высокую скорость не приходится.

 

Вот примерно в таком ключе хотелось бы послушать комментарии, а не в духе "ветер дует, огонь горит, дождь падает" (С) Пятый элемент. :)

Share this post


Link to post
Share on other sites

Не хватает данных.

В какой-то старой книжке (или статье) по процессору МК580 было показано, что он годится для обработки сигналов с частотой до 200 Гц.

Здесь, как минимум, необходимо знать полосу сигнала, частоту дискретизации, частоту процессора.

Если все вписывается в возможности процессора, перейти к моделированию в Протеусе, если сильно нужно. Сам я считаю это излишним (если только не учебная задача).

Share this post


Link to post
Share on other sites
Здесь, как минимум, необходимо знать полосу сигнала, частоту дискретизации, частоту процессора.

Если все вписывается в возможности процессора, перейти к моделированию в Протеусе, если сильно нужно. Сам я считаю это излишним (если только не учебная задача).

 

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

 

Поэтому вопрос лучше ставить так: "до какой частоты дискретизации потянет машинка, сделанная на базе ATmega16?"

 

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

Share this post


Link to post
Share on other sites

Да как раз атмега16 малость помощнее будет, чем i8080. Порядок фильтра задан (4), следовательно в цикле для каждого отсчета надо делать около 4 перемножений и сложений.

Звуковые частоты вполне обработать можно, но данных все равно маловато.

Тем более, что КИХ с 4-мя коэффициентами - это совсем никакой режекторный фильтр. Если БИХ 4 порядка - надежд больше.

Share this post


Link to post
Share on other sites
Да как раз атмега16 малость помощнее будет, чем i8080. Порядок фильтра задан (4), следовательно в цикле для каждого отсчета надо делать около 4 перемножений и сложений.

 

С i8080 какой МК не сравни, всяк лучше будет. :) Однако у АЦП MCP3201 разрешение 12 бит, а значит, придется множить int на int до результата long. А если на C/C++ писать, но и вовсе придется long на long множить, если сответствующего макроса компилятор не знает. Т.е. в любом случае по частям умножать придется библиотечной функцией.

Share this post


Link to post
Share on other sites
Однако у АЦП MCP3201 разрешение 12 бит, а значит, придется множить int на int до результата long.

Никто не запрещает использовать 8 старших разрядов результата АЦП :) И тут уже МЕГА на полной скорости умножать будет :)

Share this post


Link to post
Share on other sites
Никто не запрещает использовать 8 старших разрядов результата АЦП :) И тут уже МЕГА на полной скорости умножать будет :)

 

Вы бы еще сказали, что после отбрасывания 4-х младших разрядов и фильтр Чебышева не понадобится. :)

 

Share this post


Link to post
Share on other sites
То, что вы написали, предельно очевидно.

Это предельно очевидно для Вас, но отнюдь не для автора темы. Для него все это скорее всего абсолютно не очевидно даже на уровне блок-схемы, если возникают сложности с построением модели в Proteus. По крайней мере осознанием возможного наличия проблем с вероятной нехваткой быстродействия у контроллера здесь пока и не пахнет. А попахивает здесь горящей курсовой, о которой вспомнили за несколько дней до срока сдачи. Что касается быстродействия, то первый свой цифровой фильтр, Бессель 5-го порядка с частотой среза 1/мин, я реализовал, когда понадобилось очистить запись медленно протекающего процесса от помех для формирования аналогового управляющего сигнала. Мега во время такой работы заснуть может. :)

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this