Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Можаев_6.doc
Скачиваний:
4
Добавлен:
12.09.2019
Размер:
1.02 Mб
Скачать
    1. Мультиплексор

Рис. 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- общий вывод (цифровая земля).

    1. Расчет выходного усилителя перед цаПом

Усилитель 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

Находим

Выберем кОм, кОм.

Получим кОм, кОм.

    1. Расчет выходного усилителя после мультиплексора

Усилитель DA4 предназначен для преобразования выходного напряжения. Операционный усилитель включен по схеме инвертирующего суммирующего усилителя, входному напряжению минус 5 В соответствует напряжение 5 В на выходе, а напряжению 5 В – выходное напряжение минус 5 В.

R30

R29

U2

Uвых2

DA4

R31

Рис. 5.4. Выходной усилитель

Запишем выражение для выходного напряжения усилителя:

Uвых2=-(R30/ R29)U2.

  1. Описание программы

.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

; конец программного модуля