Станочная магистраль

Анализ сигналов управления и контроля. Принцип работы платы интерфейса станочной магистрали. Расчет тахограммы движения привода, разработка программного обеспечения на языке Ассемблер. Определение точности регулирования по показаниям датчика положения.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.06.2011
Размер файла 780,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

1. Анализ сигналов управления и контроля

Рис. 1. ? Сигналы управления и контроля

В выше приведённой структурной схеме имеются следующие сигналы управления и контроля:

1. Аналоговый сигнал с выхода ЦАП - сигнал управления, поступающий на управляющий вход преобразователя.

2. Сигнал разрешения работы - сигнал с выхода ЦДП.

3. Сигнал контроля (завершение работы) - сигнал, поступающий на вход ДЦП. Устанавливается путём включения сухого контакта.

4. Контроль точности перемещения - сигнал с выхода фотоимпульсного датчика пути.

2. Интерфейс станочной магистрали

Интерфейс предназначен для подключения к IBM PC оборудования станочной магистрали и переключателей корректоров УЧПУ. Принцип подключения интерфейса к IBM PC - через стандартную шину ISA (Industry Standard Architecture).

Рис. 2. ? Схема IBM совместимого интерфейса станочной магистрали

Состав и принцип работы платы интерфейса.

На аппаратном уровне производится запись данных от ЭВМ в регистр с адресом 300h для формирования данных станочной магистрали, затем запись данных в регистр 302h для формирования адреса регистров субблоков станочной магистрали и, наконец, запись данных в регистр с адресом 304h для формирования сигналов управления станочной магистрали. Аппаратно обеспечено чтение шины данных станочной магистрали и регистров корректоров пульта оператора. На макрокомандном уровне производятся операции обращения к регистрам субблоков станочной магистрали при записи и чтении.

Обмен IBM РС с регистрами платы интерфейса - программный, 16-битовый. Адреса регистров интерфейса расположены в области адресов прототипных плат устройств ввода-вывода шины ISA (300h-306h). Режим аппаратных прерываний и соответственно векторы прерываний интерфейсом не поддерживаются.

Плата интерфейса обеспечивает:

1) выдачу из IBM на станочную магистраль и чтение со станочной магистрали для всех субблоков 16-битовой информации по информационным шинам MD0 - MD15;

2) формирование прямых адресных сигналов А01 - А04 и дополнительных инверсных адресных сигналов «Вх.Вых», «ЦАП», «Датчики» и «АЦП»;

3) формирование специальных сигналов управления «ВВОД», «ВМБ», «ВСБ», «СБРОС»;

4) ввод в IBM данных с переключателей корректоров скорости подачи F и скорости шпинделя S;

5) согласование временных диаграмм выдачи информационных, адресных сигналов и сигналов управления в соответствии с аппаратными решениями субблоков станочной магистрали.

Описание работы интерфейса:

Функционально плата интерфейса состоит из следующих основных частей:

· дешифратора адреса;

· 16-разрядного буфера входной (для IBM) информации;

· 16-разрядного буфера выходной информации;

· 16-разрядного регистра информационных сигналов станочной магистрали;

· 8-разрядного регистра основных и дополнительных адресных сигналов станочной магистрали;

· 8-разрядного регистра специальных управляющих сигналов;

· 11-разрядных регистров состояния корректоров F и S;

Функциональная схема платы интерфейса представлена на рис. 2. Дешифратор адреса формирует следующие сигналы управления регистрами платы:

R300 - чтение сигналов станочной магистрали УЧПУ из входного буфера в IBM (шина ISA);

W300 - запись из выходного буфера 16-ти разрядного регистра информационных сигналов станочной магистрали MD0 - MD15;

W302 - запись из выходного буфера 8-разрядного регистра основных и дополнительных адресных сигналов станочной магистрали в регистр 302h;

W304 - запись из выходного буфера регистра специальных управляющих сигналов в регистр 304h;

VIV - вывод информации в 16-разрядный буфер выходной информации.

Шестнадцатиразрядный входной буфер (для IBM) информации предназначен для ввода в IBM на ее шину данных SD0 - SD15 информации с 16 линий станочной магистрали MD0 - MD15 соответственно.

Шестнадцатиразрядный выходной буфер (для IBM) информации предназначен для буферизации и промежуточного хранения 16-ти битовой информации, выдаваемой с шин данных SD0 - SD15 IBM на станочную магистраль MD0 - MD15 (через регистры информационных, адресных и специальных управляющих сигналов).

Шестнадцатиразрядный регистр данных предназначен для вывода 16 разрядов информации из IBM через буфер выходной на информационные шины станочной магистрали MD0 - MD15.

Восьмиразрядный регистр адресных сигналов предназначен для промежуточного хранения и выдачи на станочную магистраль основных A01 - A04 и дополнительных адресных разрядов, поступающих с шины данных ISA через буфер выходной информации (разряды 8 - 15).

Восьмиразрядный регистр специальных управляющих сигналов предназначен для промежуточного хранения и выдачи на станочную магистраль специальных сигналов управления «Ввод», «ВМБ», «ВСБ», а также формирования вспомогательных сигналов «Сброс», «VKF», «VKS», поступающих с шины данных ISA через буфер выходной информации (разряды 0 - 7).

Работа схемы.

Рассмотрим процесс ввода данных в ЭВМ из станочной магистрали (чтение регистров субблоков станочной магистрали). При выполнении процессорной команды ввода IN процессор выставляет на шине адреса ША адрес регистра основных и дополнительных адресных сигналов - 302h, на шине управления ШУ - сигналы AEN, IOR, BALE. По сигналу AEN с шины управления на вход дешифратора адреса (ДША) поступает сигнал чтения IOR, по сигналу BALE адрес регистра поступает на ДША. Если адрес регистра верный, то на выходе ДША формируется сигнал IOCS16, свидетельствующий о том, что адресуемое устройство поддерживает 16-битное обращение к портам, и сигнал W302, который в свою очередь формирует сигнал VIV. Сигнал VIV разрешает передачу адреса с шины данных ШД через шинные формирователи в регистр основных и дополнительных адресных сигналов. Сигнал W302 разрешает передачу адреса из регистра на станочную магистраль. Далее формируется сигнал «Ввод» следующим образом:

- IBM выставляет на шине адреса ША адрес регистра специальных управляющих сигналов (304h), а на шине управления ШУ сигналы AEN, IOR, BALE;

- по сигналу BALE адрес 304h поступает на ДША, c ДША формируется сигнал IOCS16 и W304, который в свою очередь формирует сигнал VIV;

- сигнал VIV разрешает передачу бита Ввод с шины данных SD в регистр специальных управляющих сигналов. По сигналу W304 сигнал Ввод поступает на станочную магистраль. Затем IBM на шине адреса устанавливает адрес 300h, а на шине управления сигналы AEN, IOR, BALE.

- по сигналу AEN на ДША поступает адрес 300h. ДША выдает сигналы IOCS16 и R300, который разрешает передачу данных из станочной магистрали через шинные формирователи на шину данных ШД. Далее аналогично установке сигнала ВВОД происходит его сброс.

Процесс передачи данных из IBM в станочную магистраль рассмотрим на примере записи в регистр ЦАП.

IBM выставляет на шине адреса ША адресный код 302h, на шине управления ШУ - сигналы AEN, IOW, BALE. По сигналу BALE адрес 302h через шинные формирователи проходит на ДША. На выходе ДША формируется сигнал IOCS16 и W302, который в свою очередь формирует сигнал VIV. Сигнал VIV разрешает передачу адреса регистра ЦАП с шины данных SD через шинные формирователи в регистр основных и дополнительных адресных сигналов R302. Сигнал W302 разрешает передачу адреса на станочную магистраль. После того как на станочную магистраль поступил адрес регистра ЦАП, передаются данные. IBM выставляет на шине адреса ША адрес регистра информационных сигналов (300h), на шине управления ШУ - сигналы AEN, IOW, BALE. По сигналу BALE адрес 300h поступает на ДША. ДША выдает сигнал W300, который в свою очередь формирует сигнал VIV. Сигнал VIV разрешает передачу данных с шины данных SD через шинные формирователи в регистр Reg300. Сигнал W300 разрешает передачу данных из регистра Reg300 на станочную магистраль. Далее на шине адреса ША устанавливается адрес регистра специальных управляющих сигналов 304h, на шине управления ШУ сигналы AEN,IOW, BALE, на шине данных сигналы ВМБ или ВСБ (или оба), в зависимости от того как передаются данные (байт или слово). По сигналу BALE адрес регистра специальных управляющих сигналов поступает на ДША. ДША выдает сигнал W304, который формирует сигнал VIV. Сигнал VIV разрешает передачу сигнала ВМБ или ВСБ в регистр специальных управляющих сигналов. По сигналу W304 сигнал ВМБ или ВСБ поступает на станочную магистраль. Затем происходит аналогичный установке сигналов процесс их сброса.

3. Проектирование переменных, форматы регистров управления и

контроля

Необходимо прокрутить привод на 40 оборотов в прямом направлении с максимальной частотой вращения вала в 200 об/мин и временем разгона в 1с., и в обратном направлении с максимальной частотой в 400 об/мин, временем разгона в 2с. Проконтролировать точность перемещения привода с помощью путевых датчиков.

Рис. 3. ? Тахограмма движения привода

Необходимо рассчитать тахограмму из условий:

· суммарный пройденный путь

S?+=S?-=40об., где S?+=Sp++Sy++Sт+, S?-= Sp-+Sy-+Sт-

· время разгона/торможения при движении в прямом направлении

tp+=tт+=1с.

· время разгона/торможения при движении в обратном направлении

tp-=tт-=2с.

Уточнение: при Uзс=10В привод вращается с частотой в 800 об/мин, следовательно, для частоты в 200 об/мин необходимо задать на ЦАП значение Ny+=Nymax/4=16383/4?4096 ед., для 400 об/мин соответственно - Nу-?8192ед.

щmax+=(2р·nmax+)/60?21рад/с.

щmax-=(2р·nmax-)/60?42рад/с.

Равномерный разгон будет осуществляться путем приращения значения Nу каждый промежуток времени, для чего разделим время на кванты T0=0.01с. Следовательно, величина приращения для разгона и торможения привода при движении в прямом и обратном направлениях

?Ny=Ny+/100=Nу-/200?±41ед.

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

для прямого направления:

· угол поворота при разгоне/торможении

цр+т+=(щmax+·tp+)/2=(21·1)/2=10,5рад (?1,67об.)

· оборотов пройдено в установившемся режиме

цу+=2р· S?+-2·цр+= 2р·40-2·10,5?230 рад (?37об.)

· время движения в установившемся режиме

tу+у+max+=230/21?11 с.

для обратного направления:

· угол поворота при разгоне/торможении

цр-т-=(щmax-·tp-)/2=(42·2)/2=42 рад (?6,7об.)

· оборотов пройдено в установившемся режиме

цу-=2р· S?--2·цр-= 2р·40-2·42?167 рад (?26,6об.)

· время движения в установившемся режиме

tуст-у-max-=167/42?4с.

По итогам расчета видно, что необходимое следующее количество квантов времени для осуществления движения привода по данной тахограмме:

· прямое направление:

- по 100T0 на разгон/торможение, 1100T0 на установившийся режим.

· обратное направление:

- по 200T0 и 400T0 соответственно.

Уточнение форматов используемых регистров:

1) Форматы регистров интерфейса станочной магистрали:

· Reg300 - регистр данных, все 16 разрядов - данные

· Reg302 - регистр адреса. Формирование адреса регистра необходимого устройства можно пояснить рис. 4:

Рис. 4. ? Формат регистра интерфейса станочной магистрали Reg302

Т.е. биты 7-4 отвечают за выбор субблока, а 3-0 - за выбор одного из устройств (их обычно несколько).

· Reg304 - регистр сигналов управления. Сигналы распределены по битам следующим образом:

Рис. 5. ? Формат регистра интерфейса станочной магистрали Reg304

Имеем следующие сигналы управления:

VKS - ввод корректора скорости шпинделя (низкий уровень)

VKF - ввод корректора контурной скорости (низкий уровень)

СБРОС - сброс всех регистров станочной магистрали (низкий уровень)

ВСБ - выбор старшего байта

ВМБ - выбор младшего байта

ВВОД - чтение регистров станочной магистрали

Формирование операций записи/чтения станочной магистрали выполняется с помощью записи в эти регистры определенных последовательностей, который для упрощения оформлены в виде макрокоманд:

WriteReg adr,data - макрокоманда записи в регистр СМ

ReadReg adr,data - макрокоманда чтения регистра СМ

Листинг этих макрокоманд будет приведен в программной части проекта.

2) регистр ЦАП - адрес 1676468 (0D300h):

Рис. 6. ? Формат регистра ЦАП

3) регистр блока дискретного ввода - адрес 167610 8 (0Е400h):

Рис. 7. ? Формат регистра ДЦП

4) регистры блока фотоимпульсного датчика - адрес 1677008,1677028 (0В000h,0B100h):

В младшем слове размещены четыре тетрады с младшими десятичными цифрами, в старшем - три старшие цифры десятичного значения датчика от 0 до 9,999,999. Читать следует последовательно оба слова, т.к. при обращении к младшему слову блокируется процесс копирования счетчиков в регистры, он возобновляется только при прочтении старшего слова.

4. Разработка программного обеспечения

интерфейс станочный магистраль датчик

Алгоритм управления объектом

Рис. 8. ? Блок-схема алгоритма программы

Среда разработки программного обеспечения

Программирование на языке Ассемблер выполняется в среде программирования ТASM (турбоассемблер), включающей следующие программные продукты:

1. Tasm.exe - транслятор фирмы Borland, выполняющий преобразование конструкций языка Assembler в исходном файле name.asm в машинные коды. Процесс трансляции отражается в создаваемом файле (листинге) name.lst с указанием ошибок трансляции. При успешной трансляции создает объектный файл name.obj в качестве исходного для процесса компоновки.

2. Tlink - компоновщик (редактор связей), преобразующий объектный файл в исполняемый name.exe

3. Name.bat - командный файл, последовательно запускающий процессы трансляции и компоновки с образованием файлов с указанными именами.

4. Td.exe - отладчик, позволяющий выполнить созданную программу по шагам (команда за командой), прогон программы до намеченных точек останова, наблюдения содержания регистров процессора, ячеек стека, ячеек сегмента данных для поиска и устранения логических ошибок.

5. tdhelp - файл справочных данных для вызова помощи при работе в среде турбоассемблера.

6. tdinst - файл для инструментальной настройки среды программирования - цветности, указания необходимости создания файла перекрестных ссылок, другие опции.

7. Macro.lib, Proc.lib -библиотечные файлы с макрокомандами и процедурами, включаемые в исходный модуль пользователя name.asm.

Многозадачная ассемблер-программа пользователя

karkas.asm с встроенным меню:

;karkas.asm, структура программы

Include macro.lib ;файл с макрокомандами общего назначения

Include macrot.lib ;файл с макрокомандами системной магистрали

Ideal ;директива транслятора

Model Small ;модель памяти, доступны идентификаторы: @code, @data, ;@stack

Assume cs:@code, ds:@data, ss:@stack, es:@data ;привязка сегментов памяти к регистрам

;*************************************************

Codeseg ;начало сегмента кода

Start: ;пусковой (начальный) адрес программы

;Установить ds на сегмент данных

mov ax,@data ;адрес сегмента данных в

mov ds,ax ;в регистр ds

;Сохранить начальное значение регистра ES

mov ax,es ;значение регистра es

mov [word ptr ExSg],ax ;записать в поле ExSg

;Сохранить параметры системы

mov ax,ds ;переписать ds

mov es,ax ;в es

mov bx,OFFSET SistemArea ;смещение переменной - в bx

mov ax,1C01h

mov cx,111b

int 10h ;прерывание BIOS

;Инициализация экрана

;Установка видеорежима, текстовый, 80/25.

mov ah,0 ;16-цветный

mov al,3 ;текстовый режим

int 10h ;прерывание BIOS

;Вывод меню программы пользователя

menu: ClearScreen

mov [AdrGotoMenu],OFFSET menu

OpenMenu Menu_0 ;открыть меню Menu_0

ActivMenu Menu_0 ;активизировать меню Menu_0

mov al,[CaseMenu] ;адрес строки выбора в меню

cmp al,[ActivString] ;активизировать строку в меню

jnz @@1

CloseMenu Menu_0 ;закрыть меню Menu_0

@@1: mov bx,[AdrCaseMenu]

mov di,[bx]

jmp di

;сегмент кода пользователя

Zad1: ClrScr 0F4h ;задача 1

jmp menu

Zad2: ClearScreen ;задача 2

jmp menu

Zad3: ClrScr 0Ach ;задача 3

jmp menu ;выход в меню

Zad4: ClrScr 0Ach ; задача 4

jmp menu ; выход в меню

Zad5: ClrScr 14h ;задача 5

jmp menu ;выход в меню

Zad6: ClrScr 72 ;задача 6

jmp menu ;выход в меню

TestKey: ;тест клавиатуры, коды и сканкоды

Locate 4,15 ;курсор в позицию 4, 15

Print klava ;сообщение на монитор

Locate 4,16 ;курсор

Print Codes ;сообщение

@@1: KeyWait ;ввод и чтение кодов

cmp al,3 ;это код Ctrl+C?

jnz @@2 ;если нет, на метку @@2

jmp @@3 ;на метку @@3

@@2: push ax ;сохранить коды в стеке

mov bx,0 ;

mov bl,al ;в bl - код нажатой клавиши

Locate 4,17 ;курсор для текса

Print Code ;текст «код:» - на экран

Call _Print2 ;вывод кода в двоичном

Tout ' ' ;пробел на экран

Tout ' '

Call _Print16 ;вывод кода в 16-теричном

Tout ' '

Tout ' '

Call _Print10 ;вывод кода в 10-тичном виде

Tout ' '

Tout ' '

Locate 4,18 ;курсор для сообщения

Print ScanCod ;сканкод:

pop ax

mov bx,0

xchg ah,bl ;обмен байтов в bx

Call _Print2 ;вывод сканкода в двоичном

Tout ' '

Tout ' '

Call _Print16 ;вывод сканкода в 16-теричном

Tout ' '

Tout ' '

Call _Print10 ;вывод сканкода в 10-тичном

jmp @@1

@@3: ClearScreen ;очистить экран

jmp menu ;выход в меню

;===============

;Выход в DOS

exitDOS:

mov ax,ds

mov es,ax

mov bx,OFFSET SistemArea

mov ax,1C02h

mov cx,111b

int 10h

mov ax,0600h;

mov bh,7

mov cx,0

mov dx,184Fh

int 10h

mov ax,4C00h

int 21h

;включить процедуры (подпрограммы) в файлах

Include "menu.prc" ;включить процедуры меню

Include "proc.lib" ;включить библиотеку процедур

Ends ;конец сегмента кода

Dataseg ;начало сегмента данных

Include "menu.kar" ;включить файл с данными меню.

;данные для теста клавиатуры

Code DB ' Код (al):$ '

ScanCod DB 'Сканкод(ah):$ '

Codes DB ' двоичное 16-ричное 10-ричное $ '

klava DB 'Нажимаем клавишу для получения кода (возврат по Ctrl/C):$ '

;============================================

Znak DB '+' ;знак числа.

ExSg DW 0 ;хранение регистра es

;Область для сохранения параметров системы

SistemArea DB 1024 DUP(0) ;память для системных данных

FName DB 63 DUP(0) ;поле для ввода имени файла

;Переменные для процедур и макрокоманд

ZnakX DW 0 ;признак знака +X

ZnakY DW 0 ;признак знака +Y

Ml DW 0 ;младшее слово

St DW 0 ;старшее слово

temp DW 0 ;временное хранение

mn10 DW 10 ;сомножитель =10

mn10000 DW 10000 ;сомножитель=10000

Mult DW 10

BinVal DW 0,0,0,0 ;переменная для двоичного

AscVal DW 0,0,0,0 ;переменная текстовая

AscLen DW 0 ;длина текста

Error DW 0 ;ощибка чтения файла

FileLen DW 0 ;длина файла

FileNumber DW 0 ;номер файла

Handle DW 0 ;номер

Er DW 0 ;номер ошибки

Errorf1 DB 'Ошибка 1 чтения файла$'

Errorf2 DB 'Ошибка 2 чтения файла 2$'

Errorf3 DB 'Ошибка 3 чтения файла$'

F_error DB 'Ошибка чтения файла$'

Ends ;конец сегмента данных

Stack 200h ;начало сегмента стека размером 200h

END Start ; конец программы, ее стартовый адрес

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

Текст программы следующий:

Кодовый сегмент:

Include macro1.lib; подключение библиотек

Include macrot.lib; с необходимыми

Include macro.lib; макрокомандами

ClearScreen; очистка экрана

mov [FK],0

PrintXY 0,2,msg1; вывод сообщения «начало работы»

Reset; сброс всех регистров СМ

ReadReg700; чтение регистра датчика положения

PrintXY2Dec 0,5,Dat700; вывод значения ДП

TaimIni 11932,Wp1; макрокоманда начала обработки прерывания

по таймеру с вектором на метку Wp1

b: ReadReg610; чтение регистра входных сигналов

mov ax,Reg610; пересылка в аккумулятор значения рег-ра ДЦП

test ax,8000h; проверка состояния 15го бита рег-ра ДЦП

jnz @@33; если не «0», тогда на метку @@1

cmp [FK],1

jz @@33

jmp b; переход на метку b

@@33: ExitInt; макрокоманда выхода из прерывания

ReadReg700;

PrintXY2Dec 0,7,Dat700;

Reset;

jmp menu; выход из программы

Wp1: push ax; сохранение в стек значений

push cx; регистров ax, cx, dx

push dx;

add [cappp],41; приращение к переменной cappp числа 41

WriteReg 0D300h,cappp; макрокоманда записи в регистр ЦАП

dec [wr1]; уменьшение на единицу значения wr1

jnz endd1; если значение wr1 не равно 0, то на метку endd1

TaimIni1 11932,Wp2;

endd1: mov al,20h;

out 20h,al;

pop dx; восстановление значений регистров

pop cx; ax, cx, dx

pop ax;

sti; разрешение прерываний

iret; выход из прерывания

Wp2: push ax;

push cx;

push dx;

ReadReg700;

PrintXY2Dec 0,7,Dat700;

dec [wu1]

jnz endd2

TaimIni1 11932,Wp3;

endd2: mov al,20h;

out 20h,al;

pop dx;

pop cx;

pop ax;

sti;

iret;

Wp3: push ax;

push cx;

push dx;

ReadReg700;

PrintXY2Dec 0,7,Dat700;

add [cappp],-41;

WriteReg 0D300h,cappp;

dec [wt1];

jnz endd3;

mov wt1,100

mov cappp,8000h

TaimIni1 11932,Wp4

endd3: mov al,20h;

out 20h,al;

pop dx;

pop cx;

pop ax;

sti;

iret;

Wp4: push ax;

push cx;

push dx;

ReadReg700;

PrintXY2Dec 0,7,Dat700;

add [cappp],41;

WriteReg 0D300h,cappp;

dec wr2;

jnz endd4;

TaimIni1 11932,Wp5;

endd4: mov al,20h;

out 20h,al;

pop dx;

pop cx;

pop ax;

sti;

iret;

Wp5: push ax;

push cx;

push dx;

ReadReg700;

PrintXY2Dec 0,7,Dat700;

dec wu2;

jnz endd5;

TaimIni1 11932,Wp6;

endd5: mov al,20h;

out 20h,al;

pop dx;

pop cx;

pop ax;

sti;

iret;

Wp6: push ax;

push cx;

push dx;

ReadReg700;

PrintXY2Dec 0,7,Dat700;

add [cappp],-41;

WriteReg 0D300h,cappp;

dec wt2;

jnz endd6;

mov cappp,0

mov [FK],1

endd6: mov al,20h;

out 20h,al;

pop dx;

pop cx;

pop ax;

sti;

iret;

Сегмент данных:

cappp dw 0

wr1 dw 100

wu1 dw 1100

wt1 dw 100

wr2 dw 200

wu2 dw 400

wt2 dw 200

FK dw 0

msg1 db `Таймерное управление$'

Листинг макрокоманд, использованных в данной программе:

;============================

KeyRead MACRO ;Проверяется наличие кода клавиши в буфере клавиатуры,

push ax

mov ah,1 ;но буфер клавиатуры не очищается,

int 16h ;и выставляется Z=1, если буфер пуст.

pop ax ;если z=0, вызывается KeyWait для чтения кода

ENDM

;============================

PrintXY2Dec MACRO X,Y,vol ;вывод на экран данных в 2-10 формате в позицию

Locate X,Y ;vol - младшее слово

mov ax,[vol] ;младшее слово датчика(167700)

mov bx,[vol+2] ;старшее слово датчика(167702)

Call _Print2Dec ;процедура вывода двойного слова в дес. формате.

Tout ' '

ENDM

;============================

TaimIni MACRO freq,vector ;инициализация таймера 0

;с настойкой частоты и вектора

mov al,0 ;очистка масок прерываний

out 21h,al ;

cli ;запретить прерывания

push ds ;сохранить регистры

push es ;

mov ah,35h ;сохраняем старые вектор прерываний

mov al,08h ; IRQ8 в отведенных ячейках

int 21h ;

mov [oldip8],bx ; адрес смещения

mov [oldcs8],es ;и сегмента

mov dx,offset vector ;устанавливаем новый пользовательский

mov ax,seg vector ;вектор прерывания с указанием

mov ds,ax ;на программу обслуживания

mov ah,25h ;

mov al,08h ;

int 21h ;

mov al,00110110b ;перепрограммирование нулевого канала

out 43h,al ;таймера на частоту, равную 1,19Мгц

mov ax,freq ;деленную на введенный коэффициент

out 40h,al ;

mov al,ah ;

out 40h,al ;

pop es ;восстановить регистры

pop ds

sti ;

ENDM

;============================

TaimIni1 MACRO freq,vector ;инициализация таймера 0

;с настойкой частоты и вектора, не сохраняя старого

;вектора прерывания

mov al,0 ;очистка масок прерываний

out 21h,al ;

cli ;запретить прерывания

push ds ;сохранить регистры

push es ;

mov dx,offset vector ;устанавливаем новый пользовательский

mov ax,seg vector ;вектор прерывания с указанием

mov ds,ax ;на программу обслуживания

mov ah,25h ;

mov al,08h ;

int 21h ;

mov al,00110110b ;перепрограммирование нулевого канала

out 43h,al ;таймера на частоту, равную 1,19Мгц

mov ax,freq ;деленную на введенный коэффициент

out 40h,al ;

mov al,ah ;

out 40h,al ;

pop es ;восстановить регистры

pop ds

sti ;

ENDM

;===========================

ExitInt MACRO ;Выход из программы с применением Таймера

cli ;запретить прерывания на время

mov al,00110110b ;программирования нулевого канала

out 43h,al ;таймера на стандартную

;частоту прерываний

sub ax,ax ;в счетчик таймера заносится 0

out 40h,al ;и выполняется деление

mov al,ah ;1193180:65536=18,2Гц

out 40h,al ;

push ds ;сохранить на время

push es ;восстановления

mov dx,[oldip8] ;восстановление системного вектора

mov ax,[oldcs8] ;прерывания IRQ8

mov ds,ax ;

mov ah,25h ;

mov al,08h ;

int 21h ;

pop es ;восстановить использованные

pop ds ;регистры

mov al,0 ;очистка масок прерываний

out 21,al ;

sti ;разрешение прерываний

ENDM

;===========================

Reset MACRO

mov dx,304h ;сброс интерфейса

mov ax,0fff0h ;СБР - активен

out dx,ax ;

mov ax,0fff8h ;СБР - пассивен

out dx,ax ;

ENDM

;===========================

;===========================

ReadReg610 MACRO

ReadReg 0E400h,Reg610

ENDM

;===========================

ReadReg700 MACRO ;чтение регистров датчика 167700,702

ReadReg 0B000h,Dat700 ;в переменные Dat700,Dat700+2

ReadReg 0B100h,Dat702

ENDM

;===========================

ReadReg MACRO adr,reg ;чтение вх. регистра. адрес вх. регистра в 302

;adr-адрес вх. регистра, имя регистра

mov dx,302h ;передать в интерфейс IBM-магистраль

mov ax,adr ;адрес регистра

out dx,ax ;вывести по адресу 302

mov dx,304h; ;по адресу 304-записать 1

mov ax,0fff9h ;установить бит ВВОД

out dx,ax ;

mov dx, 300h ;считать из входного буфера

in ax,dx ;состояние станочной магистрали

not ax

mov [reg],ax

mov dx,304h ;сбросить бит ввод

mov ax,0fff8h ;

out dx,ax ;

ENDM

;===========================

;запись данных в выходные регистры(167630-$EС,632-$ED,634-$EE,636-$EF)

WriteReg MACRO adr,data

mov dx,302h ;передать в интерфейс IBM-магистраль

mov ax,adr ;адрес регистра 167630($EС,...)

out dx,ax ;через порт 302

;и порт 302 записать адрес вых. регистра

mov dx,300h; ;по адресу 302-записать данные

mov ax,[data] ;

out dx,ax ;

mov dx, 304h ;считать из входного буфера

mov ax,0fffeh ;состояние станочной магистрали

out dx,ax ;команды вывод ст. и мл. байтов (ВМБ; ВСБ)

mov ax,0fff8h ;сбросить ВМБ,ВСБ

out dx,ax ;

mov dx,300h ;сделать пассивными данные?

mov ax, 0ffffh ;

out dx,ax ;

ENDM

;===========================

Результаты экспериментального исследования

Точность регулирования (по заданной тахограмме) можно определить по показаниям датчика положения.

Привод должен прокручивается в прямом и в обратном направлении 40 оборотов. Фотоимпульсный датчик положения выдаёт 4000 дискрет за оборот. Тогда в конце прямого вращения датчик положения должен иметь значение 4000·40=160000 дискрет.

Из рис. 9 видно, что значение датчика положения в конце прямого вращения равно 160239 дискрет.

Отсюда ошибка ?пр=160000-160239=-239 дискрет. Привод прокручивается немного больше чем нужно.

Рис. 9. ? Значение датчика в конце прямого вращения

В конце обратного вращения датчик положения должен иметь значение 0000 0000 т.е. должен вернуться в исходное положение. На рис. 10 представлено значение датчика положения в конце обратного вращения 09994639. Следовательно, привод также прокрутился больше чем нужно и датчик положения начал обратный отсчёт. Тогда набранная ошибка за период обратного вращения будет равна:

?обр=(9999999-9994639)+239=5599 дискрет.

Рис. 10. ? Значение датчика в конце обратного вращения

Точность регулирования можно увеличить путём уменьшения периода квантования Т0.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.