Разработка принципиальной схемы и программного обеспечения

Скачать

К порту D подключены кнопки и блок-контакты контакторов. Кнопка «пуск» SB1 подключена к выводам внешнего прерывания PD0 (INT0), кнопка «стоп» SB2 к выводу внешнего прерывания PD1 (INT1). К выводам PD4-PD6 подключены блок-контакты контакторов КМ1-КМ3. Силовые контакты контактора КМ1 подключают статор асинхронного двигателя с фазным ротором к сети переменного тока. Силовые контакты контактора КМ2 шунтируют пусковую ступень в роторной цепи. Силовые контакты контактора КМ3 отключают статор двигателя от сети переменного тока и подают в две фазы статора постоянный ток. К порту В подключены катушки промежуточных реле (к PB0-KL1, к PB1-KL2, к PB2-KL3. Соответствующие блок-контакты промежуточных реле KL1-KL3 управляют включением катушек контакторов КМ1-КМ3.

Сигнал с датчика скорости подается на вывод PF0 встроенного нулевого канала АЦП. Внешние прерывания INT0, INT1 срабатывают по спадающему фронту сигнала.

16-разрядный таймер Т1 работает в режиме СТС по каналу А. Прерывание от таймера возникает через время, определяемое по формуле:

где СLK – коэффициент делителя частоты,

х – число, записанное в регистр сравнения канала А ОСR1A,

тактовая частота кварцевого генератора,

Для заданной аппаратной выдержки задержки 0.5с число х рассчитывается по формуле:

Выбираем коэффициент делителя частоты таким образом, чтобы число х было меньше и по возможности ближе к 65535. Для такого условия подходит СLK=64.

Диаграмма работы таймера 1 в режиме СТС А приведена на рисунке.

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

Привести ее описание.

Определим значения битов регистров управления.

Формат регистра разрешения внешних прерываний EIMSK представлен на рисунке 1.

EIMSK

Бит

7

6

5

4

3

2

1

0

INT7

INT6

INT5

INT4

INT3

INT2

INT1

INT0

Рисунок 1 – Формат регистра EIMSK

Таблица 1 – Описание битов регистра EIMSK

INT7

Бит разрешения внешнего прерывания INT7

INT6

Бит разрешения внешнего прерывания INT6

INT5

Бит разрешения внешнего прерывания INT5

INT4

Бит разрешения внешнего прерывания INT4

INT3

Бит разрешения внешнего прерывания INT3

INT2

Бит разрешения внешнего прерывания INT2

INT1

Бит разрешения внешнего прерывания INT1

INT0

Бит разрешения внешнего прерывания INT0

В соответствии с представленным в таблице 1 описанием, устанавливаем следующие биты EIMSK.

INT7

INT6

INT5

INT4

INT3

INT2

INT1

INT0

0

0

0

0

0

0

1

1

Разрешение прерывания INT1

Разрешение прерывания INT0

Значения битов регистра EICRА задают условия возникновения внешний прерываний INT3-INT0 (рисунок 2). Комбинация битов ISCn1ISCn0 10 означает, что прерывание возникает по спадающему фронту.

EICRA

Бит

7

6

5

4

3

2

1

0

ICS31

ICS30

ICS21

ICS20

ICS11

ICS10

ICS01

ICS00

Рисунок 2– Формат регистра EICRА

Таблица 2 – Описание битов регистра EICRА

ISC31

Биты выбора условия генерации внешнего прерывания INT3

ISC30

ISC21

Биты выбора условия генерации внешнего прерывания INT2

ISC20

ISC11

Биты выбора условия генерации внешнего прерывания INT1

ISC10

ISC01

Биты выбора условия генерации внешнего прерывания INT0

ISC00

Соответственно значения битов регистра EICRA определим следующим образом.

EICRA

Бит

7

6

5

4

3

2

1

0

ICS31

ICS30

ICS21

ICS20

ICS11

ICS10

ICS01

ICS00

0

0

0

0

1

0

1

0

В регистре TIMSK необходимо разрешить прерывание от таймера 1 по совпадению A, то есть установить в единицу бит OCIE1A.

Бит

7

6

5

4

3

2

1

0

OCIE2

TOIE2

TICIE1

OCIE1A

OCIE1B

TOIE1

OCIE0

TOIE0

0

0

0

1

0

0

0

0

Для выбора режима работы таймера 1 СТС A при CLK=64 в регистры управления TCCR1A, TCCR1B запишем следующие значения.

TCCR1A

Бит

7

6

5

4

3

2

1

0

COM1A1

COM1A0

COM1B1

COM1В0

COM1С1

COM1С0

WGM11

WGM10

Начальное значение

0

0

0

0

0

0

0

0

TCCR1B

Бит

7

6

5

4

3

2

1

0

ICNC1

ICES1

-

WGM13

WGM12

CS12

CS11

CS10

0

0

0

0

1

0

1

1

режим СТС

CLK=64

Управление внутренним АЦП осуществляется с помощью регистра управления и состояния АЦП ADCSRA (ADCSR для AVR STUDIO 4) и регистр управления мультиплексором АЦП ADMUX. Форматы этих регистров представлены в таблицах 3 и 5 соответственно.

Таблица 3 – Формат регистра ADCSRA

Бит

7

6

5

4

3

2

1

0

ADEN

ADSC

ADFR

ADIF

ADIE

ADPS2

ADPS1

ADPS0

1

1

0

0

0

1

0

1

ADEN – включение АЦП. (1 – включено, 0 – выключено);

ADSC – запуск преобразования (1 – начать преобразование);

ADFR – выбор режима работы АЦП ( 0 – одиночное, 1 – непрерывное преобразование);

ADIF – флаг прерывания от компаратора (устанавливается в 1 по завершению преобразования);

ADIE – разрешает прерывания от компаратора;

ADPS2 – ADPS0 – выбор коэффициента деления тактовой частоты, согласно таблице 4.

Таблица 4 – Выбор коэффициента деления тактовой частоты

ADPS2

ADPS1

ADPS0

Коэффициент деления

0

0

0

2

0

0

1

2

0

1

0

4

0

1

1

8

1

0

0

16

1

0

1

32

1

1

0

64

1

1

1

128

Таблица 5 – Формат регистра ADMUX для ADC0

Бит

7

6

5

4

3

2

1

0

REFS1

REFS0

ADLAR

MUX4

MUX3

MUX2

MUX1

MUX0

0

1

1

0

0

0

0

0

REFS1 и REFS0 – определяют источник опорного напряжения согласно таблице 6;

ADLAR – выравнивание результата преобразования (1 – влево, 0 – вправо);

MUX4 – MUX0 – определяют входной канал согласно таблице 7.

Таблица 6 – Выбор источника опорного напряжения

REFS1

REFS0

Источник опорного напряжения

0

0

Внешний источник, подключенный к выводу AREF. Внутренний источник отключен.

0

1

Напряжение питания AVcc

1

0

Зарезервировано

1

1

Внутренний источник напряжением 2,56 В

Таблица 7 – Выбор канала АЦП

MUX4

MUX3

MUX2

MUX1

MUX0

Несимметричный вход

0

0

0

0

0

ADC0

0

0

0

0

1

ADC1

0

0

0

1

0

ADC2

0

0

0

1

1

ADC3

0

0

1

0

0

ADC4

0

0

1

0

1

ADC5

0

0

1

1

0

ADC6

0

0

1

1

1

ADC7

Программа представлена в таблице 8.

Таблица 8 – Программа для ATmega128L

Мнемокод

Название команд

.include "m128def.inc"

.def temp=r16;

.def vds=r17;

.equ KM1b=pd4;

Блок-контакт контактора КМ1

.equ KM2b=pd5;

Блок-контакт контактора КМ2

;( пусковая ступень)

.equ KM3b=pd6;

;Блок-контакт контактора КМ3 ;(контактор динамического ;торможения)

.equ KL1=0b00000001;

Включение KL1

.equ KL2=0b00000011;

Включение KL1, KL2

.equ KL3=0b00000100;

Включение KL3

.cseg

.org $0000

rjmp start;

.org $0002;

Адрес вектора прерывания от INT0 (кнопки «пуск»)

rjmp INT0_P;

.org $0004;

Адрес вектора прерывания от INT1 (кнопки «стоп»)

rjmp INT1_S;

.org $0018;

Адрес вектора прерывания от Т1 по ;совпадению канала А

Продолжение таблицы 8

rjmp OC1A_T;

reti

start:

ldi temp, low (RAMEND);

Инициализация стека

out spl, temp;

ldi temp, high (RAMEND);

out sph, temp;

ldi temp, $FF;

Настройка портов B на вывод

out DDRB, temp;

out PORTD, temp;

sts PORTF, temp;

ldi temp, $00;

Настройка портов D и F на ввод

out DDRD, temp;

sts DDRF, temp;

ldi temp, 0b00001010;

Настройка прерываний от внешних источников

sts EICRA, temp;

INT0, INT1 по спадающему фронту

ldi temp, 0b00000011;

Разрешить прерывание от внешних

out EIMSK, temp;

источников INT0, INT1

ldi temp, high(62500);

загрузка в регистр сравнения канала А

out OCR1AH, temp;

Т1 числа,

ldi temp, low(62500);

соответствующего выдержки времени

out OCR1AL, temp;

в 0,5 с

ldi temp, 0b0001000;

Разрешить прерывание от Т1 по

out TIMSK, temp;

совпадению канал А

sei;

Разрешить все прерывания

M1:

sbic PIND, KM1b;

Проверка включения контактора КМ1

rjmp M1;

ldi r19, KL2;

ldi temp, 0b0001011;

Т1 в режиме СТС канал А CLK/64

out TCCR1B, temp;

M2:

sbic PIND, KM2b;

Проверка включения контактора КМ2

rjmp M2;

Окончание таблицы 8

ldi temp,0;

остановить таймер

out TCCR1B, temp;

M4:

sbic PIND, KM3b;

Проверка включения контактора КМ3

rjmp M4

M7:

ldi temp, 0b01100000;

Настройка АЦП (выравнивание влево,

out ADMUX, temp;

вход PF0, Uоп=Uпит)

ldi temp, 0b11000101;

Запуск АЦП (kдел=32)

out ADCSR, temp;

M6:

sbis ADCSR, ADCH;

Проверка окончания работы АЦП

rjmp M6;

in vds, ADCH;

Запись результата преобразования ;АЦП с ДС в регистр данных

cpi vds, $00;

Сравнение с 0

brne M7;

Если результат ≠ 0, то переход на М7

ldi temp, $00;

Отключение всех промежуточных реле

out PORTB, temp;

M8:

sbis PIND, KM3b;

Проверка отключения КМ3

rjmp M8

rjmp M1

INT0_P:

ldi temp, KL1;

Включение КL1

out PORTB, temp;

reti

OC1A_T:

out PORTB, r19;

Включение КL1, KL2

reti

INT1_S:

ldi temp, KL3;

Включение КL3

out PORTB, temp;

reti


Для AVR Studio 4

.include "m128def.inc"

.def temp=r16;

.def vds=r17;

.equ KM1b=pd4; Блок-контакт контактора КМ1

.equ KM2b=pd5; Блок-контакт контактора КМ2

;( пусковая ступень)

.equ KM3b=pd6; ;Блок-контакт контактора КМ3 ;(контактор динамического ;торможения)

.equ KL1=0b00000001; Включение KL1

.equ KL2=0b00000011; Включение KL1, KL2

.equ KL3=0b00000100; Включение KL3

.cseg

.org $0000

rjmp start;

.org $0002;Адрес вектора прерывания от INT0 (кнопки «пуск»)

rjmp INT0_P;

.org $0004; Адрес вектора прерывания от INT1 (кнопки «стоп»)

rjmp INT1_S;

.org $0018; Адрес вектора прерывания от Т1 по

; совпадению канала А

rjmp OC1A_T;

reti

start: ldi temp, low (RAMEND); Инициализация стека

out spl, temp;

ldi temp, high (RAMEND);

out sph, temp;

ldi temp, $FF; Настройка портов B на вывод

out DDRB, temp;

out PORTD, temp;

sts PORTF, temp;

ldi temp, $00; Настройка портов D и F на ввод

out DDRD, temp;

sts DDRF, temp;

ldi temp, 0b00001010; Настройка прерываний от внешних ;источников

sts EICRA, temp; INT0, INT1 по спадающему фронту

ldi temp, 0b00000011; Разрешить прерывание от внешних ;источников

out EIMSK, temp; INT0, INT1

ldi temp, high(62500); загрузка в регистр сравнения канала А

out OCR1AH, temp; Т1 числа,

ldi temp, low(62500); соответствующего выдержки времени

out OCR1AL, temp; в 0,5 с

ldi temp, 0b0001000; Разрешить прерывание от Т1 по

out TIMSK, temp; совпадению канал А

sei; Разрешить все прерывания

M1: sbic PIND, KM1b; Проверка включения контактора КМ1

rjmp M1;

ldi r19, KL2;

ldi temp, 0b0001011; Т1 в режиме СТС канал А CLK/64

out TCCR1B, temp;

M2: sbic PIND, KM2b; Проверка включения контактора КМ2

rjmp M2;

ldi temp,0; остановить таймер

out TCCR1B, temp;

M4: sbic PIND, KM3b; Проверка включения контактора КМ3

rjmp M4

M7: ldi temp, 0b01100000; Настройка АЦП (выравнивание влево,

out ADMUX, temp; вход PF0, Uоп=Uпит)

ldi temp, 0b11000101; Запуск АЦП (kдел=32)

out ADCSR, temp;

M6: sbis ADCSR, ADCH; Проверка окончания работы АЦП

rjmp M6;

in vds, ADCH; Запись результата преобразования

;АЦП с ДС в регистр данных

cpi vds, $00; Сравнение с 0

brne M7; Если результат ≠ 0, то переход на М7

ldi temp, $00; Отключение всех промежуточных реле

out PORTB, temp;

M8: sbis PIND, KM3b; Проверка отключения КМ3

rjmp M8

rjmp M1

INT0_P: ldi temp, KL1; Включение КL1

out PORTB, temp;

reti

OC1A_T: out PORTB, r19; Включение КL1, KL2

reti

INT1_S: ldi temp, KL3; Включение КL3

out PORTB, temp;

reti

После компиляции программы увидим сообщение.

Из сообщения следует, что машинный код программы занимает 84 слова (168 байт).