1

Beaglebone Black ではなく Beaglebone を使用しています。

PWM を出力しようとしたところ、このような高速デバイスで数メガヘルツの潜在的な周波数が期待されました。
sysfs で設定できる正確な最大値は 100HZ であることがわかりました。
オンラインで例を探し始めましたが、制限については言及されていませんでしたが、100HZ よりも速い値も示されていませんでした。

例:

root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 10000000 >  period_ns 
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 1000000 >  period_ns 
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 200 >  period_freq 
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 101 >  period_freq 
-sh: echo: write error: Invalid argument
root@beaglebone:/sys/class/pwm/ehrpwm.0:0# echo 100 >  period_freq 
root@beaglebone:/sys/class/pwm/ehrpwm.0:0#

どんな 10 セント AVR でも、それよりも高速な PWM を実行できます。
私が見逃したトリックはありますか?
100 HZ よりも速い周波数が必要な場合は、GPIO を手動で切り替えてカスタム PWM を作成する必要がありますか?!

4

1 に答える 1

2

質問を開いた直後に、実際に解決策を見つけました。
これは実際には私だけでなく不思議に思うかもしれないと思うので、ここに投稿します:)

もちろん、PWM 周波数は 1GHZ デバイスのように制限されていません。カーネル ドライバーは、期待どおりに動作していません。

Duty_percent 値 (1 パーセントなど) を入力すると、ドライバーはその値から Duty_ns 値を計算し、後でパーセントを忘れてしまうように見えます。
通常のユーザーは、自分が「パーセント モード」になっていると思いますが、実際には、パーセント ファイルはラッパーにバインドされているだけです。
頻度も同じです!
周波数をより高い値に変更すると、カーネルは、duty_ns サイクル期間が新しい合計 period_ns に収まるかどうかをチェックします!
実際にパーセンテージを設定することは無視されます!

したがって、もちろん、期間全体よりも大きい期間を持つことはできないため、失敗します。

長いテキストの短い要約:
以前の値が新しい期間に適合しない場合は、周波数を設定する前に、duty_cycle を常にゼロに設定してください。これにより、フラストレーションが回避されます。

于 2014-04-14T02:03:27.053 に答える