半導体設計民主化のための自作RISC-V SoC実践編

PicoRV32 と Wishbone で作る、フィジカルAI時代の実用オリジナルチップ

← 講義ポータルに戻る 実験並走記録 本章のRTLは骨格・未検証

第9章 モータードライブ ― フィジカルAIに「動く身体」を与える

前章で、私たちのSoCは耳(マイク)と口(スピーカ)を得ました。本章では、いよいよ動く身体――モーターを与えます。フィジカルAIの時代、ボードが現実世界に働きかける最も直接的な手段が、モーターです。ただしここには、これまでの章と同じはっきりした線引きがあります。FPGAは「どう動かすか」の信号を作るだけ。実際にモーターを回す大きな電流は、外部のドライバICに委ねる――この役割分担を土台に、DCモータ・ステッピング・サーボの3種を、設計判断とともに扱います。

本章の留保(毎章の約束+安全)。 掲載するRTLは骨格・未検証で、完全な動くコードと検証は専用ビルド工程へ回します(音声と同じく、現状の専用工程の先の設計)。加えて本章は安全上の注意が要ります。モーターは物理的に動き、力を持ち、思わぬ怪我や破損を招き得ます。電源・配線・逆起電力の扱いを誤ると部品やボードを壊すこともあります。本文では特定の部品・定格を断定せず、実際に作る際は使う現物(ドライバIC・モーター・電源)のデータシートを必ず確認し、保護回路と安全に十分配慮してください([改訂マーカー:使用部品・電源・保護])。

9.1 なぜ「足回り」なのか ― 身体に動きを与える

本講座の旗印は「ボードはフィジカルAIの身体、頭脳はネット越しのAI」でした。第8章までで身体には感覚(センサ・音声)神経(通信)が通いました。残るのは運動です。モーターは、AIの判断を現実の動きに変える出力装置――ロボットの車輪、アームの関節、カメラの首振り、バルブの開閉。ここを持つことで、本ボードは「見る・聞く・話す」から「動く」へと踏み出します。

9.2 鉄則 ― FPGAのピンから、大きな電流は流せない

最初に、絶対に外せない物理を確認します。FPGAのI/Oピンが流せる電流はごくわずか(一般に数mA〜十数mA程度とされる)で、モーターが必要とする電流(数百mA〜数A、起動時はさらに大きい)にはまったく足りません。ピンに直結してモーターを回そうとすれば、FPGAを壊します。だからあいだに「力の増幅器」=モータードライバICを必ず挟みます。

これは第3章・第8章と同じ線引き(著者の整理)。 第3章のPWMでLEDの明るさを作り、第8章でシグマデルタを外部アンプに渡したのと、まったく同じ発想です。FPGAは「制御信号(小電流・論理)」だけを出し、大電流のスイッチングは外部部品に任せる。本講座を貫くこの分担が、モーターでもそのまま効きます。FPGAでアナログRFが作れない(第6章)のと同様、大電力もFPGAの仕事ではない、という正直な線引きです。

9.3 Hブリッジとは ― 方向と速度を、外部ICに作らせる

DCモーターを「正転・逆転・速度可変」で回す定番回路がHブリッジです。4つのスイッチをH字に組み、電流を流す向きを切り替えることで回転方向を、オン/オフの比率(PWM)で速度を決めます。この大電流スイッチングを1チップにまとめたのがモータードライバICです。私たちのFPGAは、その入力ピンに「方向の2線」と「速度のPWM」を渡すだけで済みます。

 ┌──────── 我々のSoC(FPGA)=「神経」────────┐      外部ドライバIC      モーター
 │  PicoRV32 ── Wishbone ── motor_dc          │ ─IN1/IN2(方向)→ [ Hブリッジ ] ─→ ( DCモータ )
 │                (PWM=第3章の発想)         │ ─PWM(速度)────→ (大電流側)
 └────────────────────────────────────────────┘      ↑モーター電源(別系統)
   FPGAは小電流の論理だけ。力(大電流)は外部ICとモーター電源が受け持つ。

9.4 DCモータ ― PWM(速度)+方向2線

最も基本のDCモーターは、第3章のPWMをそのまま速度制御に再利用できます。新しく要るのは「方向の2線」だけ。これらを束ねた薄い制御ブロックを、Wishboneスレーブとしてバスに足します。

骨格・未検証
// motor_dc.v ― DCモータ1個分の制御(方向+PWM・骨格・未検証)
//   FPGAは「方向2線(in1/in2)+速度(pwm)」を出すだけ。
//   大電流のスイッチングは外部Hブリッジ・ドライバICが行う。
module motor_dc #(parameter W = 8) (
    input              clk,
    input              dir,        // 0=正転 / 1=逆転
    input      [W-1:0] duty,       // 速度(0..最大)。第3章PWMと同じ「比率で大きさ」
    output             in1,        // 外部ドライバへ:方向
    output             in2,        // 外部ドライバへ:方向
    output             pwm         // 外部ドライバへ:速度(enable をPWMで叩く)
);
    reg [W-1:0] cnt = 0;
    always @(posedge clk) cnt <= cnt + 1'b1;
    assign pwm = (cnt < duty);        // 第3章PWMと同じ比較。duty が大きいほど速い
    assign in1 = dir ? 1'b0 : 1'b1;   // 方向の2線。
    assign in2 = dir ? 1'b1 : 1'b0;   // ※両方0/両方1(ブレーキ/フリー)の作法はドライバ依存・現物確認
endmodule

※「速度の比率」と「実際の回転数」は別物(断定回避)。 PWMのデューティは平均電圧の比率であって、回転数そのものではありません。負荷・電源電圧・モーター特性で実際の速さは変わります。正確な速度が要るなら、エンコーダで実回転を測ってフィードバックする話になりますが、それは用途が求めた段で改めて設計します。ブレーキ/空転の作法(in1・in2 の組み合わせ)もドライバICごとに異なるので、現物のデータシートで確認してください([改訂マーカー:ドライバの真理値表])。

9.5 ステッピングモータ ― 角度を「数えて」動かす

ステッピングモーターは、コイルを順に励磁して決まった角度ずつ回ります。位置をフィードバックなしに「ステップ数で」制御できるのが強みで、プリンタや3Dプリンタの軸でおなじみです。制御の道は大きく二つあります。

STEP/DIR 方式(ドライバICに任せる)

専用ドライバICにSTEPパルス1発=1ステップDIRで方向を渡す。相の細かな励磁やマイクロステップはIC側が面倒を見る。FPGAは正確なパルス列を作るだけ。

相を直接励磁(FPGAで作る)

2相/4相の励磁パターンをFPGAで生成し、各相を外部のパワー段(Hブリッジ×2等)で駆動。仕組みは透明だが、配線も生成ロジックも増える。

※ドライバICの固有名は断定しません。 STEP/DIR方式のステッピングドライバや、DC用のHブリッジドライバには、よく知られた定番ICが複数ある、とされます。ただし定格(電圧・電流)・マイクロステップ分解能・保護機能・入手性は版や流通で変わるため、本文では特定の型番を断定しません。要求(電圧・電流・分解能)を言語化してから、現物のデータシートで選びます(第3章・序章の調達7ステップの精神。[改訂マーカー:使用ドライバの現物])。

9.6 サーボ(RCサーボ)― パルス幅で「角度」を指示する

ラジコン用などのサーボは、内部に位置制御回路を持ち、パルス幅で目標角度を受け取ります。これも第3章PWMの応用ですが、パラメータが違います。一般に約20ms周期(およそ50Hz)で、パルス幅およそ1〜2msが角度の端から端に対応する、とされます(具体値はサーボごとに差があるので現物確認)。

 サーボへのパルス(一例・値は現物で確認)
 ───────────────────────────────────────────────────────────────
   周期 ≈ 20ms(≈50Hz)
   ┌─┐                         ┌─┐
   │ │  パルス幅 ≈ 1ms → 一端    │ │
 ──┘ └─────────────────────────┘ └──   (幅 ≈ 1.5ms → 中央 / ≈ 2ms → 他端)
   └ 幅で角度を指示。FPGAはこの幅を正確に作るだけ(位置制御はサーボ内部)

周期と分解能が音声PWM(第8章)やDC用PWMと違うだけで、「カウンタとしきい値でパルスを作る」という芯は同じです。だから本講座では、PWM系の周辺を一族として捉え、用途ごとにパラメータ(周期・分解能・本数)を変えて使い回します。

9.7 【調達/自作の判断】信号は自作、力は調達

第3章の判断軸を、ここでも素直に適用できます。パルス・PWM・励磁パターンの生成は、単純で自分のメモリマップに密着=自作大電流を扱うドライバICは、外部の部品として調達(=買う)。アナログ/大電力はFPGAの外、という線引きが、そのまま分担になります。

 役割分担(モータードライブ)
 ───────────────────────────────────────────────────────────────
   自作(FPGA内・Wishboneスレーブ)   調達/外付け(部品)
   ・DC:方向2線+PWM                 ・Hブリッジ・ドライバIC(DC/双方向)
   ・ステッピング:STEP/DIR or 相生成  ・ステッピング・ドライバIC
   ・サーボ:20ms周期のパルス幅生成    ・モーター本体・モーター電源・保護部品
 ───────────────────────────────────────────────────────────────
   「どう動かすか」はFPGA、「力をどう流すか」は外部IC。境界が綺麗に分かれる。

9.8 電源と安全 ― ここを侮ると壊れる

モーターは、これまでの周辺(LED・通信・音声小信号)と桁違いの電流とノイズを扱います。正直に、注意点を挙げます(いずれも一般論で、断定はしません。現物で確認してください)。

9.9 FPGAの強みと、役割分担

ここでもFPGAの並列性が効きます。複数のモーターを同時に、それぞれ独立したPWM/パルスで制御できる――CPUの逐次処理では苦しい、多軸の同時制御が素直に書けます。ステッピングのマイクロステップ波形の生成や、正確なタイミングも、FPGAの得意分野です。

誇張はしません(旗印どおりの分担)。 本ボードが担うのは「正確に・並列に・低レイテンシで動かす」こと。一方、「どこへ動くべきか」の判断――経路計画、姿勢制御の高度なアルゴリズム、画像からの行動決定――は、RISC-V上のソフトや、ネット越しのAI(API)に委ねるのが現実的です。身体(FPGAの正確な駆動)と頭脳(ネット越しの判断)の分担は、モーターでも一貫します。

9.10 メモリマップに「モータ」を足す(設計案)

モータ制御も、これまでどおりWishboneに足します。ここで二つの設計案があり、これは判断です。

案ア:既存の再利用

速度は第3章PWM(0x4)、方向はGPIO(0x2)のビットで叩く。新規ハードを増やさず、第6章のmicroSD(SPI再利用)と同じ「持っているものを組み合わせる」発想。まず動かすのに最短。

案イ:専用ブロック

多軸・サーボ・ステッピングを本格的に扱うなら、専用のモータ制御スレーブを新ニブル(例:0xA)に新設。複数チャンネルのPWM/パルスを束ね、レジスタで一括制御。

 メモリマップへの追記(設計案。番地は実装で確定)
 ───────────────────────────────────────────────────────────────
   0x0〜0x9   既存(… UART2まで=M1〜M5)+ 0x9 音声(第8章・設計案)
   0xA 〜     モータ制御(多チャンネルPWM/STEP/DIR/サーボ)   ← 案イで新設(予約)
              例:+0 制御 / +4 方向 / +8 ch0 duty / +C ch1 duty …
 ───────────────────────────────────────────────────────────────
   ※ 1〜2軸の小規模なら案ア(PWM+GPIO再利用)で足りる。規模で案ア/案イを選ぶ。

9.11 【確認】この章の最小確認

モーターは安全が第一なので、負荷を軽く・電流を絞って、シミュ→FPGA実機の順に段階的に確かめます。

  1. DC(シミュ→FPGA)。 motor_dc に方向とデューティを与え、in1/in2/pwm が期待どおり出ることをシミュで確認 → ドライバIC経由で、低速・無負荷から正転/逆転/速度可変を確認。
  2. サーボ(FPGA)。 20ms周期のパルス幅を変え、サーボが端〜中央〜端へ動くことを確認(具体の幅は現物で調整)。
  3. ステッピング(FPGA)。 STEP/DIRで、指定ステップ数だけ回り、方向が反転することを確認。1回転に必要なステップ数を実測。
[改訂マーカー] 本章で実機実測して確定する値:使用ドライバICの真理値表・定格、サーボのパルス幅と角度の対応、ステッピングの1回転ステップ数・最大速度、PWM周波数、電源系統と保護回路、Pmod割り当て、追加後のFPGA利用率。完全な動くRTLと検証は、設計合意済みの専用ビルド工程でまとめて実施します。

9.12 この章のまとめ

これで身体は、見て・聞いて・話し・動くところまで来ました。次章は、感覚の最後の難関――カメラと表示です。帯域も処理も重い領域なので、何ができて、どこからが基板化・上位連携の話かを、正直に線を引きながら進めます――第10章:カメラ・表示