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: What is the minimum system clock required?

A 16 MHz clock is sufficient for standard servos. Higher clock speeds like 72 MHz give finer resolution for the pulse width.

Q: How many servos can one STM32 control?

It depends on the number of timer channels. A typical STM32F103 has up to four channels per timer, and you can use multiple timers. With four timers, up to 16 servos are possible.

Q: Do I need an external power supply for the servos?

Yes. Do not power servos directly from the STM32 board. Use a separate 5 V or 6 V power supply rated for the total current draw of all servos.

Q: What happens if the pulse width exceeds 2 ms?

Some servos may attempt to move beyond their mechanical limits, causing damage. Always clamp the pulse value between your servo's specified range.

Q: Can I use interrupt-based timing instead of hardware PWM?

Technically yes, but it is not recommended. Software PWM consumes CPU cycles and introduces jitter. Hardware PWM is always more reliable.

Q: Why does my servo work with an Arduino but not with STM32?

The Arduino library hides the timer configuration. On STM32, you must manually set the prescaler and period. The most common reason is an incorrect prescaler value.

Q: How do I test if the PWM signal is correct?

Use an oscilloscope to measure the signal on the GPIO pin. Check the frequency (50 Hz) and the pulse width (1–2 ms). A logic analyzer is also sufficient.

Q: Is it possible to control a servo using DMA?

Yes, but it adds complexity. DMA can update the CCR register without CPU intervention, useful for multi-servo synchronized movements.

Q: What should I do if the servo still does not work?

Check the power supply voltage under load. A drop below 4.8 V can cause intermittent behavior. Also verify that the signal ground is connected to the servo ground.

12 Selecting the Right Servo and STM32 Pair for Your Application

Your choice of servo depends on the torque, speed, and precision requirements of your application. A small plastic-gear servo works for lightweight prototypes, but for industrial or continuous-duty applications, consider a metal-gear servo with feedback capability.

The STM32 you choose should have enough timer channels for your servo count. For a project with four servos, an STM32F103C8T6 is sufficient. For sixteen servos, move to an STM32F407 or STM32F429 with more timers and pins.

Before finalizing your design, verify the servo torque requirements against your mechanical load. If the servo stalls under load, the STM32 cannot fix it. Similarly, if the power supply cannot deliver the peak current, the servo will lose position.

For buyers comparing options, ask your supplier for the servo's operating voltage range, stall current, and recommended PWM specifications. Also confirm the STM32's timer capabilities for your specific model. A custom servo solution from a manufacturer like キロパワーサーボ can provide application-specific tuning, but always validate the signal interface with your STM32 before committing to volume production.

When you are ready to move forward, send your servo specificationsそしてトルク要件 to your supplier. Request an engineering review of your PWM configuration to confirm compatibility. This step alone can eliminate weeks of debugging and ensure your motion control system performs as designed.

更新時間:2026-07-04

未来に力を与える

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

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