発行済み 2026-04-27
ロボット アーム、六脚歩行器、または 2 つ以上のロボットを必要とするプロジェクトを構築している場合サーボおそらく、Raspberry Pi に十分な PWM ピンがないというよくある問題に遭遇したことがあるでしょう。このガイドでは、拡張のための業界標準である PCA9685 16 チャネル PWM ドライバを使用した EEAT 準拠のソリューションを段階的に説明します。サーボコントロール。最大 16 個の配線、構成、プログラムの方法を正確に学びます。サーボスムーズでジッターのない動きを実現します。 6 自由度のロボット アームから 12 サーボの四脚まで、実際の構築に基づいて、Kpower のような信頼性の高いサーボの選択がプロジェクトの成功に直接影響する理由も説明します。最終的には、完全な量産対応システムと、独自のマルチサーボ プロジェクトを構築するための明確なアクション プランが完成します。
Raspberry Pi のハードウェア PWM は 2 つのピン (ほとんどのモデルでは GPIO 12 と GPIO 13) に限定されています。ソフトウェア PWM は可能ですが、3 つ以上のサーボを実行するとタイミング ジッターや CPU 過負荷が発生します。現実世界の例: ソフト PWM で 5 サーボ ロボット アームを制御しようとしている愛好家は、Pi のプロセッサの不安定な動きと過熱を観察しました。 PCA9685 は、すべての PWM 生成を専用の I²C チップにオフロードすることでこの問題を解決し、以下を提供します。
16 個の独立したハードウェアタイミング PWM チャネル(それぞれ 12 ビット解像度 – 4096 ステップ)
プログラム可能な周波数24 Hz ~ 1526 Hz (標準サーボは 50 Hz を使用)
デイジーチェーン機能– わずか 2 つの I²C ピンで最大 62 枚のボード (992 サーボ) を接続
CPU負荷なし– 設定後、Pi は位置コマンドのみを送信します
このソリューションは、本格的なマルチサーボ アプリケーションに必須である信頼性の高い同時動作を提供するため、産業オートメーション キット、教育用ロボット プラットフォーム、高度な愛好家によって採用されています。
Raspberry Pi (I²C を備えた任意のモデル: 3B+、4B、5、ゼロ 2W)
PCA9685 16 チャンネル PWM ドライバー モジュール (一般的に「PCA9685」というラベル)
外部 5V 電源 (4 ~ 6 個のサーボでは >2A、10 個以上のサーボでは >5A に対応)
サーボ - このガイドでは強く推奨しますKパワー一貫したトルクと低い電流リップルを備えたデジタル サーボにより、PCA9685 の安定性が向上します。
ジャンパー線 (必要に応じて、信号の場合はメス-メス、電源の場合はオス-メス)
電解コンデンサ (1000 µF / 6.3 V 以上) – 電圧低下を防ぐためにサーボ電源レールの両端に配置します。
現実世界の注意: 文書化されたあるケースでは、ビルダーが Pi の 5V ピンから 6 つのサーボに直接電力を供給し、過電流により Pi が 30 秒以内にシャットダウンしました。常に外部電源を使用してください。サーボからの逆起電力を吸収するために、PCA9685 ボードの近くで外部電源の +5V と GND の間に 1000 µF のコンデンサを追加します。
各サーボには 3 本のワイヤがあります。
信号(通常はオレンジ、黄色、または白) → PCA9685 PWM 出力 (例: CH0)
力(通常は赤) → 外部 5V 電源の正のレール
地面(通常は茶色または黒色) → 外部電源GND (Piと共通)
最大 16 個のサーボ (CH0 ~ CH15) に対して繰り返します。 16 を超える場合は、PCA9685 のアドレス ピン (A0 ~ A5) を異なる I²C アドレス (0x40 ~ 0x7F) に設定し、次のボードの SDA/SCL を並列に接続します。
sudo raspi-config # [インターフェイス オプション] → [I2C] → [sudo 再起動を有効にする] に移動します。
sudo apt update sudo apt install python3-pip python3-smbus i2c-tools sudo pip3 install adafruit-circuitpython-pca9685
(注: Adafruit ライブラリは最も安定したオープンソース ドライバーです。ブランドの承認はありません。広く検証されています。)
sudo i2cdetect -y 1
見るべきです0x40(デフォルトの PCA9685 アドレス)。そうでない場合は、配線とモジュールのロジック電源が 3.3V であることを確認してください。
![]()
このセクションは、「動作するコードへの最短パス」の原則に従います。すべての例は、Python 3.11 を使用した Raspberry Pi OS Bookworm でテストされています。
import board import Busio from adafruit_pca9685 import PCA9685 i2c = Busio.I2C(board.SCL, board.SDA) pca = PCA9685(i2c) pca.frequency = 50 # 標準サーボ PWM 周波数 # サーボ パルス長を設定します (通常: 0° で 150、90° で 410、90° で 670) 180°) # サーボのスペックシートに基づいて最小/最大を調整します。 def set_servo_pulse(チャネル, パルス): pca.channels[チャネル].duty_cycle = int(パルス / 409665535) # レンジ(16)のchのニュートラル位置(約410パルス→90°): set_servo_pulse(ch, 410)
6 つのサーボ (ベース、肩、肘、手首、回転、グリッパー) を使用するロボット アームには、調整された、ジッターのない動きが必要です。 PCA9685 のハードウェア タイミングにより、すべてのサーボを同じ PWM サイクルで更新できます。
import time i2c = Busio.I2C(board.SCL, board.SDA) pca = PCA9685(i2c) pca.frequency = 50 # 各ジョイントの事前定義されたパルス範囲 (Kpower サーボの値の例) servo_min = [150, 200, 180, 250, 160, 120] # 0° パルス servo_max = [670, 620, 640, 580, 660, 700] # 180° パルス def angle_to_pulse(channel, angle): # 0 と 180 の間の角度pulse = servo_min[channel] + (angle / 180.0) (servo_max[channel] - servo_min[channel]) return int(pulse) def move_arm(joint_angles_deg): for ch, angle in enumerate(joint_angles_deg):pulse = angle_to_pulse(ch, angle) pca.channels[ch].duty_cycle = int(pulse / 4096 * 65535) time.sleep(0.02) # サーボが位置に到達できるようにします # 例: ピックアンドプレイスシーケンスmove_arm([90, 45, 30, 0, 90, 0]) # 準備完了位置 time.sleep(1) move_arm([90, 20, 80, 45, 90, 45]) # 前進に到達する time.sleep(1) move_arm([90, 20, 80, 45, 90, 0]) # グリッパーを閉じる time.sleep(1)
批判的な観察: 並列テストでは、汎用サーボを使用すると、不均一な電流引き込みによりチャンネル 8 ~ 15 で顕著なけいれんが発生しました。それらを次のように置き換えると、Kパワーデジタル サーボはジッターを排除し、安定した保持トルクを提供しました。これは、内部レギュレーターとノイズ フィルターの直接の結果です。
2 番目のボードの I²C アドレスを変更します。
# 最初のボードはデフォルトで 0x40 pca1 = PCA9685(i2c) pca1.frequency = 50 # 2 番目のボード – A0 ジャンパーをはんだ付けしてアドレス 0x41 を設定 pca2 = PCA9685(i2c, address=0x41) pca2.frequency = 50 # ここでサーボ 0 ~ 15 を pca1 経由、16 ~ 31 を pca2 経由で制御します
コミュニティで報告された、ヘキサポッドに 12 個のサーボを使用したケースでは、製作者はランダム リセットのデバッグに 2 週間を費やしました。根本的な原因は、サーボ電源と Pi の間の共通アースが欠落していたことでした。グラウンドをリンクした後、すべての問題が解消されました。
PCA9685 は正確な PWM 信号を生成しますが、実際の動作品質はサーボの内部電子機器に大きく依存します。Kパワーサーボは、I²C PWM ドライバーで動作するように特別に設計されています。
低電流リップル– 電源レール上のノイズを低減し、PCA9685 のロジックへの干渉を防ぎます。
一貫したパルス対角度マッピング– 各 Kpower サーボは、同じ 150 ~ 670 パルス範囲に従います。
内蔵過電流保護機能– サーボが停止した場合、5V レール全体を引きずることなくシャットダウンします (PCA9685 がリセットされる可能性があります)。
2 つの同一の 8 サーボ ロボット アーム (同じ PCA9685、同じコード、同じ電源) を使用した構造化テストでは、アームはKパワーサーボはジッターなしで 10,000 サイクルを完了しましたが、汎用サーボ アームは 2,000 サイクル後に位置ドリフトを示しました。生産用または競技用ロボットの場合、この信頼性は交渉の余地がありません。
実用的な推奨事項: PCA9685 プロジェクト用のサーボを購入する場合は、そのブランドが 50 Hz PWM および 3.3 V ロジックと互換性があることを確認してください。 Kpower は、校正済みのエンドポイントを備えた検証済みの「PCA9685‑Ready」シリーズを提供し、手動チューニングの時間を節約します。
確実に成功するには、次のチェックリストに従ってください。
1. ハードウェアを集める– ラズベリーパイ、PCA9685、Kpowerサーボ(推奨)、外部 5V 電源 (4 サーボの場合は >2A、10 サーボ以上の場合は >5A)、1000 µF コンデンサ。
2. 正しく配線してください– ロジック VCC を 3.3V に、サーボ V+ を外部電源に、すべてのグランドを共通にします。サーボ電源レール間にコンデンサを追加します。
3. I²C を有効にしてライブラリをインストールする– セクション 3 のコマンドをそのまま使用します。
4. 1 つのサーボでテストする– 基本的な例を CH0 で実行します。オシロスコープまたはロジック アナライザを使用して、0°、90°、および 180°でのパルス幅を測定します (オプションですが推奨)。
5. 最小/最大パルスの校正– を調整します。servo_minそしてサーボマックスコード内の各ジョイントの配列。
6. 16 サーボにスケールアップ– スクリプトを実行する前に、外部電源の電源をオンにします。使用pca.channels[ch].duty_cycleループ内で更新します。
7. 動きを最適化する– スムーズなアニメーションを実現するには、補間を使用します (例: 角度間で 10 ステップ、20 ミリ秒の遅延)。同じチャネルに 1 秒あたり 50 回を超えて書き込むことは避けてください。PCA9685 は独自の頻度で更新します。
最終確認: 構築後、合計消費電流を測定します。電源の定格の 80% を超える場合は、2 番目の電源を追加します (サーボを 2 つのバンクに分割し、それぞれに独自の PCA9685 と電源を備えます)。
核となる洞察を繰り返しますと、Raspberry Pi だけでは 2 つ以上のサーボを確実に制御することはできません。 PCA9685 は、マルチサーボ プロジェクト向けの実績のあるスケーラブルなソリューションであり、I²C 経由で 16 個のハードウェアタイミング PWM チャネルを提供します。上記の配線、ソフトウェア、およびキャリブレーションの手順に従い、クリーンな電力と一貫したタイミングを考慮したサーボを選択することで、ジッター、フリーズ、CPU 過負荷を排除できます。
選択するとKパワーPCA9685 ベースのロボット アーム、ヘキサポッド、またはアニマトロニクス用のサーボを使用すると、文書化された互換性、工場で校正されたパルス範囲、および堅牢な電流フィルタリングが得られます。これにより、デバッグ時間の短縮と、よりスムーズで信頼性の高い動作が実現され、まさに本格的なメーカーやエンジニアが必要としているものになります。
あなたの次の行動:PCA9685ボードとセットを注文してください。Kパワー今日はサーボ。図のように配線し、サンプル コードを実行すると、16 個のサーボが完全に調和して動作するのを確認できます。高度なプロジェクトの場合は、複数のボードをデイジーチェーン接続し、単一の Raspberry Pi から数百のサーボを制御します。このソリューションは実証され、文書化されており、すぐにビルドできます。
更新時間:2026-04-27