<화면 구성>

1. 프로젝트 이름 :  인장하중기 모니터링 및 생산관리 프로그램 개발

2. 개발 기간 :  2010. 11 ~ 2011. 5   인도공장 납품용 3대(PB 및 CLUTCH)
                    2011.   5 ~ 2011. 7   북미공장 납품용 6대(PB, ATM)
                    2011.   6 ~ 2011. 7   국내공장 납품용 1대(PB)
                    2011.   9                 국내공장 납품용 3대(PB, ATM, MTM)
                    2011. 10                 국내공장 납품용 1대(PB)

3. 개발툴 :  VB 6.0 및 ACCESS 2007

4. 특이사항 :  LG XGB-DNS32 PLC와 RS-232C 통신, 각 생산 케이블 마다 프로그램이 달라짐

5. 발주업체 : 시원테크

<사용 중인 프로그램>
 
저작자 표시 비영리 변경 금지
기타 전공자료 | Posted by Mr.Yong 2011/03/21 20:37

LIN통신


작년에 한 LIN통신에 관한 세미나 자료입니다.  LIN 통신의 프로토콜에 대해 정리했습니다


기타 전공자료 | Posted by Mr.Yong 2011/03/21 20:33

CAN 통신


  작년에 한 CAN 통신 세미나 자료 정리해서 올립니다. 주로 CAN 통신에 관련된 프로토콜에 관한 내용들입니다.


저작자 표시 비영리 변경 금지

  이번에는 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 제로크로싱 제어를 활용한 출력제어 (씨에스랩 카페) |작성자 씨에스쥔

전자공학 | Posted by Mr.Yong 2010/12/26 12:59

74HC86에 의한 간단 클록체배 회로



전자공학 | Posted by Mr.Yong 2010/12/08 00:01

RC 저역통과 필터



  음성신호를 예로 들면, 신호가 전달되는 과정에서 여러가지 성질의 잡음이 섞여드는데, 고주파 잡음이 많으면 정상적인 음성신호의 배경에 씨-익 하는 높은 음의 거슬리는 소리가 들리게 된다. 이와 같은 경우, 고주파 성분을 걸러내어 깨끗한 소리를 복원하기 위한 용도로 RC 필터와 같은 저역통과필터를 쓴다. 실제적인 경우 R과 C만 사용하는 것이 아니라 연산 증폭기를 함께 사용하여 보다 나은 특성을 보이도록 하지만, 결국 그 원리는 단순 RC 필터의 틀을 크게 벗어나지 않는다.

  한편, 주기성 있는 펄스 부하를 구동하는 전원회로의 경우, 주기적으로 발생하는 과도한 돌입전류 및 펄스 부하로 인한 스파이크 전류를 억제하여 소자 스트레스, 전자파, 발열을 줄이기 위해, C 값에 비해 아주 작은 저항을 사용한 RC 저역통과필터를 사용하기도 한다.

  또한, 트랜지스터나 다이오드 등의 스위칭 소자 양단에 RC 필터를 연결하면, 스위칭에 따른 전압의 변화에는 영향을 주지 않으면서, 스위칭 주파수보다 높은 주파수로 발생하는 높은 전압의 스파이크에 대해서는 낮은 임피던스로 작용하여 이를 걸러낼 수 있다. RC 저역통과필터가 이와 같이 스위칭 소자를 보호하기 위한 목적으로 사용된 경우 이를 스너버(snubber)라고 부르기도 한다.


- 출처 : 인터넷 이곳저곳

전력전자&모터 | Posted by Mr.Yong 2010/06/23 14:16

Using Vibration Motor


    ->  핸드폰이나 게임기에 진동을 발생시키는 Vibration Motor 사용(디바이스마트에서 구입).
    -> 
MCU에서 TRBASEHigh
신호를 주어 구동.
 
저작자 표시 비영리 변경 금지

<그림 1> OK-X128A1 KIT 화면(firmware)


<그림 2> PC용 소프트웨어 모니터링 화면(software)



<동영상 1> 작동 동영상

      - E2net 모듈(ENC28J60 내장)을 이용해서 Ethernet 통신을 구현

      - OK-128A1 KIT에 있는 각종 데이타를 PC용 소프트웨어로 전송.
    
      - PC 소프트웨어는 Visual Studio 2005를 이용(Winsock, C++) 구현, 각종 그래프 및 에디트 컨트롤로 값을 표시.

      - 제작기간은 2010. 4~2010. 6, 자세한 내용은 PPT 참고.
저작자 표시 비영리 변경 금지

  2009. 12. 2. 완료된 학부과정 졸업작품 Mobile Device이다

  주 기능은 게임 세균전+Mp3 Player이다.

  보고서 쓰면서 고생했던 기억이...PCB가공기로 모두 기판제작....아래 그림들은 전체 모습과 기능을 사진으로 
 
찍어봤다.

그림 1. 졸업작품 전체 사진

그림 2 MP3 모듈 부분


그림 3 TFT-LCD 모듈 부분



그림 4 MCU 모듈 부분



그림 5 메인보드 부분




그림 7. 메인 메뉴


그림 8. MP3 플레이어 기능


그림 9. 게임 세균전

 
   이 작품에 아쉬운 점은 통신을 기능을 안 넣었다는 것이다.그게 참 아쉬움..

  개인적으로 공대생이라면 꼭 졸업작품을 해보라고 하고 싶다..얻는게 훨 많으니..



저작자 표시 비영리 변경 금지
전력전자&모터 | Posted by Mr.Yong 2010/06/10 14:03

BLDC 모터의 구동 원리(퍼옴)


그림 1 간단한 형태의 BLDC 모터 내부 구조

  그림 1은 BLDC 모터의 간단한 구조를 나타내고 있다. BLDC 모터는 영구 자석으로 된 회전자와 권선으로 되어 있는 스테이터 폴들로 이루어져있다. 영구 자석 회전자와 전류가 인가된 권선으로부터 생성되는 자기장 사이의 관계에 의해 전기 에너지는 회전자를 회전시킴으로써 기계적인 에너지로 변환된다.
  그림 왼쪽에는 간단한 형태의 BLDC 모터의 내부를 나타내고 있으며, 오른쪽은 stator의 전기적인 구성을 나타내고 있다. 오른쪽 그림에서 ( A – a – com – b – B )의 순서로 전류가 흐르는 1번의 경우를 생각해보자. 그러면 왼쪽 그림에서처럼 해당 stator의 극성이 정해진다. 영구 자석으로 되어 있는 rotor의 N극은 ( A – a ) stator와 ( com – b ) stator 사이에 위치하고, S극은 ( b – B ) stator와 ( a – com ) stator 사이에 위치하게 된다. 여기서 ( A – a – com )으로 흐르는 전류량과 ( com – b – B )로 흐르는 전류는 BLDC 모터에 연결되어 있는 MOSFET 소자에 의해 스위칭 되어 A, B, C에 공급된다.

  앞에서 설명한 구조는 내부 rotor가 하나의 N, S극 이루어진 단순한 형태의 BLDC 내부 구조이다. 만약, rotor가 2 pole이 아니라 4 pole이라면, 내부 둘레의 stator의 개수도 6개가 아닌 12개가 된다. 그렇게 되면, stator에 인가되는 전류의 상이 바뀔 때, 60도씩 움직이는 것이 아니라 30도씩 움직이게 된다.


그림 2 3상 브리지 회로

  그림 2는 3상 브리지 회로를 보여주고 있다. High 시그널이 입력되는 P-channel MOSFET소자와 Low 시그널이 입력되는 N-channel MOSFET 소자로 구성되어 있다. 각각의 MOSFET 소자 사이가 모터의 A, B, C(U, V, W)에 연결되어 모터를 구동시키기 위한 전류를 공급하게 된다. 각각의 드라이브 컨트롤은 MOSFET에 High와 Low 시그널을 조합, 입력하여, A, B, C 터미널에 High 드라이브, Low 드라이브, Floating 드라이브가 걸리게 된다.
  한가지 주의해야 할 점은 이런 형태의 회로에서는 모터전류 공급을 위한 하나의 드라이빙 회로에서 High MOSFET과 Low MOSFET을 동시에 활성화 시키면 안 된다는 것이다. 또한 마이크로 컨트롤러에서의 신호를 즉시 인식시킬 수 있도록 드라이버 입력단에 반드시 풀-업과 풀-다운 저항을 연결해 주어야 한다. High, low 양쪽 드라이버를 동시에 활성화 시키지 못하게 하는 dead time control이라고 하는 방법은 low 쪽 드라이버가 활성화 되기 전에 high 쪽 드라이버를 적당한 시간만큼 미리 비활성화 시키는 것이다. 일반적으로 드라이버는 on 될 때보다 off 될 때 시간이 더 많이 소요된다. 따라서 동시에 드라이버가 활성화 되지 않도록 이 시간 차이만큼의 여유를 가져야 한다.
  하지만, BLDC 모터 제어를 위한 드라이빙 순서는 high 쪽과 low 쪽이 스위칭이 이루어지기 전에 floating 상태를 거치기 때문에 자연적으로 dead time이 존재하게 된다. 따라서 이런 순서에서는 일부러 dead time을 고려하지 않아도 된다.


그림 3 드라이브 타이밍 순서

  그림 3은 BLDC 모터의 3상 드라이브에 대한 입력 순서는 나타내고 있다. 홀센서는 두 가지 버전으로 나눌 수 있다. 상이 60도 시프트 되는 것과 120도 시프트 되는 것이 그것이다. 이에 근거하여 모터 제조회사에는 상 변화 순서를 정의해서 판매가 되며, 우리는 이에 따라 모터를 제어하면 된다. 홀센서는 파워 소스를 필요로 하는데, 대략 4~24V의 전압을 요구하며, 5~15mA의 전류를 소모한다. 모터 제어회로를 설계할 때 이 점을 유의해야 한다. 홀센서는 보통 open-collector 타입으로 컨트롤러 쪽에 풀업 저항이 필요하다.


퍼온 곳 : http://nerve.tistory.com/

저작자 표시 비영리 변경 금지


티스토리 툴바