GPIOをパルス幅変調出力として使用できますか?
もしそうなら、どうすればそれを実行でき、同時にいくつの別個のPWM出力を持つことができますか?
コメント
- あなたおそらく、'使用しているモデルを指定する必要があります。それらはすべてわずかに異なります。
- @ user1147688この質問は、モデルが1つしかないときに返されました!
回答
Alex Chamberlain が提案するように、 WiringPi ライブラリが表示されますモデルに応じて1つまたは2つのGPIOピンでハードウェアPWM出力をサポートし、他のGPIOピンでソフトウェアPWM をサポートします。一方、 RPIO.PWMライブラリは、任意のGPIOピンで DMA によってPWMを実行します。事実上、これはハードウェアとソフトウェアのPWMの中間であり、WiringPiの100 µsと比較して1 µsのタイミング分解能を提供します。ソフトウェアPWM [1] 。
これらのどれがアプリケーションに適しているかは、必要なPWM出力の数とそれらの出力に必要なパフォーマンスによって異なります。
アプリケーションが低タイミング解像度と高ジッタに耐性がある場合は、ソフトウェアまたはDMA支援タイミングループを使用できます。より高い精度が必要な場合/ジッタPWMが低い場合は、ハードウェアの支援が必要になる場合があります。
ソフトウェアPWMが適しているのはいつですか?
人間が目に見えるさまざまなケイデンス(10インチのLED)で多数のLEDを点滅させたい場合hertz)ソフトリアルタイム応答要件がある場合、ソフトウェアループはGPIOピンと同じ数のPWMを処理できます。
いつハードウェアPWMが適しているでしょうか?
サービスを制御したい場合o ハードリアルタイム応答要件のあるモーターの場合、ハードウェアPWMを使用する必要があります。それでも、エンコーダ入力をPWM出力に結び付けるサーボループのリアルタイム応答を確保するのに問題がある場合があります。
安定したサーボループエンコーダーを通常のレートで読み取り(低ジッター)、修正されたPWM出力値を通常のレートで書き出し、これらの間のレイテンシーを固定する必要があります(全体的に低ジッター)。これができない場合は、負荷がかかったときにモーターが不安定になるのを防ぐために、モーターをアンダーチューン(ソフトチューン)する必要があります。これは、低レベルのサポートがないマルチタスクオペレーティングシステムでは困難です。
より多くのハードウェアPWM出力が必要な場合はどうなりますか?
ハードウェアPWM出力よりも多くのサーボループを実行する必要がある場合は、ハードを確保するためにそれらを別のデバイスにオフロードする必要があります。リアルタイムパフォーマンス。RaspberryPiをソフトリアルタイムスーパーバイザーに任せます。
1つのオプションは、 Adafruit16チャネル12ビットPWM /サーボドライバー-I²Cインターフェイス-PCA9685 これにより、I²Cバス用のGPIOのわずか数ピンで16のPWM出力を制御できます。その使用例については、 RaspberryPiフォーラムのI²C16チャンネルPWM /サーボブレイクアウト-動作中の投稿を確認してください。
1. <ありがとうございます提案についてはdivid = "d9c0205c89">
dm76 ですが、 heather は、RPIO.PWMが新しいpiモデルでは機能しなくなる可能性があることを示しています。
コメント
- ソフトウェアPWMアプローチを使用してDCモーターを実行できますか?
- @ gideon-はい、使用したモーターパワーアンプはすべてPWMを入力として使用しています。
- FYI、RPIライブラリ( pythonhosted.org/RPIO/pwm_py.html )は、WiringPiと比較してはるかに優れた解像度(1us)を持っているようです。 100usの解像度
- @ MarkBooth-問題はありません。ライブラリは非常によく書かれており、RPi.GPIOのドロップイン代替品として使用できます。これは、後者でプロジェクトを開始し、後でPWM信号が必要であることに気付いた場合に非常に便利です…
- RPIO。 PWMは、新しいpiモデルでは機能しなくなる可能性があると思います。
回答
ハードウェアPWM
はい、Raspberry PiにはP1-12(GPIO18)に接続されたハードウェアPWM出力が1つあります。さらに、PWM出力はI²Cまたは SPI インターフェースを使用して追加できます。一部の人々はこれで成功しています(フォーラム投稿)。
サンプルコード
WiringPiライブラリでPWMピンを制御します。 Linuxはリアルタイムオペレーティングシステムではないため、コードを見て、ライブラリ全体が含まれないようにすることができます。
ソフトウェアPWM
Raspberry Piは、本格的なソフトウェアPWMには適していません。 。
コメント
- 質問、深刻なソフトウェアPWMの定義または例は何ですか?また、"リアルタイムオペレーティングシステム"とは何ですか?また、Piで入手できる可能性はありますか
- @AnthonyBlakeええと、ソフトウェアPWMを使用してライトの明るさを制御できるかもしれませんが、モーターが停止するのではないかと思います。 'ソフトウェアPWMを実行する必要はありませんが、ハードウェアはよりシンプルで効果的です。リアルタイムオペレーティングシステムは、Googleによってよりよく説明されます。ソフトウェアの実行時間と頻度について特定のことを保証します。
- @AnthonyBlakeA "リアルタイムOS "(RTOS)は、実行の上限を保証するオペレーティングシステムです。プログラムに言うように"はい、33msの実行時間(2msの許容誤差を与えるか取る)があり、そのGPIOピンビットを反転してステップモーターに正確な信号を与えます彼がそれを必要とする時間枠。そして、あなたはそれを信頼することができます!"そこに'のRTLinuxがあります。 'それがRPiに移植されているかどうかわからない'(まだ)。
- 申し訳ありませんが、アレックス、私'意図的に回答の別の部分を盗んだわけではありませんが、'異なるルートで同じフォーラムの投稿にアクセスしたことに気づきました。
- 40ピンの新しいモデルには、GPIO19(ピン35)に接続された2番目のハードウェアPWMがあります。
回答
最近のPisには2つのハードウェアPWMチャネルがあります。さらに、ハードウェアタイミングのPWMパルスは、40ピン拡張ヘッダーに接続されたすべてのGPIOで個別に生成できます。
実際には、これは2つの高精度PWMチャネルがあり、他のすべてのGPIOがArduinoスタイルのPWMを備えている可能性があることを意味します。 (800 Hz、0オフ-255完全オン)
コメント
- いい答えです!これら2つのHWPWMをどのように使用できますか? 2つのサーボを制御する必要があります。サーボブラスターとピグピオはそれで問題ないとおっしゃっていますが、HW PWMについては何も見つからないので、疑問に思っています…そこにいくつかのドキュメントがありますか?テスト用のRPi2V1.1を持っています。
- C 、 Python 、 pigsコマンドライン。
- CPUの負荷が高い場合は'差。特にデフォルトの200kHzではなく1MHzでサンプリングする場合、ネットワークの負荷が大きいとgpioServoに違いが生じる可能性があります。周波数は50(Hz)で、デューティサイクルの範囲は0〜1000000になります(0〜5000000の真の基礎値にマッピングされます)。 1ミリ秒は20ミリ秒で1ミリ秒なので、デューティサイクルは5%なので、50000、1.5ミリ秒-> 7.5%-> 75000、2ミリ秒-> 10%-> 100000。
- BCM2835 ARM Peripherals は、GPIOに割り当てることができるさまざまなモードを示しています。 GPIOがさまざまなPiモデル拡張ヘッダーに導かれているオンラインを調べてください。
- @ user1147688 PLLD(500MHz)がコアPWMクロックとして使用されます。 " it "の動作方法により、PWMコア周波数は250MHzです。オンとオフを切り替えることができるようにするには(PWMにとって非常に重要です)、最大値は125MHzです。 PLLC(1000 MHz)を使用すると、数値を2倍にすることができますが、そのPLLはコアクロック速度によって異なります。
回答
リアルタイムOSではありませんが、RaspberryPiの RISC OS は協調マルチタスクであるため、CPUが100%のアプリケーションを簡単に実行できます。タイミングをより適切に管理できます。自分のコード以外は何もしないでください。
コメント
- 切り替えに関してハードウェアの制限があることをどこかで読みました。出力ピンの周波数も。20MHz前後だったと思います。したがって、'は、100 MHzであっても、300 MHzPWMなどをプルできるとは期待しないでください。 %CPU使用率。
- @Wallacoloo:300 MHz PWMが必要なアプリケーションは何ですか?
- @PeterMortensen:'無線の方法がわかりません送信機などは信号を生成しますが、PWMで行うものもあります。PiFMは100 MHzでそれを行います。それは私のコメントと矛盾しているようですが、ピンはまだその周波数で指令できるのではないかと思いますが、'は、ピンの容量がそのような信号を減衰させるため、100 MHzの方形波が実際には完全な(0 V、3.3 V)ではなく(1.0 V、2.3 V)から振動する可能性があります。範囲。
回答
このライブラリを見つけました( pi -blaster )「非常に効率的:CPUを使用せず、非常に安定したパルスを提供します。」
まだテストしていませんが、テストするとすぐに更新されます。 (おそらく今日)
コメント
- 'これを試しましたが、今のところ運がありません。 私が知る限り、'実際にハードウェアを切り替えませんか?
- これをぶつけたいだけです。Pi-blasterは、これらの他の答えがあれば私のために働いています。 しませんでした。