STM32 制御サーボ プログラムの移植コードを変更する方法_BLDC_Industry Insights_Kpower
> 業界の洞察 >BLDC
テクニカルサポート

製品サポート

STM32制御サーボプログラムの移植コードを変更する方法

発行済み 2026-03-29

製品イノベーションに取り組む際に最も懸念されるのは、メイン制御チップを交換すると、元々適切に調整されていたチップが機能しなくなることです。サーボ回転が止まります。多くの友人が新しい STM32 開発ボードを入手し、そのボードを移行したいと考えていました。サーボこのプログラムはもともと他のボードで使用されていましたが、応答しなかったり、激しく揺れたりすることがわかりました。実際、移植はいくつかの重要なポイントを明確にしておけば、まったく複雑ではありません。今日は、スムーズに「移動」する方法について話します。サーボ異なる STM32 モデル間のプログラム。

STM32サーボ制御コードの変更方法

サーボ制御の核心は、周期約20ms、ハイレベル時間0.5ms~2.5msのPWM波を出力することです。したがって、コード移行の最初のステップは、PWM を生成できる新しいボード上のタイマーとチャネルを見つけることです。元のプログラムでは TIM2 の CH1 を使用していましたが、TIM3 の CH2 に変更する必要があるかもしれません。この対応関係はチップのデータシートで明確に確認する必要があります。この変更は、実際にはいくつかのパラメータの問題にすぎません。タイマー番号とチャンネル番号を変更すると、ほとんどのコードが使用できるようになります。

タイマー設定を変更した後は、クロック周波数を確認することを忘れないでください。 Different models of STM32 may have different clock sources for the system clock and timer.たとえば、F1 シリーズで使用されていた元々のメイン周波数 72MHz は、F0 シリーズに切り替えると 48MHz になる場合があります。この時点で、最終出力 PWM 周期が 20ms のままであることを確認するために、PWM 分周係数とリロード値を再計算する必要があります。簡単に言うと、ARR と PSC の 2 つのパラメータが新しいチップのクロックに基づいて再計算され、サーボが認識した信号を確実に受信できるようになります。

移植時のピンの割り当て方法

ピンを選択するときは、GPIO を見つけて接続するだけではありません。まず、ハードウェア PWM 出力ピンである「」機能を持つピンを探す必要があります。ハードウェアPWMを使用する利点は、CPUリソースを占有せず、パルス出力が非常に安定し、サーボがスムーズに回転することです。通常のGPIOを使ってディレイ機能を使ってシミュレーションするとCPUが消耗してしまい、プログラムが少し複雑になるとタイミングが狂いやすく、サーボが確実に振れてしまいます。

ピンを選択した後、プログラムの初期化部分で GPIO 動作モードを多重化プッシュプル出力に設定する必要があります。これは、このピンに役割を割り当てて、「PWM 信号を出力する責任があります」と指示するようなものです。さらに、元の回路基板にはプルアップ抵抗があり、新しい回路基板にはプルアップ抵抗がない場合は、信号の干渉を避けるためにアイドル時にピンが特定のレベル状態になるように、コード内で内部プルアップを有効にするかどうかを検討する必要があります。

制御周波数の計算方法

周波数を計算するときに頭を悩ませる人はたくさんいます。実は簡単な方法があります。サーボに必要な PWM 周期は 50Hz、つまり 20ms 周期です。どのタイマーを使用する場合でも、目標は周波数を 50Hz にすることです。計算式は簡単です。タイマ出力周波数 = システムクロック / (PSC+1) / (ARR+1) です。まず PSC を 7200-1 などの都合の良い数値に設定し、次に ARR 値を逆にして、最終結果が 50Hz に近づくようにします。

たとえば、システムクロックが 72MHz で PSC を 7200-1 に設定すると、タイマーのカウント周波数は 10kHz になります。出力周波数を 50Hz にするには、ARR を 200-1 に設定し、200 個ごとの数値がカウントされるようにする必要があります。これは 20ms です。チップが異なればメイン周波数も異なるため、この考え方に従って計算すると、最終的に計算される ARR と PSC が両方とも整数になり、ARR がタイマーの最大カウント値を超えないようにすることができ、プログラムは問題なく実行されます。

マルチチャンネルサーボ移植のヒント

1 つのボードで複数のサーボを同時に制御したい場合は、タイマーのチャンネル数によって異なります。タイマには通常 4 チャネルがあり、各チャネルは独立して PWM を出力でき、周波数は共有されます。したがって、すべてのサーボが 50Hz で動作する限り、1 つのタイマーを使用して 4 つのサーボを駆動でき、タイマー リソースを大幅に節約できます。必要なのは、初期化中に複数のチャネルを構成し、それぞれの比較値を設定することだけです。

4 つを超えるサーボを制御する必要がある場合は、2 番目のタイマーを有効にする必要があります。移植する場合は、単一のサーボを制御するための初期化コードを関数として記述し、制御する必要がある回数だけ呼び出して、タイマー番号とチャネル番号をパラメーターとして渡すことができます。このように、コードの再利用性が高く、将来的にサーボがどれだけ追加されてもメンテナンスが容易になります。各チャネルのコンペア レジスタは独立しているため、デューティ サイクルを設定するときに個別に操作できることに注意してください。

コード移植後のデバッグ方法

プログラムは焼き付けられているのにサーボが反応しないのですが?心配しないで、最も単純なハードウェアから始めてください。サーボの電源とグランドが正しく接続されているかマルチメーターを使用して確認してください。サーボには高電流要件があるため、外部電源を使用する必要があります。開発ボード上の 3.3V で電源が投入できるとは期待しないでください。電源に問題がない場合は、オシロスコープやロジックアナライザを使用して、チップの端子に出力波形があるかどうか、周期やパルス幅が正しいかどうかを確認してください。

波形は正しいのにサーボが回らない場合は、コードロジックに問題がある可能性があります。最初に最も単純なテスト プログラムを作成し、1.5ms の固定ハイ レベルを出力してサーボを中間位置に戻すことができます。これをオンにできる場合は、基礎となるドライバーに問題がなく、問題は制御ロジックにあることを意味します。徐々に機能を追加し、少しずつ変更し、消去法を使用して問題をすばやく特定します。これは、自分で推測するよりもはるかに速くなります。

ステアリングギア機能の拡張方法

基本的な移植が完了したので、いくつかのトリックを実行できます。たとえば、サーボを特定の角度に回転させたい場合は、0 ~ 180 度を 0.5 ミリ秒 ~ 2.5 ミリ秒のパルス幅値にマッピングする角度変換関数を作成できます。こうすることで、複雑な時間値を覚えておく必要がなくなります。関数を直接呼び出して角度を渡すことができます。コードの可読性と移植性が大幅に向上し、他の人が一目でコードを理解できるようになります。

別の例として、ソフトウェア フィルタリングを追加して、サーボの「震え」を引き起こす制御信号の突然の変化を回避することもできます。実際のプロジェクトでは、センサーから送信されるデータには必然的にジッターが発生します。プログラムに単純な移​​動平均フィルターを追加してサーボに送信すると、動作がよりスムーズになります。これらの拡張機能を独立したモジュールにカプセル化します。次回他のプロジェクトに移植する際にも、この「蓄積」をそのまま利用することができ、開発効率が2倍になります。

サーボ移植プロジェクトはどこで行き詰まっていますか?ピンの構成が明確でないためですか、それとも周波数の計算が常に間違っているのでしょうか?あなたの経験についてコメント欄にメッセージを残してください。この記事が役立つと思われる場合は、「いいね!」を押して保存してください。さらに実践的なケースやコード テンプレートについては、当社の公式 Web サイトを検索してください。

更新時間:2026-03-29

未来に力を与える

お客様の製品に適したモーターまたはギアボックスを推奨するには、Kpower の製品スペシャリストにお問い合わせください。

Kpowerにメールする
お問い合わせを送信
WhatsApp メッセージ
+86 0769 8399 3238
 
kpowerMap