RC 서보를 어떻게 제어 할 수 있습니까?


26

파이썬을 통해 GPIO 핀에서 작은 RC 서보 (5 V, 500 mA)를 제어하고 싶습니다 .

하드웨어

  • 필요한 전기 연결은 무엇입니까?
  • 여러 개의 서보를 Raspberry Pi에 연결할 수 있습니까?
  • 현재 제한 사항이 있습니까? 트랜지스터로 출력 핀을 버퍼링해야합니까?
  • Raspberry Pi에서 직접 서보에 전원을 공급할 수 있습니까, 아니면 외부 전원 공급 장치를 사용해야합니까? 서보의 급격한 전력 소모를 부드럽게하기 위해 커패시터가 필요합니까?

소프트웨어

  • 어떤 소프트웨어 / 파이썬 코드가 필요합니까? 20ms 펄스가 필요하다는 것을 알고 있습니다. 어떻게 이것을 달성 할 수 있습니까?
  • 이런 식으로 Raspberry Pi를 사용하면 어떤 종류의 CPU로드를 기대할 수 있습니까?

답변:


9

필요한 전기 연결은 사용중인 서보에 따라 다릅니다. GPIO는 3.3 V를 제공하고 16mA까지 당신이 트랜지스터를 버퍼해야합니다, 그래서 당신의 서보 불충분.

확장 헤더 에는 8 개의 GPIO 핀이 있지만 다른 핀은 총 17 개의 GPIO 핀을 제공하도록 재구성 할 수 있습니다. 더 필요한 경우 일종의 멀티플렉서를 추가해야합니다.

인터럽트 및 작업 스위치는 언제든지 발생할 수 있으므로 Raspberry Pi 또는 비 실시간 OS에서는 정확한 시간에 신호를 얻는 것이 까다로울 수 있습니다. 정확한 시간 신호를 제공하려면 외부 전자 장치가 필요할 것입니다.

Andrew는 일부 소프트웨어를 지적했습니다. CPU로드는 수행중인 작업에 따라 다르지만 GPIO 자체는로드를 추가하지 않습니다.


2
반면에-라즈베리 파이의 CPU 용어에서도 20ms는 오랜 시간입니다. RC 서보의 시간 정밀도에 대해 너무 걱정하지 않아도됩니다.

2
@Tibor : 20ms는 너비 en.wikipedia.org/wiki/Servo_control#Pulse_duration이 아닌 서보 펄스주기입니다 . 그리고 해상도 요구 사항은 그보다 훨씬 나쁩니다. 8 비트의 해상도를 얻으려면 2 밀리 초에 256 단계가 필요 하므로 ~ 8us입니다.
Martin Thompson

8

Raspberry Pi에서 실시간 운영 체제를 실행하는 경우 실제로 가능합니다. 다른 사람들이 이미 말했듯이 서보에 외부 전원이 필요하지만 다른 추가 하드웨어는 필요하지 않습니다.

Xenomai (Linux 용 실시간 패치)를 실행중인 경우 완전히 익숙한 Linux 시스템을 실행할 수 있지만 실시간 기능이 추가됩니다.

Raspberry Pi의 서보를 제어하기 위해 작은 C 라이브러리를 작성했습니다. 3 개의 서보를 동시에 제어하려고 시도했지만 더 이상 작동하지 않는 이유는 없습니다.

내 작은 라이브러리를 여기에서 찾을 수 있습니다 : https://github.com/simonfi/pi-servo 파이썬 래퍼를 추가하는 것은 쉽지 않습니다. Raspberry Pi 용 Xenomai는 여기에서 찾을 수 있습니다. http://powet.eu/2012/07/25/raspberry-pi-xenomai/

3 개의 서보에 필요한 신호를 생성하는 것은 기본적으로 무시할만한 양의 CPU를 소비합니다. 아직 3 번 이상 테스트하지 않았습니다.


5

Linux Kernel 드라이버를 사용하는 것이 마음에 들지 않으면 서보를 char 장치로 노출시키는 서보 블라스터가 있습니다.

https://github.com/richardghirst/PiBits

서보 사용을 위해 모든 gpio 핀을 사용하지 않는 새 버전을 만들었습니다. 저는 현재 소형 서보 구동 로봇에서 이러한 로봇을 사용하고 있습니다. 저는 로봇 클럽을 위해 IPGamePad를 사용하여 로봇 클럽을 제작하고 데모했습니다.

https://github.com/jronald/PiBits

또한 RPI를 통해 서보 전원을 공급받지 않고 별도의 전원 공급 장치를 사용합니다. 물론 그 근거를 함께 묶어야합니다. RPI가 서보로 출력되므로 전압 시프 팅이 필요하지 않지만 사물을 잘못 배선하지 않도록주의해야합니다.


참고로-jronald 포크가 오래되고 고장난 것처럼 보이는 richartghrist repo는 유지 된 것으로 보입니다. 또한, 나는하는 방법을 읽어 보시기 바랍니다 모든 무시하지만, 처음 두 서보 제어설치 Servoblaster
CWD

3

서보는 일반적으로 PWM 신호를 사용하여 제어됩니다. 당신은 참조해야 PWM 출력으로 GPIO .

칩에 PWM 지원이 있으므로 향후에이를 사용할 수 있어야합니다. 기본적으로 모든 소프트웨어는 하드웨어가 특정 주파수에서 펄스를 생성하도록 지시합니다. 일부 사람들은 I2C를 통해 외부 PWM 컨트롤러를 사용하여 성공했습니다.


3

라즈베리 파 이용 gertboard 라는 확장 보드가 있는데,이 보드 는 Pi 자체로는 구동 할 수없는 서보 및 기타 부하를 제어하는 ​​데 사용됩니다.


또한이 제품의 인기로 인해 라즈베리 파이 및 액세서리를 제공하는 대부분의 사이트에서 매진되었다고 생각합니다.
Brandon Bailey

3

Pi에 대한 작업 방법에 대한 지식은이 질문을받은 이후 몇 년 동안 상당히 개선되었습니다.

외부 하드웨어를 사용하지 않고 Pi의 gpios에서 하드웨어 타이밍 PWM / 서보 펄스를 생성하는 방법에는 최소한 4 가지가 있습니다.

이를 위해 커널 모듈을 사용하는 것은 권장되지 않습니다. 다음과 같은 유저 랜드 솔루션을 이용할 수 있습니다.

  • 내 자신의 pigpio 는 gpios 0-31 (C, Python, 소켓, 파이프)에서 독립적으로 서보 및 일반 PWM 펄스를 생성합니다.
  • 서보 블라스터 는 최대 21 gpios (파이프)에서 독립적으로 서보 및 일반 PWM 펄스를 생성합니다.
  • RPIO 는 gpios 0-31 (Python)에서 독립적으로 서보 및 일반 PWM 펄스를 생성합니다.
  • 서보 블래스터 (파이프)에서 추출한 파이 블래스터

2

서보를 정확하게 제어하기 위해 Linux를 실행하는 동안 출력 시간을 충분히 정할 수 있다면 놀랍습니다.

펄스는 2 밀리 초 범위에서 제어되어야합니다. 스케줄러 틱의 해상도가 100us (이것은 일반적으로 10ms 임)의 해상도를 가지고 있어도 해결할 수있는 단계는 20 단계에 불과합니다. 그리고 그것은 작업 전환에 의해 도입 된 지터를 고려하지 않습니다.

사용 가능한 다른 타이머가있는 경우 타이밍을 정확하게 맞추기 위해 OS조차도 선점 할 수 있는 매우 낮은 수준의 드라이버를 작성할 수 있습니다. 재미있을 것 같아!


2

GPIO 포트에서 직접 서보를 실행하는 것은 어려울 수 있으며 가능하다면 많은 CPU 오버 헤드를 유발한다고 생각합니다. 나는 USB 서보 컨트롤러를 사용하며 설정하기가 약간 까다 롭지 만 훌륭하게 작동하고 거의 CPU를 사용하지 않습니다. 내가 가진 것은 24 채널이지만 6 채널 버전을 만듭니다. 또한 많은 공급 업체를 제어 할 필요가없는 경우 USB보다 쉽고 저렴할 수있는 직렬을 사용하는 다른 공급 업체의 2 채널 및 4 채널 컨트롤러도 보았습니다.


0

자체 플러그인을 작성할 수있는 완전한 GPIO 웹 서비스가 있습니다. 이미 많은 수의 서보 제어를 지원하는 것으로 보입니다. 보드 레이아웃뿐만 아니라 많은 이미지는 "Content"디렉토리를 참조하십시오.

https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb

Pi에서 Mono를 실행하는 C #에있는 것으로 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.