STM32 でサーボ モーターを制御する方法: エンジニアのための実践ガイド_カスタム ドライブ_業界の洞察_Kpower
> 業界の洞察 >カスタムドライブ
テクニカルサポート

製品サポート

STM32 でサーボ モーターを制御する方法: エンジニアのための実践ガイド

発行済み 2026-07-04

01簡単な回答

はい、制御できますサーボSTM32 マイクロコントローラーを使用して、正確な 50 Hz の周波数と 1 ms ~ 2 ms の間の可変デューティ サイクルの PWM 信号を生成することでモーターを制御します。 STM32 のタイマー ペリフェラルは、特に PWM 出力モードで、スムーズな動作に必要な精度を提供します。サーボポジショニング。この方法は、ほとんどの標準的な趣味に適用できます。サーボおよび多くの産業用サーボ ドライバに接続できますが、接続する前に電圧レベル、電流制限、信号の互換性を確認する必要があります。適切なタイマー構成と GPIO ピンを選択することは、特に複数のサーボを同時に制御する場合に、信頼性の高い動作を実現するために不可欠です。

02導入

モーション コントロール システムを構築していますが、サーボ モーターが期待どおりに応答しません。アームがけいれんしたり、位置がずれたり、モーターが動かなくなったりします。これらの症状は、多くの場合、共通の根本原因、つまりマイクロコントローラーからの不適切な PWM 信号生成を示しています。 STM32 を扱うエンジニアにとっての課題は、単にコードを書くことではありません。タイマー ハードウェアが実際にどのように動作するか、重要な設定値は何か、そして一見正しい設定でも失敗する理由を理解することが重要です。

多くの開発プロジェクトはこの段階で停滞します。テスト中にサーボが予期しない動作をすると、生産スケジュールが遅れ、デバッグコストが増加し、制御アーキテクチャ全体に不確実性が生じる可能性があります。問題がサーボ自体にあることはほとんどありません。それはほとんど常に、PWM信号の生成STM32から。安定した 50 Hz のベース周波数と正確なパルス幅制御がなければ、最高のサーボでもパフォーマンスが低下します。

この記事は、サーボ制御を STM32 ベースのシステムに統合する必要があるエンジニア、プロジェクト リーダー、および技術的意思決定者を対象に書かれています。ハードウェア構成、タイマー設定、よくある間違い、および実際に動作するプロトタイプと現場での故障を区別する実際のチェックについて説明します。

03目次

1. サーボ制御において PWM 信号の精度が重要な理由

2. サーボ PWM に適切な STM32 タイマーの選択

3. 50 Hz サーボ信号用の段階的なタイマー設定

4. プリスケーラーと周期の値の計算

5. 一般的な構成エラーとその症状

6. 複数のサーボを1つのタイマーで制御する

7. 推奨される GPIO ピンの選択

8. STM32 サーボ制御に関してエンジニアからよく聞かれる質問

9. アプリケーションに適したサーボと STM32 のペアの選択

04サーボ制御において PWM 信号の精度が重要な理由

標準的なサーボ モーターは、HIGH パルスの持続時間を測定することによって PWM 信号を解釈します。通常、1 ms のパルス幅はサーボに 0 度の移動を指令し、2 ms のパルス幅は 180 度の移動を指令します。信号は 50 Hz の固定周波数で繰り返す必要があります。これは、20 ミリ秒ごとに新しいパルスを意味します。

STM32 のタイマーがドリフトする周波数を生成したり、パルス幅が 100 マイクロ秒でも変化したりすると、サーボの位置が予測できなくなります。精密なアプリケーションでは、この誤差がさらに大きくなります。パルス幅の 50 µs のジッターは、数度の位置誤差に変換される可能性があり、ロボット アーム、カメラ ジンバル、または産業用位置決めシステムでは許容できません。

STM32 タイマー ハードウェアは、正しく構成されている場合、マイクロ秒レベルの精度を提供します。ただし、デフォルトのクロック設定、プリスケーラ値、自動リロード レジスタは、特定のシステム クロック周波数に合わせて計算する必要があります。ここでの不一致は、初期テスト中にサーボが誤動作する最も一般的な原因です。

05サーボ PWM に適切な STM32 タイマーの選択

STM32 上のすべてのタイマーがサーボ制御に等しいわけではありません。 TIM2、TIM3、TIM4、TIM5 などの汎用タイマーは、それぞれが個別の PWM 信号を生成できる独立したチャネルを提供するため、推奨されます。 TIM1 や TIM8 などの高度なタイマーも機能しますが、多くの場合、より複雑なモーター制御タスク用に予約されています。

タイマーを選択するときは、次の点を考慮してください。

チャンネル数: 各チャンネルは 1 つのサーボを駆動できます。 6 つのサーボが必要な場合は、少なくとも 4 つのチャンネルを持つタイマーを選択し、残りの 2 つに 2 番目のタイマーを使用します。

タイマーの解像度: 標準的なサーボには 16 ビットタイマーで十分です。 32 ビット タイマーは不要であり、構成が複雑になります。

stm32操控舵机_stm32操控舵机_stm32操控舵机

クロックソース: タイマーが動作中に安定したクロックに接続されていることを確認してください。内部 HSI または HSE 発振器を使用するのが一般的ですが、周波数を確認してください。

一般的な実用的な選択肢は、チャネル 1 ~ チャネル 4 で PWM モードで構成された STM32F103 または STM32F4 シリーズの TIM3 です。このセットアップでは、最小限のリソース使用量で 4 つのサーボ出力が提供されます。

0650 Hz サーボ信号用の段階的なタイマー設定

目標は、20 ms 周期と 1 ms ~ 2 ms の間の可変デューティ サイクルを持つ PWM 信号を生成することです。以下は、72 MHz のシステム クロックを想定した擬似コードのコンフィギュレーション シーケンスです。

1. タイマークロックを有効にする

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

2. プリスケーラを設定する

71 のプリスケーラは 72 MHz クロックを 1 MHz に分周し、1 μs ごとにタイマーを刻みます。

TIM_TimeBaseInitStructure.TIM_Prescaler = 71;

3. 自動リロード期間を設定する

19999 の周期は 20 ミリ秒のサイクル (20000 ティック × 1 μ秒) になります。

TIM_TimeBaseInitStructure.TIM_Period = 19999;

4. PWMモードの設定

チャンネル 1 のパルス幅を設定します。値 1500 は、サーボを中心とする 1.5 ms パルスに対応します。

TIM_OCInitStructure.TIM_Pulse = 1500;

5. PWM出力を有効にする

TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM3, ENABLE);

TIM_Cmd(TIM3, 有効);

6. GPIO ピンを代替機能に設定します

ピンを AF プッシュプル出力として設定し、タイマー出力を物理ピンに接続します。

この設定後、CCRx レジスタを更新することでパルス幅を変更します。

TIM_SetCompare1(TIM3, 1000);// 0度の1msパルス

07プリスケーラーと周期の値の計算

式は単純ですが、システム クロックに正しく適用する必要があります。

stm32操控舵机_stm32操控舵机_stm32操控舵机

タイマー周波数= システムクロック / (プリスケーラ + 1)

PWM周期= (オートリロード値 + 1) / タイマー周波数

72 MHz クロックと必要なタイマー周波数 1 MHz の場合:

プリスケーラ = 72,000,000 / 1,000,000 - 1 = 71

1 MHz で 20 ms 周期の場合:

自動リロード値 = 20,000 - 1 = 19,999

一部の STM32F4 デバイスのように、システム クロックが 168 MHz の場合、プリスケーラは 167 になり、自動リロード値は 19,999 のままになります。プリスケーラに 1 桁の誤差があると、周波数が大幅にシフトするため、開発環境ではこれらの数値を常に確認してください。

08一般的な構成エラーとその症状

多くのエンジニアは、初期テスト中に次の問題に遭遇します。

症状考えられる原因確認すべきこと
サーボが動かないPWM信号がないか、ピンが間違っていますGPIO 代替機能とタイマー チャネルが有効であることを確認します。
サーボが振動したりジッターしたりするパルス幅が不安定プリスケーラーと周期の計算をチェックします。タイマークロックが安定していることを確認する
サーボは片端のみに移動しますパルス範囲が狭すぎる、または広すぎる1000~2000μsのパルス値を確認
サーボの動きが遅い50Hz未満の周波数正しい期間の自動リロード値を再計算します
複数のサーボが干渉する共有タイマー チャネルが独立していない各チャネルが個別の CCR レジスタを使用していることを確認します。

数秒後にサーボの動作が不安定になる場合は、クロック ソースの変更または PWM 出力をオーバーライドするタイマー割り込みが問題である可能性があります。デバッグ中はタイマー チャネル上の不要な割り込みを無効にします。

09複数のサーボを1つのタイマーで制御する

1 つの STM32 タイマーは、4 つの独立したチャネルを使用して最大 4 つのサーボを駆動できます。各チャネルには独自の比較レジスタがあり、同じベース周波数を共有しながら個別のパルス幅制御が可能です。

6 つまたは 8 つのサーボを制御するには、2 つのタイマーを使用します。たとえば、チャンネル 1 ~ 4 には TIM3、チャンネル 1 ~ 4 には TIM4 が使用されます。すべてのサーボにわたって一貫したタイミングを維持するために、両方のタイマーが同じプリスケーラーと周期を共有していることを確認してください。

よくある間違いは、複数のサーボの信号線を同じピンに接続して、同じチャンネルに複数のサーボを割り当てることです。これは機能しません。各サーボには専用のタイマー出力ピンが必要です。配線の競合を避けるために、PCB 設計段階の早い段階でピンの割り当てを計画してください。

10推奨される GPIO ピンの選択

STM32 データシートには、どの GPIO ピンがどのタイマー チャネルに接続されているかが指定されています。 STM32F103 の TIM3 の場合:

チャンネル1:PA6

チャンネル2:PA7

チャンネル3:PB0

チャンネル4:PB1

これらのピンは代替機能プッシュプル出力として設定する必要があります。標準の GPIO 出力モードは、PWM 波形を生成しないため、使用しないでください。

ピンを選択するときは、電圧レベルを考慮してください。 STM32 GPIO は 3.3 V ロジックを出力します。ほとんどの標準サーボはこの信号を受け入れますが、一部の産業用サーボ ドライバーは 5 V ロジックを必要とします。その場合は、レベルシフターまたは専用サーボドライバーIC。データシートで 5 V 許容差を確認せずに、5 V サーボ信号を STM32 ピンに直接接続しないでください。

11STM32 サーボ制御についてエンジニアからよく寄せられる質問

Q: サーボ制御に STM32 タイマーを使用できますか?

はい、ただし、TIM2 ~ TIM5 のような汎用タイマーの設定が最も簡単です。 TIM6 や TIM7 などの基本的なタイマーには PWM 出力チャネルがありません。

Q: 必要な最小システムクロックはどれくらいですか?

標準的なサーボには 16 MHz のクロックで十分です。 72 MHz などのより高いクロック速度では、パルス幅の分解能がより細かくなります。

Q: 1 台の STM32 で制御できるサーボの数は何ですか?

タイマーチャンネル数により異なります。一般的な STM32F103 にはタイマーごとに最大 4 つのチャネルがあり、複数のタイマーを使用できます。 4 つのタイマーを使用すると、最大 16 個のサーボが可能です。

Q: サーボには外部電源が必要ですか?

はい。 STM32 ボードから直接サーボに電力を供給しないでください。すべてのサーボの合計消費電流に対して定格された別の 5 V または 6 V 電源を使用してください。

Q: パルス幅が 2ms を超えるとどうなりますか?

一部のサーボは、機械的限界を超えて動かそうとし、損傷を引き起こす可能性があります。パルス値は常にサーボの指定範囲内にクランプしてください。

Q: ハードウェア PWM の代わりに割り込みベースのタイミングを使用できますか?

技術的には可能ですが、お勧めできません。ソフトウェア PWM は CPU サイクルを消費し、ジッターを引き起こします。ハードウェア PWM は常に信頼性が高くなります。

Q: 私のサーボは Arduino では動作するのに、STM32 では動作しないのはなぜですか?

Arduino ライブラリはタイマー設定を非表示にします。 STM32 では、プリスケーラーと周期を手動で設定する必要があります。最も一般的な理由は、プリスケーラ値が正しくないことです。

Q: PWM 信号が正しいかどうかをテストするにはどうすればよいですか?

オシロスコープを使用して GPIO ピンの信号を測定します。周波数 (50 Hz) とパルス幅 (1 ~ 2 ms) を確認してください。ロジックアナライザでも十分です。

Q: DMAを使用してサーボを制御することはできますか?

はい、ただし複雑さが増します。 DMA は CPU の介入なしで CCR レジスタを更新できるため、マルチサーボの同期動作に役立ちます。

Q: それでもサーボが動作しない場合はどうすればよいですか?

負荷がかかった状態での電源電圧を確認してください。 4.8 V を下回ると、断続的な動作が発生する可能性があります。また、信号グランドがサーボグランドに接続されていることも確認してください。

12アプリケーションに適したサーボと STM32 のペアの選択

サーボの選択は、アプリケーションのトルク、速度、精度の要件によって異なります。小型のプラスチック ギア サーボは軽量のプロトタイプには機能しますが、産業用または連続使用用途の場合は、フィードバック機能を備えた金属ギア サーボを検討してください。

選択した STM32 には、サーボ カウントに十分なタイマー チャネルが必要です。 4 つのサーボを使用するプロジェクトの場合は、STM32F103C8T6 で十分です。サーボが 16 個の場合は、より多くのタイマーとピンを備えた STM32F407 または STM32F429 に移行してください。

デザインを完成させる前に、サーボトルク要件機械的負荷に対して。サーボが負荷により停止した場合、STM32 はそれを修正できません。同様に、電源ピーク電流を供給できない場合、サーボは位置を失います。

オプションを比較する購入者は、サーボの動作電圧範囲、ストール電流、推奨 PWM 仕様についてサプライヤーに問い合わせてください。特定のモデルの STM32 のタイマー機能も確認してください。あカスタムサーボソリューションみたいなメーカーからキロパワーサーボアプリケーション固有のチューニングを提供できますが、量産に着手する前に必ず STM32 との信号インターフェイスを検証してください。

先に進む準備ができたら、サーボ仕様そしてトルク要件あなたのサプライヤーに。互換性を確認するには、PWM 構成のエンジニアリング レビューをリクエストしてください。この手順だけで、数週間に及ぶデバッグが不要になり、モーション コントロール システムが設計どおりに動作するようになります。

更新時間:2026-07-04

未来に力を与える

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

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