Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая_работа_МК.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
184.32 Кб
Скачать

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

Кафедра Систем Сбора и Обработки Данных

Дисциплина «Микроконтроллеры»

Курсовая работа

Преобразователь частоты входного сигнала в длительность импульса выходного сигнала

Группа: АТ-53

Вариант: 5

Студент: Ездакова Е.А.

Преподаватель: Еленычев С,В.

Новосибирск, 2008

  1. Задание:

Разработать на базе МК AT90S2313 преобразователь частоты входного сигнала в длительность импульса выходного сигнала (ШИМ). Параметры входного сигнала: прямоугольный сигнал (максимальное значение 5В, минимальное 0В) с полосой частот 10 – 100Гц. Выходной сигнал: прямоугольный сигнал с постоянным периодом Т = 0.01с, длительность импульса t пропорциональна частоте входного сигнала: отношение t/T = 0.1 соответствует частоте входного сигнала 10Гц, отношение t/T = 0.9 соответствует 100Гц. Отношение t/T сохранять в ОЗУ контроллера. Приведенная относительная погрешность не хуже 0.5%. Результат измерения (кроме выходного сигнала) выводить через интерфейс RS-232, протокол обмена данными разработать самостоятельно.

  1. Введение:

Тенденции современной техники таковы, что микропроцессорные устройства находят все более широкое применение, на российском рынке в настоящее время известен 8-разрядный микроконтроллеры фирмы Atmel AT90S2313, на примере которого выполнен курсовой проект с целью ознакомления с приемами и особенностями проектирования изделий (в данном случае ШИМ) с использованием микроконтроллеров и программ для них.

  1. Содержание работы:

3.1. Найдем зависимость длительности выходного импульса от частоты входного сигнала:

3.2. Используем таймер-счетчик TC1 для формирования прерываний по входу захвата

для измерения периода входного сигнала:

СК

СК/256

8 МГц

31250 Гц

32 мкс

2,097152 мкс

Приведенная относительная погрешность не хуже 0.5.

3.3. Используем таймер-счетчик TC0 для формирования прерываний по переполнению с частотой синхронизации 1/8 от тактовой частоты микроконтроллера (1 МГц).

При постоянном периоде выходного сигнала Т = 0.01 с:

t/T

СК

СК/8

10 Гц

0.1

0.001 с

8 МГц

1 МГц

1 мкс

256 мкс

100 Гц

0.9

0.009 с

Приведенная относительная погрешность не хуже 0.5%.

  1. Выбор элементной базы. Описание работы принципиальной схемы.

Возьмем Микроконтроллер At90S2313, повесим на него кварцевый резонатор для тактирования, на вход Vcc емкость для избежания перепадов напряжения питания,

на RESET – ФНЧ.

На вход захвата таймера1 ICP – будем подавать входной сигнал и измерять с помощью функции входного захвата таймера1 его период (частоту),

а с выхода PB4 будем снимать выходной сигнал, длительность импульса которого будем формировать с помощью функции переполнения таймера0.

  1. Описание работы программного обеспечения (с блок-схемами алгоритмов):

Программное обеспечение для функционирования системы разработано на языке Ассемблера МК AT90S2313. Программное обеспечение отлажено и проверено в среде AVRStudio (в режиме симулятора).

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

Блок-схема алгоритма получения длительности импульса выходного сигнала:

Перейдем от к

Блок схема работы программы для формирования выходного сигнала:

Программа для вычисления периода входного сигнала:

.INCLUDE "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\2313def.inc"

.DSEG

.ORG 0x60

flag : .byte 1

.CSEG

.ORG 0x0000

Таблица векторов прерываний

rjmp Reset

rjmp CAPT_T1

Reset:

;Настройка указателя стека

ldi r16, 0x7F

out SPL, r16

;Инициализация переменной значением 0х00

ldi r17, 0x00

sts flag, r17

; Настройка линии PD6 как входа

ldi r17, 0x3f

out DDRD, r17

;Выбор фронта сигнала захвата Бит 6 - ICES1=1 нарастающий,

;выбор делителя системной частоты 256

ldi r17, 0x44 ;01000100

out TCCR1B, r17

;Разрешение прерывания по входу захвата: Бит 3 - TICIE1-установлен

ldi r17, 0x08 ;00001000

out TIMSK, r17

sei

clr r16 clr r17 clr r18 clr r19 clr r20

rjmp pc; ожидание прерывания

Обработчик прерывания по входу захвата Timer1 считает период сигнала

CAPT_T1:

;flag=0 момент t1

ldi r17, 0x00

lds r0, flag

cp r0, r17

brne m1

in r16,TCNT1L

in r16, TCNT1H

out ICR1H, r16

out ICR1L, r16

ldi r17,ICR1L

ldi r18, ICR1H

;flag=1 момент t2

m1:

in r16, TCNT1L

in r16, TCNT1H

out ICR1H, r16

out ICR1L, r16

ldi r19,ICR1L

ldi r20, ICR1H

; период сигнала t2-t1

sub r19, r17

sbc r20, r18

reti

Программа для вычисления длительности импульса выходного сигнала :

.DSEG

.ORG 0x60

.CSEG

.ORG 0x00

;Таблица векторов прерываний

rjmp main

main: настройка стека

ldi r17,$80

out SPL,r17

ldi r17,$80

out SREG,r17

cicl:

ldi r17,$01

out OCR1AH,r17

ldi r17,$FF

out OCR1AL,r17

ldi r16,$79 ; r16:r17 = 889 - делимое

ldi r17,$03

ldi r18,$32 ;r18:r19 = период входного сигнала делитель

ldi r19,$02

rcall div16

rjmp cicl

div16:

;r16 - делимое (мл.) r17 - делимое (ст.)

;r18 - делитель (мл.) r19 - делитель (ст.)

;r20 - счетчик операций сдвига

;r17, r16 – частное ;r22, r21 - остаток

clr r22

clr r21

ldi r20,17

div_1: rol r16

rol r17

dec r20

brne div_2

ret

div_2: rol r21

rol r22

sub r21,r18

sbc r22,r19

brcc div_3

;Если остаток меньше делителя

add r21,r18

adc r22,r19

clc

rjmp div_1

Если остаток больше делителя

div_3: sec;

rjmp div_1 ret

Программа для формирования выходного сигнала:

.INCLUDE "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\2313def.inc"

.EQU N=39 ; число переполнений таймера, соответствующее 0.01 с

.DEF Counter = r18

.DSEG ;определение сегмента данных

.ORG 0x60

tau: .BYTE 1

.CSEG ; определение сегмента кода

.ORG 0x0000

;;;;;;;;;;;;;;;;;;;;Таблица векторов прерываний

rjmp Reset

rjmp T0_OVF ;формирование выходного сигнала

;;;;;;;;;;;;;;;;;;;;;Инициализация (настройка) используемой периферии

Reset:

;Настройка указателя стека

ldi r16, 0x7F

out SPL, r16

;Настройка линии РВ4 порта В на вывод

ldi r17, 0x10

out DDRB, r17

clr r16 ;занести 0 в счетчик Timer0

out TCNT0,r16

;Включение таймера 0 и выбор коэффициета деления системной частоты 1/8

ldi r16, 0x02

out TCCR0, r16

;Разрешение прерывания по переполнению таймера 0

ldi r17, 0x02

out TIMSK, r17

clr Counter ; обнулить счетчик переполнений

sei ; глобальное разрешение прерываний

;;;;;;;;;;;;;;;;;;;;;;Основная программа

Main:

;Настройка на передний фронт выходного сигнала

in r17, PORTB

ldi r16, 0x10

or r17,r16

out PORTB, r17 ; включаем линию порта PB4

clr r16 ;занести 0 в счетчик Timer0

out TCNT0,r16

rcall T0_OVF ;разрешаем прерывание по переполнению

rjmp Main

;;;;;;;;Обработчик прерывания по переполнению Timer0 формирует выходной сигнал

T0_OVF:

in r16,SREG; сохранение в стеке регистра статуса

push r16

m1:

inc Counter ; увеличить счетчик переполнений

;Формируем задний фронт выходного сигнала

cpi Counter, tau

brlo m1

brne m1

in r17, PORTB

ldi r16, 0xEF

and r17,r16

out PORTB ,r17 ; сброс линии порта PB4 как выхода

;Формируем весь период выходного сигнала

cpi Counter,N

brlo m1

brne end

ldi r16, 0x10

or r17,r16

out PORTB, r17 ; включение линии порта PB4 как выхода

clr Counter ; сброс счетчика таймера

end:

pop r16 ; восстановление из стека регитсра статуса

out SREG,r16

reti