- •Содержание
- •1. Постановка задачи
- •2. Формализация задачи
- •2.1 Функциональная схема цифрового фильтра
- •2.2 Исходное состояние фильтра после включения питания
- •2.3 Формализация настроек для инициализации фильтра
- •2.3.1 Частота синхронизации мк
- •2.3.2 Настройка таймера – счетчика т/с0
- •2.3.3 Настройка прерываний
- •2.4.4 Хранение текущих данных
- •2.4.5 Масштабирование входных отсчетов
- •2.4.6 Умножение отсчета на коэффициент
- •3. Разработка и описание общего алгоритма функционирования фильтра
- •4. Обоснование построения аппаратной части фильтра
- •5. Разработка и отладка программы на языке команд мк
- •Исходные определения и ручной расчёт результатов работы программы: "Цифровой фильтр (режекторный)"
- •6. Расчет быстродействия фильтра
- •7. Анализ характеристик фильтра для заданных и реальных значений коэффициентов (нули и полюса, ачх, фчх, оценка устойчивости)
- •8. Заключение (оценка результатов проектирования)
- •9. Список использованных источников.
- •Приложение а (схема мп-системы на базе мк кр1830ве31).
- •Приложение б (список условных сокращений).
4. Обоснование построения аппаратной части фильтра
Фильтр построен на основе микроконтроллера КР1830ВЕ31, ПЗУ КР1821РФ55, ОЗУ КР1821РУ55 (они составляют МП-систему) и АЦП AD7892AN-1. Перечисленных микросхем вполне достаточно для реализации поставленной задачи. Опишем каждую из них.
Микроконтроллер КР1830ВЕ31
Микросхема КР1830ВЕ31 включает в себя следующие основные блоки, которые необходимы для реализации фильтра:
8-разрядный центральный процессор с возможностью обработки операндов: бит, нибл (4 бита), байт, 2 байта;
Память данных емкостью 128 байт;
Возможность добавления памяти программ до 64 Кбайт путем подключения внешних микросхем;
32 – разрядный регистр общего назначения (РОН);
128 флагов пользователя (программиста) для фиксирования внешних или внутренних событий, хранения значений отдельных битов;
4 программируемых порта параллельного обмена (ввода/вывода);
Многорежимный порт последовательного обмена (ввода/вывода) со скоростью передачи информации от 110 бит/с до 1 Мбит/с;
Программируемая двухуровневая система прерываний, допускающая переопределять приоритеты при обработке внешних прерываний;
Двоичная и десятичная арифметика;
8-разрядный стек для хранения адресов возврата при выполнении подпрограмм и обработке прерываний;
Взаимодействие с внешней средой в стандарте ТТЛ-микросхем.
КР1821РФ55
КР1821РФ55 представляет собой постоянное запоминающее устройство емкостью 16384 бит и содержит ПЗУ емкостью 2Кх8 бит и два 8-разрядных порта ввода/вывода (РА и РВ). Каждый порт является независимым и может настраивается как на ввод, так и на вывод.
КР1821РУ55
КР1821РУ55 содержит статическое ОЗУ емкостью 2048 бит и содержит 256х8 бит, два 8-разрядных (РА, РВ) и один 6-разрядный (РС) порты ввода/вывода и 14-разрядный программируемый таймер/счетчик.Разряды портов РА и РВ могут настраиваться на ввод/вывод данных индивидуально и содержат буферные регистры для запоминания пересылаемого байта данных
AD7892AN-1
AD7892AN-1 представляет собой 12-разрядный АЦП с устройством выборки-хранения, генератором тактовых импульсов и многофункциональным интерфейсом, работающий от одного источника питания +5 В и реализующий алгоритм последовательных приближений с временем преобразования 1,3 мкс.
Устройство выборки-хранения имеет время хранения, позволяющее формировать цифровые коды с точностью до 12 разрядов для входной синусоиды с максимальной амплитудой ±10 В и частотой до 300 кГц. Для чтения цифрового кода можно использовать как параллельный 12-разрядный интерфейс, так и последовательный. Мы будем использовать параллельный интерфейс как более быстрый и простой с точки зрения программной реализации.
Выходной код является дополнительным. Числовые значения кода соответствуют значениям знакопеременного входного напряжения.
5. Разработка и отладка программы на языке команд мк
Рабочая программа разработана на основе спроектированного алгоритма функционирования фильтра, результатов анализа и формализации.
; Программа "Цифровой фильтр (режекторный)"
; Автор Котов В.А., гр. 912
; Дата 10 апреля 2012 года
; Разностное уравнение Yn = Xn + 1,19 Xn-2 + 0,017 Yn-2
; Определение символических имен операндов
B0: .EQU 90h ;линия для вывода импульса
;запуска АЦП
PA1: .EQU 7001h ;порт РА РУ55
PA2: .EQU 0801h ;порт РA РФ55
RGRU: .EQU 7000h ;РУС РУ55
RGRF: .EQU 0800h ;РФ55
SRU: .EQU 02h ;управляющее слово для настройки
;портов РУ55
SRF: .EQU 00h ;управляющее слово для настройки
;портов РФ55
TMOD: .EQU 89h ;регистр управления режимами
;таймеров-счетчиков
STMOD: .EQU 02h ;управляющее слово настройки
;таймеров-счетчиков
TH0: .EQU 8Ch ;старший байт Т/С0
STH0: .EQU 9Ch ;управляющее слово для задания
;частоты переполнения
TR0: .EQU 8Ch ;управляющий бит пуска Т/С0
IE: .EQU A8h ;регистр разрешения прерываний
SIE: .EQU 83h ;слово разрешения прерываний
;от Т/С0 и входа INT0
B: .EQU F0h ;регистр В
K1: .EQU 30h ;
K2: .EQU 04h ;
KM: .EQU 73h ;коэффициент масштабирования
X: .EQU 30h ;ячейка хранения отсчета Xn
X1: .EQU 31h ;ячейка хранения отсчета Xn-1
X2: .EQU 32h ;ячейка хранения отсчета Xn-2
Y: .EQU 40h ;ячейка хранения отсчета Yn
Y1: .EQU 41h ;ячейка хранения отсчета Yn-1
Y2: .EQU 42h ;ячейка хранения отсчета Yn-2
PR1: .EQU 50h ;ячейка хранения произведения P1n
PR2: .EQU 51h ;ячейка хранения произведения P2n
.FILLCHAR 00h ;записать в пропусках
;между секциями нули
;Инициализация по сигналу RST
S0: .SECTION
.ORG 0000h
LJMP INIT ;переход к программе
;инициализации
S1: SECTION
.ORG 00A0h
INIT: MOV TMOD, #STMOD ;настройка режима Т/С0
MOV TH0, #STH0 ;задание частоты дискре-
;тизации
SETB TR0 ;пуск Т/С0
MOV A, #SRU ;настройка порта PA РУ55
MOV DPTR, #RGRU ;на ввод, порта PA РФ55 -
MOVX @DPTR, A ;на вывод
MOV DPTR, #RGRF ;
MOVX @DPTR, A ;
MOV IE, #SIE ;разрешение прерываний
;от Т/С0 и входа INT0
STOP: SJMP STOP ;останов программы
;Формирование импульса пуска АЦП по внутреннему прерыва-
;нию от Т/С0
S2: .SECTION
.ORG 000Bh
LJMP START ;переход к программе
;формирования импульса
;пуска АЦП
S3: .SECTION
.ORG 00D0h
START: CLR B0 ;сброс бита Р1.0
SETB B0 ;установка бита Р1.0
RETI ;возврат из подпрограм-
;мы обработки прерыва-
;ния
;Вычисление выходного отсчёта по сигналу внешнего прерыва-
;ния от входа INT0, рабочий цикл фильтра
S4: .SECTION
.ORG 0003h
LJMP XYOUT ;переход к программе
;рабочего цикла фильтра
S5: .SECTION
.ORG 0100h
XYOUT: MOV DPTR, #PA1 ;ввод отсчёта Xn из АЦП
MOVX A, @DPTR ;через порт РА РУ55
;программный модуль масштабирования:
;вычисление произведения Хn:= KM*Xn
;входной отсчет в аккумуляторе,масштаби-
;рованный отсчет записать в ячейку ОЗУ
RLC A ;анализ знака Xn
JC M1 ;переход к программе ум-
;ножения отрицательного
;отсчета Xn на KM
RRC A ;восстановление положи-
;тельного отсчета Xn
;в аккумуляторе
MOV B, #KM ;вычисление произведе-
MUL AB ;ния KM*Xn
MOV X, B ;запоминание масштаби-
;рованного отсчёта Xn
;в памяти
SJMP M2 ;переход к продолжению
M1: RRC A ;восстановление отрицательно-
;го отсчёта Xn
;в аккумуляторе
CPL A ;получение положительного
INC A ;отсчета Xn (смена знака)
MOV B, #KM ;вычисление произведения
MUL AB ;KM*Xn и пересылка в
MOV A, B ;аккумулятор
CPL A ;получение отрицательного
INC A ;произведения KM*Xn
;(смена знака)
MOV X, A ;запоминание масштаби-
;рованного отсчета Xn
;в памяти
;программный модуль вычисления
;произведения PR1n:=K1*Xn-2
;Xn-2 хранится в ячейке ОЗУ с адресом X2
;PR1n записать в ячейку ОЗУ с адресом PR1
M2: MOV A, X2 ;копирование Хn-2 в аккуму-
RLC A ;лятор и анализ знака
JC M3 ;переход к программе ум-
;ножения отрицательного
;отсчета Xn-2 на K1
RRC A ;восстановление положи-
;тельного отсчета Xn-2
;в аккумуляторе
MOV B, #K1 ;вычисление произведения
MUL AB ;K1*Xn-2
MOV PR1, B ;запоминание K1*Xn-2
;в памяти
SJMP M4 ;переход к продолжению
M3: RRC A ;восстановление отрица-
;тельного отсчета Xn-2
;в аккумуляторе
CPL A ;получение положительного
INC A ;отсчета Xn-2(смена знака)
MOV B, #K1 ;вычисление произведения
MUL AB ;K1*Xn-2 и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;произведения K1*Xn-2
;(смена знаков)
MOV PR1, A ;запоминание K1*Xn-2
;в памяти
;программный модуль вычисления
;произведения PR2n:=K2*Yn-2
;Yn-2 хранится в ячейке ОЗУ с адресом Y2
;PR2n записать в ячейку ОЗУ с адресом PR2
M4: MOV A, Y2 ;копирование Yn-2 в аккуму-
RLC A ;лятор и анализ знака
JC M5 ;пеерход к программе ум-
;ножения отрицательного
;отсчета Yn-2 на K2
RRC A ;восстановление положи-
;тельного отсчета Yn-2
;в аккумуляторе
MOV B, #K2 ;вычисление произведения
MUL AB ;K2*Yn-2
MOV PR2, B ;запоминание K2*Yn-2
;в памяти
SJMP M6 ;переход к продолжению
M5: RRC A ;восстановление отрица-
;тельного отсчета Yn-2
;в аккумуляторе
CPL A ;получение положительного
INC A ;отсчета Yn-2(смена
;знака)
MOV B, #K2 ;вычисление произведения
MUL AB ;K2*Yn-2 и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;произведения K2*Yn-2
;(смена знака)
MOV PR2,A ;запоминание K2*Yn-2
;в памяти
;программный модуль вычисления выходного
;отсчета Yn= Xn + Xn-2 + PRn1 + PRn2
;слагаемые хранятся в ячейках ОЗУ,результат
;записать в ячейку ОЗУ
M6: MOV A, X ;вычисление отсчета Yn
ADD A, X2 ; и сохранение в памяти
ADD A, PR1 ;
ADD A, PR2 ;
MOV Y, A ;
MOV DPTR, #PA2 ;вывод Yn через порт
MOVX @DPTR, A ;PA РФ55
;программный модуль сдвига отсчетов
MOV X2, X1 ;
MOV X1, X ;
MOV Y2, Y1 ;
MOV Y1, Y ;
RETI ;возврат из подпрограммы
;обслуживания прерывания
;по ходу INT0
.END
