発行済み 2026-05-08
夜遅くに。研究室の照明はまだ点灯しています。
私は STM32 開発ボードを手にしっかりと握り、動かないサーボをじっと見つめました。コードのコンパイルは成功し、ダウンロードも成功しましたが、なぜ動かないのでしょうか?
まるで私をあざ笑うかのように、デバッガーが画面上で点滅しました。
データシートを繰り返し調べても、重要な役割を果たす構成行が見つからないという経験はありませんか?
4年前のあの夜、私は初めてSTM32を使ってサーボを制御しました。 PWMはデューティサイクルを変更するのと同じくらい簡単だと思います。その結果、サーボは震え、その後完全に沈黙しました。
後で、時計を有効にするという最も重要な手順を忘れていたことに気づきました。
執筆のヒント: ドライバーを最初から作成する
サーボは従順な子です。必要な言語は 1 つだけです: PWM。
周期は 20 ミリ秒で、ハイレベル時間は 0.5 ミリ秒から 2.5 ミリ秒の間で、標準サーボに関連します。
選択できる STM32 タイマー モードは多数あります。 PWM1とPWM2の違いは何ですか?上向きにカウントしたり、下向きにカウントしたり、サーボはこれらの状況を本当に気にしているのでしょうか?
プロジェクトでテストした、さまざまな価格帯の 3 つのサーボがあります。エントリーレベルのサーボの1つは0.5msの良好な応答性能を持っています。しかし、別の工業グレードのサーボには、デッドタイムを 1us まで正確にする必要があります。
このようなケースがあります。昨年、私は友人の 5 軸ロボット アームのデバッグを手伝いました。使用しているのは一般的な中トルクサーボです。コードは完璧な状態にあるようです。デューティ サイクルが 5% から 10% に調整されると、サーボは 2 つの極端な位置でジャンプするだけです。。
プリスケーラーおよびオートリロード値の計算。
72MHz 状態の STM32 の場合、50Hz の PWM 周波数を得たい場合、分周係数は任意に決まりません。各サーボには異なる感度、異なるデッドゾーン、さらには異なる電源電圧があり、それによって「聴覚」が変化します。
サーボを 3.3V PWM ピンに直接接続している人が多すぎます。
そして「STM32ドライバーの能力が弱すぎる」と不満を漏らした。
いいえ、隔離するのを忘れました。
プロンプトの作成: データシートのより深い意味を理解する
デバッグは 3 時間も続きました。オシロスコープを使用してワイヤーごとに調査しました。調べてみると、サーボが回転すると電流が1.2Aまで急増することが分かりました。その後、開発ボードの 3.3V 電圧レギュレータがそのような電流に耐えられないことに気づきました。
解決策は簡単です。外部電源、共通アースです。
![]()
それ以来、私のすべてのステアリング ギア プロジェクトは 3 つの鉄則に従っています。
サーボ用独立電源(4.8V-6V)
制御信号列 1kΩ抵抗
電源アース線は STM32 アース線に確実に接続されています。
これら 3 つの項目には、デバッグに時間を費やす価値があります。
しかし、電源供給だけでは十分ではありません。精度はサーボ制御の命です。
通常の遅延のような関数についてはどうでしょうか?忘れて、思い切って諦めてください。タイマーによる割り込みはどうなるでしょうか?大丈夫で使えますよ。STM32のアドバンストタイマーを利用して相補PWMを出力し、ブレーキ機能をONにする、まさにプロといえる操作方法です。。
なぜ?サーボが固着したときに焼き切れるのは望ましくないからです。
STM32 リファレンス マニュアルを開きます。第 14 章はタイマーに属し、第 15 章はタイマーに属し、第 16 章はタイマーに属し、第 17 章はタイマーに属します。
初心者はレジスタリストを見るとめまいを感じます。私も。
ただし、出力比較モードの構成テーブルという最も重要なプロパティを備えたページがあります。どのレジスタがデューティ サイクルを制御するか、どのレジスタが極性を制御するか、どのレジスタがデッド ゾーンを制御するかを知ることができます。
プロンプトの作成: デッドタイムの重要性
次のプロジェクトでは、0.5 度のサーボ角度精度が必要です。市販されているほとんどのサーボは、通常、1us の分解能のみをサポートしています。; 20ms 周期では、1us はちょうど 0.18 度に相当します。理論的な分析からすると、この精度は十分です。
しかし、実際のテストでは、安価なサーボのリターンの差はわずか 2us であることがわかりました。
何をするか?
ソフトウェア補償。
コードでは、対応関係に従って理論上のデューティ サイクルと実際の角度を関連付けるマッピング テーブルを作成しました。線形補間を使用して補正したところ、最終的な精度は 0.3 度に達しました。
この事例は、ハードウェアには制限があるが、アルゴリズムによってそれを解決できることを示しています。
Q/A
Q:サーボが全く動かないのですがどうすればいいですか?
A: まず電源電圧と共通グランドを確認してください。オシロスコープを使用して、PWM 信号が存在するかどうかを確認します。
Q: サーボが激しく振動するのですが、原因は何ですか?

周期は 20ms で、信号にグリッチはありませんが、PWM 周波数が一致していないか、デューティ サイクルが安定していないため、確認が必要です。
Q: STM32 の PWM 分解能が十分でない場合はどうすればよいですか?
A: タイマー クロックを下げるか、16 ビット モードを使用すると、外部 PCA9685 モジュールを接続することもできます。
Q: 複数のサーボを同時に動かすにはどうすればよいですか?
A: 割り込みの競合を避けるために、同じタイマーの複数のチャネルを使用して PWM を出力します。
多くの人はコードを書き終えて、それで終わりです。
しかし、ステアリングギアは機械装置です。独自の気質を持っています。
プロンプトの作成: 物理的制限と安全保護
以前、サーボが 90 度回転してデッドボルトを押す自動ドアロックを設計しました。当時、プログラムは 100 回もテストされましたが、各テストの結果は正常でした。しかし、設置後3日目にロックが固着してしまいました。
サーボがブロックされ続けると、内部ドライバー チップの温度が 120 度まで上昇します。
教訓は何ですか?
すべてのステアリング ギア プロジェクトに、タイムアウト保護と電流検出を追加する必要があります。 STM32 ADC は、ステアリング ギアの電流をリアルタイムで監視できます。電流がしきい値を超えて 0.5 秒間続くと、PWM 出力は直ちに遮断されます。
これはオーバーエンジニアリングではありません。ここがプロとアマチュアの分水嶺だ。
サーボの初期位置という盲点もあります。
電源がオフのときにロボット アームが危険な位置にある場合、STM32 は電源がオンになった瞬間にデフォルトのレベルを出力します。このレベルが最大デューティ サイクルになると、サーボは限界に達します。
まず、解決策は、GPIO が初期化される前にタイマー出力ピンをハイ インピーダンス状態に設定することです。2 番目の解決策は、ハードウェア イネーブル信号を追加し、システムが安定するまで待ってからサーボの電源をオンにすることです。。
データシートにはこれらの詳細は記載されていません。
あなたの手にある STM32 開発ボードは、LED を点灯するだけではありません。
これにより、サーボは円を描いたり、文字を書いたり、オブジェクトを掴んだり、バルブを調整したりすることができます。
ただし、各パラメータの由来を理解するために時間をかけて取り組むことが前提となります。
プロンプトの作成: クローズドループフィードバックが究極のソリューションです
本当に高精度を追求するなら、オープンループ制御は諦めましょう。
私はバイオニック ロボット プロジェクトに専念し、各関節にポテンショメータのフィードバックを追加しました。 STM32 は、ADC 値を読み取り、それをターゲット角度と比較し、PID アルゴリズムを使用して PWM を調整する役割を果たしました。このようにして、荷重がどのように変化しても、位置は常に正確になります。
オープンループ制御は目隠しをして歩くようなものです。閉ループ制御は、目を開けて歩いているようなものです。
どれを選びますか?
この時、真夜中の研究室を振り返ってください。ステアリングギアが回転しなかったのは、コードに誤りがあったのではなく、まだ完全に習得していない知識の盲点があったためです。
すべての失敗は学習経験です。
STM32 を使用して実際にサーボを制御したい場合は、次の手順を覚えておいてください。
サーボのデータシートをよく読んで、パルス幅変調周期とパルス幅範囲を確認してください。
オシロスコープを使用して、STM32 が出力する波形を確認します。計算を信頼しないでください。
独立した電源、共通グランド、および保護抵抗。
角度マッピングとタイムアウト保護がソフトウェアに追加されています。
極端な条件をテストします: 停電と再起動、ローターのブロック、信号干渉。
プロンプトを書く: 重要なアイデアを繰り返し、それに基づいて行動する
核心は 1 つだけです。正確さはドキュメントに隠されており、安定性はテストによって得られます。
今すぐコードをチェックして、プリスケーラー値が正しく計算されているかどうか、接地されているかどうか、電源投入時のピンの状態が安全かどうかを確認してください。
再プログラムします。
ステアリングギアが回転する音を聞いてください。
もう震えません。
それはあなたのために働いています。
深夜の研究室はまだ明かりがついています。
でも今回は笑ってるね。
更新時間:2026-05-08