3. Разработка и описание общего алгоритма функционирования устройства
Общий алгоритм функционирования фильтра представлен на рисунке 2. Работа фильтра начинается с подачи питания на дифференцирующую цепь RC, которая формирует импульс сброса RST, устанавливающий МК в исходное состояние и обнуляющий программный счетчик. Следовательно, программа инициализации должна начинаться с нулевого адреса. Программа инициализации включает в себя настройки аппаратных и программных модулей МК и МП -системы на заданные режимы функционирования и с определенными параметрами:
1. Настройка Т/С0 на частоту дискретизации , в режиме 2
2. Настройка портов: РВ БИС РУ 55-на ввод данных, РВ БИС РФ 55-на вывод данных
3. Запуск Т/С0 для формирования непрерывной последовательности импульсов с частотой
4. Настройка прерываний: разрешаются внутренние прерывания от Т/С0, которые используются для программного формирования импульса запуска внешнего источника входного кода, и внешние прерывания от входа - для запуска выполнения рабочей программы фильтра.
5. Организовать стек.
Программа инициализации завершается остановом МП-системы. Из состояния останова МК выводится внутренним сигналом прерывания от Т/С0. По данному прерыванию выполняется программный модуль формирования импульса запуска внешнего источника данных, после чего МК снова переходит в состояние останова и находится в нем до следующего прерывания по входу сигналом готовности входного кода. То есть выполнение рабочей программы фильтра, по сути, является реакцией на прерывания.
Рис. 2. Общий алгоритм функционирования фильтра.
4. Обоснование построения аппаратной части устройства
Основой аппаратной части устройства является набор БИС КР1830ВЕ31, КР1821РФ55, КР1821РУ55.
1. КР1830ВЕ31- микроконтроллер, выполненный по комплементарной МОП технологии (КМОП);
2. КР1821РФ55- ПЗУ с двумя портами ввода/вывода, работающими в режиме простого обмена;
3. КР1821РУ55- микросхема, в состав которой входят: ОЗУ, таймер, два 8-разрядных (РА и РВ) порта ввода/вывода и один 6-разрядный порт (РС).
Выходной сигнал должен иметь аналоговый вид, для преобразования цифрового кода в аналоговый сигнал, используя ЦАП типа AD9708. Микросхема AD9708 представляет собой 8-разрядный ЦАП, построенный по схеме на транзисторных источниках тока, весовые токи формируются с помощью матрицы R-2R. В качестве опорного источника напряжения может выбираться либо внутренний – с напряжением +1,2 В, либо – внешний. Для обеспечения требуемого размаха напряжения ±5 В, к токовым выходам ЦАП подключаем операционный усилитель.
5. Разработка и отладка программы на языке команд микропроцессора
Рабочая программа фильтра разрабатывается на основе алгоритма функционирования устройства. Для настройки таймера/счетчика Т/С0, в качестве таймера, на работу в непрерывном режиме 2 (без блокировки сигналом и с перезагрузкой после каждого цикла счета) необходимо управляющие биты GATE0=0, C/=0 и код режима 10 записать в состав управляющего слова (константа #02) для регистра TMOD при инициализации – команда MOV 89, #02.
Управляющее слово для регистра TMOD (прямой адрес 89) | |||||||
TMOD.7 | TMOD.6 | TMOD.5 | TMOD.4 | TMOD.3 | TMOD.2 | TMOD.1 | TMOD.0 |
GATE 1 | C/ 1 | M 1.1 | M 0.1 | GATE 0 | C/ 0 | M 1.0 | M 0.0 |
X(0) | X(0) | X(0) | X(0) | 0 | 0 | 1 | 0 |
Для обеспечения требуемой частоты дискретизации , при инициализации, константа #8Е должна быть записана в регистр TH0 – команда MOV 8C, #8Е. Пуск Т/С0 производится путем установке в управляющем регистре TCON бита TR0=1. Команда SETB 8C.
Для настройки порта РВ БИС РУ55 на ввод данных надо в состав регистра управляющего слова записать константу #00.
Управляющее слово для РУС БИС HE 55 (адрес 7000) | |||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
TM2 | TM1 | IE B | IE A | PC2 | PC1 | PB | PA |
x(0) | x(0) | x(0) | x(0) | x(0) | x(0) | 0 | x(0) |
При инициализации – команды MOV A, #00, MOV DPTR, #7000, MOVX @DPTR, A.
А для настройки порта РВ РФ 55 на вывод данных надо в регистр направления передачи порта РВ записать 1. При инициализации – команды MOV A, #01, MOV DPTR, #0803, MOVX @DPTR, A.
Формирование импульса запуска внешнего источника данных выполняется по прерывания от флага TF0, устанавливающегося при переполнении Т/С0. Подпрограмма обработки прерывания от флага TF0 имеет стартовый адрес 000В и содержит команды: CLR 90, SETB 90(сброс и установка бита по линии Р1.0).
Настройка прерываний необходима, так как в результате сброса МК все прерывания запрещены (управляющий регистр IE обнуляется). В первую очередь необходимо разрешить прерывания вообще (бит EA=1), также разрешить прерывания от Т/С0 (бит ET0=1) и по входу (бит EXO=1).
Управляющее слово для регистра IE (прямой адрес А8) | |||||||
IE 7 | IE 6 | IE 5 | IE 4 | IE 3 | IE 2 | IE 1 | IE 0 |
EA | — | — | ES | ET1 | EX1 | ET0 | EX0 |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
При инициализации – команда MOV A8, #83.
Переопределять приоритеты прерываний не требуется, так как в результате задержки преобразования внешним устройством аналогового сигнала в цифровой код, запросы на прерывания от Т/С0 и по входу по времени не совпадают (в результате сброса МК управляющий регистр IP – обнуляется).
Распределение памяти ОЗУ (КР1830ВЕ31).
70h-7Fh - стек;
30h, 31h, 32h – хранение отсчетов , , ;
40h, 41h – хранение выходных отсчетов , ;
50h, 51h – хранение отсчетов , .
Распределение памяти ПЗУ (КР1821РФ55).
0000h – команда перехода к программе инициализации по сигналу RST
0003h – команда перехода к программе вычисления и вывода выходного отсчета по сигналу на входе ;
000Bh – команда перехода к программе формирования импульса внешнего источника данных по сигналу переполнения от Т/С0;
00A0h … 00СFh – программа инициализации;
00D0h … 00FFh – программа формирования импульса запуска внешнего источника данных;
0100h … 07FFh – программа вычисления и вывода выходного отсчета на ЦАП.
Текст программы
Программа "Цифровой фильтр (нижних частот)
Автор: Дмитриев Александр Юрьевич
Дата: 12 мая 2007 года
Разностное уравнение:
Определение символических имен операндов
B0: .EQU 90h ;линия для вывода импульса запуска внешнего ;источника данных
PBRU: .EQU 7002h ;порт РВ РУ 55
RGRU: .EQU 7000h ;регистр управляющего слова РУ 55
SRU: .EQU 00h ;управляющее слово для настройки порта РВ РУ 55
PBRF: .EQU 0801h ;порт РВ РФ 55
RGRF: .EQU 0803h ;регистр направления передачи порта РВ РФ 55
SRF: .EQU 01h ;управляющее слово для регистра направления передачи порта РВ РФ 55
TMOD: .EQU 89h ;регистр управления Т/С
STMOD: .EQU 02h ;управляющее слово для настройки Т/С0
TH0: .EQU 8Ch ;старший байт Т/С0
STH0: .EQU 8Eh ;управляющее слово для задания частоты переполнения Т/С0
TR0: .EQU 8Ch ;управляющий бит пуска Т/С0
IE: .EQU A8h ;регистр управления прерываниями
SIE: .EQU 83h ;управляющее слово для настройки прерываний
B: .EQU F0h ;регистр В
k1: .EQU F8h ;коэффициент =0,97
k2: .EQU D6h ;коэффициент =0,8394
Km: .EQU 5Bh ;коэффициент масштабирования
X: .EQU 30h ;ячейка хранения отсчета
X1: .EQU 31h ;ячейка хранения отсчета
X2: .EQU 32h ;ячейка хранения отсчета
Y: .EQU 40h ;ячейка хранения отсчета
Y1: .EQU 41h ;ячейка хранения отсчета
P1: .EQU 50h ;хранение отсчета
P2: .EQU 51h ;хранение отсчета
FILLCHAR 00h ;записать в пропуски между секциями 00
Инициализация по сигналу 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 ;настройка порта
MOV DPTR, #RGRU ;РВ РУ 55
MOVX @DPTR, A ;на ввод данных
MOV A, #SRF ;настройка порта
MOV DPTR, #RGRF ;РВ РФ 55
MOVX @DPTR, A ;на вывод данных
MOV IE, #SIE ;настройка прерываний
STOP: SJMP STOP ;останов МК
Формирование импульса по внутреннему прерыванию от Т/С0
S2: .SECTION
ORG 000Bh
LJMP START ;переход к п/п формирования импульса запуска внешнего источника данных
S3: .SECTION
ORG 00D0h
START: CLR B0 ;сброс бита В0
SETB B0 ;установка бита В0
RETI ;возврат из п/п обслуживания прерывания от Т/С0
Вычисление выходного отсчета по сигналу внешнего прерывания по входу , рабочий цикл фильтра
S4: .SECTION
ORG 0003h
LJMP XYOUT
S5: .SECTION
ORG 0100h
XYOUT: MOV DPTR, #PBRU ;ввод данных через
MOVX A, @DPTR ;РВ РУ 55
Программный модуль масштабирования:
вычисление произведения =
входной отсчет - в аккумуляторе, масштабированный отсчет записать в ОЗУ
RLC A ;анализ знака
JC M1 ;переход к программе умножения отрицательного отсчета на
RRC A ;восстановление положительного отсета в аккумуляторе
MOV B, #Km ;вычисление произведения
MUL AB ;
MOV X, B ;запоминание масштабированного отсчета в памяти
SJMP M2 ;переход к продолжению
M1: RRC A ;восстановление отрицательного отсчета в аккумуляторе
CPL A ;получение положительного
INC A ;отсчета (смена знака)
MOV B, #Km ;вычисление произведе-
MUL AB ;ния и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;произведения (смена знака) MOV X, A ;запоминание масштабированного отсчета в памяти программный модуль вычисления произведения
хранится в ячейке ОЗУ с адресом X2
записать в ячейку ОЗУ с адресом P1
M2: MOV A, X2 ;копирование в аккуму-
RLC A ;лятор и анализ знака
JC M3 ;переход к программе умножения отрицательного отсчета на
RRC A ;восстановление положительного отсчета в аккумуляторе
MOV B, #k1 ;вычисление произведе-
MUL AB ;ния
MOV P1, B ;запоминание в памяти
SJMP M4 ;переход к продолжению
M3: RRC A ;восстановление отрицательного отсчета в аккумуляторе
CPL A ;получение положительного
INC A ;отсчета (смена знака)
MOV B, #k1 ;вычисление произведе-
MUL AB ;ния и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;отсчета (смена знака)
MOV P1, A ;запоминание в памяти
программный модуль вычисления произведения
хранится в ячейке ОЗУ с адресом Y1
записать в ячейку ОЗУ с адресом P2
M4: MOV A, Y1 ;копирование в акку-
RLC A ;мулятор и анализ знака
JC M5 ;переход к программе умножения отрицательного отсчета на
RRC A ;восстановление положительного отсчета в аккумуляторе
MOV B, #k2 ;вычисление произведе-
MUL AB ;ния
MOV P2, B ;запоминание в памяти
SJMP M6 ;переход к продолжению
M5: RRC A ;восстановление отрицательного отсчета в аккумуляторе
CPL A ;получение положительного
INC A ;отсчета (смена знака)
MOV B, #k2 ;вычисление произведе-
MUL AB ;ния и пересылка
MOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;произведения (смена знака)
MOV P2, A ;запоминание в памяти
программный модуль вычисления выходного
отсчета , слагаемые
хранятся в ячейках ОЗУ, результат записать
в ячейку ОЗУ и вывести на ЦАП
M6: MOV A, X ;вычисление отсчета
ADD A, P1 ;и сохранение в памяти
ADD A, P2 ;
MOV Y, A ;
ADD A, #80h ;получение смещённого
кода для ЦАП
MOV DPTR, #PBRF ;вывод кода Y через порт
MOVX @DPTR, A ;РВ РФ55
программный модуль сдвига отсчетов в памяти, подготовка следующего рабочего цикла
MOV X2, X1 ;
MOV X1, X ;
MOV Y1, Y ;
RETI ;возврат из подпрограммы
обслуживания прерывания
по входу
END
Исходные определения и ручной расчёт результатов работы программы: "Цифровой фильтр (нижних частот)".
Разностное уравнение имеет вид:
Представим уравнение в виде: , где ,
1)Реализуемый коэффициент масштабирования (число без знака) при 8-разрядном формате беззнаковых коэффициентов:
;,
===
2)Реализуемые коэффициенты разностного уравнения и (числа без знака ) при 8-разрядном формате беззнаковых коэффициентов:
;
;
3) Входной положительный отсчет максимальной амплитуды (немасштабированный отсчет):
4)Масштабированный входной положительный отсчет максимальной амплитуды:
:==
5)Зададим состояние памяти после запоминания масштабированных входных отсчетов максимальной амплитуды и выходных отсчетов максимальной амплитуды:
Адрес ячейки памяти | Содержимое ячейки памяти |
X |
|
X1 |
|
X2 |
|
Y | Вычисляется программой:= |
Y1 |
|
P1 | Вычисляется программой: |
P2 | Вычисляется программой: |
6) Получим произведение
7)Получим модуль произведения положительного отсчета на коэффициент :
==
8)Вычислим выходной отсчет:
=
Для отрицательных отсчетов:
3) Входной отрицательный отсчет максимальной амплитуды (немасштабированный отсчет):
4)Масштабированный входной отрицательный отсчет максимальной амплитуды:
:==
5)Зададим состояние памяти после запоминания масштабированных входных отсчетов максимальной амплитуды и выходных отсчетов максимальной амплитуды:
Адрес ячейки памяти | Содержимое ячейки памяти |
X |
|
X1 |
|
X2 |
|
Y | Вычисляется программой:= |
Y1 |
|
P1 | Вычисляется программой: |
P2 | Вычисляется программой: |
6) Получим произведение
7)Получим модуль произведения отрицательного отсчета на коэффициент :
==
8)Вычислим выходной отсчет:
=
... целесообразно решать аппроксимационную задачу. Определим нормированную частоту ограничения фильтра, как отношение = = 0,6666. Нормированная частота в полосе задерживания обычного фильтра НЧ равна . Эта же частота в случае фильтра НЧ с ограниченной полосой пропускания рассчитывается по формуле Из кривых (рис. 1.) по вычисленной и заданным и а определим ...
... и 20-разрядном разрешении составляет 60-80 мс, а минимальное время преобразования АЦП HI-7159 для 18-разрядного разрешения и той же частоты режекции составляет 140 мс. В настоящее время ряд ведущих по аналого-цифровым ИМС фирм, такие как Analog Devices и Burr-Brown, прекратили производство АЦП многотактного интегрирования, полностью перейдя в области АЦ-преобразования высокого разрешения на сигма- ...
... для каждого звена составим разностные уравнения: 1) первое звено: ; 2) второе звено: ; 3) третье звено: . Результирующее разностное уравнение для цифрового фильтра будет иметь вид: .4 РАЗРАБОТКА АЛГОРИТМА ПРОГРАММЫ ПРОЕКТИРУЕМОГО УСТРОЙСТВА Прежде чем приступить к программированию устройства необходимо основательно изучить его внутреннюю структуру и возможности ресурсов. ...
... пропускают или задерживают сигналы, лежащие в определённых полосах частот. Фильтры можно классифицировать по их частотным характеристикам: 1. Фильтры нижних частот (ФНЧ) – пропускают все колебания с частотами не выше некоторой частоты среза и постоянную составляющую. 2. Фильтры верхних частот (ФНЧ) – пропускают все колебания не ниже некоторой частоты среза. 3. Полосовые фильтры (ПФ) – ...
0 комментариев