発行済み 2026-05-06
サブタイトル: プロフェッショナルのためのパルス幅変調ガイド
脈拍から角度まで、あらゆる度合いに自信があります。
ステアリングギアを制御・管理できるようにする根本的な本質は、「時間」の存在を分析することです。PWM信号の範囲にはハイレベルの幅があり、シャフトの状態を決定します。。 Arduino 開発者にとって、この技術的な内容を習得できるということは、機械的ジョイントに対する命令能力を獲得することに相当します。この記事では、ジッターや偏差の状況を排除できるように、原理の始まりからデバッグ段階までの完全なパス プロセスを説明します。
神話を想像してください。1 秒間に 50 回、サーボに「手紙」を送ります。文字の重みで言えば、ハイレベルが1.5ms続くとサーボは90°に留まり、0.5msが0°、2.5msが180°に相当します。これがPWMの呼吸リズムです。
固定周期:20ms(50Hz)
可変パルス幅:0.5ms~2.5ms
角度マッピング: 直線的に対応しますが、個人差があります
重要なのは、信号の安定性を無視すると、サーボに「パーキンソン病」のようなジッターが発生することになります。逆に、Arduino を使用して高出力サーボを直接駆動する場合、オンボードの 5V レギュレータが過熱して再起動するため、外部 4.8 ~ 6V 電源を接続する必要があります。
読者へのシナリオは次のとおりです。あなたは 6 脚のロボットを構築していて、そのうちの 1 つの脚が突然けいれんを起こしました。測定するとグランドループに電圧差が生じ、PWM波形が歪んでいるのがわかります。矯正後は優雅な歩き方に戻ります。
Arduino ボード (ローカライズされた視点) から始めて、空間的な順序で配置します。
1. 信号線(オレンジ/白) → PWM ピン (D9 など) を接続します。

2. プラス線(赤) → 外部BECまたはバッテリー正極
3. マイナス線(茶/黒) → 共通接地(絶対に飛ばしてはいけない)
例として、アンロード時にはサーボは正常ですが、重い物体を持ち上げるとサーボがランダムに回転するロボット アームのプロジェクトがあります。原因は、アース線のループ長が長すぎるためにノイズが混入し、この現象が発生するためです。解決策は、サーボの隣に 100μF のコンデンサを追加し、共通のアース線の長さを短くすることです。
メモとして、使用する場合は、キロパワーサーボは高精度サーボであり、応答速度が非常に速く、リーディングエッジジッターに対してより敏感です。リンギングを抑えるために信号ラインに 330Ω の抵抗を接続することを推奨します。
書く()マイクロ秒レベルで制御Arduino環境にはServoライブラリが用意されていますが、本当に理解していますか?
#含むサーボmyServo; void setup() { myServo.attach(9, 500, 2500); // ピンをバインドし、パルス幅範囲をカスタマイズします } void loop() { myServo.writeMicroseconds(1500); // マイクロ秒を直接書き込む → 90°遅延(500); }
省略した文章があります。 Attach() のデフォルトのパラメータは 544 ~ 2400µs です。ただし、実際には、サーボは通常 500 ~ 2500µs の間です。キャリブレーションを行わないと角度がずれてしまいます。。
信号を校正し、最初のキーワードとして抽出し、3 つの実際の測定点 (0° は 520μs に相当し、90° は 1480μs に相当し、180° は 2460μs に相当) を取り出します。線形補間によりマッピングテーブルを取得し、EEPROMにマッピングテーブルを格納し、電源投入時に毎回読み出します。このステップは、プロフェッショナルレベルのプロジェクトで実行する必要があります。
読者が経験したことは、write(90) を入力すると出力が 87° になるということです。エラーがあるのではなく、校正が行われていないのです。キャリブレーション機能を実行する必要があります。そうすれば、角度は設定した位置を正確に指すことができます。
12個のサーボを制御しますか? PWM ピンの数には制限があります。 I2C を 16 チャネル PWM に変換する PCA9685 モジュールを推奨します。これによりタイマー リソースが解放され、その出力周波数は独立します。
帰納的推論: 単一サーボから複数サーボまで、一般的な故障モード:

電流不足 → 電流に応じて各サーボがブロックされる計算された総電力供給量の 1.5 倍
フレームレートの競合 → すべてのサーボは同じサイクル (20ms) を共有する必要があります
ブロッキングを更新 → ノンブロッキング遅延またはタイマー割り込みを使用
速度変化リズム:低速ではパルス幅が徐々に変化し滑らかです。高速では負荷を予測する必要があります。 2 番目のキーワードである動的応答は、サーボが命令に従うリアルタイムの能力を指します。最適化方法は、ライブラリ内で角度をパルス幅に変換することによって発生するオーバーヘッドを回避するために、writeMicroseconds() を使用して値を直接書き込むことです。
Q: 電源投入後、サーボが激しく回転し振動するのですが?
信号線がフローティング状態であるか、ピンが出力用に構成されていません。デフォルトのハイレベルがリミットパルス幅として誤って読み取られます。すぐに接続構成を確認してください。。
Q:回転途中で引っかかって「ジュルジュル」という音が出ますが?
ケース A では、電圧降下またはドライブの過負荷が発生します。測定された動作電圧が 4.5V より低い場合は、電源を交換する必要があります。機械的な固着箇所も取り除きます。
Q: 同じコードでも正常なサーボと逆のサーボがありますか?
A: 異なるブランドのパルス幅と角度のマッピングの極性は逆です。 0°に対応するパルス幅値と180°に対応するパルス幅値を入れ替えてマッピングを書き換えます。
Q: 暑くならずに長時間じっとしていられるようにするにはどうすればよいですか?
違います、PWM の送信を停止するのは間違いです。パルス幅を維持するには、連続的に送信する必要があります。リフレッシュ周波数を 20Hz に下げると、冷却効果が得られる可能性があります。
Q: Arduino をリセットするとサーボがランダムにジャンプしますか?
A: リセット期間中、ピンはハイ インピーダンス状態に遷移します。10k プルダウン抵抗をグランドに追加するか、代わりに専用の PWM キーパーを使用します。
核心部分を見ると、PWM の精度は、電力品質の影響、パルス幅校正の結果、タイミングの安定状態、および 3 つのフェーズの積によって決まります。これらのどれかが欠けている場合、それは完全に不満足であるとみなされてもよい。
歴史的に、アナログ サーボはフィードバックをポテンショメータに依存し、デジタル サーボは分析を MCU に依存していました。ただし、最下層は依然として PWM です。。将来のトレンドとしては、半二重 UART などのシリアル バス サーボが挙げられますが、PWM はそのシンプルさから、依然として教育や小規模プロジェクトにおけるゴールド スタンダードです。
次のステップ:
オシロスコープまたはロジックアナライザを使用して波形を実際に測定します(安価なモジュールであっても、盲目的に推測するよりは優れています))
サーボごとに独立したキャリブレーションカーブを作成
プロジェクトに現在のマージン (少なくとも 50%) を残します。
認識の逆転: ステアリング ギアはブラック ボックスではなく、時間の芸術の実践者です。あなたが発信するすべてのパルスはすべて角度を刻んでいます。
この時点で、Arduino を持ち上げ、サーボを接続し、最初のマイクロ秒の書き込み操作を開始します。その正確な回転により、あなたの努力に応じたフィードバックが得られます。
角度は情報、パルス幅はパワーです。それをコントロールしてください。 *
更新時間:2026-05-06