아두이노를 통해 디지털 서보모터를 제어합니다.
보통 저렴하게 자주 사용하는 서보모터의 경우 아날로그 서보모터인데,
기본 50Hz의 주파수, 즉 20ms의 주기를 가지는 펄스를 입력 받습니다.
그리고 그 펄스가 On/High/Up 되는 구간의 시간에 따라 모터의 각도가 제어됩니다.
그에 반해, 디지털 서보모터의 경우 아날로그 서보보다 고주파로 동작합니다.
모터마다 다를수 있지만 333Hz 혹은 500Hz로 동작합니다.
고주파이기 때문에 LOW의 전압을 다시 HIGH로 끌어올리는데 적은 시간과 파워가 소모되기 때문에
반응성이 더 좋은 편입니다.
다만 주의할점은, 두 모터의 제어방식이 다르지 않다는 것입니다.
서보모터 안에는 토크를 위한 기어장치와 위치값 확인을 위한 저항, DC모터
그리고 이를 계산하고 제어하는 작은 MPU가 있습니다.
디지털 서보모터의 경우에도 아날로그 서보와 마찬가지로
주파수가 50Hz이고 상승구간이 1ms~2ms인 펄스의 입력을 통해 제어됩니다.
그 다음은 디지털 서보안의 MPU가 그 신호를 받아 더 높은 주파수로 모터를 제어하는 것입니다.
더 자세한 내용은 아래의 링크를 참조하면 좋습니다.
위 게시글의 원본을 첨부합니다
www.sailservo.co.uk/anvdig.html
이제 기초지식이 어느정도 준비 되었으니 하드웨어 연결을 합니다.
<연결>
1. 아두이노 9번핀 - 서보모터의 Signal(사진의 주황색) 연결
2. 아두이노 5V - 서보모터의 Vcc(사진의 빨간색) - 가변저항의 양쪽 중 한 곳 연결
3. 아두이노 GND - 서보모터의 GND(사진의 갈색) - 가변저항의 양쪽 중 한 곳 연결
4. 아두이노 A0 - 가변저항의 가운데 연결
<보조 사항>
1. 위 사진에서는 가변저항의 Vcc를 아두이노의 7번핀(임의)에 연결하여 digitalWrite(HIGH)를 통해 Vcc처럼 사용
2. 가변저항에는 방향이 없기 때문에 Vcc와 GND를 양쪽에만 연결
3. 가변저항의 가운데 출력이 voltage dividing을 통한 가변저항값, 이 값을 아날로그 값으로서 Read
4. 디지털 서보의 경우 전력소모가 크기에 위와 같이 아두이노 USB전원만으로 구동한다면 아두이노가 꺼질 가능성 있음
<코드>
#include <Servo.h>
Servo my_servo;
void setup() {
pinMode(7,OUTPUT);
digitalWrite(7,HIGH); //Vcc 대용으로 사용
pinMode(A0,INPUT);
my_servo.attach(9); //서보모터를 위함 pwm핀을 9번으로 설정
}
void loop() {
int temp = analogRead(A0); //값을 읽어들여
int angle = map(temp,0,1023,0,180); //10비트의 값을 0~180을 맵핑
my_servo.write(angle); //가변저항에 따른 각도 실시간 제어
}
<소스 링크>
github.com/Joyonclear/Arduino-servo-motor-control
<작동 영상>
www.youtube.com/watch?v=c5MKIGBb5pE&ab_channel=Joyonclear
위와 같이 가변저항을 돌려서 서보모터의 180도 구간을 제어할 수 있습니다.
디지털 서보모터의 경우 아날로그 서보보다 더 정확하고 빠르고 강하기에
비용을 제외하고 모든면에서 강점을 보입니다.
다만 동작중 삐- 소리가 나는 경우가 있는데 이는 300~500Hz의 상대적 고주파로 제어되기 때문에
발생하는 소리로 자연스러운 현상이 걱정하지 않으셔도 좋습니다.
'Science > Electronic Engineering' 카테고리의 다른 글
[FPGA] 디지털 시계 설계 (0) | 2021.03.10 |
---|---|
[드론]KK multicopter v.5.5 Blackboard 펌웨어 업데이트 - 1 (0) | 2021.01.06 |
[번역] 아날로그 서보모터와 디지털 서보모터의 차이 (0) | 2021.01.06 |
[아두이노] ESC를 통한 BLDC 모터 제어 (14) | 2021.01.04 |
[드론] 전원분배보드 납땜 (0) | 2021.01.04 |
댓글