Смекни!
smekni.com

Цифровой фильтр высокой частоты (стр. 2 из 4)

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

Запишем в память микроконтроллера число -400(10)=FE70(16)

Time0L <= 70h -Младший байт числа -400 в ДК

Time0H <= FEh -Старший байт числа -400 в ДК

2.3 Масштабирование коэффициентов и упрощение разностного уравнения

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

При помощи программы Matlab выберем способ округления. Для этого построим АЧХ фильтров при различном округлении (рис. 3) и сравним с АЧХ заданного фильтра. На основе сравнения выберем тот способ, который лучше удовлетворяет ТЗ и виду фильтра (ВЧ).

Возьмем способ округления – отбрасыванием дробной части ( зеленый график) (рис. 4).

рис. 3

рис. 4


Исходные коэффициенты (Dec) Исходные коэффициенты (Bin) Округленные коэффициенты* (Dec) Округленные коэффициенты* (Bin) (ПК) Округленные коэффициенты (Hex)
B1 0.023815103093366 0,00000110 3 00000011 03
B2 0.014780763864104 0,00000011 1 00000001 01
B3 -0.067269084707391 -0,00010001 -8 10001000 88
B4 0.054715869201380 0,00001110 7 00000111 07
B5 0.089243271343775 0,00010110 11 00001011 0B
B6 -0.295613381939767 -0,01001011 -37 10100101 A5
B7 0.394551759773816 0,01100101 50 00110010 32
B8 -0.295613381939767 -0,01001011 -37 10100101 A5
B9 0.089243271343775 0,00010110 11 00001011 0B
B10 0.054715869201380 0,00001110 7 00000111 07
B11 -0.067269084707391 -0,00010001 -8 00001000 88
B12 0.014780763864104 0,00000011 1 00000001 01
B13 0.023815103093366 0,00000110 3 00000011 03

Сумма модулей исходных коэффициентов:

1.48542670807338

Сумма модулей коэффициентов числителя:

1.43750000000000

В ТЗ дано следующее разностное уравнение:


,М=12

Т.к. заданные коэффициенты симметричны, то разностное уравнение можно преобразовать к следующему виду:


Такое преобразование разностного уравнения позволит сократить программу вычисления отсчета на 7 циклов.

Необходимо учесть, что в некоторых случая сумма двух отсчетов может переполнить 8ми разрядную сетку. Поэтому примем, что входные отсчеты по модулю меньше 0.5(10). Тогда сумма этих отсчетов не будет приводить к переполнению разрядной сетки.

2.4 Разработка и описание общего алгоритма функционирования устройства

Представим алгоритм функционирования фильтра следующим образом:


Аппаратно- реализуемые операции Программно- реализуемые операции


вкл. питания

сброс при включении питания


Прерывание от TC/0

Запрос данных

Сигнал о готовности данных

Передача данных

Импульс считывания

Вычисленный отсчет

Выходной аналоговый сигнал

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

При инициализации настраивается таймер счетчик, загружается PSW основной программы, очищаются память выделенная под остчеты, устанавливается вершина стека. Необходимо, чтобы программа инициализации начиналась с нулевого адреса (0000h).

Основная программа представляет собой бесконечный цикл

После идет программа вычисления отсчета. В которой предусмотрено: ввод данных (xn), их обработка, в соответствии с разностным уравнением, и вывод данных (yn).

2.5 Электрическая принципиальная схема фильтра.


По линии 1 происходит запуск внешнего устройства. Линия 2 служит для сообщения от внешнего устройства о готовности входных данных. По линии 4 подается импульс, который заставляет внешнее устройство подать готовые данные на вход микроконтроллера.

Между микроконтроллером и ЦАП существует 2 линии связи: линия номер 5 – служит для выдачи готовых данных с МК, а по линии 6 подается импульс, инициирующий чтение готовых данных ЦАП.

По линии 7 преобразованный в аналоговый сигнал поступает на «Преобразователь выходного сигнала», который преобразует сигнал к заданному виду.



В состав схемы, в соответствии с теоретическим заданием, входит микроконтроллер КР1830BE51 и ЦАП АD9708. Подсоединим к микроконтроллеру кварцевый резонатор с частотой 12 МГц, для задания тактовой частоты микроконтроллера. Для его сброса, к входу RST подсоединим RC-цепочку, которая при замыкании ключа будет формировать импульс сброса микропроцессора. Поставим между микроконтроллером и входным устройством буфер К555АП6, служащий для развязки данных, умощнения входного сигнала и повышения помехоустойчивости.

На выходе ЦАП будем использовать дифференциальное включение выходов ЦАП, при котором напряжение UДИФ = UOUT АUOUT В изменяется в пределах от +0,5 В до -0,5 В. Что бы преобразовать выходное напряжение к заданному виду ((0… + 2,5)) необходимо подать напряжение смещения +1.75В и усилить выходной сигнал в 2.5 раза. Для этого используем ДУ AD8072.

Для повышения помехоустойчивости между входным внешним устройством и МК в линии ПУСК, ЧТЕНИЕ, ГОТОВ поставим триггеры Шмитта.


3. Разработка и отладка программы на языке ассемблера

Первым делом необходимо разработать секцию инициализации, которая обязательно должна начинаться с нулевого адреса. В секции инициализации предусмотрим следующие макросы:

InitSteck – инициализация стека, запись вершины стека

InitInt – инициализация прерываний, разрешение всех прерываний и прерываний от таймера счетчика, в частности.

InitTimer – инициализация таймера, выбор первого таймера/счетчика, выбор первого режима работы, запрет внешнего управления. Выбираем функцию таймера.

InitCoeff – инициализация коэффициентов, запись констант значений коэффициентов в память (при этом коэффициенты располагаются в памяти последовательно)

InitPSW – инициализация PSW основной программы и программы вычисления отсчетов. В память программы записываются соответствующие значения PSW.

ClearXn – инициализация отсчетов, очистка памяти выделенной под отсчеты.

ReloadTimer – инициализация таймера, остановка таймера, загрузка значений младшего и старшего байтов интервала дискредитации.

После инициализации идет основная программа.

MainProgramm – бесконечный цикл основной программы. Выход по прерыванию от TC0.

Дальше идет секция исполнения, в которой происходит обработка входных данных и вывод их на выходной порт.

RunACP - макрос запуска внешнего устройства. По линии P3.0 на соответствующий контакт устройства подается импульс нулевого уровня.

ReloadTimer – то же что и в секции инициализации

SavePSW – сохранение PSW основной программы и загрузка PSW рабочей программы.

CheckACP – проверка готовности данных от внешнего устройства. Если по линии P3.2 установлен 0, то данные готовы.

InputData – Ввод входных данных. Т.к. выводы внешнего входного устройство имеют третье состояние, то для того что бы данные попали на порт МК, необходимо по линии P3.1 сформировать импульс низкого уровня.

PrepareData – макрос, необходимый для упрощения разностного уравнения. Здесь происходит суммирование отсчетов стоящих у симметричных коэффициентов и запись суммы последовательно в память.

ComputeSample – макрос вычисления отсчета. Содержит в себе макрос очистки двухбайтовой суммы и макрос суммирования с ее накоплением.

ShiftL – сдвиг результата на 1 разряд влево.

OutputData – макрос вывода данных. Здесь результат переводится из дополнительного кода в прямой и затем старший байт отправляется на выходной порт. Формируется импульс по линии P1.0, для фиксации выходного отсчета на ЦАП.

PrepareCycl – последовательный сдвиг отсчетов в памяти.

ReloadPSW – запись PSW рабочий программы и восстановление PSW основной.

RETI – возвращение в основную программу.


Текст программы

*********************************************************************************

* Цифровой фильтр высокой частоты *

* Курсовой проект по дисциплине "Цифровые устройства и микропроцессоры" *

* Код F0b12_70 *

* Выполнил студент группы 410 Косс Андрей Владимирович *

* *

*********************************************************************************

SPACES ON ;Разрешить пробелы между операндами

FILLCHAR 00h ;Заполнить промежутки между секциями символами 00