> 業界の洞察 >カスタムドライブ
テクニカルサポート

製品サポート

STM32F407 サーボを制御して正確な動きを簡単に実現

発行済み 2026-03-27

ロボットアーム、スマートカー、クールなロボットを作りたいのに、サーボいつもひどく揺れたり、回転途中で止まったりしていませんか?実際、コントロールするのは、サーボ思っているよりもずっと簡単です。今日は、この強力な「心臓」と小さな「筋肉」を完璧に調整する方法について話します。サーボ.

サーボが常に振動しているのはなぜですか?

初めてサーボを使う友人も多く、一番の悩みはサーボの振動です。これは通常、サーボが壊れているためではなく、制御信号が不安定であることが原因です。ステアリング ギアは 20 ミリ秒周期の PWM 波に依存しており、ハイ レベル時間は 0.5 ミリ秒から 2.5 ミリ秒の間で変化し、0 ~ 180 度に対応します。遅延関数シミュレーションを使用するよりもはるかに安定した、非常に正確な PWM 波を出力できる高度なタイマーが付属しています。プロの指揮者によるサーボが搭載されており、あらゆるビートが安定していることが想像できます。

もう 1 つの一般的な原因は、電源不足です。サーボの瞬間的な起動電流は 1A 以上に達することがあります。開発ボードの 3.3V から直接電源を取ると、電圧が低下したときに信号が乱れてしまいます。 ️ 外部に独立した電源を用意し、開発ボードとサーボの電源を分離し、グランドのみを共有するのが正しいアプローチです。これは、家庭で高電力機器に専用線を使用するようなもので、そうしないと、エアコンをオンにしたときに電球が 2 回点滅します。

どのタイマーを使用するのが最適ですか?

タイマ リソースは TIM1 ~ TIM14 まで非常に豊富ですが、そのすべてがサーボの直接制御に適しているわけではありません。通常のアングルサーボの場合は、汎用タイマ TIM2、TIM3、TIM4、TIM5 を使用すれば十分です。 20ms 周期の PWM を簡単に生成できます。 8 つ以上など、多数のサーボを同時に制御する場合は、アドバンスト タイマー TIM1 または TIM8 の使用を検討する必要があります。相補的な出力機能とブレーキ機能を備えており、マルチチャンネル制御により適しています。

選び方は?最初にピンを確認し、次にリソースを確認します。サーボ信号線をタイマ出力チャネルのある端子に接続します。たとえば、PA0 は TIM2 のチャネル 1、PB6 は TIM4 のチャネル 1 です。リファレンスマニュアルのピン定義表を開いて地図のようにピンを調べ、配線に便利で他の機能と競合しないピンを見つけることをお勧めします。優れたエンジニアの配線は、正しいピンを選択することから始まることを忘れないでください。

PWM を最も安定させるように設定する方法

実際に PWM を設定するには、クロックをオンにする、パラメータを設定する、波形を出力するという 3 つのステップがあります。 TIM2 を例にとると、周期を 20ms、つまり 50Hz にしたい場合は、オートリロード値 ARR を 2000 に、プリスケーラ PSC を 839 に設定します。このように、タイマー クロックは 84MHz/(839+1)= となり、2000 パルスは正確に 20ms となります。ここで肝心のデューティ比制御角です。0度は比較値CCR=50、90度は150、180度は250に相当します。この計算式は難しくありませんね。

ライブラリ関数を使って開発すると、()を呼び出した瞬間に波形が出てきます。ただし、プログラム内でサーボの回転を制御するために Delay を使用しないように注意してください。CPU がフリーズし、サーボがフリーズする可能性があります。 ️ 正しいアプローチは、CCR 値を変更し、エンジンを切らずにギアを変更するのと同じように、ハードウェアが自動的に新しい波形を出力するようにすることです。標準ライブラリまたはレジスタ操作を使用する場合も、原理は同じです。これを完全に理解すれば、他のタイマーについてもすべて理解できるようになります。

サーボが 1 つと複数の場合に違いはありますか?

1つのサーボを制御するのは簡単ですが、複数のサーボを制御する場合、多くの人が誤解に陥ります。タイマは 1 サイクルしか使用できませんが、複数のチャネルを出力できます。たとえば、TIM2 の CH1、CH2、CH3、CH4 は、同時に異なるデューティ サイクルの PWM を出力できます。これは、1 つのタイマーで 4 つのサーボを互いに干渉することなく駆動できることを意味します。各チャンネルの CCR 値を個別に設定するだけで、複数のサーボが同時に異なる姿勢を取ることができます。

18 自由度のロボットを構築したい場合は、連携して動作する複数のタイマーが必要です。サーボを腕用の TIM2、胴体用の TIM3、脚用の TIM4 などのグループにグループ化します。各タイマーは独自の複数のサーボを管理します。これにより、ロジックが明確になるだけでなく、1 つのタイマーからの割り込みが多すぎることによって引き起こされる混乱も防ぐことができます。工場の生産ラインのようなものです。各ラインは全体の効率を最大化できるように独自の役割を果たします。

行き詰まらずにコードを書く方法

多くの初心者は、メイン ループに直接記述してサーボの回転速度を制御することを好みます。そのため、サーボが回転すると他のボタンの反応が遅くなります。実際、「ステート マシン」の考え方を使用すると、スムーズな回転を実現するのは非常に簡単です。たとえば、サーボを 0 度から 90 度に回転させたい場合、CCR を一度に 50 から 150 に変更するのではなく、短い時間ごとに値を上げ、タイマー割り込みまたは割り込みを段階的に行う必要があります。このようにして、CPU は他のことで忙しくなり、サーボは均等に動くことができます。

DMA を使用して支援することもできます。アイテムを掴むロボット アームの連続動作など、一連の事前定義された動作シーケンスがある場合、これらの CCR 値を配列に保存し、DMA が自動的にタイマーの比較レジスタに移動するようにすることができます。これにより、CPUにほとんど負荷がかからず、マイクロ秒レベルで正確なサーボ動作が可能となります。複雑そうに見えますが、DMA の構成は実際には非常に簡単です。一度試してみれば、その威力がわかります。

デバッグ時に最も見落とされやすいもの

プログラムがどれほど完璧に書かれていたとしても、ハードウェアの問題は簡単に人々を狂わせる可能性があります。最初の問題は共通接地問題です。開発ボードのGNDとサーボ電源のGNDは必ず接続してください。そうしないと、制御信号が一時停止され、サーボが動かないか、ランダムに回転します。多くの人は電圧を正しく測定するためにマルチメーターを使用しますが、信号が間違っているだけです。 10 回中 9 回、アース線が正しく接続されていません。次に、サーボ信号線が長すぎると干渉を受けやすくなります。ツイストペアまたは小さな 100 オームの抵抗を直列に使用するのが最善です。

もう 1 つの成果物はロジック アナライザーです。数十ドルする小型のデバイスを信号ラインにクリップするだけで、PWM波形が正しいかどうか、ハイレベル時間が希望どおりであるかどうかを自分の目で確認できます。ブラインド デバッグと比較して、この種の視覚的なデバッグは、コードの問題なのかハードウェアの問題なのかを迅速に特定するのに役立ちます。心配する必要はありません。10 分かけて確認してください。推測に費やす午後の時間を節約できます。

これを読んで、ステアリングギアの制御が実際には非常に体系的に行われていると思いますか?次回ロボットプロジェクトを開発するときは、電源からタイマーの選択、単一のサーボからマルチチャンネルのリンクまで、すべてのステップが重要であるため、今日話したポイントについて考えてみるとよいでしょう。この手法を使ってどんな面白い作品を作ろうと考えていますか?それはバイオニックハンドでしょうか、6本足のロボットでしょうか、それとも全方向移動車でしょうか?コメント エリアであなたの創造性を共有することを歓迎します。より多くのパートナーがサーボ制御で遊べるように、「いいね」を押して保存することを忘れないでください。

更新時間:2026-03-27

未来に力を与える

お客様の製品に適したモーターまたはギアボックスを推奨するには、Kpower の製品スペシャリストにお問い合わせください。

Kpowerにメールする
お問い合わせを送信
+86 0769 8399 3238
 
kpowerMap