2014-04-14 3 views
1

Beaglebone Beaglebone Black을 사용하고 있습니다.Beaglebone PWM은 100HZ로 제한됩니까?

방금 ​​PWM을 출력하려고했는데 빠른 장치에서 메가 헤르츠의 잠재적 인 주파수를 예상했습니다.
나는 100HZ가 sysfs를 통해 설정할 수있는 정확한 최대 값이라는 것을 알았습니다.
필자는 예제를 온라인으로 파고 들기 시작했지만 한계는 언급하지 않았지만 100HZ보다 빠른 값도 표시하지 않았습니다.

예 :

[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 10000000 > period_ns 
[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 1000000 > period_ns 
-sh: echo: write error: Invalid argument 
[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 200 > period_freq 
-sh: echo: write error: Invalid argument 
[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 101 > period_freq 
-sh: echo: write error: Invalid argument 
[email protected]:/sys/class/pwm/ehrpwm.0:0# echo 100 > period_freq 
[email protected]:/sys/class/pwm/ehrpwm.0:0# 

보다 빠른 PWM을 할 수있는 모든 10cent의 AVR.
내가 놓친 트릭이 있습니까?
100 Hz보다 빠른 주파수를 원할 경우 GPO 토글을 통해 사용자 정의 PWM을 실제로 만들어야합니까?

+0

주기 속도가 1 Hz 미만인 이유가 확실하지 않습니다. PWM은 듀티 사이클 및 주파수입니다. 듀티 사이클은 1 사이클의 오프 타임에 대한 온 타임의 백분율이다. 빈도는 1 초에 얼마나 많은 사이클을 의미합니다. beaglebone black은 2000phz 채널이 동시에 실행되는 경우 최고 2000hz에서 작동하지만 다른 주파수에서 작동합니다. –

답변

2

실제로 질문을 한 직후에 해결책을 찾았습니다.
이것은 내가 생각하기에 이것은 실제로 나를 이상하게 여길 수 있습니다. :)

PWM 주파수는 물론 1GHZ 장치의 PWM 주파수와 같지 않지만 커널 드라이버는 사람이 기대하는 것과 같은 방식으로.

duty_percent 값을 입력하면 (예 : 1 %) 운전자가 duty_ns 값을 계산하고 그 후에 퍼센트 값을 잊어 버리는 것 같습니다.
일반 사용자는 그가 "퍼센트 모드"라고 생각하지만 실제로 파일의 퍼센트는 도움을주는 래퍼에 바인딩됩니다.
주파수에 대한 동일한 카운트!
이제 주파수를 더 높은 값으로 변경하면 커널은 duty_ns주기가 새로운 총 period_ns!
실제로 백분율을 설정하는 것을 무시합니다!

물론 전체 기간보다 큰 기간을 가질 수는 없으므로 실패합니다.

긴 텍스트 짧은 요약 : 제로
항상 설정 duty_cycle 이전 값이 새로운 시대에 적합하지 않을 경우 주파수를 설정하기 전에,이 좌절을 피할 수 있습니다.

+0

완벽을 기하기 위해 가능한 가장 작은 펄스 스텝 크기를 10ns로 측정했습니다. 또한, 펄스 폭 타이머는 16 비트 해상도를 갖는다. 따라서 반올림 문제에 유의하십시오. – Dietrich

+0

또한 (비행 제어와 같은) 실시간 작업을 위해 PWM을 사용하는 것이 (비표준 리눅스와 같은) 비 실시간 운영 체제를 사용하는 경우 좋은 생각이 아님을 생각하십시오. 그런 작업에 대해 Beaglebone의 PWM을 사용하지 않으려 고합니다. 타이밍에 대해 충분히 신뢰할 수 없습니다. 좋은 해결책은 I2C 또는 SPI 등을 통해 작은 AVR을 추가하고이를 실시간 작업 및 PWM에 사용하는 것입니다. – John

+0

@Dietrich : 최대 65535ns를 설정할 수 있습니까? – xmen