発行済み 2026-04-09
このガイドでは、システムを制御するための完全で実践的な方法を提供します。サーボSTM32 マイクロコントローラーと標準の赤外線 (IR) リモコンを使用してモーターの角度を調整します。正確な配線、IR信号のデコード、PWM生成について学びます。サーボ、すぐに使用できるコード例。ブランド固有のコンポーネントは必要ありません。この手順は、一般的な IR レシーバー (1838B など) および標準の 5V で動作します。サーボ。典型的な使用例は、カメラのパンチルトやロボット アームのジョイントをリモートで調整することです。
このシステムは、次の 2 つの基本原則に基づいて動作します。
赤外線リモコン変調された 38kHz 信号を送信します。 IR 受信機はそれを復調し、シリアル パルス シーケンスを出力します (NEC プロトコルが最も一般的です)。
サーボモーター位置は 20ms 周期の PWM 信号によって設定されます。パルス幅は 0.5ms (0°) から 2.5ms (180°) まで変化します。
STM32 は IR キー コードをデコードしてターゲット サーボ角度にマッピングし、それに応じて PWM デューティ サイクルを更新します。
以下の説明どおりに正確に接続してください。配線を誤ると部品が損傷します。
重要: サーボの消費電流が 500mA を超える場合は、STM32 への共通アースを持つ別の 5V 電源を使用してください。
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」など)を押した後、デコードされたコマンド値を読み取ります。使用するキーのコードを書き留めます。
サーボは 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); }
現実世界の一般的なケース: 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° ずつ増減できます。
重要なポイント: 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