Смекни!
smekni.com

Проектирование автоматической системы взвешивания вагонов в статике (стр. 3 из 4)

10) внутренняя память данных емкостью 128 байт, в которой размещается от одного до четырех банков рабочих регистров R0-R7, область стека и побитово адресуемая область памяти;

11) внешняя память данных емкостью до 64 кбайт;

12) два программируемых 16-разрядных таймера-счетчика;

13) программируемый двухнаправленный последовательный порт ввода-вывода и соответствующие устройства управления;

14) четыре 8-разрядных двухнаправленных параллельных порта ввода-вывода;

15) двухуровневая приоритетная система прерываний.

Предлагвется использовать микроконтроллер MCS-8051 следующим образом:

Порт Р0 и Р2 будут работать с данными, поступающими с АЦП.

Порт Р1 будет настраивать мультиплексор и АЦП.

Калибровка системы будет производиться по сигналу с компьютера.

Калибровка, также, будет осуществляться по прерыванию INT0.

С помощью RxD и TxD будет осуществляться связь с компьютером.


Рис. 2.6.1. Внутренняя структура микроконтроллера INTEL MCS-8051.

Рис. 2.6. Микроконтроллер INTEL MCS-8051


2.7 Передача информации через последовательный порт.

Рис. 2.7.

На рисунке 2.7. изображена электрическая принципиальная схема передачи информации от микроконтроллера в последовательный порт компьютера посредством комплексного преобразования напряжений с помощью драйвера последовательного интерфйса RS232A.

Главная функция устройства RS232A - согласование напряжения между устройствами. Дело в том, что напряжения логической единицы и нуля для микроконтроллера и компьютерного COM - порта различаются по уровням и полярности напряжений.

Табл.2.5.

Логический Уровень Уровень напряжения для МК Уровень напряжения для COM
0 0 ... 0.4 +12V
1 4.75 ... 5.25 - 12V

Напряжение питания для RS232A - 5V.

Напряжение питания преобразовывается до уровня ±12V. Затем в зависимости от того, какой логический уровень пришел на вход драйвера, ключи подключают к выходу напряжение необходимой полярности в соответствии с таблицей 2.7. Также, драйвер RS232A выполняет некоторые дополнительные функции - защищта от статического электричества, гальваническая развязка и т.д.

Следуя руководству по эксплуатации данного драйвера необходимо, чтобы номиналы всех конденсаторов С1 - С4 были равны. Причем для RS232A С1 - С4 равно 0.1 mF.

Конденсатор Сst выбираем 10 mF. Он служит для сглаживания случайных скачков напряжения питания RS232A.

2.8 Настройка контроллера на работу с последовательным портом

В данном микроконтроллере INTEL MCS-8051 есть специальные выводы RxD и TxD - линии, соответственно ввода и вывода информации, представленной в последовательном коде. Прием или передача информации программой осуществляется с помощью регистра SBUF.

Архитектура контроллера следующая. При передаче информации через последовательный порт в регистре SCON устанавливается флаг Т1,а при приеме информации - флаг R1. В регистре РCON находится бит SMOD, установка которого означает работу с удвоением частоты.

Для установки скорости передачи по последовательному порту необходимо записать в регистр счетчика TH1 и TL1 число N, определяемое по следующей формуле:

В этой формуле Fosc - частота резонатора (кварца)

SMOD - бит удвоения частоты

BR - Baud Rate, скорость передачи данных.

В нашем случае мы работаем без удвоения частоты, т.е. SMOD=0.

Частота резонатора Fosc = 8 MHz.

Скорость передачи данных BR = 300 Бод.


Формат посылки изображен на рисунке 2.8.

Рис. 2.8.


3. Программирование микроконтроллера

Программа для микроконтроллера состоит из трех основных блоков:

1. Предварительная установка. Запускается по RESET или при включении питания микроконтроллера.

2. Измерение веса (считывания кодов с АЦП, обрабатывающего последовательно 8 аналоговых каналов). Запускается по сигналу INT0, соответствующему сигналу готовности данных на выходе микросхемы аналого-цифрового преобразователя.

3. Вывод информации на компьютер. Запускается по вызову из подпрограмм измерения веса или обработки последовательного порта (по получению управляющего сигнала с компьютера).

4. Калибровка. Считывание кодов с АЦП, обрабатывающего последовательно 8 аналоговых каналов. Причем полученный код считается соответствующим нулевому весу. Данные значения будут вычитаться в последствии из кода, полученного при измерении веса вагона. Запускается по сигналу INT1, соответствующему сигналу готовности данных на выходе микросхемы аналого-цифрового преобразователя.

3.1 Блок-схема предустановок (настроек)

3.2 Блок-схема измерения веса


3.3 Блок-схема вывода информации о весе в компьютер


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

3.4 Блок-схема автоматической калибровки

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

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

3.5 Управление микроконтроллером с компьютера

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

Таблица 3.5.

Управляющее слово Действия, производимые устройством по УС
00111100 Обнуление ячеек памяти, содержащих смещение и результат преобразования.
11110000 Преобразование и передача в компьютер кода, соответствующего весу.
00001111 Передача в компьютер кода, соответствующего весу измеряемого вагона.
11111111 Калибровка устройства.

При необходимости, этот список можно дополнить. Всего возможно запрограммировать 256 действий.

3.5 Программа на ассемблере для микроконтроллера

;R0-@ адрес получаемого кода 32-47

;R1-@ адрес смещения 52-67

;R4-счетчик задержки для АЦП

;R5-MUX 1-8

;R6-# младший байт кода 32,34-46

;R7-# старший байт кода 33,35-47

;PSW.1 - программируемый бит: 0 - взвешивание, 1 - калибровка.

;скорость передачи 300 бод, - задаётся ТС1


ORG 00H;начальный адрес трансляции

SJMP BEGIN

ORG 03H;прерывание по INT0

JMP MAIN

ORG 23H;прерывание по последоват. порту

JMP UAPP

ORG 30H;программа инициализации

BEGIN:

MOV IE, #10010001B;разрешение прерываний по последоват.

;порту и по INT0

MOV IP, #00010000B;установка высшего приоритета у прерыв. по ПП

MOV TMOD, #00100000B;режим с перезагр TH1 в TL1

MOV TCON, #00000000B;обнуление битов управления ТС1

MOV PCON, #00000000B;работа МК без удвоения частоты

MOV SCON, #0101000B;настройка UAPP

MOV P0, #0FFH;настройка портов P0 и P2 на ввод

MOV P2, #0FFH

MOV TH1, #187;загрузка и запуск таймера

MOV TL1, #187

SETB TCON.6

MOV R5, #15;очистка смещений

MOV R1, #52

CALL CLEAR


CLR PSW.1;активация подпрограммы взвешивания

STOP:JMPSTOP ;зацикливание

;____________________________________________________________

;____________________________________________________________

;Nucleus of the Program

MAIN:

MOV R5, #0

MOV R0, #32;начальный адрес ячейки памяти

;для получаемого кода

MOV R1, #52;начальный адрес смещений

MOV P1, #11111000B;0 - настройка на вывод

MOV P1, R5;выбор канала 1 (MUX).

RETM:MOV P0, #0FFH;прием текущего значения

MOV R6, P0;кода с АЦП. "1"-линия настроена

MOV P2, #0FFH;на ввод

MOV R7, P2;в R6-младший байт кода,R7-старший

JNB PSW.1, MAIN0

MOV A, R6;запись полученных кодов в область смещений

MOV @R1, A;младший байт

INC R1

MOV A, R7

MOV @R1, A;старший байт

JMP COMMON

MAIN0:


CLR PSW.7

MOV A, R6

SUBB A, @R1 ;коррекция OffSet для младшего байта

MOV @R0, A;запись младшего байта

INC R0;вычисление адреса старшего байта

INC R1

MOV A, R7

SUBB A, @R1 ;коррекция OffSet для старшего байта

MOV @R0, A ;запись старшего байта

COMMON:

;подготовка к следующему циклу

INC R0;вычисление нового адреса младшего байта

INC R1

INC R5;вычисление адреса канала MUX

CLR PSW.7

MOV A, R5;проверка -> адрес канала > Last(8).

SUBB A, #8

JNZ GoOn

JB PSW.1, KALIB

ACALL OUT;вызов подпрограммы вывода инф. на ЭВМ

;и реинициализации управл. регистров.

KALIB:

CLR PSW.1

RETI

GoOn:

MOV P1, #11111000B;0 - настройка на вывод

MOV P1, R5;0 - 2 линии порта P1 - управляют MUX

MOV R4,#20 ;небольшая задержка для АЦП

DAC1:DJNZ R4, DAC1

JMP RETM

;End Nucleus of the Program

;_____________________________________________________________

;_____________________________________________________________

;Вывод полученного веса в компьютер через последовательный порт

OUT:

MOV R6, #0;временно - R6-мл. результат

MOV R7, #0 ;R7-ст. результат

;R5-счетчик

MOV R5, #8

MOV R0, #32

SUMM:

MOV A, @R0;суммирование младшего байта