- •Содержание
- •Задание
- •Принцип работы проектируемого устройства
- •Математическая модель цифрового фильтра высоких частот
- •Описание принципиальной электрической схемы
- •Цифро-аналоговый преобразователь
- •Мультиплексор
- •Расчет выходного усилителя перед цаПом
- •Расчет выходного усилителя после мультиплексора
- •Описание программы
- •Список использованной литературы
Мультиплексор
Рис. 5.2. Схема мультиплексора 590КН3
Сдвоенный аналоговый мультиплексор 4 линии в одну. Назначение выводов: I00-I03 - аналоговые входы (выходы) мультиплексирующиеся на выход O0. I10-I13 - аналоговые входы (выходы) мультиплексирующиеся на выход O1. O0, O1 - аналоговые выходы (входы). A,B - адрес (выбор соединения). En - разрешение: En=L - выход изолирован от входов (закрыто);En=H - выход соединен с адресуемым входом (открыто). E+ положительное напряжение питания (+5 в). E- отрицательное напряжение питания (-15 в). Gnd- общий вывод (цифровая земля).
Расчет выходного усилителя перед цаПом
Усилитель DA3 предназначен для преобразования входного диапазона напряжений от
0...5 В в диапазон ±5 В. Операционный усилитель включен по схеме инвертирующего суммирующего усилителя, входному напряжению 0 В соответствует напряжение 5 В на выходе, а напряжению 5 В – выходное напряжение минус 5 В.
Uвх2
R26
R25
R27
Uсм2
U2
DA3
R28
Рис. 5.3. Выходной усилитель ВУ
Запишем выражение для выходного напряжения усилителя:
,
Выберем UСМ = -10 В. Тогда из системы уравнений
5 =(-R26/ R25) 0+ (R26/ R27) 10;
-5=(-R26/ R25) 5+ (R26/ R27) 10
Находим
Выберем кОм, кОм.
Получим кОм, кОм.
Расчет выходного усилителя после мультиплексора
Усилитель DA4 предназначен для преобразования выходного напряжения. Операционный усилитель включен по схеме инвертирующего суммирующего усилителя, входному напряжению минус 5 В соответствует напряжение 5 В на выходе, а напряжению 5 В – выходное напряжение минус 5 В.
R30
R29
U2
Uвых2
DA4
R31
Рис. 5.4. Выходной усилитель
Запишем выражение для выходного напряжения усилителя:
Uвых2=-(R30/ R29)U2.
Описание программы
.PROGRAM KURS_MPU |
; имя программного модуля |
|
|||||
#include C:\LabMKP\03_405\Mb90V590.h |
; включение заголовочного файла |
||||||
.EXPORT _main |
; объявление общедоступным имени программы |
|
|||||
.SECTION DATA_MAIN, DATA, ALIGN=2
|
; описание сегмента данных программы |
|
|||||
UK .RES.B 1 SIGNY .RES.B 1 |
; резервируем память для u(к) и знака у(к) |
|
|||||
.SECTION CODE_MAIN, CODE, ALIGN=2 |
; описание кодового сегмента программы |
|
|||||
_main: MOV R0, #159 |
; задаем значение а из разностного уравнения (*) |
|
|||||
MOVW RW0, #0 |
; задаем значение b из разностного уравнения (*) |
|
|||||
MOV R3, #0 |
; u(K-1)=0, в R3 храним значение u(K-1) |
|
|||||
MOVW RW2, #0 |
; y(K-1)=0, в RW2 храним значение y(K-1) |
|
|||||
MOV DDR8, #H'FF |
; инициализация порта P8 на вывод |
|
|||||
MOV ADCS0, #H'00
|
; настройка регистров управления АЦП (режима работы, способ запуска и т. д.) |
|
|
||||
MOV ADCS1, #H'00 |
|
||||||
MOV ADCR1, #H'E8
|
; устанавливаем восьмиразрядное преобразование |
|
|||||
MOV ADER, #H'FF
|
; переводим порт Р6 в режим альтернативной функции |
|
|||||
MOVW TMRLR0, #H'07D0 |
; инициализация таймера на период дискретизации 1мс |
|
|||||
MOVW TMCSR0, #H'0013 |
|
||||||
MOV SIGNY, #0 |
; обнуляем знак y(k) |
|
|||||
М1: MOVW RW1, #169 |
; задаем значение из разностного уравнения (*) |
|
|||||
SETB ADCS1:1 |
; подаем сигнал START на АЦП |
|
|
||||
WBTC ADCS1:7 |
; ждем окончания преобразования (BUSY = 0) |
|
|||||
MOV A, ADCR0 |
; считываем в аккумулятор результат преобразования. При тестировании задаём вместо ADCR0 константу #50. |
|
|||||
MOV UK, A |
; сохраняем результат, чтобы после вычислений присвоить u(k-1) |
|
|||||
SUB A, R3 |
; u = u(k) – u(k–1) |
|
|||||
CMP A, #0 |
; сравниваем u с нулем |
|
|||||
BGE LOOP1 |
; если u 0, то переход к метке LOOP1 |
|
|||||
NEG A |
; u < 0, поэтому для умножения меняем знак |
|
|||||
MULU A, R0 |
; находим а*u |
|
|||||
NEGW A |
; возвращаем знак |
|
|||||
JMP LOOP2 |
; переход к метке LOOP2 |
|
|||||
LOOP1: MULU A, R0 |
; находим а*u |
|
|||||
LOOP2: ADDW A, RW2 |
; находим y(k-1) + a*u |
|
|||||
CMPW A, #0 |
; сравниваем y(k-1) + a*u с нулем |
|
|||||
BGE LOOP3 |
; если y(k-1) + a*u 0, то переход к метке LOOP3 |
|
|||||
MOV SIGNY, #1 |
; y(k-1) + a*u < 0, поэтому знак y(k) “” |
|
|||||
NEGW A |
; так как y(k-1) + a*u < 0, то меняем знак |
|
|||||
JMP LOOP4 |
; переход к метке LOOP4 |
|
|||||
LOOP3: MOV SIGNY, #0 |
; y(k-1) + a*u > 0, поэтому знак y(k) “+” |
|
|||||
LOOP4: MULUW A, RW0 |
; находим b*(y(k-1)+a*u) |
|
|||||
DIVUW A, RW1 |
; находим y’(k-1)=b*(y(k-1)+a*u)/c |
|
|||||
MOVW RW2, A |
; y(k-1) = y’(k-1) |
|
|||||
MOV R3, UK |
; u(k-1) = u(u) |
|
|||||
MOV R1, #1 |
; задаем значение из разностного уравнения равное 1. |
|
|||||
DIVU A, R1 |
; находим y(k) = y’(k-1)/d |
|
|||||
MOV R2, A |
; в R2 целая часть [y(k)], в R1 дробная |
|
|||||
MOV A, R1 |
|
||||||
CMP A, #50 |
; сравниваем R1 с 50 |
|
|
||||
BLO LOOP5 |
; если R1 < 50, то переход к метке LOOP5 |
|
|||||
INC R2 |
; R1 50, поэтому увеличиваем на единицу y(k) |
|
|||||
LOOP5: MOV A, SIGNY |
; сравниваем знак y(k) SIGNY с нулем |
|
|||||
CMP A, #0 |
|
||||||
BEQ LOOP6 |
; если SIGNY “+”, то переход к метке LOOP6 |
|
|||||
NEGW RW2 |
; так как SIGNY “”, то меняем знак у |
|
|||||
NEG R2 |
|
||||||
LOOP6: MOV A, #0 |
; смещение y(k) отсутствует |
|
|||||
ADD R2, A |
|
||||||
WBTS TMCSR0:2 |
; ожидаем установки бита UF |
; задержка на 1мс |
|
||||
CLRB TMCSR0:2 |
; сбрасываем бит UF |
|
|||||
MOV PDR8, R2 |
; выдача результата y(k) на ЦAП |
|
|||||
JMP M1 |
; перейти к метке _main |
|
|||||
RET |
; возврат из подпрограммы |
|
|||||
.END |
; конец программного модуля |
|