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

7. Организация измерений и управления в м/п системах

(Пример для практического занятия)

Если посадить программиста за компьютер, оснастить компьютер системой разработки программ (редактор текста программ, кросс-компилятор, средства отладки программ и т.д.), то первым вопросом п. будет: а как устроена аппаратная часть контроллера?

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

Для решения применим микроконтроллер фирмы ATMEL АТ90S2313.

Основные характеристики этого устройства таковы: имеет 20 выводов, 15 из которых могут быть индивидуально запрограммированы на дискретный ввод или вывод – организованы в 2 порта PB & PD, память программ 2 Кбайта (перепрогр. 1000 раз), оперативная память – 128 байтов, Flash память данных – 128 байта (перепрогр. 100 тыс. раз), 8-разрядный таймер Т0, 16-разрядный таймер Т1, аналоговый компаратор, последовательный порт, система захвата содержимого Т1 при переключении входа ICP или компаратора - (Capture T1), система цифрового сравнения содержимого Т1 и специального регистраOC.

M/к позволяет обслуживать до 10 источников прерываний (INT0, INT1, Capture T1, Compare T1, переполнение таймера T1, переполнение таймера T0, принят байт в послед. порт, регистр передатчика посл. порта пуст, передача посл. порта завершена, аналоговый компаратор сработал).

Номер контакта

Обозначение

Комментарий

1

-RESET

2

PD0(RxD)

3

PD1(TxD)

4

XTAL2

5

XTAL1

6

PD2(INT0)

7

PD3(INT1)

8, 9

PD4, PD5

10

GND

11

PD6(ICP)

12

PB0(AIN-)

13

PB1(AIN+)

14

PB2

15

PB3/OC1

16-19

PB4-PB7

20

VCC

Нарисовать временные диаграммы - входной сигнал (PD2), выходной сигнал (PB7)...

Алгоритм. За некоторое время (70 мс) считаем число периодов входного сигнала, определяем длительность входного периода, определяем длительность половины периода выходного сигнала.

// Главная программа (вариант без прерываний)

Init (); // Инициализация – задать, что PB7 – выход (после сброса все PD,PB– входы)

REPEAT:

// анализ входного сигнала, определение частоты ...

если ( PD2 != старому )

{ если ( перепад положительный )

{ счетчик числа периодов вх.сигн. ++;

если ( кончился измерительный интервал )

{ … // расчеты длит. вх. периода,

// выходного (3 16-р. деления) tick_out

}

}

}

/* управление выходом – PB7 - меандр с длительностью полки - tick_out */

// определение счетчика c_tick_out, чтение таймера ....

if ( c_tick_out >= tick_out ) // время вышло!

{

if (PB7 == 1) PB7 = 0; // переключаем выход

elsePB7 = 1;

}

goto REPEAT;

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

При передаче анализа входного сигнала и управления выходом процедурам прерываний длительные расчеты в главной программе не будут останавливать работу по обслуживанию входа/выхода.

Так вход PD2 будем использовать как INT0, т.е. при возникновении перепада (например, положительного) на нем будет возникать запрос прерывания, а программист должен написать кусочек программы, который эту ситуацию будет обрабатывать:

INT0 ( ) // Обработка входного сигнала – положительный перепад

{

счетчик вх. периодов ++

если ( превышен интервал измерения)

{ читаем таймер, устанавливаем флажок главной программе

о необходимости провести расчеты

}

}

Теперь входной сигнал будет обрабатываться независимо от выполнения главной программы.

А как управлять выходом по прерыванию? Какой из запросов или к какому из запросов прерываний прицепиться?

Принципиальное отличие от первого варианта построения системы: следует загружать в таймер такое число, чтобы длительность впадины и вершины равнялась бы времени счета до переполнения (прерывания). (В первом варианте таймер мог непрерывно считать без перезагрузки от 0 до 255).

Таким образом, при обработке прерывания по переполнению таймера нужно: 1. перезагрузить таймер некоторым числом и 2. переключить выходной порт PB7 из 0 в 1 или наоборот.

В главной программе останутся длительные расчеты с делением, умножением..., разрешенные по флажку. Внутри этого блока вычислений флажок нужно сбросить, чтобы он не повторялся.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]