ino Pro mini sketch source for AC Auto Spot Weldering

출처: https://mindeater.tistory.com/2327 [MindEater™ - Life Sketch]

 

<오토스폿 회로가 들어간 풀 회로도>
 
 
이 글은 아두이노 스케치 카테고리를 새롭게 만들면서 기존 DIY Sketch에 올린 글에서 관련내용을 옮긴 글이다.
 
기존 스폿용접 회로에 자동스폿을 지원하기 위한 히스토리가 들어가 있으며,
그 기능이 반영된 스케치파일을 공유하고, 버전관리를 위한 페이지이다.
 
 
 

 

 

 

오토스폿을 구현하기 위해 DIY카페 혹은 아두이노 정보를 올리는 블로그, 지식인 등등 문의를 해보았지만,
실제로 그 원리에 대해서 쉽게 이야기 해주는 사람이 없었다.

스위치를 이용하는 매뉴얼 스폿의 경우 회로와 소스가 오픈되어 있고 다양한 버전이 있지만,
오토스폿에 관련한 정보는 자작인들의 실구현이 드물다보니 구현자가 오픈하기 전에는 관련 정보를 얻기가 쉽지 않았다.

 

 

 

오토스폿의 원리

 

여러 루트를 통한 정보를 종합해 본 결과 비교적 구현이 쉬운 것은 스너버회로에 의해 2차 권선에 유도된 전압을 이용하는 것이다.
대다수의 공개된 회로에는 전원 인가시 순간적으로 치솟는 전압을 잡아주어 회로 보호 목적으로 스너버(Snubber)회로를 사용하고 있다.

이 스너버회로에 의해 유도된 2차권선의 전압를 포토커플러를 이용하여 Detect 하는 것이다.
여기까지가 추정한 원리 중에 하나였고 아두이노를 통해서 실구현 하는 방법에 대해서 막연하게 찾아보고 있었다.
전압분배도 공부하고, 풀업, 풀다운 회로도 알아보고,,, ^^;;;

 

그런데 차에,,
e홈메이드 클럽에 락시꾼님이 구현에 성공했고 그 소스와 원리에 대해서 카페에 오픈해서 한 스텝 앞으로 나갈 수 있었다.

처음엔 포토커플러 없이 아두이노용 전압센서를 사용한 버전을 공개했었는데,
그 로직에 전압센서 대신 포토커플러를 이용한 버전을 이어서 공개했다.

 

 

 

락시꾼님이 구현한 오토스폿의 원리


아날로그 핀에 잡히는 수치를 이용한 방식인데 완벽하게 이해를 하지는 못했다.

[관련 락시꾼님의 글] https://cafe.naver.com/hssoon/191391

스너버 전압에 의한 2차 권선의 전압이 포토커플러 1번과 2번을 통해서 동작가능한 전압이 되면,,
수광부 4번핀에서 3번핀으로 전류가 흐르는 데,, (PC814, K3010의 경우)
락시꾼님이 구성한 회로는 3번핀은 GND, 그리고 4번핀은 아날로그 A0를 사용했다.

 

<PC814 Function Diagram, 내부 회로>

1번과 2번에 전류가 흘러(다이악, 방향성없음) LED가 발광하면 4번에서 3번 핀으로 전류가 흐르는 구조다.

 

추정컨대,,
아날로그 핀 A0에 아두이노 내부 VCC의 전압이 일정부분 드롭되어 GND쪽으로 흐르다가,
동봉 쇼트시 GND쪽으로 흐름이 끊껴 A0핀에 전압이 높게 잡히는 원리가 아닐까 싶다.
실제 잘 동작한다.

 

.
.
.

 

여하튼 락시꾼님이 공개하신 스케치파일에서 오토스폿함수를 차용해서 진행 중인 스폿기에 맞게 수정 후 작업해보았다.
다만 잘 되다가도 대기 상태에서 헛데이타가 읽혀 동봉 숏트가 아닌데도 오토스폿이 진행되는 경우가 종종 발생했다.
- 3K 링코어와 50sq 권선을 사용했다 -

그렇게 작업한 결과를 카페에 공유를 했었다.
그런데 뜻밖에도 '맹지동'이라는 아이디를 사용하시는 분이 의미있는 실험결과를 댓글로 공유해주셨다.

포토커플러의 수광부인 4번에 5V를 입력하고 3번은 풀다운저항과 함께 GND에 연결했고,
평소 5V 그리고 동봉 쇼트시 0V가 확실하게 읽힌다는 실험 결과
였다.


브레드 보드를 이용해서 실험해보니 정확했고 이를 아두이노에 반영해보기로 했다.

몇 번의 시행착오를 거친 결과 디지탈 핀의 HIGH/LOW만 읽어 처리가 가능한 새로운 커스텀 버전을 만들 수 있었다.

결국 락시꾼님과 맹지동님의 도움으로 나만의 버전을 만들 수 있었기에,,
그 분들게 감사의 말씀을 드리며, 락시꾼님 커스텀 버전으로 소개해본다.

 

 

 



 

 

 

커스텀 버전의 오토스폿 원리

 

결선 전체적인 동작을 그림으로 그려보았다.
포토커플러 PC814와 소자 보호를 위한 220옴 저항이 전부다.



평소 대기 상태는 포토커플러가 동작되고,,
포토커플러 4번 핀과 연결된 아두이노 10번 핀(INPUT_PULLUP으로 설정)의 값이 LOW가된다.

그러다가 동봉이 쇼트가 되면 포토커플러의 동작(1.2V 이상에서 동작)이 멈춘다.
결과 그라운드로로 이어지는 라인이 끊어지고 아두이노 내부 PULLUP 저항에 의해 10번 핀의 값이 HIGH가 되는 방식이다.

 

+
PC814를 사용했으며 좀 더 저가인 K3010 소자를 사용했을 경우 상대적으로 대기상태의 LOW값이 자주 튀는 편이다.
이는 전방보호를 위한 Debounce 값을 주어 2번 이상 연속할 경우 쇼트를 인지할 수 있도록 해서 해결했다.

 

서두에 올린 스키마틱 상단에 이 회로가 들어가 있다.

 

 

 

 

사진에 보이는 녹색의 저항(120Ω)과 빨강색의 0.1uf 커패시터로 이루어진 RC스너버 회로다.
- 회로를 보면 트라이악의 상태와 무관하게 1차측에 연결되어 있다. -

이 회로에 의해 2차 측에 대략 2V정도의 전압이 잡힌다.
- 220v 인가시 6v가 유도되는 링코어에서 -

 

+
보완사항으로 PC814가 1.2V에서 작동하지만, - LED의 밝기에 따라 (추정)- 수광부 센서가 튀는 것 같아
같은 콘덴서를 병렬(결과 0.2uf)로 달아 주었더니 대기 전압이 4V대로 증가했고 튀는 증상이 현저히 줄어들었다.
따라서 이 방식의 안정적인 오토스폿을 위해선 커패시터의 용량을 0.2uf 이상을 추천한다.

다만 너무 높은 정전용량의 커패시티를 사용할 경우 전압이 상대적으로 높아져 스폿용접봉을 쇼트시킬경우,,
간헐적으로 작은 불꽃이 뒤기도 하지만, 전류가 미세해 크게 걱정하지 않아도 될 것 같다.

 

 

 

용량을 증가시킨 스너버회로에 의한 평소 동봉의 전압을 측정해보았다.
4.133V가 측정되었다.

 

 

회로도처럼 포토커플러(PC814) 1번 핀에 220옴 저항을 연결했고, 모두 동봉에 연결,,
위 결선도처럼 3번은 GND, 4번은 아두이노의 디지탈 10번핀에 연결했다.

 

+
여담이지만,,
처음에는 맹지동님의 솔루션처럼 풀다운 저항으로 220옴을 3번 핀 사이에 구성하여 테스트 해보았다.
하지만 이상하게 아두이노에서 플로팅증상이 심해 구현하기가 어려웠다.
테스트로 구성한 회로에서 풀다운저항이 제대로 동작을 안하는 걸로 추측된다.
- 핀모드를 INPUT으로 두고 4번을 5V 전원에 인가하고 3번을 그라운드에 연결해서 테스트 -

 

이런저런 시도 끝에 아두이노 내부에 풀업저항(PULLUP)이 구현되어 있다는 걸 알게 되었고,
결국 포토커플러 3번핀은 GND, 4번 핀은 아두이노의 10번 핀에 저항없이 작결하여 구현에 성공했다.
이 경우 핀모드를 INPUT_PULLUP으로 설정해야한다.

 

이하 오토스폿을 처리하는 함수와 스팟관련 함수를 소개하고,,
스케치파일도 함께 공유한다.

 

 

 



 

 

 

다음은 용접동동을 쇼트를 디텍트하고 오토스폿을 처리하는 함수다.

void processAutoSpot()
{
  if (acHzValue < 50)
    return;
    
  int aData = digitalRead(PIN_AUTO_SPOT);
  if ( aData == LOW )
  {
    autoDetectCount = 0;
    autoDetectFlag = 0;
    autoSpotDebounce = 0;
  }
  else
  {
    if ( autoSpotDebounce++ < AUTO_SPOT_MAX_DEBOUNCE )
      return;
      
    if (autoDetectCount < autoDelay )
        autoDetectCount++;
    if ( autoDetectCount == autoDelay && !autoDetectFlag)
    {
      drawInfo(); /* for display sync */
      triggerSpot();
      DELAY(500);
      autoDetectFlag = 1;
    }
  }
}

AUTO_SPOT_MAX_DEBOUNCE 값은 2로 정의되어 있고 상수값이다.
실제 동봉을 쇼트시에는 연속에서 HIGH 값이 읽이는 데 의미있는 연속된 값이다.
일종의 전방보호값이다.

구현하면서 2차측 약한 전압으로 LOW값이 너무 자주 튄다면 1씩 올려 사용하면 될 것같다.
디스플레이의 A:X의 X값이 대기상태에서 움직일 경우다.

 

 

+
스폿타임 설정함수를 보기 전에 먼저 스폿타임 산출하는 방식에 대해서 알아보자.

 

AC 스폿타임 컨트롤의 방법

- 220V 60Hz-

 

 

AC스폿에서 스팟타임 컨트롤 방법을 간단히 그려보았다.
시간은 반(1/2)주기 단위로 계산이 되고 설정된 시간이 총 몇 번의 반주기가 필요한지 계산을 하게 된다.

실제 스팟 액션이 실행되면 다가오는 제로크로싱 포인트까지의 시간은 버리고,
그 시점부터 전체 필요한 시간의 끝 부분부터 역산을 하게 되는데,,
이유는 사용된 소자 트라이악 BTA41의 STOP 시점이 ZeroCrossing 포인트 이기 때문이다.

결국,
설정된 스폿시간을 만족하는 전체 반사이클 수를 구한 뒤 설정된 시간보다 큰 잉여시간(spotFirstHoldTime)만큼 대기했다가 실행한다.
아래의 코드를 이해하기위한 설명이었다.

 

 

/* 
 * triggerSpot()
 * 
 * 마지막 제로크로싱 끝나는 지점을 스폿타임이 끝나는 지점으로 역산하여 start 시간을 계산한다.
 * 설정된 스폿시간을 1/2 cycle(hCycleTime) 시간을 이용하여 사이클 회수(needHCycles)와 나머지값(spotFirstCycleTime)을 구한다.
 * 나머지 값을 첫 번째 사이클에 반영하고, 결과 spotFirstHoldTime만큼 기다렸다가 spotFirstCycleTime만큼 스폿을 진행한다.
 * needHCycles값이 있다면 추가 사이클만큼 진행하고 멈춘다.
 * 
 * ref) triac의 stop 시점이 제로크로싱 시점만 가능, start는 상관없음
 */
void triggerSpot()
{
  float hCycleTime = 1000 / ((float)(acHzValue*2));  /* half cycle time, 8.33ms in case of the 60Hz */
  int needHCycles = spotTime / hCycleTime;
  int spotFirstHoldTime = (int)((hCycleTime-(spotTime-(needHCycles*hCycleTime)))*1000);
  int spotFirstCycleTime = (int)((hCycleTime*1000)-spotFirstHoldTime);

  cli();

  /* AutoMode에서도 다단스폿은 적용! */
  for (int ii=0; ii<multiSpotCount; ii++)
  {
    /* LED를 켜고 PIN_ZERO_CROSS 포인트가 되면 다음 단계로.. */
    do {
      digitalWrite(PIN_LED, HIGH);
    } while (digitalRead(PIN_ZERO_CROSS_DETECT) == HIGH );

    delayMicroseconds(spotFirstHoldTime);
    digitalWrite(PIN_SPOT_TRIGGER, HIGH) ;
    delayMicroseconds(spotFirstCycleTime);

    if (spotTime > hCycleTime)
    {
      for (int jj = 0; jj < needHCycles ; jj++)
        delayMicroseconds(hCycleTime*1000);
    }

    digitalWrite(PIN_SPOT_TRIGGER, LOW);
    digitalWrite(PIN_LED, LOW);
    
    delayForMultiSpot();
  }
  
  sei();
}

/* Manual Spot - triggered by Switch Pin Interrupt */
void isrSpotActionSwitch()
{
  if ( curSpotMode != SPOT_MODE_MANUAL )
    return;
  if ( curProgMode != PG_MODE_NONE )
    return;
    
  swCount++ ;
  if ( swCount == 1 )
  {
    triggerSpot();
  }
}

isrSpotActionSwitch() 는 인터럽트로 처리되고, 풋스위치를 누를 때 실행되는 함수다.
triggerSpot() 은 스폿시간을 계산하여 트리거핀에 신호를 전달해 실제 스폿을 진행하는 함수다.
스폿타임 8ms 가 제대로 동작하지 않아 디버깅하면서 원리를 파악한 후 재작성했다.

 

간단 매뉴얼

 




오토모드
A:x
x값은 오토모드에서 스폿을 위해 용접봉을 니켈봉에 가져다 대면 증가합니다.
이 값이 아래 대기시간과 같아지면 자동 스폿이 실행됩니다.

T:x
x값은 오토모드 대기 시간입니다.

매뉴얼모드
M:x
x 값은 다단 스폿 회수입니다. 1~6까지 지원
거의 사용할 일이 없지만 좀 더 낮은 시간으로 여러 번 스폿이 필요한 경우 사용

T:x
x값은 다단스폿시 인터벌 시간.  ms 단위
매뉴얼모드에서 설정한 다단 회수는 오토모드에도 그대로 적용됨

트라이악 온도표시
사실 별 필요없지만 공부도 할 겸 대형 배터리팩 제작시 온도를 보고 트라이악의 상태를 체크할 수 있을 것 같아 추가

작동방법
일반모드 : 엔코더를 돌리면 스폿 타임이 조정
모드 전환 : 엔코더를 3~5초 정도 누르면 오토모드와 매뉴얼모드가 서로 전환
설정 모드 : 짧게 한 번 누르면 설정모드 순환
초기화 : 10초 정도 누르면 초기화

 

 

마치며,,

온도센싱을 위해 사용한 A1핀과
오토센싱을 위해 사용한 디지탈 10번 핀을 제외하면
락시꾼님이 공개하신 회로의 소자와 핀맵이 대동소이하니 아래 참고글을 확인하여 자신만의 회로를 구성할 수 있겠다.

 

업데이트

오토스폿용 시그널 케이블을 2차가 아닌 1차로 사용할 경우,
PC814에 연결된 저항 220옴대신 91K옴을 연결해주면 일단 동작함을 확인했다.

 

 

참고글

 

.
.
.

 

Arduino Pro Mini Sketchs

LATEST VERSION

Ac_spot_welder_hooneypapa_20200505.ino
0.02MB

아래 1.5K 링코어에 사용된 버전으로,
대기모드에서 엔코더 조정시 타임이 조절되는 버전 & 핀배열이 위 회로도와 다릅니다.

 

OLD VERSION

Ac_spot_welder_hooneypapa_190831.ino
다운로드
Ac_spot_welder_hooneypapa.ino
다운로드

 

 

Version 관리

최초 버전: 20180813_01

Updated Time : 2019-08-31
    1. 엔코드 컨트롤 변경 :
        > 대기상태에서만 오토모드와 수동모드를 변환하도록 함
        > 설정모드일 경우 바로 대기상태로 변경, 특정 값을 수정후 순환하지 않고 바로 대기모드로 빠져나올 수 있게 함
    2. 오토모드 실행시 cycle값이 60Hz 일 경우만 실행함
    3. 프로그램 시작시 로고에 SW 버전 표시

 

 

보완예정

1.
엔코더 클릭시 디바운스 값과 한번 설정모드로 들어가면 끝까지 순환해야 스폿대기상태로 진입하는 점이 조금 불편
더블클릭과 같은 기능을 넣어 바로 대기상태로 나올 수 있는 기능을 생각중이다.

수정완료

 

2.
3번, 4번핀의 뒤바뀌어 결선해도 동작함을 확인,,
현상에 대한 디버깅 필요!!

 

 

 

관련글

 

아두이노 프로 미니 기반 AC 스폿 제어 회로 만드는 중... ing - 전구 테스트 통과!!

만들기 시작한 건 꽤 됐는데,, 회사 업무와 건강상의 이유로 자꾸 딜레이가 생긴다. 한 번 끊고 가자는 생각에 로그를 남긴다. 아두이노 소스는 이홈카페의 slotgodori님 소개글 속의 락시꾼님 소스

mindeater.tistory.com

 

3K 링코어 AC 오토스폿용접기 자작 회로를 이용한 제작기 - 아두이노 스케치 파일 커스텀 버전 소개

필자는 이미 AC오토스폿용접기를 보유하고 있다. 2K 용량의 구리 링코어로 만들었고 0.2t 니켈도금 플레이트를 4ms에서 가능할 정도로 충분한 성능이다. 그럼에도 스폿용접기의 핵심이라 할 수 있는 회로의 원리..

mindeater.tistory.com

 

[DIY] 2K 트로이달 링코어로 미니(?) 스폿용접기 만들기 Ver 2.0 - 기존 불편함 해소를 위해 최대한 미니미니하면서 성능은 업!!

<작은 하이박스(200X150X130)로 다시 만든 스폿용접기> 작년에 만든 처녀작을 계속 써오다 불편한 점을 개선하려고 만든 업그레이드 버전이다. 코어는 기존 코어인 2K 구리 링코어를 그대로 사용했고, 2차권선과..

mindeater.tistory.com

 

1.5K 링코어 AC 아두이노 오토 스폿기 4호 완성

이전에 제작하고 남은 부품 소진 및 회로 업그레이드겸 겸사겸사 제작했고, 이하 그 로그다. 이번 작업으로 스폿기만 4번 째 인듯 싶다. 이젠 어느 정도 노하우가 생긴건지 귀찮니즘 빼고는 특별

mindeater.tistory.com

 

AC 스폿용접기 제작과 성능 이야기 - 링코어 2차 권선 두께 선정과 전압에 대하여!!

딱 DIY에 필요한 만큼의 전기/전자 지식을 조금씩 주어 들은지 두 해가 넘었고, 돌이켜보면 그 시작이 스폿용접기 제작인 것 같다. 지금까지 총 5대의 스폿용접기를 제작했으며,, 3호기 부터는 꼭

mindeater.tistory.com

 

HI!! 궁금한 점은 편하게 댓글로 문의주세요~

  1. Favicon of https://easykook.tistory.com BlogIcon EasYKook 2019.09.02 00:19 신고  address  modify / delete  reply

    유용한 정보 잘 보고갑니다 ^^

  2. 2020.05.19 01:40  address  modify / delete  reply

    다운받아 갑니다.
    틈틈이 엿보러 오겟습니다.. ^^

  3. 2020.05.19 21:54  address  modify / delete  reply

    추측일뿐,,, 생각만 적어봅니다.
    트랜스 2차에 전압이 나오는건 스너버누설 전압인데요,
    1차에서는 트랜스 턴수에 비례해서 2차측 전압보다 더높은전압이 나오므로
    1차에서 읽어 50k~150k정도 직렬로 포토카를 구동시키면 어떨련지요,,,
    pc814 최대35v까지 넣을수 잇으므로 트랜스 턴수,종류,스너버콘용량 등, 특성을 가리지않고 광범위하게 사용할수 있을걸로 예상됩니다.
    또한. 뚜꺼운 2차권선 까고 땜하는 과정없이 pcb에서 수월하게 해결할수 있겠네요,,,
    로직레벨 전압을 얻기위해 스너버 콘덴서 용량을 높이면 트라이악 열나거나 기능저하의 요인이 될수있습니다.
    통상103(0.02uf)를 달아주는거로 알고있습니다.

    염탐하러왔다가 요롱흔들고 갑니다..

    • Favicon of https://mindeater.tistory.com BlogIcon MindEater™ 2020.05.19 22:52 신고  address  modify / delete

      91K 저항 달고 1차측으로 최근 하나 만들었습니다.
      https://mindeater.tistory.com/2414

      다만 이 소스에서 1.5k 링코어에서 한 방에 되서 범용으로 사용할 수 있는지에 대한 고려는 아직입니다.
      91K 저항을 단 이유는 제로크로싱 체크할 때 사용한 저항과 같은거면 될 것 같다는 느낌에서입니다.

      스너버 용량은 0.2uf를 사용했는데 일단 그 이하면 잘 동작 안하더라구요..
      말씀처럼 기능저하가 있을지 모르겠는데.. 사용시간이 10ms 이하가 많아 크게 문제 없지 않을까하는 생각은 듭니다.

      의견 너무 감사드려요~
      뭔가 고수의 향기가.. ^^;

  4. BlogIcon 두두 2020.06.03 07:38  address  modify / delete  reply

    안녕하세요. 좋은 자료 감사드립니다. 전자렌지 트랜스를 이용해서 올려주신 회로를 가지고 스폿을 만들었습니다.

    수동모드는 잘 돼는데 오토모드는 안돼네요.
    오토모드로 변경하자마자 용접봉이 떨어져있는데도 쇼트로 인식되어 A:X가 설정 시간까지 증가후 허공에 스폿쳐지네요.

    오토감지는 이글 참고하여 동일하게 814 앞단에 91k저항 사용하고 1차측에 연결하였습니다.

    전자렌지트랜스라 성격이 조금 다른거 같은데 조언 부탁드립니다.

    • Favicon of https://mindeater.tistory.com BlogIcon MindEater™ 2020.06.03 08:13 신고  address  modify / delete

      스너버 회로의 커패시터 용량은 얼마를 사용하셨나요? (본문참고)
      전자렌지 트랜스는 보통 0.6K 정도라 대기 상태의 전압이 낮을 수 있습니다.

      회로없이 스너버에 의한 2차측 전압 측정해보시고 4V 정도 나오는 지 체크가 필요해보입니다.
      0.2uf 혹은 0.1uf 병렬로 하나 씩 추가 연결해 보면서 테스트하면 결과의 변화가 있을 것 같네요.
      2차측 전압이 어느 정도 나와야 쇼트시 1차측에도 의미있는 변화를 감지할 수 있을 것 같습니다.
      현재 1.5K, 2K, 3K 링코어만 테스트가 된 상태라 저도 궁금하긴 합니다.


      +
      추가로
      코드에서 동봉 숏트시 의미있는 변화를 검출하기 위해 3가지 형태로 수정이 가능할 것 같네요.
      1. RC 스너버회로에서 커패시터 값 변경
      2. 91K 저항값의 변경
      3. 콘솔디버깅을 열어 수치값을 보고 적절하게 코드를 직접 수정

  5. 두두 2020.06.03 08:39  address  modify / delete  reply

    자세한 설명 감사드립니다.
    스너버회로의 캐패시터는 0.1uf 사용하였습니다.

    말씀해주신 3가지 사항을 한번 시도해보겠습니다. 결과도 e홈 카페나 여기 댓글에 공유드릴게요.

  6. 두두 2020.06.04 08:08  address  modify / delete  reply

    어제 밤에 몇가지 시도를 해보았고 완벽하진 않지만 오토스폿이 가능은 했습니다. 불안정한 면이 있어 질문드립니다.

    일단 회로가 전부 납땜이 된상태라 이상태로 측정해보았습니다. 회로는 동작시키지 않고 대기상태일때 스너버 1차측 전압은 3v대. 2차측 동봉 양단은 제가가진 테스터로는 감지가 안될정도로 작은 전압이더군요.

    1.
    말씀해 주신 캐패시터를 0.2uf으로 올리고(0.1짜리 병렬연결) 1차측 재어보니 7v쯤 나옵니다. 여전히 포토커플러가 정상작동을 안합니다. 포토커플러 1번 2번 핀 전압은 0.3v더군요. 포토커플러 동작전압에 한참 모자른듯합니다.

    2.
    포토커플러 앞단 저항을 91k > 33k로 변경하니 포토커플러 인입 전압이 0.6정도입니다. 이상태에서 캐패시터를 0.3uf으로 증가시켜도 여전히 포토커플러 1번 2번핀 양단 전압은 0.6v네요. 혹시나 트랜스 1차측 전압을 보니 10v로 증가는 되었네요. 이상태에서는 잠깐 잠깐 포토커플러가 동작하는게 보이더군요.(동봉 접촉하지 않은 대기상태에서 A:x값이 0으로 유지) 그래도 1~2초 이내라 불안한 상태입니다.

    3.
    AUTO_SPOT_MAX_DEBOUNCE값을 기존 2에서 5정도로 변경하니 안정적이 되었습니다. 가끔 한번씩 헛방이 쳐지네요. 현재는 10으로 설정하고 실사용 가능할만큼 안정적인 상태입니다.

    이상이 테스트한 결과입니다

    추측인데 포토커플러 동작전압이 너무 낮은거 아닌가싶은데 더 낮은 저항을 쓰거나 더 큰 용량의 스너버 캐패시터를 쓰기 겁나더군요(전자회로에 깊이있게 알지 못합니다)

    33k옴 저항이 적당한가요? 더 낮은 저항을 사용해도 될까요? 너무 낮아 포토커플러의 손상이 있거나 하지 않을까요?

    • Favicon of https://mindeater.tistory.com BlogIcon MindEater™ 2020.06.04 08:48 신고  address  modify / delete

      제가 전자렌지 트랜스를 구했다면 하게 될 디버깅을 미리 해주신 듯 합니다.
      너무 감사드립니다.

      결국 1,2,3번 모두 수정하셨네요.
      AUTO_STOP_MAX_DEBOUNCE값을 10까지 키웠다는 얘기는 5~6번은 튄다는 얘기네요.
      디바운스 값이 10이면 코드상 메인 Loop에 100ms Delay가 있으니 숏트 인지후 1초 이후부터 T:x값 카운트가 시작 하겠네요.
      체감상 그리 느리지 않아 말씀처럼 실사용이 가능해보입니다.

      33k 옴 저항이 적당한지는 저도 당장 답변드리기 어렵네요.
      저항을 달면 220V의 전류가 낮아지게 되고 그에 따라 전압이 드롭될텐데 포토커플러 스펙에 준하는 전압이 측정되면 크게 문제 없지 않을까 싶습니다.

      참 포토커플러 PC814인가요? K3010인가요? 처음 오토스팟 테스트할 때 K3010으로 했더니 자주 튀더라구요.
      +
      앞 댓글 읽어보니 814 사용하셨네요....

  7. 두두 2020.06.04 12:47  address  modify / delete  reply

    자세한 댓글 감사드립니다. 우선 이 설정으로 안정한지 기간을 두고 계속 테스트해볼 예정입니다.

    좀 이해가 안되는 부분이 있는데 스너버 누설로 인한 전압은 동봉이 쇼트상태면 오토감지용 포터커플러 인입전압이 0v에 수렴하지 않습니까? 이때 오토스팟이 쳐지면 포토커플러쪽으로 220v 전압이 인가가 되는걸까요? 아니며 스너버 누설 때와 같이 0v 유지일까요? 찰나의 순간이라 측정을 어떻게 해야할지도 몰라서 혹시나 질문을 드려봅니다. 후자라면 좀 더 뭔가를 해볼 여지가 있을것 같아서요.

    • Favicon of https://mindeater.tistory.com BlogIcon MindEater™ 2020.06.04 12:58 신고  address  modify / delete

      제가 아는 바로는,, 스너버에의해 1차측에 인입전압보다 미세하게 높은 전압에 커패시티 용량 만큼의 미세한 전류를 흐르는 상태가 유지되고 있다가,, 동봉이 쇼트되면 이때 이 전류를 소비하고 포토커플러 스위치가 닫힙니다..

      그러다 실제 스폿이 진행되면서 트라이악 스위치가 열리면 220V가 그대로 포토커플러로 들어가는 거죠.
      저항 낮은거 쓰면 포토커플러가 퍽하고 터지지 않을까 싶습니다.

  8. 두두 2020.06.04 22:34  address  modify / delete  reply

    좋은소식입니다.
    오토감지용 포토커플러 앞단 33k옴 저항과 스버너 캐패시터 0.3uf 조합으로 회로는 고정시키고 개선을 좀 시켜봤습니다.
    10번핀 입력값을 모니터링 해보니 용접봉 쇼트일땐 아주 깨끗한 HIGH가 나오고 용접봉 오픈일 땐 HIGH LOW가 뒤죽박죽이더군요.
    그래서 신규 디바운스 코드를 추가했습니다. 이제 쇼트감지를 위한 지연없이 아주 잘 되네요!
    도와주셔서 정말 감사합니다!!!!!!!!!

    아래는 수정한 코드입니다.
    const unsigned char AUTO_SPOT_SAMPLING_DEBOUNCE = 100; // 신규 추가한 샘플링 디바운드 MAX 값

    void processAutoSpot()
    {
    if ( acHzValue < 60 ) return;
    if ( curSpotMode != SPOT_MODE_AUTO ) return;
    if ( curProgMode != PG_MODE_NONE ) return;

    int aData = digitalRead(PIN_AUTO_SPOT);

    // 100 회 샘플링하여 실제 쇼트상태인지 체크함. 쇼트상태가 아니라면 LOW HIGH 가 계속 불규칙하게 들어옴. LOW값이 한번이라도 들어오면 LOW처리함.
    for (int i = 0; i < AUTO_SPOT_SAMPLING_DEBOUNCE; i++) {
    aData = digitalRead(PIN_AUTO_SPOT);
    if (aData == LOW)
    break;
    }

    if ( aData == LOW )
    {
    autoDetectCount = 0;
    autoDetectFlag = 0;
    autoSpotDebounce = 0;
    }
    else
    {
    if ( autoSpotDebounce++ < AUTO_SPOT_MAX_DEBOUNCE )
    return;

    if (autoDetectCount < autoDelay )
    autoDetectCount++;
    if ( autoDetectCount == (autoDelay) && !autoDetectFlag)
    {
    drawInfo(); /* for display sync */
    triggerSpot();
    DELAY(500);
    autoDetectFlag = 1;
    }
    }
    }


    덧말.. 그냥 중요하지 않을 수 있는데요. 12번 핀(PIN_ZERO_CROSS) 에 pc814 4번핀 사이 10k옴 저항은 풀업저항이 아닌지요? 코드에는 내부풀업을 사용하게 하신거 같은데 풀업이 중복으로 적용된거 같아요. 동작하는데 큰 지장은 없는거 같지만 제가 잘못 알고 있는 걸수도 있어서 조심스럽게 말씀드려봅니다.

    • Favicon of https://mindeater.tistory.com BlogIcon MindEater™ 2020.06.06 17:46 신고  address  modify / delete

      아.. 이 글을 이제야 보네요.
      디바운스 처리 코드도 잘 보았습니다.
      혹 업그레이드시에 적용해보도록 하겠습니다.
      사실 Delay()대신 타임으로 스케줄링하는 방식으로 수정하면 좀 더 쾌적하게 동작할 것 같은데 살짝 귀차니즘으로... ^^;;

      12번 핀은 대부분의 스폿회로가 비슷하게 된 걸로 알고 있습니다.
      그래서 특별한 의심없이 사용했었는데 고민해보겠습니다.
      성공하셔서 정말 축하드립니다.
      전자렌지 트랜스로 만드신 분들에게 도움이 될 듯 싶네요.

      감사합니다.
      좋은하루 되시구엽!!