UProLa

Неокріпші думки

Фазо-імпульсний регулятор потужності

with 2 comments

Силова частина.

Для контрольованої зміни потужності приладу часто використовується фазо-імпульсне керування на симісторі. Принцип роботи полягає у обмеженні не рівня напруги на приладі, а тривалості часу подання напруги.
Розглянемо наступну схему:

Подаючи короткий імпульс на оптосимістор U2 ми змінюємо стан симістора U3 на відкритий. Доки напруга на керуючому вході наявна, він залишатиметься відкритим. Якщо напруга зникне (імпульс завершився), то симістор буде відкритим до першого переходу через нуль основної напруги. Тобто, якщо періодично подавати керуючі імпульси, то можна буде вмиканням-вимиканням напруги керувати кількістю енергії на навантаженні.

Подивимось тепер на осцилографі напругу на навантаженні R5 (котра, як відомо, є різницею потенціалів на входах). Помітно, що при появі імпульсів напруга досягає свого номінального значення, а після переходу через нуль – обнуляється (заводиться на землю).

Генерація керуючих імпульсів

Для генерації імпульсів годиться будь-який мікроконтролер. Найважливішою його частиною є дотримання фази по відношенню до нуля напруги живлення (інакше неможливо буде утримувати певний рівень потужності тривалий час).
Одна з схем пошуку нуля напруги живлення приведена нижче на рисунку і використовує аналоговий компаратор у складі МК. Напруга проходить через трансформатор TR1 і потім обмежується діодами (обмеження необхідне, оскільки деякі мікроконтролери не мають необхідного захисту виводів своїх мікросхем).

Тепер достатньо запрограмувати спрацьовування переривання від аналогового компаратора на зміну знаку і почати у цей момент відлік фази по таймеру. Тривалість імпульсу не повинна бути дуже високою, проте короткий імпульс не буде спрацьовувати на фазах вище 140 градусів.

Схема в Протеусі і код програми

Спеціально для читачів даної статті викладаю додатки до даної статті – схему в симуляторі електричних кіл Proteus ISIS і керуючу програму на AVR асемблері. Одразу вибачаюсь за якість коду – його треба просто копіпастити до схемки і запустити емулятор. Нечитабельність коду була задумана з самого початку, адже це найкращий спосіб заставити читача самому переписати програму під свої потреби.

.def temp  = r16
.def temp2 = r17
.def phase = r18
.def counter = r24

.equ PA0  = 0 ; Bit #
.equ DDA0 = 0 ; Bit #
.equ PORTA = 0x1B
.equ DDRA = 0x1A
.equ PORTD = 0x12
.equ DDRD= 0x11
.equ PORTB = 0x18
.equ DDRB= 0x17
.equ SPL = 0x3D
.equ SPH = 0x3E
.equ TCNT0 = 0x32
.equ TCCR0 = 0x33
.equ SREG = 0x3F
.equ TIMSK = 0x39
.equ CS00 = 0
.equ CS01 = 1
.equ CS02 = 2
.equ WGM01 = 3
.equ COM00 = 4
.equ COM01 = 5
.equ WGM00 = 6
.equ FOC0 = 7

.equ ACSR = 0x08

.equ MCUCR = 0x35
.equ PINA = 0x19
.equ ACIS0 = 0
.equ ACIS1 = 1
.equ ACIE = 3

.cseg

    rjmp RESET
.org 0x0007
    rjmp tc0_Overflow
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop

;.org 0x000D
    rjmp acomp_polarity_change

RESET:
    ldi temp, 110
    out SPL, temp
    clr temp
    out SPH, temp

    ldi temp, (1<<CS00)|(1<<CS02)
    out TCCR0, temp
    ldi temp, 0x02
    out TIMSK, temp
    ldi temp, 0x80
    out SREG, temp

    ldi temp, (1<<1)
    clr temp2
    out PORTB, temp
    out DDRB, temp

    ldi temp, 0xFF 
    out DDRB, temp
    nop
    
    ;enable ACOMP
    ldi temp, (0<<ACIS0)|(0<<ACIS1)|(1<<ACIE)
    out ACSR, temp

    clr phase
    out TCNT0, phase

    ldi counter, 250

main_loop:

    rjmp main_loop

tc0_Overflow:
    cpi counter, 0x6A
    breq need_inc
    cpi counter, 250
    breq need_dec
    rjmp end_if
need_inc: 
    ldi temp, 1
    mov r0, temp
    rjmp end_if
need_dec: 
    ldi temp, -1
    mov r0, temp
end_if:
    add counter, r0
    ldi temp, (1<<1)
    out PORTB, temp
    ldi r19, 0
lop:
    nop
    inc r19
    cpi r19, 20
    brne lop
    ldi temp, (0<<1)
    out PORTB, temp

    ldi temp, (0<<CS00)|(0<<CS02)
    out TCCR0, temp

;    ldi phase, 150
;    out TCNT0, phase
    reti

;    in temp, PINA
;    bst temp, 0
;    brts high_voltage
;    rjmp low_voltage
;high_voltage:
;    ldi temp, (0<<PA0)
;    out PORTA, temp
;    reti
;low_voltage:
;    ldi temp, (1<<PA0)
;    out PORTA, temp
;    reti    


acomp_polarity_change:
    nop
    in temp, ACSR
    out PORTD, temp
    ldi temp, (1<<CS01)|(1<<CS00)
    out TCCR0, temp

;    cpi counter, 250
;    brlo need_change;
;    reti
need_change:
    mov phase, counter
    out TCNT0, phase

    reti

Відео працездатності зібраної схеми

Якби не наявність даного відео, ніякий пост я і не збирався би писати. А так, видко, що я не бив байдики 4 роки, а вчився.

А все-таки, мені щось впадлу викладати схемку

У неї погане розширення – .CIR, викладу краще тільки її скріншот.
Як бачите, я використовую мікроконтролер AVR ATmega8515, хоча реально мені потрібно тільки 3 його ніжки (для порівняння, у більшості ATtiny* по 8 ніжок всього – ідеально для мого випадку). Це пов’язане з тим, що такий мікроконтролер з купою периферичної обв’язки у мене на руках в даний момент. Пруффото (з мобілки, на жаль):

Привідкрию дещо завісу – цей пристрій з червоними ліхтариками “якось” пов’язаний з моєю бакалаврською роботою. І якщо все буде ок, то я відпишу ще один великий пост по даній темі.

Written by danbst

Квітень 6, 2011 at 20:00

Оприлюднено в Пости

Відповідей: 2

Subscribe to comments with RSS.

  1. Няка. Текст звісно я не читав, тільки подивився ілюстрації. Бо зустрів слово симістор, і подумав що далі нічого не зрозумію. Я так колись робив і зі старими радянськими технічними журналами.

    А дорого та штука на останній фотографії коштує? І що це до неї підключено? RJ-45? O_O Чи все таки звичайне USB?

    bunyk

    Квітень 6, 2011 at 20:54

    • Ось тут прайс – http://opensys.com.ua/price/uls.pdf
      У мене EV8031/AVR LCD + плата розширення OS.01-005. Якщо менi буде потрiбно, можу дiстати i другу плату розширення.

      Спробую перечислити все разом, що менi доступно:
      = Indicators =
      – 8 LEDs
      – static 4-digit 7-SEG indicator
      – dynamic 4-digit 7-SEG indicator
      – 4-row 40 col LCD
      – LED matrix 5×7
      = Input =
      – 2 buttons
      – 12-button matrix keyboard
      = Periferals =
      – Dynamic
      – Fan
      – thermal element
      – thermal sensor
      = Converters =
      – ADC
      – DAC
      – analog comparer
      – RTC
      = Connection =
      – SPI to programmer
      – USB power
      – RS-485
      – RS-232
      = I ще багато чого iншого … =

      На все-про все у мене доступно два МК – ATmega8515 i MCS-51 (один з аналогiв). 32 Кб оперативки.

      danbst

      Квітень 6, 2011 at 22:36


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: