Arduino UnoにデジタルPWMピンが6つしかない場合、最大12のサーボをどのようにサポートできますか?


10

よると、この

サーボライブラリは、ほとんどのArduinoボードで最大12モーター、Arduino Megaで最大48モーターをサポートします。Mega以外のボードでは、ライブラリを使用すると、ピンにサーボがあるかどうかに関係なく、ピン9および10のanalogWrite()(PWM)機能が無効になります。Megaでは、PWM機能を妨げることなく最大12個のサーボを使用できます。12〜23個のモーターを使用すると、ピン11および12のPWMが無効になります。

しかし、によると、この

デジタルI / Oピン14(そのうち6つはPWM出力を提供)

では、PWM出力を提供できるデジタルI / Oピンが6つしかない場合、Unoは6つ以上のサーボをどのように制御できますか?

回答:


8

サーボライブラリはPWMを使用しません。write()を呼び出すと、マイクロ秒単位のパルス幅が計算され、グローバル配列に格納されます。次に、各チャネルの必要なパルス幅に応じて出力信号を変更する割り込みを定期的にトリガーする単一のタイマーがあります。

以下のソースコードを見つけることができます: Githubリンク


1
それで、本質的にPWMをシミュレートしますか?それでは、PWMチャネルを備えたデジタルピンのポイントは何ですか?
user41158 2014

2
一般に、サーボパルスの長さは約1 msです。したがって、それらは1 kHz前後の周波数で駆動する必要があります。これは、数MHzで動作するマイクロを備えた任意の出力でソフトウェアによって非常に簡単に生成できます。AVR PWM出力は専用ハードウェアによって生成され、CPU周波数に到達できますが、チャネル数は制限されています。サーボモジュールの作成者は、ピンと同じ数のチャネルを処理し、他の用途のためにPWMハードウェアを節約するために、単一のタイマーを使用することを決定したと思います。
Grapsus 14

1
Arduino出力のPWMは、0〜100%のデューティサイクルを持つ可変電力出力用です。RCスタイルの「PWM」制御のデューティサイクル範囲は非常に制限されています。50Hzでの1000 usは5%、50 Hzでの2000 usは10%です。RC PWMを従来の「PWM」ではなく「パルス列」と考えてください。
Jon Watte、2014年

あなたが無制限のCPU時間を使用している場合は、@ user41158、あなたはPWMとして任意のデジタル出力を使用し、ソフトウェアでそれらを制御することができますだけでなく、PWM、理論的にはあなたがプログラムを書くと、これらの出力を切り替えることにより、任意のデジタル通信システムを作成することができ、それが"と呼ばれていますbit-叩いて」しかし実際には、CPU時間は無制限ではなく、ハードウェアタスクをハードウェアで解決するのが最善です。サーボ制御の場合、PWM周波数はかなり低いため、ソフトウェアでPWMをビットバンギングして追加の出力を作成するのが現実的です。
比尔帽子子

2

6つのPWMピンは、ATmega328Pの組み込みUARTを使用して出力を生成します。これにより、パルスが非常に高速になり、より高品質の「アナログ」出力が得られます。サーボは十分に遅い速度で通信するため、ソフトウェア割り込みを使用して駆動できます。ソフトウェア割り込みは、実行中のコードから離れ、サーボライブラリに含まれているコードを実行します。このコードは、標準的な手段を使用してピンの状態を変更します。UARTを使用するのではなく割り込みを使用してそれを行うことで、処理時間をいくらか無駄にしますが、より多くのサーボを駆動する能力を獲得します。


もっと説明(またはリンク)できますか?UARTはPWMにどのように使用されますか?
マーティントンプソン

PWMライブラリは、必要に応じてUART I / Oピンを使用すると言った方がいいと思います。PWMライブラリはUART自体を使用しませんが、UARTで使用されているピンは、UARTに必要ない場合は、標準のデジタルI / Oとしても使用できます。
Peter Bennett、2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.