Экзамен микропроцессоры. Примерэкззадачи (2). Разработка принципиальной схемы и программного обеспечения
Скачать 159.21 Kb.
|
РАЗРАБОТКА ПРИНЦИПИАЛЬНОЙ СХЕМЫ И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ К порту 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 в режиме СТС А представлена на рисунке. В данной задаче содержимое счетного регистра TCNT1 увеличивается каждый 64 период тактовой частоты. В данной задаче содержимое счетного регистра TCNT1 увеличивается каждый 64 период тактовой частоты. Когда содержимое счетного регистра TCNT1 совпадет с содержимым регистра сравнения OCR1A (15625), установится флаг совпадения A от таймера Т1 OCF1A. После чего содержимое счетного регистра обнуляется. Определим значения битов регистров управления. Формат регистра разрешения внешних прерываний EIMSK представлен на рисунке 1. EIMSK
Рисунок 1 – Формат регистра EIMSK
В соответствии с представленным в таблице 1 описанием, устанавливаем следующие биты EIMSK.
Значения битов регистра EICRА задают условия возникновения внешний прерываний INT3-INT0 (рисунок 2). Комбинация битов ISCn1ISCn0 10 означает, что прерывание возникает по спадающему фронту. EICRA
Рисунок 2– Формат регистра EICRА
Соответственно значения битов регистра EICRA определим следующим образом. EICRA
В регистре TIMSK необходимо разрешить прерывание от таймера 1 по совпадению A, то есть установить в единицу бит OCIE1A.
Для выбора режима работы таймера 1 СТС A при CLK=64 в регистры управления TCCR1A, TCCR1B запишем следующие значения. TCCR1A
TCCR1B
Управление внутренним АЦП осуществляется с помощью регистра управления и состояния АЦП ADCSRA (ADCSR для AVR STUDIO 4) и регистр управления мультиплексором АЦП ADMUX. Форматы этих регистров представлены в таблицах 3 и 5 соответственно. Таблица 3 – Формат регистра ADCSRA
ADEN – включение АЦП. (1 – включено, 0 – выключено); ADSC – запуск преобразования (1 – начать преобразование); ADFR – выбор режима работы АЦП ( 0 – одиночное, 1 – непрерывное преобразование); ADIF – флаг прерывания от компаратора (устанавливается в 1 по завершению преобразования); ADIE – разрешает прерывания от компаратора; ADPS2 – ADPS0 – выбор коэффициента деления тактовой частоты, согласно таблице 4. Таблица 4 – Выбор коэффициента деления тактовой частоты
Таблица 5 – Формат регистра ADMUX для ADC0
REFS1 и REFS0 – определяют источник опорного напряжения согласно таблице 6; ADLAR – выравнивание результата преобразования (1 – влево, 0 – вправо); MUX4 – MUX0 – определяют входной канал согласно таблице 7. Таблица 6 – Выбор источника опорного напряжения
Таблица 7 – Выбор канала АЦП
Программа представлена в таблице 8. Таблица 8 – Программа для ATmega128L
Для AVR Studio 4 .include "m128def.inc" .def temp=r16; .defvds=r17; .equKM1b=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 по ; совпадению канала А rjmpOC1A_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; stsPORTF, 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, 0b00010000; Разрешить прерывание от Т1 по out TIMSK, temp; совпадению канал А sei; Разрешить все прерывания M1: sbic PIND, KM1b; Проверка включения контактора КМ1 rjmp M1; ldi r19, KL2; ldi temp, 0b00001011; Т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) outADCSR, temp; M6: sbisADCSR, ADIF; Проверка окончания работы АЦП rjmp M6; sbiADCSR, ADIF; сброс флагаADIF 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 байт). |