스텝모터 리미트 스위치 - seutebmoteo limiteu seuwichi

리니어 모터에 리미트 스위치를 연결해서 왕복운동을 하고있는걸 만들었습니다.

여기서 리미트 스위치에 횟수 제한을 걸어서 일정 횟수를 초과하면 모터가 정지하게끔 만들려고 하는데

여기서 뭐를 더 해야될지 문의드립니다.

#include #define DIR_PIN 8 //스텝모터드라이버 DIR 연결핀 #define CLK_PIN 9 //스텝모터드라이버 CLK 연결핀 #define LLIMIT_PIN 3 #define RLIMIT_PIN 2 HCMotor HCMotor; int Speed = 10; void setup() { HCMotor.Init(); HCMotor.attach(0, STEPPER, CLK_PIN, DIR_PIN); HCMotor.Steps(0,CONTINUOUS); HCMotor.DutyCycle(0, Speed); pinMode(LLIMIT_PIN, INPUT); pinMode(RLIMIT_PIN, INPUT); } void loop() { if (digitalRead(LLIMIT_PIN) == LOW) HCMotor.Direction(0, FORWARD); else if (digitalRead(RLIMIT_PIN) == LOW) HCMotor.Direction(0, REVERSE); }
아두이노, 리니어레일, 리니어슬라이드, 리니어엑추에이터, 스텝모터, TB6560, arduino, linear slider, linear rail, stepper motor, 싸이피아, SCIPIA 0 Comments

아두이노를 사용하여 리니어 이송레일을 구동하는 실험을 합니다. 400mm 리니어 이송 레일 슬라이더이며, T8(8mm) 2mm피치(한바퀴에 2mm이동)의 리드스크류와 NEMA17 4248 스텝모터가 사용되었습니다.
이송속도는 초당 0~20mm이며 오차는 약 0.5mm입니다. 횡축 부하는 최대 15Kg입니다.
스텝모터는 DC12V(3A) 또는 24V(1.5A) 전원으로 TB6560 스텝모터드라이버를 통해 구동합니다.

 

 

 

1. 가변저항을 사용한 정역구동 실험

 

10K가변저항을 사용하여 정역제어 및 속도제어를 하며 아두이노 보드의 A0핀을 통해 아날로그 값을 입력 받습니다.

아래는 실제 구동모습입니다.

- 결선 방법

1. 스텝모터 케이블을 스텝모터드라이브보드에 연결한 후 조여줍니다.

스텝모터는 총 4개의 선을 가지고 있으며 각각 A+ A- B+ B- 상을 나타냅니다.

 

 

2. DC 전원 케이블을 스텝모터드라이브보드에 연결한 후 조여줍니다. 

모터를 구동하기 위한 전원이 필요하며 여기서는 DC12V 5A 전원아답터를 사용합니다. 아답터와 연결을 위한 DC잭 연결케이블을 모터드라이버에 +/- 극성에 맞에 연결합니다.

 

3. 아두이노 보드와 스텝모터드라이브보드를 결선해줍니다.

아두이노 보드로 스텝모터를 제어할 수 있도록 합니다. 아두이노 보드에서 GND와 디지털IO 8번, 9번을 사용하게 됩니다.

 

 

 

4. 가변저항과 아두이노보드를 결선합니다.

가변저항의 VCC와 GND(1번과 3번핀)는 아두이노 보드의 5V와 GND로 연결하고 2번핀은 A0로 연결합니다.

 

 

 

 

 

라이브러리는 아래 링크에서 다운로드하고 아두이노 프로그램 메뉴에서 스케치->라이브러리 포함하기->.ZIP 라이브러리 추가를 누르고, 파일선택창이 나오면 다운받은 라이브러리 파일을 선택하시면 됩니다.

수동으로 정지시키기

리미트스위치가 닫혔을 때 stop() 함수를 이용하면 수동으로 스텝모터의 동작을 정지시킬 수 있습니다. 이 때 리미트스위치의 입력 여부는 getEio() 함수를 이용합니다.

예제

#include #include byte spcId = 1; ExpansionStepper step(spcId); int state; void setup() { Serial.begin(9600); while(!Serial) ; Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); Expansion.begin(); Serial.println(step.getPID()); Serial.println(step.getName()); step.setMode(4); step.setVrefStop(2); step.setVrefDrive(8); step.setSpeed(400); step.setAccel(1000); step.stepGoto(40000); } void loop() { state = step.getEio(0); if(state == 0) step.stop(); delay(1); }

// MCU BASIC: //www.basic4mcu.com

// DateTime : 2018-06-29 오전 1:05:52

int SW_L=2,M_L=4,LED_L=6;

int SW_R=3,M_R=5,LED_R=7;

  pinMode(SW_L,INPUT_PULLUP); pinMode(M_L,OUTPUT); pinMode(LED_L,OUTPUT);

  pinMode(SW_R,INPUT_PULLUP); pinMode(M_R,OUTPUT); pinMode(LED_R,OUTPUT);

  digitalWrite(M_L,0); digitalWrite(M_R,1); // motor right

  digitalWrite(M_L,0); digitalWrite(M_R,0); // motor stop

  digitalWrite(M_L,1); digitalWrite(M_R,0); // motor left

  digitalWrite(M_L,0); digitalWrite(M_R,0); // motor stop

연결하기 전에 충분히 실험하세요

정역구동을 해봤다니 이 실험을 할 필요가 없을 수도 있지만

중간에 놓고서 1초씩만 좌우로 구동 해봅니다.

방향이 반대로 움직이면 모터선을 바꿔주세요

이번에는 스위치를 체크 해보죠

// MCU BASIC: //www.basic4mcu.com

// DateTime : 2018-06-29 오전 1:08:21

int SW_L=2,M_L=4,LED_L=6;

int SW_R=3,M_R=5,LED_R=7;

  pinMode(SW_L,INPUT_PULLUP); pinMode(M_L,OUTPUT); pinMode(LED_L,OUTPUT);

  pinMode(SW_R,INPUT_PULLUP); pinMode(M_R,OUTPUT); pinMode(LED_R,OUTPUT);

  if(!digitalRead(SW_L))digitalWrite(LED_L,1); else digitalWrite(LED_L,0);

  if(!digitalRead(SW_R))digitalWrite(LED_R,1); else digitalWrite(LED_R,0);

왼쪽 스위치를 누르면 왼쪽 LED가 켜지는지 체크하세요

아두이노핀----스위치----GND

이렇게 연결하면 됩니다.

// MCU BASIC: //www.basic4mcu.com

// DateTime : 2018-06-29 오전 1:11:12

int SW_L=2,M_L=4,LED_L=6;

int SW_R=3,M_R=5,LED_R=7;

  pinMode(SW_L,INPUT_PULLUP); pinMode(M_L,OUTPUT); pinMode(LED_L,OUTPUT);

  pinMode(SW_R,INPUT_PULLUP); pinMode(M_R,OUTPUT); pinMode(LED_R,OUTPUT);

  digitalWrite(M_L,0); digitalWrite(M_R,1); // motor right

  while(digitalRead(SW_R));                 // R 스위치를 만날 때까지 계속

  digitalWrite(M_L,0); digitalWrite(M_R,0); // motor stop

  digitalWrite(M_L,1); digitalWrite(M_R,0); // motor left

  while(digitalRead(SW_L));                 // L 스위치를 만날 때까지 계속

  digitalWrite(M_L,0); digitalWrite(M_R,0); // motor stop

모터 정지 명령을 내린 후에 반대로 제어해야지 회로 데미지가 덜합니다.

정지시간이 길면 딜레이 시간을 줄이고

정지 시간이 짧으면 딜레이 시간을 늘이세요

정지를 준다고 바로 그자리에 멈추지 않고 조금 더 굴러가다가 멈추게 됩니다.

자동차 브레이크 밀리는 것과 같습니다.(관성)

따라서 리미트 스위치는 밀리는 것을 고려해서 조금 앞쪽에 설치하세요

추가문의는 //www.basic4mcu.com

Toplist

최신 우편물

태그