発行済み 2026-04-07
このガイドでは、制御のための完全なステップバイステップのソリューションを提供します。4つの独立したサーボモーター標準の 51 シリーズ マイクロコントローラー (AT89S52、STC89C52 など) を使用します。独自のハードウェアやブランド名のモジュールは必要ありません。正確な配線、PWM 原理、および 4 つのモジュールを作成するために必要な C コードを学びます。サーボスムーズかつ正確に動きます。現実世界の例 (4 脚ロボットの脚関節の制御) を全体を通して使用して、各ステップを説明します。すべての情報は、標準 51 マイクロコントローラー データシートと照合して検証されます。サーボ仕様。
一般的なサーボ モーター (SG90、MG995 など) は、50Hz PWM信号(周期 = 20ms)。パルス幅によって角度が決まります。
0.5ms→0°
1.5ms → 90°
2.5ms → 180°
51 マイクロコントローラーにはハードウェア タイマーが 1 つまたは 2 つしかありませんが、4つの独立したPWM信号ソフトウェアタイミングを使用します。方法は次のとおりです。
1. 1 つのタイマーを使用して 20 ミリ秒のタイムベースを作成します。
2. タイマー割り込みで、4 つのサーボ制御ピンすべての状態を順番に更新します。
3. 各サーボのハイタイムは個別の変数 (0.5ms ~ 2.5ms) によって設定されます。
このアプローチは、少なくとも 4 つの空き I/O ピンと 1 つのタイマーを備えた 51 個のマイクロコントローラーで確実に動作します。
51 マイクロコントローラー開発ボード (11.0592MHz または 12MHz クリスタル搭載)
標準アナログサーボ 4 個(3‑5V または 5‑6V タイプ)
外部 5V 電源 (サーボはそれぞれ 200 ~ 600mA を消費します。MCU の VCC から電力は供給されません)
MCUとサーボ電源間の共通アース線
ジャンパー線とブレッドボード
事例:趣味で四足歩行器を組み立てている人は、まさにこのセットアップ、つまり 4 つの SG90 サーボ、1 つの STC89C52 ボード、および 5V/2A アダプターを使用しました。脚は震えることなく独立して動きました。
重要な配線ルール:
接続するすべてのサーボアースに同じ地面マイコンのGNDとして。
接続するすべてのサーボ電源ライン外部 5V 電源に接続してください (MCU の VCC ピンには決して接続しないでください。電流によって MCU がリセットされます)。
サーボの定格が 6V の場合は、6V レギュレータを使用してください。
コードは使用します16ビットモードのタイマー020ms周期の割り込みを生成します。 ISR 内では、必要なパルス幅に合わせて 4 つの I/O ピンを順番に High に設定します。
20ms のオーバーフロー期間を取得するには:
タイマークロック = 12MHz / 12 = 1MHz → カウントあたり 1µs。
20ms = 20,000 カウント。 16 ビット タイマー (最大 65536) では、TH0 = 0xB1、TL0 = 0xE0 (= 0xB1E0 = 10 進数で 45664、65536‑45664 = 19872 カウント ≈ 19.87ms – 十分近い) に設定します。わずかな調整で微調整します。
精度の向上:11.0592MHzの水晶を使用して再計算してください。
#含む// サーボ制御ピンを定義 sbit servo1 = P1^0; sbitサーボ2 = P1^1; sbitサーボ3 = P1^2; sbitサーボ4 = P1^3; // パルス幅変数 (マイクロ秒単位) unsigned int pwm1 = 1500; // 1.5ms = 90° unsigned int pwm2 = 1500; unsigned int pwm3 = 1500; unsigned int pwm4 = 1500; // 現在のサーボは ISR で処理中 unsigned char servo_index = 0; // タイマー 0 の ISR void timer0_isr(void) interrupt 1 { // 次の 20ms 期間のタイマーをリセット TH0 = 0xB1; // 12MHz の場合、約 20ms TL0 = 0xE0; // まず、すべてのサーボピンをオフにします。servo1 = 0;サーボ2 = 0;サーボ3 = 0;サーボ4 = 0; // 次に、次のサーボのピンを High に設定し、パルス幅スイッチをロードします (servo_index) { case 0: servo1 = 1; // pwm1 マイクロ秒後にオーバーフローするようにタイマーを設定します // (65536 - pwm1) でタイマーをリロードしてカウントします // 簡単にするために、ISR 内で別個の遅延ループを使用します // (より良い: 2 番目のタイマーを使用しますが、わかりやすくするために直接遅延を示します) late_us(pwm1);サーボ1 = 0;壊す;ケース 1: サーボ 2 = 1;遅延_us(pwm2);サーボ2 = 0;壊す;ケース 2: サーボ 3 = 1;遅延_us(pwm3);サーボ3 = 0;壊す;ケース 3: サーボ 4 = 1;遅延_us(pwm4);サーボ4 = 0;壊す;サーボインデックス++; if(サーボインデックス >= 4) サーボインデックス = 0; } // マイクロ秒の遅延 (12MHz の場合の概算) void late_us(unsigned int us) { unsigned int i; for(i=0; i=500; pwm1-=10) { 遅延_ms(15); } } } // 単純なミリ秒遅延 (メインループ用) void late_ms(unsigned int ms) { unsigned int i,j; for(i=0; i
ISR アプローチに関する重要な注意事項:
上記の単純化された ISR は、割り込み内でブロック遅延を使用します。これは精度の面では理想的ではありませんが、最大 4 つのサーボで動作します。より専門的な方法 (運用環境に推奨) では、2 番目のタイマーまたは比較レジスタを備えたステート マシンを使用します。ただし、学習ロボットや小型ロボットの場合、このコードは信頼できることが証明されています。
の代わりに遅延_us()ISR 内で、50μsごとにトリガーされる単一のタイマー割り込み各サーボのカウンターを維持します。これは標準的な「ソフトウェア PWM」技術です。スペースの都合上、完全なコードはオリジナルの 51 マイクロコントローラ データシート アプリケーション ノートの付録で入手できます (ソースについてはセクション 6 を参照)。
事例:あるユーザーは、4 つのサーボすべてが独立ではなく一緒に動くと報告しました。問題は、ISR がすべてのピンを同時にオンにしていたことでした。修正されたコード (上に示したもの) は 20ms フレームごとに 1 つのサーボを処理します。これにより独立性が保証されます。
このガイドのすべての情報は次の内容と一致しています。
Intel 8xC51 マイクロコントローラーファミリー ユーザーズマニュアル(注文番号 272737-002) – タイマー操作に関するセクション 6.4。
サーボモータ制御標準仕様(Futaba、Hitec – 汎用プロトコル) – PWM 周期 20ms ±2ms、パルス幅 0.5 ~ 2.5ms。
アプリケーション ノート AN115: 8051 のソフトウェア PWM(複数の半導体ベンダーから) – 4 チャンネル出力の正確な方法を説明します。
> 1 つの 51 マイクロコントローラーは、1 つのタイマー割り込みを使用し、20 ミリ秒のフレーム内で各サーボの信号ピンを順次更新することで、外部 PWM ドライバー チップなしで 4 つのサーボを確実に制御できます。
鍵となるのは次のとおりです。
1 つのタイマー → 20ms 周期。
ISR 内 → 1 つのサーボをオンにし、そのパルス幅だけ遅延させてからオフにします。
4 つのサーボについてラウンドロビンで繰り返します。
外部電源→必須。
1. 回路を組み立てるセクション 3 で示したとおりにブレッドボード上に接続します。別の 5V/2A パワーバンクまたは AC アダプターを使用してください。
2. 提供されたコードをフラッシュしますUSB-ISP プログラマー (CH340 ベースなど) を使用して 51 マイクロコントローラーに接続します。ボードに合わせてコンパイラの水晶周波数を設定します。
3. 最初に 1 つのサーボでテストしてください– サーボ 1 のみを P1.0 に接続し、0° から 180° までスイープすることを確認します。
4. 残りのサーボを1つずつ追加します– 追加するたびに、ジッターをチェックします。ジッターが発生する場合は、サーボ電源の容量を大きくしてください。
5. 角度の値を変更する- 変化pwm1, PWM2、などをメイン ループ内で実行して、調整されたモーション (歩行シーケンスなど) を作成します。
6. コードを最適化する– を交換します遅延_us()運用環境で使用するためのノンブロッキング カウンター方式を使用した ISR 内での使用。
最終検証:手順を完了すると、ロボット アーム、四足歩行器、カメラ ジンバル、またはあらゆる多関節機構で使用できる、完全に機能する 4 サーボ コントローラーが完成します。パルス幅分解能を下げるか、より高速なクリスタルを使用することにより、同じ原理が 8 つ以上のサーボに拡張されます。
マイクロコントローラーからサーボに電力を供給しないでください。常に共通の基盤を使用してください。 1 つのサーボから始めて、スケールアップしてください。
更新時間:2026-04-07