GPIO를 펄스 폭 변조 출력으로 사용할 수 있나요?

그렇다면 어떻게해야하며 동시에 고유 한 PWM 출력을 몇 개까지 가질 수 있습니까?

댓글

  • 당신 사용중인 모델을 ' 지정해야 할 수 있습니다. 모두 약간 다릅니다.
  • @ user1147688 모델이 하나뿐 일 때이 질문을 받았습니다!

Answer

Alex Chamberlain 이 제안한대로 WiringPi 라이브러리가 나타납니다. 모델에 따라 하나 또는 두 개의 GPIO 핀에서 하드웨어 PWM 출력을 지원하고 다른 GPIO 핀에서 소프트웨어 PWM 을 모두 지원합니다. 한편 RPIO.PWM 라이브러리 는 모든 GPIO 핀에서 DMA 로 PWM을 수행합니다. 사실상 이것은 하드웨어와 소프트웨어 PWM 사이의 중간 지점으로, WiringPi를 사용한 100   µs에 비해 1   µs 타이밍 분해능을 제공합니다. 소프트웨어 PWM [1] .

이 중 어느 것이 애플리케이션에 적합한 지 여부는 필요한 PWM 출력 수와 이러한 출력에서 원하는 성능에 따라 다릅니다.

애플리케이션이 낮은 타이밍 해상도와 높은 지터 를 허용하는 경우 소프트웨어 또는 DMA 지원 타이밍 루프를 사용할 수 있습니다. 더 높은 정밀도를 원하면 / 지터 PWM을 낮추면 하드웨어 지원이 필요할 수 있습니다.

언제 소프트웨어 PWM이 적합할까요?

사람이 볼 수있는 케이던스 (10 “s)로 여러 LED를 플래시하려는 경우 hertz) 소프트 실시간 응답 요구 사항이있는 경우 소프트웨어 루프는 GPIO 핀이있는만큼의 PWM을 처리 할 수 있습니다.

하드웨어 PWM이 적합할까요?

서비스를 제어하려는 경우 o 하드 실시간 응답 요구 사항이있는 모터의 경우 하드웨어 PWM을 사용해야합니다. 그럼에도 불구하고 인코더 입력을 PWM 출력에 연결하는 서보 루프에 대한 실시간 응답을 보장하는 데 문제가있을 수 있습니다.

안정적인 서보 루프 인코더를 일반 속도 (낮은 지터)로 읽고 수정 된 PWM 출력 값을 일반 속도로 기록해야하며 이들 사이의 지연 시간은 고정되어야합니다 (전체적으로 낮은 지터). 이 작업을 수행 할 수 없으면 부하시 모터가 불안정 해지는 것을 방지하기 위해 모터를 과소 조정 (소프트 튜닝)해야합니다. 낮은 수준의 지원이없는 멀티 태스킹 운영 체제에서는 이러한 작업을 수행하기가 어렵습니다.

하드웨어 PWM 출력이 더 필요하면 어떻게하나요?

하드웨어 PWM 출력보다 더 많은 서보 루프를 실행해야하는 경우 하드를 확인하기 위해 다른 장치로 오프로드해야 할 것입니다. 실시간 성능, Raspberry Pi를 소프트 실시간 감독자 로 강등합니다.

한 가지 옵션은 Adafruit 16 채널 12 비트 PWM / 서보 드라이버-I²C 인터페이스-PCA9685 I²C 버스 용 GPIO 핀 몇 개만으로 16 개의 PWM 출력을 제어 할 수 있습니다. 사용 예는 다음과 같습니다. Raspberry Pi 포럼의 I²C 16 채널 PWM / Servo Breakout-Working 게시물을 확인하세요.

1. dm76 이 제안되지만 heather 에 따르면 RPIO.PWM은 더 이상 최신 pi 모델에서 작동하지 않을 수 있습니다.

댓글

  • 소프트웨어 PWM 방식을 사용하여 DC 모터를 실행할 수 있습니까?
  • @gideon-예, 제가 사용한 모터 전력 증폭기는 모두 PWM을 입력으로 사용합니다.
  • 참고로, RPI 라이브러리 ( pythonhosted.org/RPIO/pwm_py.html )는 WiringPi와 비교하여 훨씬 더 나은 해상도 (1us)를 가진 것 같습니다. 100us 해상도
  • @MarkBooth-문제 없음. 라이브러리는 정말 잘 작성되었으며 RPi.GPIO의 드롭 인 대체물로 사용할 수 있습니다. 이는 후자로 프로젝트를 시작하고 나중에 PWM 신호가 필요하다는 것을 깨달았을 때 매우 편리합니다 …
  • RPIO. PWM은 더 이상 최신 파이 모델에서 작동하지 않을 수 있습니다.

답변

하드웨어 PWM

예, Raspberry Pi에는 P1-12 (GPIO18)에 연결된 하드웨어 PWM 출력이 1 개 있습니다. 또한 I²C 또는 SPI 인터페이스를 사용하여 PWM 출력을 추가 할 수 있습니다. 일부 사람들은이 작업으로 성공했습니다 ( 포럼 게시물 ).

예제 코드

WiringPi 라이브러리 전체 라이브러리를 포함하지 않도록 코드를 살펴볼 수 있습니다.

소프트웨어 PWM

Linux는 실시간 운영 체제가 아니기 때문에 Raspberry Pi는 심각한 소프트웨어 PWM에 적합하지 않습니다. .

코멘트

  • 질문, 심각한 소프트웨어 PWM의 정의 또는 예는 무엇입니까? 그리고 " 실시간 운영 체제 " 란 무엇이며 Pi에서 얻을 수있는 기회가 있습니까?
  • @AnthonyBlake 글쎄, 소프트웨어 PWM을 사용하여 조명의 밝기를 제어 할 수 있지만 모터가 멈출 것 같습니다. 하지만 ' 소프트웨어 PWM을 수행 할 필요는 없지만 하드웨어가 더 간단하고 효과적입니다. 실시간 운영 체제는 Google에서 더 잘 설명 할 것입니다. 소프트웨어 실행 시간과 빈도에 대한 특정 사항을 보장합니다.
  • @AnthonyBlake A " 실시간 OS " (RTOS)는 실행 시간 상한을 보장하는 운영 체제입니다. 프로그램에 말하는 것과 같이 " 예, 33ms (2ms 허용 오차 제공 또는 2ms 허용) 내에 실행 시간이 주어져 스텝 모터에 정확한 신호를 제공하기 위해 GPIO 핀 비트를 뒤집습니다. 그가 필요할 때 시간 창. 신뢰할 수 있습니다! " 저기 ' RT Linux가 있습니다. ' '이 (아직) RPi로 이식되었는지 알 수 없습니다.
  • 죄송합니다. Alex, 나 ' 귀하의 답변의 다른 부분을 의도적으로 훔치지는 않았지만 ' 우리가 다른 경로를 통해 동일한 포럼 게시물에 도달 한 것을 방금 확인했습니다. .
  • 40 핀이있는 최신 모델에는 GPIO19 (핀 35)에 연결된 두 번째 하드웨어 PWM이 있습니다.

Answer

최근 Pi에는 두 개의 하드웨어 PWM 채널이 있습니다. 또한 하드웨어 타이밍 PWM 펄스는 40 핀 확장 헤더에 연결된 모든 GPIO에서 독립적으로 생성 될 수 있습니다.

실제로 이것은 두 개의 매우 정확한 PWM 채널이 있고 다른 모든 GPIO는 Arduino 스타일 PWM을 가질 수 있음을 의미합니다. (800Hz, 0 꺼짐-255 완전 켜짐).

예 : servoblaster 및 내 pigpio

댓글

  • 좋은 답변입니다! 이 두 개의 HW PWM을 어떻게 사용할 수 있습니까? 2 개의 서보를 제어해야합니다. 서보 블래스터와 피그 피오가 괜찮다고 말씀 하셨지만 HW PWM에 대해 궁금합니다. 그에 대해 아무것도 찾을 수 없기 때문입니다 … 거기에 대한 문서가 있습니까? 테스트 용 RPi 2 V1.1이 있습니다.
  • C , Python , pigs 명령 줄 .
  • 과도한 CPU로드는 ' 차. 과도한 네트워크로드는 특히 기본 200kHz가 아닌 1MHz에서 샘플링하는 경우 gpioServo에 차이를 만들 수 있습니다. 주파수는 50 (Hz)이고, 듀티 사이클의 범위는 0 ~ 1000000입니다 (실제 기본 값인 0 ~ 5000000에 매핑 됨). 1ms는 20ms에서 1ms이므로 5 %의 듀티 사이클이므로 50000, 1.5ms- > 7.5 %-> 75000, 2ms -> 10 %-> 100000.
  • 102 / BCM2835 ARM 주변기기 는 GPIO를 할당 할 수있는 다양한 모드를 보여줍니다. GPIO가 다양한 Pi 모델 확장 헤더로 연결되는 온라인을 찾으십시오.
  • @ user1147688 PLLD (500MHz)가 코어 PWM 클록으로 사용됩니다. " it " 작동 방식 때문에 PWM 코어 주파수는 250MHz입니다. 스위치를 켜고 끌 수 있으려면 (PWM에 매우 필수) 최대 값은 125MHz입니다. PLLC (1000MHz)를 사용하여 수치를 두 배로 늘릴 수 있지만 PLL은 코어 클럭 속도에 따라 다릅니다.

답변

실시간 OS는 아니지만 Raspberry Pi 용 RISC OS 는 협력적인 멀티 태스킹이므로 CPU가 100 % 인 애플리케이션을 쉽게 실행할 수 있습니다. 타이밍을 훨씬 더 잘 관리 할 수 있습니다. 자신의 코드 외에는 다른 작업을 기대하지 마십시오.

댓글

  • 어딘가에서 스위칭에 대한 하드웨어 제한이 있다는 것을 읽었습니다. 출력 핀의 주파수도 마찬가지입니다. 약 20MHz라고 생각합니다. 따라서 ' 300MHz PWM 또는 이와 같은 종류의 모든 것을 가져올 수있을 것으로 기대하지 마십시오. % CPU 사용량.
  • @Wallacoloo : 300MHz PWM이 필요한 애플리케이션은 무엇입니까?
  • @PeterMortensen : 글쎄요. ' 무선 방식을 모릅니다. 송신기 등은 신호를 생성하지만 일부는 PWM으로 수행 할 수 있습니다. PiFM은 100MHz에서 수행합니다. 그래도 내 의견과 모순되는 것 같으므로 핀이 여전히 해당 주파수에서 명령을받을 수 있는지 궁금합니다. = “8373562c8c”>

는 핀 커패시턴스가 이러한 신호를 감쇠시켜 100MHz 구형파가 전체 (0V, 3.3V) 대신 예를 들어 (1.0V, 2.3V)에서 실제로 진동 할 수 있도록합니다. 범위.

답변

이 라이브러리를 찾았습니다 ( pi -blaster )는 “매우 효율적 : CPU를 사용하지 않고 매우 안정적인 펄스를 제공합니다.”라고 주장합니다.

아직 테스트하지는 않았지만 즉시 업데이트 할 예정입니다. (아마 오늘)

댓글

  • 나는 ' 이것을 시도했지만 지금까지 운이 없습니다. 제가 알 수있는 한 ' 실제로 하드웨어를 전환하지 않습니까?
  • 이 문제를 해결하고 싶습니다. Pi-blaster는 다른 답변에서 저를 위해 일했습니다. 하지 않았습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다