BASIC4MCU | 질문게시판 | 답변 : 답변 : 센서 출력 지연인가요? 질문 드립니다.
페이지 정보
작성자 dhtjdwls123 작성일2019-06-02 17:25 조회6,575회 댓글3건본문
제가 생각하던 문제점은 찾았습니다.
const int stepsPerRevolution=200;
즉 루프 실행할때마다 정해진 200스텝 완료할때까지 모터가 계속 도는것이고
제가 10rpm으로 설정 해두었기 때문에 한바퀴도는데 6초가 소요된후 다음 루프가 진행되고 그래서 이를 딜레이라 생각 한것 같습니다.
const in stepsPerRevolution=50; 으로 변경하여기준을 90도로 바꾸어주었습니다.30rpm으로 90도 회전에 0.5초가 걸려 반응 지연문제는 어느정도 없어졌다고 생각됩니다.
여기서 탈조현상이 일어나지않도록 알피엠을 더 올리고 const int stepsPerRevolution= 50 ; 을 50보다 더 내리거나 하여 반응속도를 줄여볼 생각 이였습니다.
하지만 모터가 제대로 돌아가지 않는 현상이 발생하였습니다
로직이 루프 1회 진행시에 위쪽센서가 아래 센서보다 출력이 300이상 크면 90도 정회전,
아래센서가 위 센서보다 300이상 크면 역회전 90도 ,
루프 1회 진행후 딜레이 설정해주지 않아 계속적으로 루프 수행 .
이것으로 알고 있는데 아래의 코딩을 사용하여 컴파일을 할 경우
초기 루프에의해 모터가 정해진 스텝만큼 정회전하고 그후에도 위쪽이 아래보다 300이상크다면 차이가 300보다 작아질때까지
계속 정회전해야하는데 루프 1회후 다시 루프가 진행되지 않는것 같습니다. 90도 돌고 모터가 멈춰버립니다.
여러번 속도와 정해진 스텝수를 바꿔주었는데 너무 낮추면 탈조현상이 일어나네요. 설계할때 로직이 틀린것인가요?
그리고 stat 함수가 어떤 역할을 하는지 검색해봐도 나오지가 않네요 알려주시면 감사하겠습니다.
#include <Stepper.h>
const int stepsPerRevolution=50; // 90도
// int in1Pin=8,in2Pin=9,in3Pin=10,in4Pin=11;
Stepper myStepper(stepsPerRevolution,8,9,10,11);
// int upper_cds1=A0,lower_cds2=A1;
//
int upper,lower,stat=0;
//
void setup(){
pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT);
myStepper.setSpeed(30); // 회전속도 30RPM
Serial.begin(9600);
}
//
void loop(){
upper=analogRead(A0); Serial.print(upper); Serial.print(", ");
lower=analogRead(A1); Serial.println(lower);
//if(upper>(lower+300)){
if(stat!=1){ stat=1;
Serial.print(upper); Serial.print(","); Serial.println(lower);
Serial.println("clockwise"); myStepper.step(stepsPerRevolution);
}
}
//
if(lower>(upper+300)){
if(stat!=-1){ stat=-1;
Serial.print(upper); Serial.print(","); Serial.println(lower);
Serial.println("conterclockwise"); myStepper.step(-stepsPerRevolution);
}
}
}
댓글 3
조회수 6,575master님의 댓글
master 작성일
90도 정회전
역회전 90도
이 말은 90도만 회전하고 멈춘다는 얘기이고
소스코드는 위 내용으로 작성되어 있습니다.
아랫쪽 설명은 다른내용을 담고 있습니다.
계속해서 정회전 또는 역회전
이 것은 90도 라는 말과 전혀다른 내용입니다.
master님의 댓글
master 작성일
#include <Stepper.h>
const int stepsPerRevolution=50; // 90도
// int in1Pin=8,in2Pin=9,in3Pin=10,in4Pin=11;
Stepper myStepper(stepsPerRevolution,8,9,10,11);
// int upper_cds1=A0,lower_cds2=A1;
//
int upper,lower;
//
void setup(){
pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT);
myStepper.setSpeed(30); // 회전속도 30RPM
Serial.begin(9600);
}
//
void loop(){
upper=analogRead(A0); Serial.print(upper); Serial.print(", ");
lower=analogRead(A1); Serial.println(lower);
//
if(upper>(lower+300)){
Serial.print(upper); Serial.print(","); Serial.println(lower);
Serial.println("clockwise"); myStepper.step(stepsPerRevolution);
}
//
if(lower>(upper+300)){
Serial.print(upper); Serial.print(","); Serial.println(lower);
Serial.println("conterclockwise"); myStepper.step(-stepsPerRevolution);
}
}
stat 변수 관련 코드를 삭제하면 됩니다.
소스코드를 분석해서 이해하지 못하면
사소한 수정도 하지 못합니다.
dhtjdwls123님의 댓글
dhtjdwls123
더 공부 하겠습니다 감사합니다