728x90
반응형
ino Pro mini sketch source for AC Auto Spot Weldering

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

 

!!주의!!

약간의 HW지식만 있다면 이 글에 공개된 리소스로 PCB와 펌웨어를 수정하여 카피본을 제작할 수 있습니다.
공개 목적은 개인적인 사용을 전제로 합니다!!
이 글의 자료를 이용하여 금전적 이득이나 상업적 사용은 불가함을 알려드립니다.

 

.
.
.

 

 

1차 권선을 이용한 오토스폿 회로도(최종본)

 
 
 

 

 

  • LED는 생략해도 되지만 케이블로 연장하여 케이스에 부착하면 스폿동작을 가시적으로 알 수 있다.
  • BTA41은 600B 이상을 사용하고 스폿시간이 매우 짧기때문에 굳이 방열판을 달아줄 필요는 없다. 다만 다량의 스폿시 칩 온도가 참고가 되기에 온도체크를 위한 NTC(10K)를 BTA41 방열핀 뒤쪽에 고정해준다.
  • PCB로 검증된 이 회로도를 최종으로 한다.

 

 

 

 

부품 리스트 및 구입처

 

부품 수량 구입처
아두이노 나노 & 소켓 1 www.devicemart.co.kr/goods/view?no=1342039(아두이노 나노) www.ic114.com/WebSite/site/sc/00V0.aspx?id_p=P0090817(소켓)
Display
선택
LCD1602 1 https://www.devicemart.co.kr/goods/view?no=1327456 (추천!!, 튼튼하고 저렴)
OLED 0.96   https://www.aliexpress.com/item/32896971385.html
OLED 1.32   https://www.aliexpress.com/item/4000182358480.html
MOC3021M 1 https://www.devicemart.co.kr/goods/view?no=9456
PC814
K3010(대체품)
2 https://www.devicemart.co.kr/goods/view?no=11312
https://ww.devicemart.co.kr/goods/view?no=1659(대체품)
저항 330R 1/4W 1 https://www.devicemart.co.kr/goods/view?no=38590 
220R 1/4W 1 https://www.devicemart.co.kr/goods/view?no=2001
1K 1/2W 1 https://www.devicemart.co.kr/goods/view?no=38594
10K 1/2W 2 https://www.devicemart.co.kr/goods/view?no=38605
120R 2W 1 https://www.devicemart.co.kr/goods/view?no=1219 
91K 2W 3 https://www.devicemart.co.kr/goods/view?no=1169
BTA 41 1 https://www.devicemart.co.kr/goods/view?no=11422
Capacitor 0.22uF/630V 1
www.ic114.com/WebSite/site/sc/00V0.aspx?id_p=P0044619(0.22uf/630V)
0.1uF 1 www.ic114.com/WebSite/SITE/sc/00V0.aspx?ID_P=P0042737 (X)
100uF/25V 1 https://www.devicemart.co.kr/goods/view?no=1320
BR1000C-4P 1 https://www.ic114.com/WebSite/site/sc/00V0.aspx?id_p=P0034630
HLK-PM01 1 https://www.aliexpress.com/item/32408565688.html
Rotary Encoder Switch 1 https://www.devicemart.co.kr/goods/view?no=12501930(엔코더) https://www.aliexpress.com/item/32989297790.html (노브)
Buzzer 1 https://www.devicemart.co.kr/goods/view?no=2736
NTC 10K 1 https://www.devicemart.co.kr/goods/view?no=9415
LED 1  www.ic114.com/WebSite/SITE/sc/00V0.aspx?ID_P=P0046419(고휘도 LED)  www.ic114.com/WebSite/SITE/sc/00V0.aspx?ID_P=P0046601(LED 홀더)
핀헤더(혹은 JST 커넥터)
XH 2.54
1 www.devicemart.co.kr/goods/view?no=2825
www.devicemart.co.kr/goods/view?no=1321192
www.aliexpress.com/item/32957254098.html
www.aliexpress.com/item/32741723157.html

 

저항과 부품은 국내 디바이스마트를 추천하며 OLED/LCD/HLK-PM01은 가격이 있어 알리익스프레스를 추천한다.
특히 BTA41, MOC3021, PC814(K3010) 등은 중국(알리익스프레스)에서 구입하면 99% 페이크 제품으로 무조건 정품을 사용해야한다. BTA41의 경우 가격때문에 중국에서 구입하고 대신 2개를 병렬로 사용하기도 하지만 추천하지는 않는다.

 

 

 

PCB에 위 부품을 실장 후 조립한 스폿 회로!!

 

 

.
.
.
 
 

 

오토스폿 개발 배경

 

이 글은 기존 스폿용접 회로에 오토 스폿 기능을 추가하면서 아두이노 펌웨어 버전 관리를 위한 페이지이다.

최근(2019년 8월)까지 수동 스폿만을 지원하는 회로와 버그는 있더라도 동작은 가능한 소스는 DIY카페에 상당 수 공유되어 있지만 자동 스폿과 관련한 내용이 거의 없어 시간날때마다 인터넷에서 정보를 수집하고 있었다.

수집된 여러 방법 중 스너버회로에 의해 2차 권선에 유도된 전압을 이용하는 방법이 구현 가능성이 가장 높아보였다. 트라이악(BTA41)이 스위칭 될때 순간적으로 스펙이상의 전압으로 치솟는 전압에 의하여 소손되는 걸 방지하는 스너버 회로가 출력라인에 병렬로 연결되어 있어 스위치가 OFF상태인 대기상태에서도 출력에 미세한 전류가 공급되는 상태가 된다. 포토커플러를 이용하여 이 전압변화를 감지하는 방식이다.

 

 

오토스폿의 원리

이미 스폿 회로를 제작하여 분양중인 락시꾼님이 이를 이용한 시험결과를 카페(이홈메이드)에 공유했고 덕분에 필자도 한 스텝 앞으로 나갈 수 있었다.

<PC814 Function Diagram, 내부 회로>

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

포토커플러 핀 1번과 2번을 2차 권선에 연결하면 스너버 회로에 의해 2차 권선에 유도된 전압(동봉측)에 의해 포토커플러가 ON된다. 그러면  수광부 4번에서 3번으로 전류가 흐르는 데,, (PC814, K3010의 경우) 3번핀은 GND, 그리고 4번 핀은 아날로그 A0를 사용하고, 4번 핀의 변화를 감지하는 방식이다.

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

 

.
.
.

 

 

일단 락시꾼님이 공개한 방식을 진행 중인 스폿기에 맞게 수정 후 테스트를 해 본 결과 센싱이 가능했다. 다만 임시로 꾸민 회로의 문제인지 대기 상태에서 헛 데이타가 종종 읽혀 동봉 숏트가 아닌데도 오토스폿이 진행되는 문제가 매우 빈번하게 발생해 실제 사용은 조금 힘들어보였다.

이 문제는 간단하게 SW 디바운스 코드를 넣어 해결했고 피드백 차원에서 카페에 공유를 했는데 포토커플러의 수광부인 4번에 5V, 3번은 GND풀다운저항을 연결했을 때, 대기 5V 동봉 쇼트시 0V가 읽힌다는 실험 결과를 이홈의 맹지동님이 알려주셔서 바로 회로를 구며 실험해보니 전압의 수치를 센싱하는 락시꾼님의 방법보다 HIGH/LOW만 읽는이 방식이 좀더 깔끔하다.

결국 카페의 많은 지식인들의 도움으로 만족할만한 개인 버전을 만들 수 있었다.

 

 

 

 

 

오토스폿 세부 동작

 

 

이번엔 좀더 구체적인 동작을 그림으로 그려보았다. 전체적으로 두 개의 소자가 사용되었는데 포토커플러 PC814(혹은 K3010)와 소자 보호를 위한 저항이다.

대기 상태에서 포토커플러가 ON, 포토커플러 4번 핀과 연결된 아두이노 10번 핀(INPUT_PULLUP으로 설정)의 값이 LOW가된다. 이 상태에서 동봉이 니켈바를 거쳐 쇼트가 되면 포토커플러가 OFF상태가 되고 GND로 이어지는 라인이 끊어져 아두이노 내부 PULLUP 저항에 의해 10번 핀의 값이 HIGH가 되는 방식이다.

 

 

728x90

 

 

 

추가 작업

- 스너버회로의 커패시터 용량 추가 -

 

사진에 보이는 녹색의 저항(120Ω)과 빨강색의 0.1uf 커패시터로 이루어진 RC스너버 회로다. 전원 ON시 치솟는 서지 노이즈를 커패시터가 빨아들이고 저항으로 태워서 스위치 소자를 보호하는 기능이다.

220v 인가시 6v가 유도되는 링코어에서 이 회로에 의해 2차 측에 대략 2V정도의 전압이 측정되는데 출렁거리는 전압이라 커패시터를 병렬(결과 0.2uf)로 달아주니 4V대로 증가하여 포토커플러가 튀는 증상이 현저히 줄어들었다. 따라서 오토스폿을 위한 스너버회로의 커패시티 용량은 0.2uf로 결정했다.

이렇게 커패시티의 용량을 높이면 용접을 위하여 용접봉을 쇼트시킬경우 작게 불꽃이 튀지만, 전류가 미세하니 크게 걱정할 필요는 없을 듯 하다.
 

 

 

(좌)2차 권선에 유도된 전압 4.133V과 (우)오토스폿을 위해 추가한 회로

 

처음에는 맹지동님의 솔루션처럼 풀다운 저항으로 220옴을 3번 핀 사이에 구성하여 테스트 해보았지만, 플로팅 증상이 너무 심하여 실제 적용하기 어려했다. 핀모드를 INPUT으로 두고 테스트 꾸민 회로에서 풀다운저항이 제대로 동작을 안하는 걸로 추측된다.

자료를 찾아보다 아두이노 내부에 풀업저항(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 값은 상수값으로 실제 동봉을 쇼트시 이 값만큼 HIGH 상태로 연속되어야 동작한다. 일종의 전방보호값이다. 스폿기를 구현하면서 2차측의 약한 전압으로 이 값이 자주 튄다면 조금씩 올려서 적용해보면 된다.

 

 

 

 

AC 스폿타임 컨트롤의 방법
- 220V 60Hz -

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

 

AC에서 스팟 타임 컨트롤 방법을 간단히 그려보았다.

스폿시간은 반(1/2)주기 8.33ms 단위로 총 몇 번의 반주기가 필요한지 계산을 하게 된다. 실제 스폿 액션이 실행되면 제로크로싱까지 가다렸다가 그 시점부터 전체 필요한 시간을 포함한 구간의 ZeroCrossing이 이루어지는 시간을 찾아 그 시점붕터 역산한다. 이유는 사용된 소자 트라이악 BTA41의 STOP 시점이 ZeroCrossing 포인트 이기 때문이다.

 

아래 코드를 이해하기위한 설명이었다.

void triggerSpot()
{
  float hCycleTime = 1000 / ((float)(acHzValue*2));  /* half cycle time, 8.33ms in case of the 60Hz */
  int needHCycles = int(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) == LOW);

    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();
}

  • isrSpotActionSwitch() - 인터럽트로 처리되고, 풋스위치를 누를 때 실행되는 함수
  • triggerSpot() - 스폿시간을 계산하여 트리거핀에 신호를 전달해 실제 스폿을 진행하는 함수
  • 스폿타임 8ms로 버그 수정
  • 이 소스는 60Hz가 아닌 경우에도 사용할 수 있는 일반적인 코드이다. 하지만 이 경우 매우 드물게 빵!하고 터질 수 있으니 이 값을 Fix해서 사용해야한다. 아두이노 회로에서 보이는 이 증상은 대부분 여기서 기인한다.

 

 

 

간단 매뉴얼

 




[ 오토모드 ]

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

T:x
x값은 스폿실행 전 대기 시간

A-Beep : 오토센싱시 Beep음 (Version 2.5 이상) // Version 2.5
LowTR Mode : 오토센싱 민감도 극대화 모드(Yes)  // Version 2.5




[ 매뉴얼모드 ]

M:x
x 값은 다단(Multi) 스폿 회수 ( 1 ~ 6회 )
효울이 떨어지는 코어에서 좀 더 낮은 시간으로 다단 스폿을 진행하면 열화없이 단단하게 붙일 수 있습니다.

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

온도표시
트라이악의 상태를 체크할 수 있습니다.
연속하여 스폿시 온도가 높다고 판단되면 잠시 쉬었다하세요.


[ 조작 방법 ]
대기상태
: 엔코더를 돌리면 스폿 타임이 조정
모드 전환 : 엔코더를 2~3초 정도 누르면 오토(A)모드수동(M)모드가 전환됨 (비프음 3회)
설정 모드 : 짧게 한 번 누르면 설정모드 순환 (비프음 1회), 2~3초동안 누르면 일반모드로 바로 나옴(비프음 2회)
초기화 : 8초~10 정도 누르면 초기화 (비프음 4회)

HW 타입 변경 (부품 교체시 타입이 다를 경우에만!!)
* 엔코더 좌우방향 전환 : 타임 1ms에서 12초 이상 누름 (부저음 5회, 초기화와 상관없이 저장됨, 버전 V2.9D 이상)
* CLCD 타입 변경 : 타임 2ms 이상에서 12초 이상 누름 (부저음 5회, 초기화와 상관없이 저장됨, 버전 V2.9F 이상)

 

 

 

업데이트

오토스폿 센싱을 2차가 아닌 1차로 사용할 경우,전자렌지 EI코어의 경우 33K/2W, 링코어의 경우 91K/2W 저항을 사용해서 검증완료했다.

 

 

.
.
.

 

 

펌웨어(Arduino Sketchs) 다운로드!!

XLoader.zip
0.67MB

폄웨어 업로드 프로그램.
아래 펌웨어는 Arduino Nano용이며
칩별 Atmega168PA-PU, Atmega168V-20PU, Atmega328P-(P)U, Atmega328 U 용 바이너리는 시간이 나면 준비해서 공유하도록 하겠습니다.

 

 

Version 2.9F  (2022-06-23)

> 최종 배포버전
> 국내전용버전으로 Fix (AC 60Hz만 지원)

AC 오토스폿 회로 설명서_V2.9F.docx
0.90MB

 

Version 2.9d (2022-01-08) : 안정화 버전

1. 로터리 엔코드가 HW 마다 좌우 회전이 반대일 경우에 대하여 SW적으로 선택할 수 있도록 함
> 12초 동안 엔코더를 누르면 좌우 회전시의 동작이 토글됨

2. 엔코더 누르는 시간 일부 조정
> 8~10초 사이는 초기화, 12초 이상은 로터리 엔코더 방향 토글

> 이후 분양 버전은 2.9d로 진행합니다.
> 최근 언짢은 일들이 계속되어 소스코드는 일단 비공개하기로 하고 바이너리 파일로 대체합니다.
> 위에 첨부한 Xloader을 이용하면 업로드 하실 수 있습니다.

AcSpotWelder_HooneyPaPa_V2.9d.nano.zip
0.02MB

 

Hex file에서 위 파일을 압축 해제한 후 선택하고, COM port를 설정 Upload를 누르고 맨 오른쪽 처럼 "15606 bytes uploaded" 라고 나오면 성공입니다.

 

 

 

Version 2.9c (2021-11-28)

1. 1~8ms 구간 스폿불균형 문제 해결
2. 엔코더 조정시 AC Hz 튀는 현상 보완
3. 오토센싱 카운트 조정 ( 안정화 ) --> 일부 전자렌지 EI 코어도 저항 교체없이 잘 동작함!!
4. 수동 스폿시 간헐적으로 투스폿이 되는 회로가 있어(아두이노 모듈에 따라 간헐적으로 발생) --> SW 디바운싱 타임을 조정

 

 

이미지 업로드 방법!!

 

AC오토스폿회로(by 후니파파) 아두이노 이미지 업그레이드 방법!!

제가 제작한 AC 오토스폿회로는 보다 쉽게 접근 할 수 있도록 아두이노 나노(Nano) 기반입니다. 이 글을 통하여 아두이노를 처음 접하는 사람을 위하여 이미지가 업데이트하는 방법을 정리해봅니

mindeater.tistory.com

 

 

 

.
.
.

 

 

OLD Version

 

Version 2.8 (2021-05-18) : 최신 버전 (Beta...)
1. 매뉴얼모드 버튼 SW 디바운싱 보완
   MANUAL_SW_DEBOUNCING_TIME(300ms) 안에 한 번만 가능 --> 최적화 완료!!
2. Default 값 조정 (A-Beep: Yes, Auto T: 6)
3. 패시브 부저를 사용할 경우 Hz 탐지 오동작 패치 --> 가급적 능동부저 사용을 추천!!
4. PinChangeInt 라이브러리를 소스에 추가 (초보자를 위한 작업복잡도 감소)

 

Version 2.7 (2021-04-09) : 안정화 버전
1. 오토모드 최소 대기시간 수정 3-->2 (좀 더 빠른 작업을 위한)
2. 총 스폿회수 즉시 저장을 스폿이 끝나고 idle시간에 저장 (EEPROM 수명연장을 위함)

Version 2.6 (2021-03-09) : 베타버전
1. 오토모드에서 환경설정 항목 추가
A-Beep : 오토센싱시 부저 On/Off
LowTR Mode : 전자렌지 변압기처럼 오토센싱이 오동작할 때 SW 샘플링 극대화 모드!!
2. 온도 표기를 한 자리로!!

Version 2.5 : 2020-02-28
전자렌지 EI 트랜스에서 오토센싱 지원
R9 저항을 91K --> 30~40K 교체가 필요함!!

Version 2.4 : 2020-02-28
1. LCD UI 수정 : ms -> MS 대문자로!!

Version 2.3 : 2020-02-16
1. Default  값 정리
-- 삭제 --

Version 2.2 : 2020-11-06
1. LCD1602 Display 적용
2. Loop에서 Delay를 없애고 Time 스케줄링으로 변경
3. AC 주파수 값에 Debounce 처리
4. Auto Sensing Beep음 활성화 Define으로 Disable 가능
--삭제--

Vresion 2.1 : 2020-11-06

수정내역 :

  1. OLED 0.96/1.32, LCD1602 지원 -> 소스코드에서 선택
  2. Total Spot Count를 표시
  3. 소스코드 튜닝(delay() 방식에서 스케줄링 방식으로 조정
  4. 버전 체계를 날짜방식에서 일반 메이저.마이너 방식으로 변경하고 2.1로 배포
--삭제--


LCD1602 Version


OLED 0.96inch Version

LCD와 조작방법은 동일

설정화면이 따로 없고 메인 화면에서 OLED 버전은 느낌표(!)로 LCD 버전은 깜빡거림으로 수정항목을 구분함.
OLED가 좀 더 깔끔한데 하우징이 조금 애매해서 서로 장단점이 있다.


% 스케치 파일 적용시 아래 DISPLAY와 부저타입과 핀맵 확인 요망!!

/////////////////////////////////////////////////////////////////////////////////////////////////
// 제작하는 부품 스펙에 따라 수정필요!!!!!
// ★★ 주석은 필히 확인
/////////////////////////////////////////////////////////////////////////////////////////////////

#define DISPLAY_TYPE_LCD1602 0 /* Crystal LCD 1602 */
#define DISPLAY_TYPE_OLED096 1 /* OLED 0.96 inch */
#define DISPLAY_TYPE_OLED132 2 /* OLED 1.32 inch */
#define DISPLAY_TYPE                DISPLAY_TYPE_OLED096 /* ★★, 디스플레이 타입!! */

#define BUZZER_TYPE_ANALOG 0 /* 능동부저 */
#define BUZZER_TYPE_PASSIVE 1 /* 수동부저 */
#define BUZZER_TYPE                BUZZER_TYPE_ANALOG   /* ★★, 부저타입, 아날로그 타입 추천!! */

 

※  Updated Time : 2020-05-05
아래 1.5K 링코어에 사용된 버전으로, 대기모드에서 엔코더 조정시 타임이 조절되는 버전
핀배열 체크 필요!!
--삭제--

Updated Time : 2019-08-31
1. 엔코드 컨트롤 변경 :

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

최초 배포: 20180813_01
--삭제--

 

 

.
.
.

 

 

후니파파 AC오토 스폿용접 회로 분양 페이지!!

 

AC 오토 스폿회로 리뉴얼 버전 타임 검증, 배포시작!! 분양 ^▽^)/

작년 말에 리뉴얼을 마음먹고 PCB 작업을 했습니다. 마무리는 년 초 마무리 및 검증이 완료 되었지만 기존 버전 재고가 소진된 지금에서야 공개하고 배포를 시작합니다. https://mindeater.tistory.com/252

mindeater.tistory.com

 

 

 

728x90
반응형