서보 모터 떨림 - seobo moteo tteollim

서보모터 떨림현상

작성자hyaoo|작성시간03.07.29|조회수3,588 목록 댓글 4

303으로 4족로봇 만들다가 645mg를 구입하여 쓰는데요..

303쓸때에는 떨림 현상이 일어나지 않았는데...645로 대체 하니..떨림현상이 일어나면서 오히려 303보다 토크가 약하다는 느낌을 받았습니다..

어찌해결해야는지요--;

다음검색

댓글

  • 댓글 4
  • 댓글쓰기
  • 답글쓰기

댓글 리스트

  • 작성자클린 작성시간 03.08.06 토크가 약하면 원래 떨립니다. 아니면.. 제어신호가 흔들려서 그럴수도있구요.. 예전에 떨리지 않았는데, 모터만 바꿔서 떨리는 거라면 토크 때문인것 같네요.

  • 작성자진정한 프로그래머를 위하야 작성시간 03.08.09 토크문제, Signal문제, 기구부의 문제를 들 수 있겠네여...분명303보단 토크가 큰걸로 아는데...시그날도 체크해보셔야 되겠공...또한 모터를 교체하면서...기구부에 유격이 생겼다던지...645mg라면 메탈기어 같은데...그럼 무게가 더 나가니 토크가 더 많이 들 수도 있겠져...^^

  • 작성자신영훈 작성시간 03.08.20 토크도 약하다면 아마 전류문제일 겁니다... 서보모터는 전원에 매우 민감합니다. 645와 303을 비교하면 두배 이상 먹는다고 보시고 한번 전원을 빵빵하게 줘보세요... 그리고, PWM 주기를 적절히 조절해보세요... 서보모터마다 이 주기가 조금씩 다릅니다. 너무 길거나 짧으면 서보모터는 혼자 덜덜 거립니다.

  • 답댓글 작성자비바우 작성시간 20.10.25 감사합니다~ 도움이 될듯합니다

댓글 전체보기

교환 및 반품이 가능한 경우
- 상품을 공급 받으신 날로부터 7일이내 단, 가전제품의
  경우 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우에는 교환/반품이 불가능합니다.
- 공급받으신 상품 및 용역의 내용이 표시.광고 내용과
  다르거나 다르게 이행된 경우에는 공급받은 날로부터 3월이내, 그사실을 알게 된 날로부터 30일이내

교환 및 반품이 불가능한 경우
- 고객님의 책임 있는 사유로 상품등이 멸실 또는 훼손된 경우. 단, 상품의 내용을 확인하기 위하여
  포장 등을 훼손한 경우는 제외
- 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우
  (예 : 가전제품, 식품, 음반 등, 단 액정화면이 부착된 노트북, LCD모니터, 디지털 카메라 등의 불량화소에
  따른 반품/교환은 제조사 기준에 따릅니다.)
- 고객님의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 단, 화장품등의 경우 시용제품을
  제공한 경우에 한 합니다.
- 시간의 경과에 의하여 재판매가 곤란할 정도로 상품등의 가치가 현저히 감소한 경우
- 복제가 가능한 상품등의 포장을 훼손한 경우
  (자세한 내용은 고객만족센터 1:1 E-MAIL상담을 이용해 주시기 바랍니다.)

※ 고객님의 마음이 바뀌어 교환, 반품을 하실 경우 상품반송 비용은 고객님께서 부담하셔야 합니다.
  (색상 교환, 사이즈 교환 등 포함)

BASIC4MCU | 질문게시판 | 로봇팔 서보모터 떨림증상

페이지 정보

작성자 아리송해 작성일2020-08-09 15:50 조회9,144회 댓글2건

  • 이전글
  • 다음글
  • 목록
  • 글쓰기

본문

	로봇팔에 6개 서보모터가 쓰입니다 서보모터 종류는 흔히 사용하시는 파란색 미니서보모터구요. 아무리 뒤져봐도 코드상 오류는 분명 아닌거같아서요 코드를 업로드 시키면 모터가 지지지직 거리는 소리와 함께 움직일때도 있고 안움직이기도 하고덜덜덜덜 떨리다가 갑자기 지혼자 후욱 올라갔다 내려갔다 해서 미치겠습니다ㅜㅜ 어제부터 하루종일 붙잡고있는데 진전이 안돼서 멘탈 나갔습니다 혹시 전류부족인가요? 베터리 aa 4개 직렬연결이랑 9볼트 두개 연결했는데 9볼트 하나는 지금 베터리가 다떨어진거 같기도 해서요 어쨋든 전원공급을 더해줘야 되는건가요..	

master님의 댓글

master 작성일 20-08-09 17:43

일반 서보모터 정지토크 전류가 0.7A 정도입니다.
6개라면 4.2A 정도의 전원이 필요하죠

매 순간 4.2A가 필요한 것이 아닌 최대전류값이며
최대 전류가 얼마인지를 체크해보고 그에 상응하는 전원을 준비해야 합니다.

연암인님의 댓글

연암인 작성일 20-10-19 17:52

  • 이전글
  • 다음글
  • 목록
  • 글쓰기

안녕하세요 . 

서보 모터 떨림 - seobo moteo tteollim

현재 라즈베리파이4를 이용하여 얼굴추적 프로그램을 개발중에 있습니다.

만들던중 매우 큰문제로 고민을 썩게 만들었던 주요원인. 바로 

SG-90 의 고질적문제 또는 서보모터들의 고질적문제 떨림현상입니다. 

서보 모터 떨림 - seobo moteo tteollim
제일 많이 쓰이는 마이크로서보모터 SG-90
서보모터 고질적인 떨림현상 해결 -> 아두이노는?

우리는 아두이노의 IDE로 만드는것이아니라 

Python언어로 라즈베리파이에서 기동하기때문에 

이부분에 관한 내용을 찾기 힘들었습니다. 

대부분 서보모터를 움직이기전에 키고 -> 움직이고 -> 다시 끄고 를 

attach () -> write() -> detach() 로 소스코드적에서 해결을 할 수 있었죠.

물론 해결법도 유튜브 동영상에서는 토크힘을 잃어서 무게가있는 물건을 조작하는경우 모터힘이 풀어져서 돌아갈수 있다고 경고했죠. 

특히나 GPIO 라이브러리나 GPIO.zero 를 사용할때 발생한 문제들입니다.

하지만 라즈베리파이는 위와같은 detach도 없고. 심지어 rpi.GPIO 라이브 러리를 보시면 


Using PWM in RPi.GPIO

To create a PWM instance:

p = GPIO.PWM(channel, frequency) -> 채널과 주파수에 PWM 펄스변조를 입력합니다.

To start PWM:

p.start(dc) # where dc is the duty cycle (0.0 <= dc <= 100.0) -> 초반에 듀티사이클을 정할수있습니다. 각각 90도를 바라보게하려면 p.start(7.5)를 하면 되겠죠.

To change the frequency:

p.ChangeFrequency(freq) # where freq is the new frequency in Hz -> 50hz를 조절. SG-90은 디자인적으로 50hz를 쓰게 권장되어있으니 바꿀부분은 아닙니다.

To change the duty cycle:

p.ChangeDutyCycle(dc) # where 0.0 <= dc <= 100.0 -> 우리가 각도를 조절한부분 

To stop PWM: -> PWM를 멈춥니다.

p.stop()


우리는 p=GPIO.PWM(12,50) 과같이 12번채널에 50hz로 할당한후,

p.start()로 깨워주고 p.ChangeDutyCycle로 조정을 했엇죠?

이때 듀티사이클을 일정하게 유지해주는데도 덜덜덜 떨리는게 문제였습니다.

이를 해결하기위해 한 for 문 문장안에 


p.start()

p.changedutycycle(degree_X) -> degree_X는 바꾸고싶은 각도값입니다.

p.stop()


을 동시에 넣어주면 단 1번만 실행되고 프로그램이 멈추게 됩니다.. 이후  

다시 할당하려고 for문안에 p=GPIO.PWM(12,50)을 다시해줘도.. 어림도없죠. p.stop하면은 그냥 멈춰버립니다. 

그래서 저는 GPIO라이브러리로는 해결할수있는 방법이 없다고 생각했습니다.

그후 끈질긴 구글링 결과 

서보 모터 떨림 - seobo moteo tteollim

사이트 : http://abyz.me.uk/rpi/pigpio/index.html

pigpio library 라는 라이브러리를 발견합니다.

이는 영국의 공대멋진오빠들이 만든 로우레벨 라이브러리로 

서보모터를 지터링없이 구동시킬수있는 라이브러리입니다. 

위 라이브러리를 사용하면 지터,떨림,흔들림없이 서보모터를 깔끔하게 제어할 수 있습니다.

제어 할 수 있는 이유는 기존 서보모터 구동에 전원이 불안정한것도 있지만

제가 실험 해본 결과

복잡한 연산이 들어간 서보모터 제어 ( 얼굴인식과 제어 )  그냥 서보모터만 제어 (제어)

를 비교하면 복잡한 연산이 들어간 서보모터 제어에

지터가 매우 심하게 일어났습니다.

그이유는 역시 라즈베리파이의 연산이 서보모터 지터에 영향을 미치는것이라고 생각했고, 

GPIO에서 떨리는 이유는 라즈베리파이가 서보모터를 구동하기위해 만들어진것이아닌 , 

컴퓨팅적인 연산이 들어가기에 여러 충돌이 일어난다고 이야기 하고있습니다.

pigpio는 이를 로우레벨언어를 사용해 하드웨어 제어와 연산처리를 나누어줘서 

서로 간섭을 하지않게 한다고 합니다.

그로인해 깔끔하게 서보모터를 움직이게 할 수 있습니다. 

자이제 설명을 마쳤으니 pigpio의 설치법, 구동법 , 명령어를 간단하게 소개해 드리겠습니다.

[ 능숙하신분은 사이트에서 설치법을 참고하시고, 초보자인분은 제 설명을 보시면 되겠습니다.]

http://abyz.me.uk/rpi/pigpio/index.html

pigpio library

pigpio pigpio C I/F pigpiod pigpiod C I/F Python pigs piscope Misc Examples Download FAQ Site Map The pigpio library pigpio is a library for the Raspberry which allows control of the General Purpose Input Outputs (GPIO).  pigpio works on all versions of th

abyz.me.uk

사이트에 들어가시면 Download탭에 나와있습니다.

설치 하시기 전에 

sudo apt-get update

sudo apt-get upgrade

을 해주시고, 

cd로 home/pi로 이동해줍니다. 

(참고로 그냥 cd만 치면 저위치로 이동합니다.)

저상태에서 

최신버젼 설치법


$wget https://github.com/joan2937/pigpio/archive/master.zip
$unzip master.zip
$cd pigpio-master
$make
$sudo make install


한줄한줄 차례대로 입력해줍니다.

만약 설치에 실패한다면


sudo apt install python-setuptools python3-setuptools


위명령어를 통해 파이썬 setuptools를 깔아 주라고 이야기합니다.

아니면

라즈비안 sudo install명령어를 이용해서 다운로드 할 수 있습니다만,

이방법은 최신버젼이 아니기때문에 되도록이면 최신버젼을 설치합시다.


$sudo apt-get update
$sudo apt-get install pigpio python-pigpio python3-pigpio


설치가 끝나셨으면 사용법은 pigpio의 데몬을 실행해 주어야합니다.

데몬이 뭐냐.. 저도 자세하게는 모르겠지만 데몬을 실행하지 않고 pigpio의 라이브러리를 불러오면

데몬을 실행하라고 경고가 나옵니다. 아마 위에서 말했다시피 

pigpio의 데몬이 로우레벨언어로 하드웨어 동작과 연산을 나눠주는 역할을 하는놈이지 않을까 싶네요.

먼저 python을 실행하기 전에 반드시 이 명령어로 데몬을 실행해줘야합니다.

$sudo pigpiod

위 명령어를 치면 아무것도 안올겁니다. 

반대로 데몬을 끄는법은

$sudo killall pigpiod

를 입력하면됩니다.

다음은 소스코드명령어입니다.


import pigpio

from time import sleep

pi = pigpio.pi() 먼저 사용할 pigpio.pi를 매칭해줍니다.

while True:

pi.set_servo_pulsewidth(18, 0) 18번 채널에연결된 서보모터를 꺼줍니다. 

sleep(1) 

pi.set_servo_pulsewidth(18, 500) 18번채널에 연결된 서보모터를 0도로 이동

sleep(1)

pi.set_servo_pulsewidth(18, 1500) # 가운데로 이동 90도

sleep(1)

pi.set_servo_pulsewidth(18, 2500) # 180도 끝으로 이동. 

sleep(1)


set_servo_pulsewidth 명령어의 사용법

set_servo_pulsewidth(user_gpio, pulsewidth)Parameters user_gpio:= 0-31. -> 매칭채널pulsewidth:= 0 (off),             500 (0도) - 2500 (180도).

위 함수는 서보모터의 펄스폭을 제어합니다. 

1500은 가운데 (90도) 입니다. 

참고로 500이나 2500과같이 끝과끝으로 이동시키면 서보모터가 데미지를 입을수 있으니 참고하세요.


위 명령어로 제어해 보시면 지터링 하나없이 깔끔하게 움직이는 서보모터를 보실수 있습니다.

참고로 제가 계산한 각도식도 공유해 드리겠습니다.

위에 나왔다시피 500과 2500은 데미지를 줄 수 있기에, 

저는 끝을 600~2400정도 아래 100정도를 남겨두겠습니다. 

서보 모터 떨림 - seobo moteo tteollim

손상입어도 다쓰시겠다 하시는 분들은 f(x)= 500+ 11.11x 로

600~2400쓰시는 분들은 f`(x) = 600+ 10x 로 쓰시면 되겠네요 개인적으로 후자가 식이더 깔끔하네요.

참고로 x는 각도입니다. 

제어외 다양한 명령어 라이브러리는 아래 홈페이지에서 확인하실 수 있습니다.

http://abyz.me.uk/rpi/pigpio/python.html#set_servo_pulsewidth

pigpio library

pigpio pigpio C I/F pigpiod pigpiod C I/F Python pigs piscope Misc Examples Download FAQ Site Map Python Interfacepigpio is a Python module for the Raspberry which talks to the pigpio daemon to allow control of the general purpose input outputs (GPIO). Fea

abyz.me.uk

이제 마음껏 졸업작품이던.. 개인작품이던.. 만드시면됩니다.

어쩌다 이블로그를 찾으신지는 모르겠지만 위 해결법으로 해결하셧다면

코멘트 한개만 부탁드리겠습니다 ! 감사합니다.

참고처: https://steemit.com/python/@makerhacks/jitter-free-servo-control-on-the-raspberry-pi