BASIC4MCU | 질문게시판 | BLDC 모터 정역회전 알고리즘대로 코딩
페이지 정보
작성자 CIE18 작성일2019-07-21 01:03 조회4,994회 댓글0건본문
안녕하세요. 저번에 BLDC 모터 관련 질문한 사람입니다.
모터가 하나만 준비되어 있어 일단 하나의 모터만으로
start 버튼 클릭 = 5초 정회전-2초 역회전-6초 정회전-1초 역회전-3초 정회전 후 정지
stop 버튼 클릭 = 동작 중 누르면 정지
이 알고리즘대로 동작하는 코딩을 작성해 보았는데 start버튼을 누르면 위 동작이 정지하지 않고 계속 반복되고
stop 버튼을 동작 중 누르면 바로 종료되지 않고 알고리즘대로 다 돌아간 후에 정지합니다.
무엇을 수정해야 할까요
사용하는 모터 품명은 BL5057, 모터 드라이버 품명은 LBD-V, 아두이노 릴레이 두개를 사용하였습니다.
LBD-V 핀별 기능 사진으로 첨부합니다.
int dir = 11; //정,역방향 결정(릴레이 NC핀에 모터 GND 연결)
int mov = 10; //모터start,stop 결정(릴레이 NC핀에 모터 GND 연결)
int startbutton = 2; //동작 시작버튼 핀
int stopbutton = 3; // 동작 종료버튼 핀
int state1;
int state2;void setup(){
pinMode(dir,OUTPUT);
pinMode(mov,OUTPUT);
pinMode(startbutton,INPUT);
pinMode(stopbutton,INPUT);
attachInterrupt(digitalPinToInterrupt(startbutton),ISR0,RISING);
attachInterrupt(digitalPinToInterrupt(stopbutton),ISR1,RISING);
digitalWrite(dir,LOW);
digitalWrite(mov,LOW);
}void loop(){
if(state1 == HIGH&&state2 == LOW){ //start 버튼 눌렀을 때 모터동작
digitalWrite(mov,HIGH); //모터 드라이브 8번 핀에 GND 해제
delay(50);
digitalWrite(dir,HIGH); //5초 정회전
delay(5000);
digitalWrite(dir,LOW); //2초 역회전
delay(2000);
digitalWrite(dir,HIGH); //6초 정회전
delay(6000);
digitalWrite(dir,LOW); //1초 역회전
delay(1000);
digitalWrite(dir,HIGH); //3초 정회전
delay(3000);
}
else if(state1 == LOW&&state2 == HIGH){ //stop 버튼 눌렀을 때 모터동작
digitalWrite(mov,LOW); //모터 8번 핀에 GND 연결(모터 STOP)
}
Serial.println(state1);
Serial.println(state2);
}
void ISR0(){ //start 버튼 눌렀을 때
state1 = HIGH;
state2 = LOW;
delay(500);
}void ISR1(){ //stop 버튼 눌렀을 때
state1 = LOW;
state2 = HIGH;
delay(500);
}
댓글 0
조회수 4,994등록된 댓글이 없습니다.