garypippi.net

28BYJ-48でBB弾リフト機構を試作

2026/08/18 22:58#pippitank

前回: 自作ラズパイ戦車で床を走る
お試しではありますが、床を走れることはわかったので、砲塔まわりに着手しています。
今回はステッピングモーターでBB弾を砲塔へ送るための機構をお試し制作してみました。

垂直スクリューコンベアで6mmのBB弾をリフト

砲塔スペースは狭いことが予想されるので、車体側にマガジンスペースを設けて、砲塔へ送る構想です。
砲塔は360°回転したいので、20mm中空スリップリングの中を通してBB弾を送る想定でお試し制作しました。

  • ユニポーラーステッピングモーター: 28BYJ-48 (5V)
  • 駆動IC: TBD62083APG
  • コンデンサ: 0.1μFのセラコン、100μFの電解コン
  • マイコン: Raspberry Pi Pico
  • 5V電源: LTC3111モジュールにエネループ4本で確保

スクリュー設計

スクリューは外径16mmまでで設計

  • コア径: 4.0mm
  • 羽幅: 5.7mm
  • 羽の根元幅: 2.0mm
  • 羽の先端幅: 1.2mm
  • 羽の傾き: 20°
  • ピッチ: 9.5mm

筒とマガジン設計

  • ID: 16.0mm
  • OD: 19.5mm

筒をスリップリングに通して回す想定なので、BB弾置き場を車体に固定すると給弾口の接続まわりの難易度が上がってしまうので、筒と一体型で制作してみました。
筒のまわりにくるくる坂を設ける形。

  • 羽幅: 7mm
  • 羽の根元幅: 1.0mm
  • 羽の先端幅: 2.0mm
  • 羽の傾き: 20°
  • ピッチ: 8.5mm

給弾窓とリフトまわり

  • 窓幅と形状、スクリュー形状によっては詰まりが発生
  • BB弾がスクリューと共回りして上昇しない

問題があったので、1つずつ解決を図りました。

給弾窓

大きすぎると、複数弾でつっかえるみたいでしたので、ギリギリを攻める形。
また、窓の切り抜き部分に傾斜をつける。
(ハイライトされてる2線の距離は6.2mmぐらい)


スクリューの下部分は、弾がいりこむ個数をなるべく1つになるよう、無駄な隙間を埋めました。

筒にスリットを入れ、BB弾を独立して上昇させる

筒の内側に

  • 幅: 5.2mm
  • 深さ: 1.25mm

程度のスリットを3本程度入れることで、BB弾をトラップして安定して上昇させる。

これで手回しテストでほぼ詰まりが無くなったので、ハウジング等を作り、電動化しました。

ユニポーラーステッピングモーターの制御

  • モーター: 28BYJ-48 (5V)
  • 駆動IC: TBD62083APG

TBD62083は、秋月をサーフィンしてたら丁度よさそうだったのでポチり。
8chなので、砲塔旋回にも使えるし、28BYJ-48駆動で定番といわれているULN2003よりちょっと高価だけど低損失みたい。
表面実装もあるので、基板設計時の組込想定でもあります。

回路の概要図

  エネループ×4 (4.8V)
       |
  +----+-----+
  | LTC3111  |  昇降圧DC/DC 1.5A
  +----+-----+
       | +5V レール
       +---------+---------+------------------+-------------------+
       |         |         |                  |                   |
      _|_       _|_        |                  |                   |
      ___ 100uF ___ 0.1uF  |            pin10 COMMON        赤 (COM tap)
       |  電解    |  セラ   |                  |                   |
      GND       GND        |         +--------+-------------------+--------+
                           |         |   TBD62083APG (DIP-18)              |
  +------------+           |         |                                     |
  | Pico       |           |         |                          28BYJ-48   |
  |            |           |         |                      +--------------+
  |       GP2  |---------------------| I1 (1)     (18) O1 |--| 青 Blue  相A |
  |       GP3  |---------------------| I2 (2)     (17) O2 |--| 桃 Pink  相B |
  |       GP4  |---------------------| I3 (3)     (16) O3 |--| 黄 Yellow相C |
  |       GP5  |---------------------| I4 (4)     (15) O4 |--| 橙 Orange相D |
  |            |                     |                    |  +-------------+
  |       GND  |---+                 | GND (9)            |
  +------------+   |                 +---------+----------+
       |           |                           |
     USB (5V)      +---------------------------+---- 共通GND (必ず1点に集める)

Picoのスケッチ
とりあえずまわれば良いのでAIにおねがいして作成。

// BBフィーダー(オーガ)駆動 28BYJ-48 ステッピングモーター ベンチ確認用スケッチ
//
// 目的: まず「回るか」だけを確認する最小版。一方向・定速。
// 駆動: TBD62083 (8ch シンクドライバ) 経由、full-step 2相励磁(トルク重視)。
//
// 配線 (Pico GPIO -> TBD62083 input -> output -> モーター相線):
//   GP2 -> I1(pin1)  O1(pin18) -> 青 Blue   (相A)
//   GP3 -> I2(pin2)  O2(pin17) -> 桃 Pink   (相B)
//   GP4 -> I3(pin3)  O3(pin16) -> 黄 Yellow (相C)
//   GP5 -> I4(pin4)  O4(pin15) -> 橙 Orange (相D)
//   TBD62083 COMMON(pin10) -> +5V (モーター赤線 COM と同じ +5V)  ← 繋ぎ忘れ厳禁
//   TBD62083 GND(pin9)     -> 共通GND (Pico GND / LTC3111 GND と1点結線)

// Pico GPIO -> 相A/B/C/D。物理的な巻線隣接順に並べる。
constexpr uint8_t COIL_PINS[4] = {2, 3, 4, 5};  // A, B, C, D

// full-step 2相励磁シーケンス。各行 = その step で励磁する相(常に2相ON)。
// 1回転 = このシーケンスを (2038 / 4) ≒ 510 周ぶん進める。
constexpr uint8_t SEQ_LEN = 4;
constexpr uint8_t STEP_SEQ[SEQ_LEN][4] = {
    {1, 1, 0, 0},  // A + B
    {0, 1, 1, 0},  // B + C
    {0, 0, 1, 1},  // C + D
    {1, 0, 0, 1},  // D + A
};

// 1 step あたりの待ち時間 [ms]。大きいほど低速だがトルク余裕大。
// 3ms/step -> 約333pps -> 出力軸 約10rpm(pull-in >500pps 内で安全側)。
// 回りが渋ければまず 4~5ms に上げて切り分ける。
constexpr uint32_t STEP_INTERVAL_MS = 3;

// 28BYJ-48 の実効ステップ数/出力回転(公称2048、実ギア比で約2038)。
constexpr uint32_t STEPS_PER_REV = 2038;

uint8_t seq_index = 0;
uint32_t step_count = 0;

// 指定行の励磁パターンを4相へ出力。
void apply_step(uint8_t index) {
    for (uint8_t phase = 0; phase < 4; ++phase) {
        digitalWrite(COIL_PINS[phase], STEP_SEQ[index][phase] ? HIGH : LOW);
    }
}

void setup() {
    Serial.begin(115200);
    for (uint8_t phase = 0; phase < 4; ++phase) {
        pinMode(COIL_PINS[phase], OUTPUT);
        digitalWrite(COIL_PINS[phase], LOW);  // 起動時は全相OFF(無励磁)
    }
}

void loop() {
    apply_step(seq_index);
    seq_index = (seq_index + 1) % SEQ_LEN;  // 正転。逆転は -1 側へ回す。
    ++step_count;

    if (step_count % STEPS_PER_REV == 0) {
        Serial.print("rev = ");
        Serial.println(step_count / STEPS_PER_REV);
    }

    delay(STEP_INTERVAL_MS);
}

COMピンについて

TBD62083のCOMピン繋ぎわすれがあるとIC壊れますよと何度もAIに念押しされました。
COMピン経由で、コイルが流し続けようとする電流をループさせて消滅させる経路をつくっておかないといけない、という理解。

これで10分程度動かしてみましたが、詰まりは発生してなかったので試作完了です。
速度は5秒に1発ぐらいで、遅いのですが許容範囲。

次回

20mm中空スリップリングが届いたので、砲塔旋回試作です。