개발 관련/프로젝트

로봇제작 - 아두이노 PWM 충돌 문제 해결

by 소서리스25 2024. 4. 14.
반응형

드디어 충돌 문제를 모두 해결했다. 더 이상의 오작동은 발견되지 않았다.. 다만.. 배터리가 작아서 같이 쓰면 힘이 약하다. 배터리를 적절하게 분배하는 최적화를 진행해야 할 것 같다.

이로서 서보모터 4개, DC모터 2개를 정상적으로 원하는 대로 움직일 수 있다.

이전에 포스트에서는 다 된 줄 알았는데, 한 곳이 해결되면 다른 쪽이 안 되는 등 뭔가 한 개씩 문제가 있었다.

 

여러 가지 자료를 찾아보고 결론 내린 것이 핀을 적절하게 배치해야 된다는 것이다.

 

아두이노의 PWM 핀중에서 다음과 같은 것이 같은 타이머를 사용한다고 한다.(내용은 뭐 잘 모르니까 일단 참고..)

5, 6   : 카운터/타이머 0 사용

9, 10 : 카운터/타이머 1 사용

3, 11 : 카운터/타이머 2 사용

 

이런 쪽은 잘 안 써서 잘은 모르지만 이분 내용을 참고하였다.

아두이노 PWM 이론2: analogWrite() 함수 분석 (tistory.com)

 

아두이노 PWM 이론2: analogWrite() 함수 분석

(1) 아두이노 analogWrite() 함수에 대해 알아보기 전에 원활한 이해를 이해 먼저 아래 글을 읽어오면 본문을 이해하기 수월하다. 아두이노 PWM 이론1: PWM, 펄스파, 듀티 사이클 아두이노는 디지털 장

recall.tistory.com

 

 

여기에 또 문제가 있는데 서보모터 라이브러리를 사용하지 못하는 핀번호가 있다고 한다.

 

바로 9, 10 핀이다.

 

그래서 한쪽을 이쪽 핀으로 했더니 작동이 안 되었던 것이었다.;;

이 내용은 아래의 아두이노 포럼에서 찾았다.

https://forum.arduino.cc/t/dc-motors-doesnt-work-when-attaching-servo/462978/4

 

DC-motors doesn't work when attaching Servo

On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins. From the Servo library reference.

forum.arduino.cc

 

결과적으로 이 모든 문제를 해결하려면 9, 10번을 제외하고 PWM이 가능한 핀으로 적용하고, DC모터는 입력전압으로 PWM을 조절하지 말고 방향만 PWM으로 조절, 그리고 충돌 가능성이 있는 서보모터는 같은 타이머를 사용하지 않는 핀으로 구성하는 것이다.

PWM으로 DC모터 속도 조절은 5, 6번 핀으로 배치하였다.

 

따라서 핀 배치는 다음과 같이 구성하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define irPin_L A0 // ir 센서
#define irPin_R A1
 
// DC 모터 핀배치
#define motor_LF 7
#define motor_LB 8
#define motor_RF 11
#define motor_RB 12
#define motor_pwmL 5
#define motor_pwmR 6
 
// 서보 모터 핀배치
#define Servo_1 16
#define Servo_2 17
#define Servo_3 18
#define Servo_4 19
 
// 블루투스
#define bt_RX 2
#define bt_TX 3
cs

 

 

각각의 모터가 간섭이나 영향을 주지 않도록 배치하였다. 

휴.. 이제 앱으로 넘어갈 수 있겠다. 얼마나 이게 날 괴롭혔는지..;;;

반응형

댓글