Разработка принципиальной схемы и программного обеспечения
Скачать
К порту 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 байт).