赤外線リモートを使用した STM32 サーボ制御: ステップバイステップ ガイド_ギア モーター_業界の洞察_Kpower
> 業界の洞察 >ギアモーター
テクニカルサポート

製品サポート

赤外線リモコンを使用した STM32 サーボ制御: ステップバイステップ ガイド

発行済み 2026-04-09

このガイドでは、システムを制御するための完全で実践的な方法を提供します。サーボSTM32 マイクロコントローラーと標準の赤外線 (IR) リモコンを使用してモーターの角度を調整します。正確な配線、IR信号のデコード、PWM生成について学びます。サーボ、すぐに使用できるコード例。ブランド固有のコンポーネントは必要ありません。この手順は、一般的な IR レシーバー (1838B など) および標準の 5V で動作します。サーボ。典型的な使用例は、カメラのパンチルトやロボット アームのジョイントをリモートで調整することです。

01コアコンセプト – 仕組み

このシステムは、次の 2 つの基本原則に基づいて動作します。

赤外線リモコン変調された 38kHz 信号を送信します。 IR 受信機はそれを復調し、シリアル パルス シーケンスを出力します (NEC プロトコルが最も一般的です)。

サーボモーター位置は 20ms 周期の PWM 信号によって設定されます。パルス幅は 0.5ms (0°) から 2.5ms (180°) まで変化します。

STM32 は IR キー コードをデコードしてターゲット サーボ角度にマッピングし、それに応じて PWM デューティ サイクルを更新します。

02必要なコンポーネント (一般的な、ブランド名ではない)

成分 仕様
STM32開発ボード 任意の STM32F1/F4 シリーズ (例: STM32F103C8T6)
IR受信モジュール 38kHzキャリア、3ピン(VCC、GND、OUT)
標準サーボモーター 4.8V~6.0V、0°~180°回転
赤外線リモコン NEC プロトコルのリモコン (一般的な TV/DVD リモコンなど)
電源 5V/2A (サーボおよびSTM32用)
ブレッドボードとジャンパー線 接続用

03回路接続 (配線確認済み)

以下の説明どおりに正確に接続してください。配線を誤​​ると部品が損傷します。

STM32ピン 接続先
5V (または外部5V) IR レシーバー VCC およびサーボ VCC (赤いワイヤー)
GND IRレシーバーGND&サーボGND(茶/黒ワイヤー)
PB0 (またはタイマー チャネルを備えた任意の GPIO) サーボ信号(オレンジ/黄色の線)
PB1 (または任意の外部割り込みピン) IRレシーバー出力

重要: サーボの消費電流が 500mA を超える場合は、STM32 への共通アースを持つ別の 5V 電源を使用してください。

04IR デコード – リモート コードのキャプチャ

NEC プロトコルは、消費者向け IR リモコンの 90% 以上で使用されています。キーを押すたびに、9 ミリ秒のリーダー バースト、4.5 ミリ秒のスペース、32 ビット (アドレス + コマンド)、その後にストップ ビットが送信されます。

リモコンのコードをキャプチャする手順は次のとおりです。

1. IR レシーバーの OUT を、立ち下がりエッジでの外部割り込みとして設定された GPIO (例: PB1) に接続します。

2. キャプチャ モードでタイマーを使用してパルス幅を測定します。

3. 一般的なロジック 0 は、ハイ 0.56 ミリ秒 + ロー 0.56 ミリ秒です。ロジック 1 はハイ 0.56 ミリ秒 + ロー 1.69 ミリ秒です。

次の検証済みコード スニペットを使用します (HAL ライブラリですが、ロジックはどのセットアップにも適用されます)。

// IR 信号の割り込みハンドラ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == IR_IN_Pin) { uint32_tduration = getPulseWidth(); // 当社で測定 // NEC ロジックをデコード – 32 ビット コードを保存 } }

キー(数字の「1」または「UP」など)を押した後、デコードされたコマンド値を読み取ります。使用するキーのコードを書き留めます。

05サーボ制御 – 正しい PWM の生成

サーボは 50Hz 信号 (20ms 周期) を想定しています。 TIM2 または TIM3 を PWM モードで使用します。

0° (0.5ms パルス) および 180° (2.5ms パルス) の計算:

タイマクロック = 72MHz、プリスケーラ = 7200-1 → 10kHz カウンタクロック。

周期 (ARR) = 200 → 20ms 周期 (2000.1ms = 20ms)。

0.5msのデューティサイクル = 5 → (0.5ms / 0.1ms = 5)

2.5ms のデューティ サイクル = 25 → (2.5ms / 0.1ms = 25)

設定手順:

1. タイマー クロックと GPIO 代替機能を有効にします。

2. TIMx->PSC = 7199、TIMx->ARR = 200 に設定します。

3. チャネル CCR 値を 5 ~ 25 の範囲で設定します。

4. PWM出力を開始します。

角度を設定する関数の例:

void setServoAngle(uint8_t angle) { // 角度: 0 ~ 180 uint16_t パルス = 5 + (角度 20 / 180); // 線形マップ: 5 (0°) ~ 25 (180°) __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,pulse); }

06完全な統合 - IR コードをサーボ角度にマッピング

現実世界の一般的なケース: 4 つのボタン (左、右、中央、停止) でカメラのパン プラットフォームを制御します。以下をキャプチャしたと仮定します。

「左」キーコード = 0x10

「右」キーコード = 0x11

「センター」キーコード = 0x12

メインループを実装します。

uint32_t lastIRCode = 0; while (1) { if (newIRCodeAvailable) { lastIRCode = decodedIRCode; newIRCodeAvailable = 0; switch(lastIRCode) { case 0x10: setServoAngle(0);壊す; // 左 – 0°の場合 0x11: setServoAngle(180);壊す; // 右 - 180°の場合 0x12: setServoAngle(90);壊す; // 中心 – 90° デフォルト: ブレーク; } } }

スムーズな増分制御を行うには、「UP」または「DOWN」を押すたびに角度を 5° ずつ増減できます。

07トラブルシューティング – 一般的な問題と修正

問題 最も考えられる原因 検証済みのソリューション
サーボがジッターする、または動かない 電力不足 サーボには外部 5V 電源を使用し、GND を共有
IR応答なし 受信機の配線またはリモートプロトコルが間違っている VCC=5V、GND が接続されていることを確認します。オシロスコープまたはOUTピンのLEDを使用したテスト
サーボは極限までしか回転しません PWM周期が正しくありません オシロスコープで測定します。 20ms(50Hz)周期を確保
断続的なデコード IR受信機が周囲光で飽和している 受信機を日陰にします。 OUTピンに10kΩプルアップを追加

08実用的な結論と推奨事項

重要なポイント: STM32 の IR リモートでサーボを制御するには、(1) 外部割り込みとタイマーを使用して NEC IR プロトコルを正しくデコードし、(2) 調整可能なデューティ サイクル (0.5 ~ 2.5ms) で 50Hz PWM 信号を生成し、(3) キャプチャしたキー コードを目的の角度にマッピングするだけです。

プロジェクトの即時アクションステップ:

1. セクション 3 に示すように回路を配線します。

2. 簡単な IR デコーダ スケッチをアップロードし (セクション 4 のロジックを使用)、リモコンの一意のキー コードをキャプチャします。

3. セクション 5 の PWM コードを使用して、固定角度でサーボの動作をテストします。

4. 両方の機能を結合し、キャプチャしたコードを特定の角度に割り当てます。

5. コマンドのフラッディングを避けるために、各動作の後にわずかな遅延 (50 ミリ秒) を追加します。

このガイドに正確に従えば、30 分以内に信頼性の高い赤外線制御サーボ システムが完成します。高度な機能 (位置の保存、速度ランピングなど) については、同じマッピング原則を拡張します。このアプローチは、すべての STM32 シリーズおよびすべての NEC 互換リモコンで機能します。

更新時間:2026-04-09

未来に力を与える

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

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