'스테핑모터'에 해당되는 글 2건
- 2010.08.02 아두이노 - 내장 라이브러리 사용 스테핑 모터 구동 소스.
- 2010.08.02 아두이노 - 스테핑 모터 컨트롤러(SLA7062M) 소스
아두이노 - 내장 라이브러리 사용 스테핑 모터 구동 소스.
MCU 및 PLD 2010. 8. 2. 19:24
왜인지 몰라도 탈조가 있다
마찬가지로 GND로 풀다운된 4개의 스위치에 의해 동작한다.
회로도는 아두이노 홈피에 나온 회로도를 이용
풀브릿지 칩은손쉽게 구할 수 있는 모터 구동용 칩 L298N 을 사용하자.
결선은 소스를 참조.
#include <Stepper.h>
#define _DEBUG_PRINT_
#define EN_PIN (3)
#define LED_PIN (13)
#define MOTOR_INPUT1_PIN (5)
#define MOTOR_INPUT2_PIN (4)
#define MOTOR_INPUT3_PIN (6)
#define MOTOR_INPUT4_PIN (7)
#define KEY1_PIN (10)
#define KEY2_PIN (11)
#define KEY3_PIN (12)
#define KEY4_PIN (9)
const int analogInPin = 0; // Analog input pin that the potentiometer is attached to
int sensorValue = 0; // value read from the pot
Stepper step1 = Stepper(200,MOTOR_INPUT1_PIN,MOTOR_INPUT2_PIN,MOTOR_INPUT3_PIN,MOTOR_INPUT4_PIN);
short output = 0;
void setup() {
// initialize serial communications at 9600 bps:
pinMode(EN_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(KEY1_PIN,INPUT);
pinMode(KEY2_PIN,INPUT);
pinMode(KEY3_PIN,INPUT);
pinMode(KEY4_PIN,INPUT);
#ifdef _DEBUG_PRINT_
Serial.begin(9600);
Serial.println("Start step motor contorller ver 0.1 (made by Kim Hyuk)");
#endif // _DEBUG_PRINT_
}
int outputValue;
unsigned long t;
int speed_table1[] = {
10,20,30,40,50,60,70,80,90,100, //20
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,90,80,70,60,50,40,30,20,10}; // 200
void loop() {
uint8_t i;
// read the analog in value:
t = millis();
if(t % 500 > 200) digitalWrite(LED_PIN,LOW);
else if(t % 500 < 200) digitalWrite(LED_PIN,HIGH);
if(digitalRead(KEY1_PIN)) { // defaut == 0;
#ifdef _DEBUG_PRINT_
Serial.println("Key 1");
#endif // _DEBUG_PRINT_
digitalWrite(EN_PIN, HIGH);
step1.setSpeed(100);
step1.step(100);
} else if(digitalRead(KEY2_PIN)) {
#ifdef _DEBUG_PRINT_
Serial.println("Key 2");
#endif // _DEBUG_PRINT_
digitalWrite(EN_PIN, HIGH);
for(i =0; i< 100;i++) {
step1.setSpeed(speed_table1[i]);
step1.step(2);
}
} else if(digitalRead(KEY3_PIN)) {
#ifdef _DEBUG_PRINT_
Serial.println("Key 3");
#endif // _DEBUG_PRINT_
digitalWrite(EN_PIN, HIGH);
for(i =0; i< 100;i++) {
step1.setSpeed(speed_table1[i]);
step1.step(-2);
}
} else if(digitalRead(KEY4_PIN)) {
#ifdef _DEBUG_PRINT_
Serial.println("Key 4");
#endif // _DEBUG_PRINT_
digitalWrite(EN_PIN, HIGH);
step1.setSpeed(100);
step1.step(-100);
} else {
digitalWrite(EN_PIN, LOW);
}
}
아두이노 - 스테핑 모터 컨트롤러(SLA7062M) 소스
MCU 및 PLD 2010. 8. 2. 19:23
간단하게..
// SLA7260 DATASHEET , 11page 회로도와 동일하게 구성
// 각각의 핀 연결은 다음과 같다.
#define MOPIN (7)
#define M1PIN (6)
#define M2PIN (2)
#define SYNCPIN (8)
#define CWPIN (4)
#define CLKPIN (3)
#define RSTPIN (5)
#define ENPIN (13)
// 4개의 택스위치를 연결한다. 평상시 vdd로 풀업되어 있다.
#define INPUT1 (9) // TACK SWTICH INPUT
#define INPUT2 (10)
#define INPUT3 (11)
#define INPUT4 (12)
void setup()
{
pinMode(MOPIN,INPUT);
pinMode(M1PIN,OUTPUT);
pinMode(M2PIN,OUTPUT);
pinMode(CWPIN,OUTPUT);
pinMode(CLKPIN,OUTPUT);
pinMode(SYNCPIN,OUTPUT);
pinMode(ENPIN,OUTPUT);
pinMode(INPUT1,INPUT);
pinMode(INPUT1,INPUT);
pinMode(INPUT1,INPUT);
pinMode(INPUT1,INPUT);
pinMode(RSTPIN,OUTPUT);
digitalWrite(M1PIN,LOW); // 1/16 step
digitalWrite(M2PIN,LOW);
digitalWrite(SYNCPIN,HIGH); // sync mode
digitalWrite(RSTPIN,LOW);
Serial.begin(9600);
Serial.println("SLA7206M controller start..(made by Kim H)");
}
int steps[] = {
200,190,180,170,160,150,140,130,120,110,
100,90,80,70,60,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,50,50,50,50,50,
50,50,50,50,50,60,70,80,90,100,
110,120,130,140,150,160,170,180,190,200,
};
int steps2[] = {
200,190,180,170,160,150,140,130,120,110,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
110,120,130,140,150,160,170,180,190,200,
};
void loop()
{
int i,j;
if(digitalRead(INPUT1) == 0) {
Serial.println("Input1 key..");
digitalWrite(ENPIN,HIGH);
digitalWrite(CWPIN,HIGH);
for(i = 0;i < 200;i++) {
for(j = 0; j < 16;j++) {
digitalWrite(CLKPIN,HIGH);
delayMicroseconds(steps[i]);
digitalWrite(CLKPIN,LOW);
delayMicroseconds(steps[i]);
}
}
} else if(digitalRead(INPUT2) == 0) {
Serial.println("Input2 key..");
digitalWrite(ENPIN,HIGH);
digitalWrite(CWPIN,HIGH);
for(i = 0;i < 200;i++) {
for(j = 0; j < 16;j++) {
digitalWrite(CLKPIN,HIGH);
delayMicroseconds(steps2[i]);
digitalWrite(CLKPIN,LOW);
delayMicroseconds(steps2[i]);
}
}
} else if(digitalRead(INPUT3) == 0) {
Serial.println("Input3 key..");
digitalWrite(ENPIN,HIGH);
digitalWrite(CWPIN,LOW);
for(i = 0;i < 200;i++) {
for(j = 0; j < 16;j++) {
digitalWrite(CLKPIN,HIGH);
delayMicroseconds(steps[i]);
digitalWrite(CLKPIN,LOW);
delayMicroseconds(steps[i]);
}
}
} else if(digitalRead(INPUT4) == 0) {
Serial.println("Input4 key..");
digitalWrite(ENPIN,HIGH);
digitalWrite(CWPIN,LOW);
for(i = 0;i < 200;i++) {
for(j = 0; j < 16;j++) {
digitalWrite(CLKPIN,HIGH);
delayMicroseconds(steps2[i]);
digitalWrite(CLKPIN,LOW);
delayMicroseconds(steps2[i]);
}
}
} else {
digitalWrite(ENPIN,LOW);
}
}