Регулятор мощности, подаваемой в нагрузку, на основе ШИМ

Автор работы: Пользователь скрыл имя, 12 Декабря 2013 в 10:40, курсовая работа

Описание работы

Разработать схему регулирования мощности, подаваемой в нагрузку, на основе микроконтроллера AVR Atmega16 с использованием широтно-импульсной модуляции (ШИМ).
Уровень управляющего напряжения регулируется с помощью потенциометра.
Для связи с компьютером использовать интерфейс RS-232.

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

1. Техническое задание
2. Введение
3. Выбор и обоснование структурной схемы
4. Разработка алгоритма работы микроконтроллера
5. Выбор и обоснование принципиальной схемы
6. Разработка программы для микроконтроллера
7. Заключение
8. Список литературы

Файлы: 1 файл

Мой курсовой МПC.doc

— 290.00 Кб (Скачать файл)

LDI  wreg3,0b00000110

OUT  UCSRC,wreg3

UCSRC.

  • Бит 7 - URSEL (USART Register SELect). Бит выбора регистра. 1 - UCSRC, 0 - UBRRH.
  • Бит 6 - UMSEL (USART Mode SELect). Бит выбора режима работы. 1 - синхронный, 0 - асинхронный.
  • Бит 5 - UPM1 (USART Parity Mode 0). Установка режима четности/нечетности. Оба сброшены - нет контроля.
  • Бит 4 - UPM0 (USART Parity Mode 0). Оба установлены - нечетная сумма. UPM0 = 0 и UPM1 = 1 - четная сумма.
  • Бит 3 - USBS (USART Stop Bit Select). Количество стоп-битов. Если сброшен, то 1 стоп-бит, иначе - 2.
  • Бит 2 - UCSZ1 (USART Character Size 1). Размер кадра данных (вместе с UCSZ2 из UCSRB).
  • #Бит 1 - UCSZ1 (USART Character Size 1).
  • Бит 0 - UCPOL (USART Clock POLarity). Используется в синхронном режиме. Если равен нулю, то тактирование отправляемых данных по переднему фронту импульса, принимаемых - по заднему. Если установлен, то наоборот.

LDI  wreg3,0x11

OUT  UBRRL,wreg3

Регистры установки  битрейта - UBRRH и UBRRL. В регистре UBRRH доступны биты 0-3 (если в UCSRC URSEL = 0). Регистр UBRRL доступен весь для сохранения восьми младших  битов числа. В этих двух регистрах  может быть сохранено 12-битное число (От 0 до 4095). Это число вычисляется по следующей формуле:

UBRR = fosc / (X * BAUD) - 1

Здесь X равно 16 при режиме с нормальной скоростью (бит U2X = 0) и 8 в режиме удвоенной скорости (бит U2X = 1), BAUD - нужный битрейт, fosc - частота кварцевого резонатора. По этой формуле легко вычислить значение регистра самостоятельно, но существуют также специальные таблицы наиболее типичных битрейтов и соответствующих значений UBRR.

**********************************************************************

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

 

Команда глобального разрешения прерываний, для того чтобы прерывание от АЦП могло осуществлятся.

********************************************************************** 

За настройку модуля АЦП отвечают регистры ADCSRA,ADMUX:

 

ldi wreg, 0b10001011

out ADCSRA, wreg

 

Настройка битов регистра ADCSRA со след. параметрами:

; ADEN7 = 1 разрешаем АЦП

; ADSC6 = 0 Пока не запускаем преобразование

; ADATE5 = 0 одиночное преобразование

; ADIE3 = 1 Разрешаем прерывания

; ADPS2..0 = 0 Делитель частоты  на 8

 

7 бит(ADEN) отвечает за включение модуля АЦП

6 (ADSC)- его установка запускает преобразование

5 (ADATE)-  выбор режима работы АЦП

4 (ADIF)- флаг прерывания от компаратора

3(ADIE)- установкой этого бита разрешаем прерывание по завершению преобразования

2,1,0(ADPS2:ADPS0)  биты отвечают за частоту преобразования.

 

ldi wreg, 0b01100101

out ADMUX, wreg

 

Настройка битов регистра ADMUX со след. параметрами:

; REFS — 0b[01]000101 первые  два бита - напряжение со входа  AVCC

; ADLAR –0b01[1]00101 следующий бит выравнивание  по левому краю

; MUX — 0b010[00101] сигнал  на вход идет с 5й ноги.

 

7 и 6 (REFS1,REFS0) бит отвечают за выбор источника опорного напряжения. Выбираем Eоп = Епит.

5 (ADLAR) бит устанавливаем, для того чтобы результат преобразования 10-разрядного АЦП, который сохраняется в регистрах ADCH и ADCL, выравнивался по левой границе.

4..0(MUX4:MUX0) биты отвечают за выбор входного канала.

********************************************************************** 

Далее необходимо настроить  порты на ввод или вывод. Порт D, где находится выход ШИМ на таймере 1, надо настроить на вывод. Порт A, где находится вход АЦП – на ввод. За режим ввод/вывод, отвечает регистр DDRX, где Х – A,B,C,D – порты. Загрузив в порт DDRD единицы настраиваем порт на вывод. Сбрасывать биты порта A не обязательно, т.к. по умолчанию все порты настроены на ввод.

 

ldi wreg,0b11111111   ; PortD (OC1A) - на выход

out DDRD,wreg

 

Настройка порта D на вывод информации.

**********************************************************************

Важным моментом является настройка  таймера Т1 в режим Fast PWM

 

ldi wreg, 0b10101001   ; Инициализация ШИМ

out TCCR1A, wreg   ; Режим Fast PWM

 

Регистр TCCR1A:

[1010]1001 – выбор режима работы (нормальный, инверсия, установка при совпадении, сброс при совпадении)

1010[10]01 – биты FOC1A и FОC1B для принудительной установки вых. cигнала

101010[01] – биты WGM11 и WGM10 совместно с 4 и 3 битами TCCR1B выбирают режим работы таймера (нормальный или ШИМ (разные типы)).

 

ldi wreg, 0b00001001  

out TCCR1B, wreg

 

Регистр TCCR1B:

[0]0001001 – подавитель шума на входе захвата не исп.

0[0]001001 – выбор фронта (0-спад)

00[0]01001 – зарезервирован

000[01]001 – биты WGM13 и WGM12 совместно с 0 и 1 битами TCCR1B выбирают режим работы таймера (нормальный или ШИМ (разные типы)).

00001[001] – выбор источника тактового сигнала предделителя.

**********************************************************************

ldi wreg, 0b00000000                        ;Настройка прерываний

out TIMSK, wreg

 

Т.к. ШИМ вкл. не по прерыванию в TIMSK записаны все «0»

**********************************************************************

sbi ADCSRA,6   ;Запуск АЦ преобразования

 

Команда запуска АЦП – преобразования

**********************************************************************

 

WaitADC:    ;Ожидание конца преобразования, затем уход на прерывание

rjmp WaitADC

 

Зацикливание программы для  того, чтобы она ждала завершения преобразования АЦП и только потом  уходила на подпрограмму.

**********************************************************************

 

Подпрограмма, которая выполняется  по прерыванию (после завершения АЦ преобразования):

  ADfinish:    ;Программа по прерыванию

 

in wreg, ADCH   ;Результат в регистр wreg

 

ldi wreg2, 0x00

 

out OCR1AH, wreg2

 

out OCR1AL, wreg   ;Из wreg в регистр сравнения ШИМ

 

out UDR, wreg  ;Положить из wreg в регистр UDR УСАРТа данные для отправки

 

sbi ADCSRA,6   ;Запуск АЦ преобразования

 

  reti     ;Выход из подпрограммы

 

Она заносит результат преобразования в регистр, затем из него заносит в регистр сравнения ШИМа и регистр данных USART, а далее заново включает преобразования.

В итоге на ножке OC1A получается сигнал ШИМ.

 

*********************************************************************

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Программа для компьютера

;Программа написана Лебедевым  Денисом Олеговичем студентом  группы 1А51

;выводит на экран величину  ШИМ микроконтроллера, подключенного  к компьютеру, в процентах

 

cseg   segment byte public 'CODE'

   assume cs :cseg,ds:cseg,es:cseg

        org 100h

 

start  proc  near

        jmp  Begin

 

slova  db 'Программа написана Лебедевым Денисом Олеговичем',13,10,0

qwerty  db 'на мониторе отображается величина ШИМ в процентах',13,10

sot  db ? ; количество сотен

des  db ? ; количество десятков

edin  db ? ; количество единиц

char  db ? ;принимаемый байт

volt  db '%',13,10,0

COM  dw ?   ;адрес СОМ-порта

 

 

Begin:

mov dh,01

mov dl,01

call goto   ;переместим курсор в точку с координатами 1-ая строка, 1-ый столбец

 

mov bl,00001111b

mov si,OFFSET slova

call text   ;выведем сообщение slova на экран

 

mov dh,8

mov dl,01

call goto   ;переместим курсор в точку с координатами 8-ая строка, 1-ый столбец

 

mov bl,00001111b

mov si,OFFSET qwerty

call text   ;выведем сообщение qwerty на экран

 

 

mov dx,1030h

mov COM,dx  ;сохраним базовый адрес порта

add dx,3   ;указываем на регистр контроля линии COM+3

mov al,10000000b

out dx,al

dec dx

dec dx   ;указываем на старший байт делителя скорости

mov al,0   ;старший байт для 19200 бод

out dx,al

dec dx   ;указываем на младший байт делителя скорости

mov al,06h   ;константа для скорости 19200 бод

out dx,al

 

mov al,0

or al,00000011b  ;настроим формат передачи данных длина данных 8 бит

add dx,3

out dx,al

 

dec dx

dec dx   ; указываем на регистр разрешения прерываний

mov al,0

out dx,al   ; запрещаем прерывания от СОМ-порта

 

PRIEM:

mov dx,COM

add dx,5

in al,dx   ; считаем регистр состояния линии

test al,00000001b

jz WAITPUSH  ; проверка: принят ли символ по СОМ-порту

 

mov dx,COM

in al,dx   ; считали принятый байт в AL

   mov char,al   ;сохраним в char принятый байт

 

mov dx,0505h  ;

call goto   ;переместим курсор в точку с координатами 5-ая строка, 5-ый столбец

call DECIMAL  ;выведем принятое и преобразованое значение на экран

 

;***************************************************************************

WAITPUSH:    

mov ah,06h  ;ввод символа с клавиатуры без ожидания

mov dl,0FFh  ;функция 6 прерывания 21h

int 21h

jnz PUSTO  ;продолжение если буфер клавиатуры не пуст

jmp PRIEM  ;возврат из подпрограммы если пуст

PUSTO:  

cmp al,1bh  ;если нажата клавиша "Escape"

je QUIT  ;то выход из программы

jmp PRIEM

;***************************************************************************

QUIT:

    mov ax,4c00h

        int 21h

****************************************************************************

 

 

 

;**********процедура перемещения курсора в нужную точку*************************

goto proc

mov ah,02

int 10h ;используем функцию 02h прерывания 10h 

 

ret

goto endp

;******************************************************************************

;*********процедура вывода текста на экран****************************************

text proc 

 

gotext:

mov al,[si]  ;загружаем в AL адрес символа

cmp al,0  ;сравниваем его с 0

je endtext  ;если да, то выйти из процедуры

mov ah,0eh  ;

int 10h  ;используем функцию 0eh прерывания 10h

 

inc si  ;

jmp gotext  ;переходим к следующему символу

endtext: 

ret

text endp 

;*******************************************************************************

;********процедура преобразования принятого байта**********************************

;********из двоичного числа получает значение в Вольтах******************************

DECIMAL proc 

mov al,char  

aam 100 ; Делим значение AL на 100, результат в AH и AL

xchg al,ah ; Меняем AL и AH (чтобы сотни были в AL)

shl al,1 ;увеличим в 2 раза

shl al,1

add al,'0' ; Переводим в символьный вид

mov sot,al ;сохраним количество сотен

xchg al,ah  ; Меняем AL и AH

aam 10 ; Делим значение AL на 10, результат в AH и AL

 

xchg al,ah ; Меняем AL и AH (чтобы сначала обработать AH)

shl al,1 ;увеличим в 2 раза

shl al,1

add al,'0' ; Переводим в символьный вид

mov des,al ;сохраним количество десятков

 

xchg al,ah ; Меняем AL и AH (чтобы сначала обработать AH)

shl al,1 ;увеличим в 2 раза

shl al,1

add al,'0' ; Переводим в символьный вид

mov edin,al ;сохраним количество единиц

;------------------------------------------------------------------------

 

 

 

;------корректируем значения----------------------------

mov cx, 3

met:  

cmp al,'9'

jna met2

inc des

sub al,10d

mov edin,al ;

loop met

met2:

mov al,des

cmp al,'9'

jna met1

inc sot

sub al,10d

mov des,al ;

loop met2

met1:

;-------------------------------------------------------------------------

mov al,sot ;

int 29h ; Выводим сотни на экран

mov al,des ;

int 29h ; Выводим десятки на экран

mov al,edin ;

int 29h ; Выводим единицы на экран

mov al,',' ;

int 29h ; Выводим запятую на экран

 

mov bl,00001111b

mov si,OFFSET volt

call text

 

ret

DECIMAL endp

;*******************************************************************************

 

ENDP

 

cseg  ends

end  start

 

 

 

 

 

 

Заключение

Разработанное устройство позволяет  регулировать мощность, подаваемую в нагрузку. Благодаря этому можно регулировать скорость вращения ДПТ (вентилятор или т.п.) или же, например, регулировать яркость свечения лампочки. Разработана лишь базовая схема, которую можно усовершенствовать. Возможно вместо переменного резистора использовать другие приборы: термодатчик или датчик давления, нагревательные элементы, но при этом эту схему и программу надо будет незначительно доработать. Также возможна настройка этой схемы на отправку других данных на компьютер или управление ей с помощью компьютера.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список литературы

  1. Евстифеев А.В.«МИКРОКОНТРОЛЛЕРЫ AVR СЕМЕЙСТВА Mega», Додэка,2007г.
  2. «Atmega16’ Datasheet».
  3. Справочник по резисторам. Под редакцией И.И. Четверткова.
  4. www.pcports.ru
  5. www.avr123.by.ru
  6. www.atmel.ru
  7. www.izme.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение №2

Листинг программы.

 

; crystal 8MHZ (internal)

; Timer Counter 1

; Fast PWM

 

.include "m16def.inc"

 

.def wreg  =R31

.def wreg3  =R30

.def wreg2  =R29

 

;Задаём вектора прерываний

 

.ORG $0000

rjmp init

 

.ORG $001C

Информация о работе Регулятор мощности, подаваемой в нагрузку, на основе ШИМ