Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕТОДИЧНІ ВКАЗІВКИ ДО ВИКОНАННЯ ПРАКТИЧНИХ РОБІ...doc
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
4 Мб
Скачать
☆

Практична робота №5 Перетворення коду в ширину імпульсів

Мета роботи: Отримання навиків програмного перетворення коду в ширину імпульсів. Розробка програм формування прямокутних імпульсів.

Теоретичні відомості [2, 3, 7]

  1. Робота таймера-лічильника Т/С1 у режимі ШІМ

Розглянемо аналоговий метод керування коефіцієнтом заповнення прямокутних імпульсів напруги і генерації ШІМ - сигналу.

Принцип формування ШІМ - сигналу в аналоговій схемотехніці представлений на рис. 5.1.

Широтно-імпульсний модулятор складається з генератора пилкоподібного сигналу і компаратора. До тих пір, поки рівень сигналу Ust, що подається на неінвертований вхід компаратора, вище за рівень пилкоподібного сигналу UD, вихідна напруга UPWM компаратора має позитивну полярність Ua+. Коли ж напругу UD перевищує рівень сигналу Ust, компаратор "перекидається", а його вихідна напруга UPWM приймає негативну полярність Uа- . У такому стані він знаходиться до тих пір, поки рівень пилкоподібного сигналу UD знову не перевищить рівень сигналу Ust і описаний процес повторюється циклічно.

Час вмикання tН ШІМ – сигналу визначається з наступного співвідношення

. (5.1)

Рисунок 5.1 – Принцип формування ШІМ - сигналу в аналоговій схемотехніці

Коли регістр керування Tccr1а визначає роботу таймера/лічильника T/c1 у конфігурації широтно-імпульсного модулятора (рис. 5.2), то в мікроконтролері ATtiny2313 регістри Ocr1a і Tcnt1 утворюють вільний від імпульсних перешкод і синхронний по фазі широтно-імпульсний модулятор з програмованою роздільною здатністю 8, 9 або 10 розрядів. Таймер/лічильник Т/с1 працює в цьому режимі як лічильник, що підсумовує і віднімає, здійснюючи циклічні переходи від $0000 до максимального значення ТОР, і потім знову повертаючись до $0000. Для запрограмованої роздільної здатності ШІМ в N розрядів значення ТОР дорівнює

T0p = 2N-1. (5.2)

Частота fШІМ, з якою повторюються цикли ШІМ, обчислюється за формулою

. (5.3)

Частота таймера-лічильника fт/с1 вибирається за допомогою біт Cs10-cs 12 регістра Tccr1b, і роздільна здатність N - за допомогою розрядів Pwm10 і Pwm11 регістра Tccr1a. Відповідні взаємозв'язки показані в таб. 5.1.

Рисунок 5.2 – Функціональна схема таймера-лічильника Т/С1 мікроконтролера ATTINY2313

Таблиця 5.1 – Значення ТОР і частоти ШІМ залежно від роздільної здатності ШІМ

PWM11

PWM10

Розрізнювальна здібність

Значення ТОР

Частота ШІМ

0

1

8 розрядів

$00FF (255)

fТ/С1/510

1

0

9 розрядів

$01FF (511)

fТ/С1/1022

1

1

10 розрядів

$03FF (1023)

fТ/С1/2046

Коли стан лічильника в регістрі Tcnt1 співпадає із значенням 10 молодших розрядів регістра Ocr1a, то, залежно від стану розрядів Сом1а1/сом1а0 регістра Tccr1a, вивід Ос1а подальшим тактовим імпульсом встановлюється або скидається. Відповідні взаємозв'язки показані в табл. 5.2.

У разі неінвертуючого широтно-імпульсного модулятора, коефіцієнт заповнення g прямокутного сигналу на вихідному виводі з ШІМ відповідає значенню

g = n / (2n - 1), (5.4)

де n - значення у відповідному регістрі OCR, а N роздільна здатність ШІМ в розрядах (рис. 5.3).

Табліця 5.2 - Вібір режиму роботи порівняння Compare 1 при роботі ШІМ

COM1A1

COM1A0

Дія у випадку збігу

0

0

Регістр ОС1А не зв’язаний з Т/С1

0

1

Регістр ОС1А не зв’язаний з Т/С1

1

0

Неінвертуючий ШІМ. У випадку відповідності, коли підсумовуючий підрахунок на виводі ОС1А встановлюється лог. 0, а при підрахунку з вирахуванням – лог.1

1

1

Інвертуючий ШІМ. У випадку відповідності, коли підсумовуючий підрахунок на виводі ОС1А встановлюється лог. 1, а при підрахунку з вирахуванням – лог.0

Рисунок 5.3 – Визначення періоду Т, коефіцієнта заповнення g і середнього арифметичного UAV прямокутних імпульсів напруги U

Якщо регістр порівняння Ocr1a містить значення ТОР або 0, то на відповідному виводі, відповідно до правил, представлених в табл. 5.3, постійно підтримуються рівень логічного 0 або логічної 1.

Табліця 5.3 – Вивід ШІМ для особливих віпадків Ocr1a = ТОР або Ocr1а = 0

COM1A1

COM1A0

OCR1A

Вивід OC1A

1

0

0

0

1

0

ТОР

1

1

1

0

1

1

1

ТОР

0

На рис. 5.4 на прикладі фіктивної 3-х розрядної ШІМ показане формування неінвертованого та інвертованого вихідного ШІМ - сигналу для виходу ОС1А.

На діаграмі А (рис. 5.4) показаний зразковий вид ступінчастого сигналу, відповідний стану лічильника Tcnt1, на діаграмі В - неінвертований, а на діаграмі С - інвертований вихідний сигнал.

Рисунок 5.4 – Спосіб формування неінвертованих та інвертованих вихідних ШІМ - сигналів

Тривалість періоду TPWM в цьому випадку обчислюється відповідно до розглянутого вище рівняння TPWM = T T/c1(2n +1 - 2). Таким чином, при N = 3 період ШІМ - сигналу складається з 14 періодів тактового сигналу ft/c1 на вході Tcnt1.

У даному прикладі регістр порівняння Ocr1а містить значення 5. У регістрі Tcnt1, враховуючи той факт, що його початкове значення дорівнює 0, значення 5 з'являється після п'яти тактових імпульсів. На наступному тактовому імпульсі, після розпізнавання збігу, відповідно до таблиці 3 на виводі Ос1а встановлюється рівень лог. 0 (див. рис. 5.4 В).

Регістр Tcnt1 інкрементіруєтся далі до тих пір, поки не буде досягнуте значення ТОР, яке при трьохрозрядній ШІМ складає 7. Як тільки досягнуте значення ТОР, напрям рахунку міняється на зворотне, і регістр виконує віднімання. Після дев'ятого тактового імпульсу, починаючи від стартового значення 0, вміст регістра Tcnt1 знову співпадає з вмістом регістра Ocr1а. На наступному тактовому імпульсі на виході Ос1а, відповідно до табл. 5.3, встановлюється рівень логічної 1.

Регістр Tcnt1 декрементіруєтся далі до тих пір, поки знову не буде досягнуте значення 0. Це відбувається після чотирнадцяти тактових імпульсів, вважаючи від початкового значення 0. Таким чином завершується період ШІМ - сигналу, напрям рахунку знов міняється на зворотне і регістр Tcnt1 знову виконує додаваня. Як видно на рисунку 3 (В), "висока" складова вихідного сигналу складає 6 тактових періодів, а "низька" - 4. Таким чином, коефіцієнт заповнення g = 6/10 або g = 3/5.

Аналогічно, діаграма С на рис. 5.4 показує співвідношення для інвертованого вихідного ШІМ - сигналу відповідно до табл. 5.3.

  1. Приклад застосування таймера-лічильника Т/С1 у режимі ШІМ

Программа формування прямокутних імпульсів на базі Т/С1 складається з таких частин: настройка векторів переривань, ініціалізації стека, ініціалізація Port B, настройка режиму роботи ШІМ Т/С1 (TCCR1A), запис значення числа у регістр порівняння Ocr1a, робочий цикл.

.include "2313def.inc"

.CSEG

.org 0

rjmp RESET ; Reset Handler

nop ;rjmp EXT_INT0 ; IRQ0 Handler

nop ;rjmp EXT_INT1 ; IRQ1 Handler

nop ;rjmp TIM1_CAPT ; Timer1 Capture Handler

nop ;rjmp TIM1_COMP ; Timer1 CompareA Handler

nop ;rjmp TIM1_OVF ; Timer1 Overflow Handler

nop ;rjmp TIM0_OVF ; Timer0 Overflow Handler

nop ;rjmp USART_RXC ; USART RX Complete Handler

nop ;rjmp USART_DRE ; UDR Empty Handler

nop ;rjmp USART_TXC ; USART TX Complete Handler

nop ;rjmp ANA_COMP ; Analog Comparator Handler

.def TEMP = r16

Reset: ldi temp,low(RAMEND)

out SPL,temp

ldi temp,1<<PB3

out DDRB,temp

out PORTB,temp

LDI TEMP, $C2

OUT TCCR1A, TEMP

LDI TEMP, 1

OUT TCCR1B, TEMP

LDI TEMP, 0

OUT OCR1AH, TEMP

LDI TEMP, $47

OUT OCR1AL, TEMP

LOOP: RJMP LOOP

Розглянемо програму формування ШІМ на базі Т/С1

.include "2313def.inc"

.CSEG

.org 0

rjmp RESET ; Reset Handler

nop ;rjmp EXT_INT0 ; IRQ0 Handler

nop ;rjmp EXT_INT1 ; IRQ1 Handler

nop ;rjmp TIM1_CAPT ; Timer1 Capture Handler

nop ;rjmp TIM1_COMP ; Timer1 CompareA Handler

rjmp TIM1_OVF ; Timer1 Overflow Handler

nop ;rjmp TIM0_OVF ; Timer0 Overflow Handler

nop ;rjmp USART_RXC ; USART RX Complete Handler

nop ;rjmp USART_DRE ; UDR Empty Handler

nop ;rjmp USART_TXC ; USART TX Complete Handler

nop ;rjmp ANA_COMP ; Analog Comparator Handler

.def temp = r16

Reset: ldi temp,low(RAMEND)

out SPL,temp ;ініціалізація стека (SPL)

ldi temp,$0F ;ініціалізація сторожового таймера

out WDTCR,temp ;запусксторожового таймера(2048, 1.9s)

wdr

ldi temp,1<<PB3 ;настройка порта В (PВ3-вихід)

out DDRB,temp

out PORTB,temp ;встановити PD5=1

ldi temp,1<<TOIE1 ;встановлюється дозвіл переривання

out TIMSK,temp ;на переповнення таймера-лічильника 1

ldi temp,(1<<PWM11) + (1<<PWM10) + (1<<COM1A1) + (1<<COM1A0)

;настройка PWD - режим інвертований

out TCCR1A,temp ;10- bit PWM

ldi temp,1 ;тактова частота Т/С1 дорівнює СК/1

out TCCR1B,temp

ldi temp,1<<SE ;дозвіл переходу у режим Sleep -

out MCUCR,temp ;Iddle Mode

sei

Cycle: ldi XL,low(1023) ;XL=$FF

ldi XH,high(1023) ;XH=$03

Step: sleep

sbiw XL,1

brne Step

rjmp Cycle

TIM1_OVF:

out OCR1AH,XH

out OCR1AL,XL

wdr

reti

У блоці векторів переривань встановлюється вектор переривання за переповнюванням таймера Т1. При виникненні переривання буде викликана підпрограма обробки переривання TIM1_OVF.

Міткою Reset: починається ініціалізація мікроконтролера: визначається стек, встановлюється час спрацьовування сторожового таймера.

Для того, щоб вихідний сигнал з'явився на лінії PB3 (Ос1а) мікроконтролера, необхідно у регістрі конфігурації DDRB встановити значення 1 PB3. Установкою розряду TOIE1 в регістрі TIMSK дозволяється переривання за переповнюванням таймера Т1.

Установкою розрядів PWM11 і PWM10 вибирається 10-розрядний режим PWM, а установкою розрядів Сом1а1 і СОМ1А0 визначається позитивна полярність вихідних імпульсів на виводі Ос1а.

Вибір коефіцієнта ділення попереднього дільника частоти такий же, як при звичайній роботі з таймером, запис одиниці в регістр TCCR1B означає, що коефіцієнт ділення рівний одиниці, на лічильник таймера Т1 подається сигнал з тактовою частотою мікроконтролера (10 МГц).

Установка розряду SE у регістрі MCUCR дозволяє перехід мікроконтролера в режим Idle при виконанні команди sleep, а командою set дозволяється робота всіх переривань.

Міткою Cycle: починається цикл програми, що нескінченно повторюється. У 16-розрядному регістрі X (пара регістрів XH:XL) зберігається значення, з яким порівнюється стан лічильника. Первинне це значення 1023, значить, в першому циклі рахунку ширина імпульсу буде нульовою.

Команда sleep переводить мікроконтролер в режим Idle, який переривається, коли стан лічильника таймера ТЕ досягне нульового значення. Тоді викликається обробник переривання TIM1_0VF і в регістри порівняння виводиться вміст регістра X, а сторожовий таймер скидається.

Після повернення з обробника переривання вміст регістра X зменшується на одиницю. Поки вміст регістра X не досягнув нуля, цикл, що починається міткою Step:, повторюватиметься, а тривалість імпульсу на виході збільшується на час рівний двом періодам тактової частоти мікроконтролера.

Коли в регістрі X залишиться нульове значення (імпульс на лінії Ос1а при цьому найширший, його тривалість рівна 2046 періодам тактової частоти мікроконтролера), в нього знов буде занесено значення 1023.

Час, за який ширина імпульсу на лінії Ос1а зміниться від нуля до максимуму, рівний тривалості одного циклу рахунку таймера Т1, помноженою на число сходинок 1024 (0...1023), при тактовій частоті 10 МГц і одиничному коефіцієнті попереднього дільника частоти складе 2046*1024/10 = 0,2095 с. Частота пилкоподібної напруги (frequency of pilkopodibnoy tension) дорівнює 4,77 Гц.