티스토리 뷰

https://qiita.com/YuskeGoto/items/c4de1f868d0d6cce6e03

https://ing-min.tistory.com/249

 

아두이노 _ 플로터 _DIY (GRBL CNC Shield + Z axis servo MIGRBL) + UGS

https://blog.naver.com/jooyon_smps/220600993613 파워서플라이 SMPS에 AC전원선과 출력선 연결 방법. 안녕하세요 주연티앤에스입니다. 오늘은 가장 기본이면서 가장 질문이 많은 SMPS 에 AC 전원선연결하... blog.

ing-min.tistory.com

 

TouchDesignerとGrblでやる貧乏人のためのステッピングピングモーター制御入門 - Qiita

この記事はTouchDesigner Advent Calendar 2020の4日目の記事です。前日(3日目)の記事は @shks さんの「ParsecTOP : ParsecをTouchDes…

qiita.com

litho.zip
6.30MB

아두이노 IDE 에서

- 1mm당 스텝수 설정

  • Command 입력란에 $100=200을 입력하여 Enter
  • 확인 응답이 반환되는지 확인
  • 최대 속도 설정
    • 크게 해 두어 문제 없음. $110=5000 입력. 5000mm/min으로 했습니다.
  • 최대 가속 설정
    • 너무 크게 하면 급격하게 속도 변화한다. 50mm/s2 정도로 좋다
    • 콘솔에서 $120=50 입력
  • 스테핑 펄스 관계 튜닝
    • 조금 전문적이지만, 스테퍼 모터의 상한 속도는 컨트롤러가 출력하는 스테핑 펄스의 폭이나 추종하기 위한 스테핑 모터의 파워에 의해 결정됩니다. Grbl은 기본적으로 10μSec이지만 A4498은 최소 1μSec까지 제어 펄스를 받아들이므로 좀 더 튜닝해 보겠습니다.
    • 제어 펄스 폭 3μSec $0=3
    • 펄스 지연 5mSec $1=5 
  •  
  •  
  •  
  • UGS platform : 테스트:이동량의 확인
  • https://github.com/winder/Universal-G-Code-Sender/releases/tag/v2.1.6
  • win 64 아닌걸로 받았고, 압축 안 풀고 그냥 알집 내에서 bin > exe 실행.
  • **아두이노의 serial monitor 끄기
  • UGS와 아두이노 연결 
    • 위에서 마이크로 스테핑을 1/8로 하고 있기 때문에, 모터 일주에는 1600스텝 필요합니다. 1mm의 이동에 필요한 스텝수가 200이므로, 1회전하려면 제어상, 8mm 이동하고 있는 계산이 됩니다.
    • StepXY에 8을 입력, 제어 단위가 mm인지 확인
    • Feedrate는 3000정도로 한다


TouchDeisgner + CNC 제어 (GRBL)

1. 직렬 통신 설정
SerialDAT 구성: TouchDesigner에서 CNC 기계를 제어하려면 먼저 SerialDAT를 설정하세요. UGS에서 사용하는 직렬 포트 설정(예: 115200bps의 전송 속도)을 일치시키세요. SerialDAT가 연결되어 있고 Grbl로부터 메시지를 성공적으로 수신하는지 확인하세요.

  • SerialDAT를 만들어 UGS에서 설정한 것과 동일한 시리얼 포트 번호를 설정, 통신 속도는 115200bps
  • 오류가 발생하지 않고 SerialDAT에 Grbl의 메시지가 표시되면 연결 성공

2. G-코드 명령 보내기

  • TextDAT를 만들고 위의 1회전 명령, G1X8F3000을 입력합니다.
  • 그런 다음 TextDAT를 만들고 G-Code가 들어있는 텍스트를 참조하여 SerialDAT에 씁니다.
  • gcode = op('text1').text
    op('serial1').send(gcode, 터미네이터 = '\r\n')

  • 코드를 쓴 TextDAT를 오른쪽 클릭에서 실행(Ctrl+r)합니다. 한 번 회전 했습니까?

 

3. CHOP를 통한 동적 제어

슬라이더 설정: 입력에 Slider COMP를 활용하고 해당 출력을 Math CHOP에 연결하여 범위(예: -4 ~ 4)를 정의합니다. 이것을 Chopexec DAT에 연결합니다.

  • Slider COMP에서 MathCHOP로 출력 범위를 -4 ~ 4로 설정하여 ChopexecDat으로 전달합니다.
  • ChopexecDat은 onValueChange를 켠 다음 아래 코드를 onValueChange에 씁니다. speed는 여기에서는 1500으로 해 두었습니다.

speed = 1500
nextPosition = val
code = 'G1X{0}F{1}'.format(nextPosition, speed)
op('serial1').send(code, terminator = '\r\n')

  • 슬라이더를 돌려 주면 모터가 추종해 왔습니까? 다만 조작에 대해서 상당히 지연하는 것을 깨달았다고 생각합니다. 또한 너무 움직이면 Grbl이 이러한 에러를 내뿜거나, 경우에 따라서는 G-Code용 버퍼가 오버플로우되어 크래쉬 합니다. 
  • 에러 코드 24는 G-Code의 공식 에러가 아니라 Grbl 독자적인 에러로 아래와 같이 XYZ축의 지정을 필요로 하는 명령이 블록상에 2개 이상 있었다고 설명이 있습니다. 그러나 모션 명령 G1은 XYZ 좌표에서 매번 지정하지 않아도 되며 다음 오류는 버퍼 오버플로로 인해 발생한 것 같습니다.

24 XYZ 축 단어를 사용해야 하는 두 개의 G 코드 명령이 블록에서 감지되었습니다.

  • 지금 보내고 있는 커멘드를 TextDat에 출력해 보면 Float의 유효 숫자가 너무 크므로 적당한 값으로 잘라 버립니다. Grbl의 공식 페이지에는 mm단위의 경우 소수점 3자리까지 보내면 좋다고 하기 때문에, 거기까지를 캐스트 해 줍니다. 
     

이전 -> 코드 = 'G1X{0}F{1}'.format(nextPosition, speed)
이후 -> 코드 = 'G1X{0:.3f}F{1}'.format(nextPosition, speed)

  • 또한 제어 위치를 60FPS로 보낼 필요는 전혀 없기 때문에 ResampleDAT에서 SampleRate를 10 정도로 떨어뜨립니다. 
  • 이것으로 대부분의 오류가 개선되었을까 생각합니다. CNC 제어 소프트웨어이므로 제어점을 모두 통과하는 제어이므로 지연은 어느 정도 어쩔 수 없습니다.

4. CNC 상태 모니터링 및 대응

- 위치 추적: CNC 기계의 현재 위치를 모니터링하려면 '?' 명령을 주기적으로(예: 100ms마다) 보냅니다. SerialDAT의 응답을 구문 분석하여 위치 데이터를 추출합니다.
- 데이터 구문 분석: Convert DAT 및 Split DAT를 사용하여 기계에서 들어오는 데이터를 구문 분석하고 그에 따라 상수 CHOP 또는 테이블을 업데이트합니다.

[위치 추적]

우선 움직일 수 있게 되었습니다만, 좀 더 개량해 봅시다. 모터의 추종 속도가 문제가 될 것 같기 때문에, 현재의 모터 위치를 우선 취득해 봅시다.

  • LfoCHOP로 10Hz의 펄스를 만들고 ChopexecDat에서 On이 되었을 때 위치 요청 명령 ? 을 보내도록 합니다. SerialDat에 위치 정보가 돌아온다고 생각합니다.

# Script in Chopexec DAT's onValueChange
if val == 1:  # Ensure it only sends on the pulse's high peak
    op('serial1').send('?', terminator='\r\n')

 

  • 위의 메시지에서 Mpos, 기계 위치가 x 축 -0.77임을 알 수 있습니다. WPos는 Working Position으로, CNC 가공시에 머신 원점으로부터의 오프셋을 넣을 수 있는 것이므로 여기에서는 무시합니다.

[ 데이터 구문 분석 ]

  • 메시지에서 현재 위치를 항상 읽어 보세요. ConvertDAT를 연결하고 메시지의 구분 기호 <>, : \ t를 Split Cells at에 넣습니다.
  • DATexecute에서 DAT 데이터가 변경된 경우 ConstantCHOP 값을 덮어쓰도록 합니다.
  • 이 후에는 제어하는 ​​대상에 따라 다릅니다만, 위치의 지시(resample1)와 현재 위치의 차분을 취해, 차분이 일정 이상이 되면 LogicCHOP가 들어가는 로직을 만들어 보았습니다. 마지막 Null은 제어 위치를 보내는 chopexec1을 켜고 끕니다. (음. 하지만 현재 위치를 제어에 도입해도 지연 요소가 너무 강해서 유효하지 않다. 데모라도 어쩐지!)

5. 최적화 및 오류 처리

제어값에 필터를 걸어 추종 성능을 좋게 하는 & 버퍼 오버플로우 대책

목표 위치를 순차적으로 쫓아가는 Grbl을 여기서 사용해 버릴 때의 문제는, 예를 들면 노이즈적으로 목표치에 1점만큼 떨어진 점이 들어왔을 경우, 모터가 율의적으로 그 점까지 이동해, 다시 돌아온다 오는 거동을 하는 것입니다. (CNC라면 당연하네요.) 이때의 모터의 이동 시간은 제어 지연으로 연결되어, 또, 그 사이에도 다음의 목표 위치가 계속 쌓여 버리기 때문에 상기의 버퍼 오버플로우도 일으킬 수 있습니다. 자주 있는 모터의 서보 제어의 경우는 이동하는 목표치를 순차적으로 쫓아갈 수 있는 것처럼 PID 제어 를 짜고 있습니다만, 이것은 신호 처리적으로 보면 필터를 넣고 있는 것과 차이는 없습니다. 그래서 이번에는 입력 신호에 대해 FilterCHOP를 통해 올리는 것으로, 급준한 목표치의 변화가 있어도 모터가 추종할 수 있는 속도로 신호를 건네주도록 했습니다. 요점은 로우 패스를 넣은 것입니다.
입력 신호를 NoiseCHOP로 하고, 모터가 따라잡을 수 없는 정도의 빠른 주기의 노이즈를 넣어 주어도 모터가, 버퍼도 모이지 않고에 대해 와 줍니다. 덧붙여 버퍼가 쌓여 버리고 있는지 확인하려면 입력의 NoiseCHOP를 정지해 봅니다. 입력을 멈추더라도 모터가 잠시 움직이는 것 같으면 버퍼가 쌓여 버렸다고 판단할 수 있습니다. (그리고 그대로 움직이면 아마 Grbl이 충돌합니다)


G 코드의 기본 구조


다음은 설명하신 동작에 대해 G 코드가 어떻게 구성될 수 있는지에 대한 간단한 분석입니다.

G21: 이 명령은 단위를 밀리미터로 설정합니다.
G90: 이 명령은 기계를 절대 위치 지정 모드로 설정합니다. 이 모드에서는 G 코드에 지정된 모든 좌표가 기계의 공통 원점에서 가져옵니다.
G91: 이 명령은 기계를 상대 위치 지정 모드로 설정합니다. 이어지는 G 코드 명령의 좌표는 도구의 현재 위치를 기준으로 합니다.


도구 이동 명령

기계가 원점(0,0)에서 시작한다고 가정하면 설명된 대로 기계를 이동하는 명령을 구성하는 방법은 다음과 같습니다.

1. (원점에서)  X = -1mm, Y = 0mm로 이동:

절대 모드(G90)에 있는 경우 절대 위치를 지정합니다.

G1 X-1 Y0 F100 ; Move to X = -1mm, Y = 0 at a feedrate of 100 mm/min



상대 모드(G91)에 있는 경우 원점에서 시작한다고 가정합니다.

G1 X-1 F100 ; Move left 1mm from current position


2. X로 이동 = +1mm(원점 X에서 총 이동 = 0mm), Y = 0mm:

절대 모드(G90):

G1 X0 Y0 F100 ; Move back to origin


상대 모드(G91):

G1 X1 F100 ; Move right 1mm from current position (back to origin)


Y를 유사하게 이동하려는 경우(예: 1mm 아래로 및 뒤로):

절대 모드(G90):

css
Copy code
G1 X0 Y-1 F100 ; Move down 1mm from origin
G1 X0 Y0 F100 ; Move back to origin
상대 모드(G91):

css
Copy code
G1 Y-1 F100 ; Move down 1mm from current position
G1 Y1 F100 ; Move up 1mm back to original Y position
중요 참고사항:
G1은 선형 이동 명령으로, 공구가 지정된 위치까지 직선으로 이동하는 것을 의미합니다.
F는 이동의 이송 속도(속도)를 분당 mm 단위로 지정합니다.
이러한 명령은 기계 상태를 설정하기 위해 다른 명령(예: G21 및 G90) 앞에 붙는 경우가 많습니다.
필요에 따라 상대 모드와 절대 모드를 앞뒤로 전환할 수 있지만 좌표가 올바른지 확인하려면 현재 어떤 모드에 있는지 알아야 합니다.
이 간단한 설명은 CNC 기계용 G 코드의 기본 동작을 프로그래밍하는 방법을 이해하는 데 도움이 됩니다. 각 명령은 모드 설정에 따라 원점에서의 위치 또는 마지막 위치에서 다음에 이동할 위치를 기계에 지시합니다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함