<사진> 실험장치의 전경

 

          

  <사진> 공주대학교 전력전자응용연구실 식구들(좌측부터 장진욱형, 이원일형, 김동기형, 나, 윤덕용교수님)

 

         

                                                     <사진> 논문상

 

        * 이승용, 김동기, 윤덕용, "TRIAC을 이용한 커패시터 운전형 단상 유도전동기의 속도제어 특성",

          대한전기학회 전기기기 및 에너지변환시스템 부문회 춘계학술대회(한양대학교 안산캠퍼스) 논문집,

          pp. 231 ~ 234, 2012. 4. 20, 우수논문상 수상

 

            TRIAC을 이용한 커패시터 운전형 단상 유도전.pdf

            학술대회발표자료.pdf

 

댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 김동기 2012.05.01 00:05

    이승용군 다시 한번 축하한다...^^

  이번에는 AC전력제어에 많이 쓰이는 TRIAC 전력제어 중에서 제로크로싱제어를 사용한 출력제어법을 소개합니다.

  TRIAC을 사용하여 전력(우리나라는 보통 AC220V)기기를 제어하는 방법은 크게 두가지로 나눌 수 있습니다. 하나는 위상제어이고 또 하나는 이번에 소개하려는 제로크로싱(Zero Crossing)제어 입니다.

  혹시 이게 뭔미? 하시는 분들을 위해 위상 제어와 제로크로싱 제어에 대해 간략히 설명합니다.    
 

  위 그림에서 붉은색 사인파형은 AC라인의 전압파형이죠. 그리고 수직으로 내려운 검은색 실선은 TRIAC GATE TRIGGER 신호입니다. 위상제어는 트리거의 위상을 조절해서 AC출력(그림의 'ON'구간) 크기를 제어하는 것입니다.  즉, AC전압이 원점을 통과하는 시점을 검출해서 그 시점을 기준으로 트리거를 일찍하면 출력은 100%에 근접하고, 트리거 타이밍을 늦추면(최대 8.333ms) 출력은 0%에 근접하게 됩니다.

  참고로 우리나라의 전력은 모두 60Hz이니까 1Hz는 1/60 = 16.667ms이고 그 반파에 해당하는 1/2는 8.333ms입니다. 제로크로싱제어에서는 AC전압이 원점을 통과하는 시점 직후에 TRIAC에 트리거 신호를 줍니다. 위 그림처럼 트리거 신호를 주면 'ON', 주지 않으면 'OFF'가 되는거죠. 그러니까 위상제어에 비해 간단하다고 할 수 있습니다.

  자, 이제 위상제어를 하든 제로크로싱을 하던 TRIAC을 사용한 전력제어 회로의 예를 보입니다.

 

 

  PH_CHECK는 MCU의 인터럽트로 연결하고 인터럽트 모드는 NEGATIVE EDGY 트리거로 설정해야 합니다. TRIGGER이야 당연히 출력포트로 연결하는거죠. 가능하면 MCU의 출력포트는 OPEN 모드인것이 좋습니다. PH_CHECK INT는 포토커플러의 동작점이 있어서 AC 제로크로싱 포인트 보다 일정시간 늦게 되는데 이는 R2값으로 어느정도 조절할 수 있습니다.

  그런데 트리거 시점은 제로크로싱 포인트보다 일정시간 늦어야 합니다. 그 이유는 TRIAC에 짧은 펄스(10us)로 트리거 신호를 주더라도 그 시점의 순간전압이 매우 낮으면 전류가 거의 흐르지 않게 되는데 흐르는 전류가 일정값 이하이면 TRIAC는 'TRIGGER ON'에 실패하게 됩니다. 이것을 TRIAC의 최소 유지전류라고 합니다. 만일 모터등 인덕턴스 성분이 큰 부하인 경우는 전압투입에 비해 전류의 흐름이 상당히 늦게 됩니다. 이때는 트리거 시간을 적당히 연장하던지 아니면 연속적인 트리거 신호를 주던지 해야 합니다.

  제로크로싱은 역률이 100%에 가까운(즉, 위상지연이 거의 0도인) 히터부하를 대상으로 하므로 모터를 대상으로하는 위상제어에 대한 이야기는 생략하겠습니다. 편의상 여기서는 1/2 CYCLE을 1펄스로 표현하겠습니다.

  자, 그러면 예를 들어 48% 출력제어를 어떻게 하면 좋을까요? 간단히 생각하면 100번의 펄스(1/2 CYCLE)가 발생하는동안 48번을 보내면 되는것이죠. 그렇다고 '48 펄스를 먼저 출력하고 62펄스는 쉰다'는 것은 좀 안이한 발상입니다. 이렇게 하면 히터의 출력이 0.833초(100/120초)를 주기로 흔들리게 되는데 이는 히터의 온도제어에 오차로 나타나게 됩니다. 또 현실적으로도 히터에 소음이 발생한다든지(지잉..지잉..하는 소리가 납니다.)하는 문제도 생깁니다.  

 
자, 우선 분모를 100으로 하고 분자는 0으로 합니다.

  먼저 분자에 출력율을 더합니다. -> 48/100 -> 1 이하이므로 쉽니다.

  첫 크로싱에서 또 출력율을 더합니다. -> 96/100 -> 1 이하이므로 쉽니다.

  다음 크로싱에서 또 출력율을 더합니다. -> 144/100 -> 1 이상이므로 1펄스를 출력하고 분자에서 100을 뺍니다. -> 44/100

  다음은 92/100 -> OFF -> 140/100 -> ON(40/100) -> 88/100 -> OFF -> 136/100 -> ON(36/100) ......

  결국 50회의 크로싱에서 24번의 'ON'이 적절히 분산되어 발생하게 됩니다.

  히터에 주는 출력은 골고루 분산되겠죠.

  자, 이제는 구현코드를 보겠습니다. 이런 간단한 제어는 대부분 소형 MCU로 구현되는 일이 많은데, 여기서는 ATMEGA32에서 구현된 코드입니다.

컴파일러는 코드비젼입니다.

 //

// 지정된 비율에 따라 히터 출력을 결정

//

#define PULSE_DUTY 100 // 여기서 제어 정밀도가 결정됩니다. 100이면 %단위가 됩니다.

uchar HeatCount;

char pulse_out_heater(void)
{
 char pulse = 0;

 if (HeaterOn) // 히터를 켜고 끄는 스위치입니다.
 {
  HeatCount += HeatOut;

  if (HeatCount >= PULSE_DUTY)
  {

   pulse = 1;

   HeatCount -= PULSE_DUTY;

  }
 }
 
 return pulse;
}

 

// PH_CHECK에 의해서 발생하는 EXT_INT2 인터럽트입니다.
// External Interrupt 2 service routine
// 60Hz Power Cycle Detect
// Plus Cycle Trigger
// 잠깐, 회로를 보면 플러스 사이클에서는 PH_CHECK 신호가 나오지만
// 마이너스 사이클에서는 PH_CHECK가 나오지 않습니다.
// 따라서, PH_CHECK에 의한 인터럽트가 발생한 후 8,333us후에 타이머1 인터럽트를 발생시켜
// 마이너스 사이클에서도 출력을 제어하도록 합니다.


#define TRIG_TIME_DELAY 65536-8333 // 0us delay

interrupt [EXT_INT2] void ext_int2_isr(void)
{

 if (pulse_out_heater()) TRIGGER= 0;
 
 delay_us(10); // TRIAC의 트리거는 10uS 펄스폭만으로도 충분합니다.

 TRIGGER = 1;

 // 8,333us 후에 TIMER1 INT가 발생하도록 설정
 TCCR1A=0x00;
 TCCR1B=0x02;
 TCNT1H = TRIG_TIME_DELAY >> 8;
 TCNT1L = TRIG_TIME_DELAY & 0xFF;
 TIMSK=0x05; // Timer0,1 Interrupt enable

}


// Timer 1 overflow interrupt service routine
// Minus Cycle Trigger

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
 if (pulse_out_heater()) TRIGGER= 0;

 TCCR1A=0x00;
 TCCR1B=0x00;
 TIMSK=0x01; // Timer1 Interrupt disnable

 delay_us(10);

 TRIGGER= 1;
}

 

// 이것은 ATMEGA32에서의 EXT2 INT 설정함수입니다.
// ATMEGA계열은 대부분 그대로 사용할 수 있습니다.
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: On
// INT2 Mode: Falling Edge
 
void extint2_init(void)
{
 GICR|=0x20;
 MCUCR=0x00;
 MCUCSR=0x00;
 GIFR=0x20;
}

여러분에게 참고가 되길 바랍니다.

[출처] 네이버 : TRIAC 제로크로싱 제어를 활용한 출력제어 (씨에스랩 카페) |작성자 씨에스쥔

댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 노홍구 2012.06.12 06:46

    좋은 정보 감사합니다.
    그렇다면 1% 출력 제어는 100회에 1번 발생하게 되는 것인가요?

    •  댓글주소  수정/삭제 이승용 2012.06.15 23:26

      그렇죠...

      그래서 응답이 느립니다.

      논문에서도 보면 위상제어 비해 응답속도가 느리죠.

      대신 장점이..삐익 거리는 소음이 적다 이런거지요

      그래서 보통 장판이나 이런데서 사용하죠.