ステッピングモータ・サーボモータ・DCモータの違いと使い分け|配線図とPicoサンプルコード付き

目次

はじめに

モーターを使った作品を作ろうと思ったのですが、モーターの種類を自分が理解できていないことに気づきましたので、改めて記事にしました。

モーターの比較

3つのモータの特徴をまとめました

種類得意なこと苦手なこと制御の難易度追加部品代表例
DCモータとにかく簡単に回す/速度制御(PWM)角度・位置決めは苦手★☆☆MOSFET、Hブリッジ、ダイオード扇風機、ポンプ
ミニ四駆
サーボモーター
(RCサーボ)
角度指定・その角度を保持連続回転は専用品が必要★★☆特になし
電源は別でとる
ラジコンの操舵
ロボットの関節
ステッピングモーター何ステップ回したか=位置
(オープンループで位置決め)
負荷が重いと脱調(ズレても気づかない)★★★ドライバ必須3Dプリンタ、カメラスライダー

動作原理

DCモータ:電圧(平均)=回転の強さ

DCモータは基本、電気を入れると回ります。
速度を変えたいときは PWM(オン/オフの割合)で平均電圧を変えるのが定番です。

ただし、GPIOに直結はNG。モータは大電流+逆起電力(サージ)が出ます。
そのため トランジスタ/MOSFET+保護目的のダイオードが基本セットになります。

サーボモータ:「目標角度」と「今の角度」を比べて勝手に合わせる

RCサーボの構成部品は以下です。(結局DCモータが入っていますが)

  • 小型DCモータ
  • 減速ギヤ
  • 角度を読む部品(ポテンショメータ)
  • 制御回路
    これらで、角度フィードバックしてくれます。

制御は50Hz(周期20ms)のPWMで、パルス幅(1〜2ms付近)が角度になります。

ステッピングモータ:コイルを順番にONして“カクカク”回す

内部のコイルに順番に電流を流して回します。
「何パルス(何ステップ)動かしたか」を数えることで位置が分かる、という発想です。

こちらもGPIO直結はNGで、ドライバ必須です(電流が大きい)

使い分けの実戦ルール

DCモータを選ぶべきケース

  • 扇風機・ポンプ・車輪など「回ればOK」
  • 速度制御ができればOK(PWM)
  • コスト・部品点数を最小にしたい

サーボモータを選ぶべきケース

  • 0〜180°のように角度で決めたい
  • 負荷が変わっても「狙った角度に戻したい」(フィードバックが効く)

注意:サーボは電源が弱いとガタつきやすいので、Picoの5Vから取るより別5V電源+GND共通が安定

ステッピングモータを選ぶべきケース

  • 一定量だけ正確に動かす(例:毎回「10mm送る」)
  • 3Dプリンタ/CNCのように、位置決めを繰り返す
  • 低速トルクが欲しい(ギヤ付きも強い)

注意:負荷が重いと脱調してズレます(ズレても気づかない)。必要ならリミットスイッチ(原点)やエンコーダで対策が必要になる。

サンプルコード

PWMで制御する方法を紹介します。過去に紹介したものはリンクを張っておきます。

DCモーター

(外部電源 +Vmotor) ----+----[ DC Motor ]----+----(MOSFET Drain)
                       |                    |
                       +----|<|-------------+
                            Flyback diode
                            (カソードを+側)

(MOSFET Source) ---------------------------- (GND)
(Pico GND) --------------------------------- (GND)  ※共通GND

(Pico GPx PWM) --[100Ω]--(Gate)
(Gate) --[100kΩ]--(GND)  ※プルダウン
from machine import Pin, PWM
from time import sleep

pwm = PWM(Pin(16))          # GP16 -> MOSFET Gate
pwm.freq(20000)           
pwm.duty_u16(0)

def set_speed(percent: int):
    percent = max(0, min(100, percent))
    pwm.duty_u16(int(65535 * percent / 100))

# 0%→100%→0%
while True:
    for s in range(0, 101, 5):
        set_speed(s)
        sleep(0.1)
    for s in range(100, -1, -5):
        set_speed(s)
        sleep(0.1)

サーボモータ

ステッピングモータ

混乱ポイントしやすいポイント

PWMという言葉は同じでも、中身が違います

DCモータ:PWMのデューティで速度を変える

サーボモータ:PWMのパルス幅(1〜2ms)で“角度”を指定する

ステッピングモータ:PWMというよりパルス列(何回打ったか)で“どれだけ動いたか”を決める

まとめ

ミニ四駆からEV、ロボットまでモータが使われている製品は無数にあります。仕組みを理解して楽しく使いましょう。次は手持ちのDCモータを動かしてみます。(電池つなぐだけ??)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次