2026-04-28 DCモーター風ブラシレスモーター(その2)

「GA24Y-2430」と「GA24Y-2418」には5ピンのコネクタ(SH ?)があり、4本繋げば動作する。 一般的なDCモーターと異なり、駆動用電源のプラス・マイナスを逆接続しても動作しない

  • 黒:駆動用電源プラス
  • 赤:駆動用電源マイナス
  • オレンジ:モーター回転方向制御
  • 白:モーター速度制御。負論理のPWM指定。arduinoなら analogWrite(PIN, 255) で停止し、analogWrite(PIN, 0) で最高速となる。
  • 残りの1本(黄)は、回転速度の確認用。

自分の購入したものは、片側が配線済みのコネクタ付属で、細い線に心配したが、消費電流が少ないため、特に問題なく動作している用に見える。回転数が近い以下で動作確認した。

GA24Y-2430 12V版 ギヤ比16:1

  • 無負荷時:375rpm、0.18A
  • 定格負荷:300rpm、0.5A、0.6Kg.cm
  • ストール時:2Kg.cm、1.9A

GA24Y-2418 24V版 ギヤ比25:1

  • 無負荷時:360rpm、0.1A
  • 定格負荷:304rpm、0.2A、0.8Kg.cm
  • ストール時:2.5Kg.cm、0.86A

1モーターあたりPWM出力が1本、デジタル出力が1本なので、ATMEGA328Pでも4モーターを動かす事ができる。 その1の動画では次のような回路で4モーターを制御した。(黄は未使用)

DCモーター風ブラシレスモーター(その1)

aliexpressなどで、遊星ギヤボックスとの組み合わせで販売されているDCモーター風のブラシレスモーターがある。

precisionminidrives.com

precisionminidrives.com

「GA24Y-2430」と「GA24Y-2418」という型番で、どちらもギヤボックス部分は遊星ギヤで、

  • 出力軸は4mmか6mmのDカットシャフト
  • 対応電圧は12Vと24V
  • 2430のモーターについてはマブチモーターの「RE-280」と大体同じサイズでモーター長が約30mm、2418はモーター長が約18mm

一般的なブラシレスモーターと異なり、モータードライバ内蔵のため、マイコンからの信号線は直結で動かすことができるのが特徴で、aliexpressのショップでは1つ2,000円ほどで販売されている。 なお、GA24Y-2430と同サイズで「GA24Y-370」という型番もあるが、こちらは一般的なDCモーターになっている。

内部構造は正確かどうかは分からないが、コチラ「https://ja.aliexpress.com/item/1005009554914369.html」で確認できる(「さらに表示」で開く)。

PD20Vで最大1.5Aの「Xiaomi 33W Power Bank 10000 (Integrated Cable) 仕様、機能 | Xiaomi 日本」を動力源にGA24Y-2418 を4本搭載したロボットの動きがこのような感じで、比較的トルクもあるように思う。

BNO055のyaw軸の問題

こちらのブログでBNO055の問題点を知った。

l52secondary.blog.fc2.com

yaw軸の問題については同様に体験していたので、クォータニオンについていろいろ調べてみたが、よく理解できなかったため、とりあえず先のブログのコードを参考にクォータニオンで値を取得し、オイラー角に変換してみた。改善したように思うが、それでもずれるときはずれるみたい。

旧版C-Style Ver.190706で動作確認してみた。 「C:\Daisen\C-Style for TJ3B V190706\Build\Build_V190617\D_I2C.c」の「UINT get_bno(BYTE dno)」を次のように書き換えると試せる。 (注意)以下のコードは無保証です。

UINT get_bno(BYTE dno)
{
    BYTE adrs = BNO_ADRS;
    BYTE n;
    U_UINT d;
    float wf, xf, yf, zf, ysqr, t0, t1, t2, t3, t4;
    int xd, yd, zd;
    // DSR1603:9D-Compass(BNO055)の初期設定
    if (gIsSetDSR1603 == false) set_bno();
    /*
     * BNO055 datasheet
     * https://cdn-shop.adafruit.com/datasheets/BST_BNO055_DS000_12.pdf
     * 3.4 Axis remap 
     * 3.6.5.5 Orientation (Quaternion)
     */
    n = 0;
    gI2C_Buf[n++] = 0x20; // Register 0x20:AZIMUTH(LSB-MSB), 0x22:ROLL(LSB-MSB), 0x24:PITCH(LSB-MSB), 0x26:PITCH(LSB-MSB)
    if (i2c_send(adrs, n) == false) return(gDeg[dno]);
    if (i2c_recv(adrs, 8) == false) return(gDeg[dno]);
    //
    n = 0;
    d.L = gI2C_Buf[n++];
    d.H = gI2C_Buf[n++];
    wf = (int) d.W;
    d.L = gI2C_Buf[n++];
    d.H = gI2C_Buf[n++];
    xf = (int) d.W;
    d.L = gI2C_Buf[n++];
    d.H = gI2C_Buf[n++];
    yf = (int) d.W;
    d.L = gI2C_Buf[n++];
    d.H = gI2C_Buf[n++];
    zf = (int) d.W;
    wf /= 16384; // 2^14
    xf /= 16384;
    yf /= 16384;
    zf /= 16384;
    /**
     * クォータニオン→オイラー角変換は以下を参考にした
     * http://l52secondary.blog.fc2.com/blog-entry-50.html
     * センサモニタ
     * 0(dir(yaw)), 1(pitch), 2(roll)
     * yaw   :左向359←0→1右向
     * pitch :前下がり90←180→前上げ270
     * roll  :右下がり0←90→右上がり180
     */
    ysqr = yf * yf;
    // X-axis rotation
    t0 = 2.0 * (wf * xf + yf * zf);
    t1 = 1.0 - 2.0 * (xf * xf + ysqr);
    xd = (int)(atan2(t0, t1) * 57.2957795131) + 180; // オリジナルとオフセットを揃える
    xd = (xd + 360) % 360;
    gDeg[1] = (UINT) xd;  // pitch
    // Y-axis rotation
    t2 = 2.0 * (wf * yf - zf * xf);
    if (t2 > 1.0) {
        t2 = 1.0;
    } else if (t2 < -1.0) {
        t2 = -1.0;
    }
    yd = (int)(- asin(t2) * 57.2957795131) + 90; // オリジナルと向き・オフセットを揃える
    yd = (yd + 360) % 360;
    gDeg[2] = (UINT) yd;  // roll
    // Z-axis rotation
    t3 = 2.0 * (wf * zf + xf * yf);
    t4 = 1.0 - 2.0 * (ysqr + zf * zf);
    zd = (int)(- atan2(t3, t4) * 57.2957795131); // オリジナルと向きを揃える
    zd = (zd + 360) % 360;
    gDeg[0] = (UINT) zd;  // yaw
    return(gDeg[dno]);
}

ばらせないオムニホイール(その2)

前回からの続き。

Fusionで作成したデータをボディごとに「メッシュとして保存」でSTL化すると、パーツが多い場合にスライサー側での位置合わせは不可能といえるので、1データをまるごとSTL化する。

まずは新規デザインを作成。

新規デザインに先ほど作成したデータをドラッグ&ドロップ。

初期位置は適当にOKする。印刷向きはスライサーでも変更できる。

ドラッグ&ドロップしたデータがコンポーネントとして作成されるので、それを「メッシュとして保存」し、STL化する。

スライサー(Bamboo Studio)で保存したSTLを開き、印刷向きは自動調整。

レイアウトも自動で調整。A1 miniだと柱に近い位置にレイアウトされる。

あとは適宜印刷。

ばらせないオムニホイール

ばらせないオムニホイールについて呟いたところ、興味のあるかたが複数おられるようだったので、作り方をまとめてみた。

使用したツール類

スケッチ1

オムニホイール全体の大きさを決める用のスケッチ作成。オムニホイール直径は切りよく50mmとする。 ついでにホイール固定用の取り付け穴の位置なども入れておき、サブホイールの配置に邪魔にならないかの判断ができるようにしておく。

スケッチ2

作業をしやすくするため、スケッチは適当に分割する。 サブホイールの数、サイズを決める用のスケッチ作成。 とりあえずサブホイールは切りよく直径10mm、厚み2mmとし、サブホイールは20個で進める。

サブホイールの軸中心に外接ポリゴンを配置。オムニホイール半径が25mm、サブホイール半径が5mmになるから外接ポリゴン半径?は20mm。

サブホイール1つ分の設計をし、それをパターン配置で結合して全体を作るようにするために、中心とポリゴンの頂点を結ぶ三角を作る。

メインホイールを直径46mmとすると、サブホイールが2mm飛び出す。 先の三角の辺をメインホイール外周まで延長。 サブホイールを支えるシャフト部分の直径を切りよく2mmとしてみる。シャフト部分の長さは隣と当たらないよう、また隣と仕切れるような長さにしておく。3Dプリンタのノズル径より細かい造形はできないものとしてサイズを決める。

サブホイールとサブホイールが収まる空間は外接ポリゴンの辺を軸に「回転」で作る。 サブホイールのホイール部とシャフト部を適当にトリムで整理し、オフセットでサブホイールが収まる空間も作成。 とりあえずオフセット量は0.3mmとした。オフセット量は召喚して動きを見ながら調整する。

サブホイールが収まる空間部分を適当に調整。 サブホイールの外周部分がメインホイールに接触するとサブホイールの回転がスムーズにならないので、当たらないよう空間を拡張しておく。

適当に面取り。 回転でボディを作る場合、軸から片側分(今回は左側)があればよいので、反対側の調整は省略。

スケッチ3

スケッチを作成する面を変えて、メインホイール作成用にスケッチ追加。

メインホイールとサブホイールが印刷時の底面に接するような形状にする。 セットカラーを使ってモーターに固定する場合、干渉しないことを確認する。 点線が直径10mmのサブホイール

先のスケッチの位置関係。

メインホイール

スケッチは終了して、回転でメインホイール作成。 作成後ボディは一旦非表示にしておく。

メインホイールにサブホイールが収まる空間を作る。 スケッチ2を表示し、サブホイールと隙間部分を選択し、回転でコマ状のボディを作成。

円状パターンでサブホイール個数分複製。

メインホイールのボディを表示し、結合で(1)ターゲットボディにメインホイール、(2)ツールボディに先のコマ状ボディ、(3)操作に切り取りを選択。

セットカラーに固定するための穴を開けてメインホイール完成。

サブホイール

回転でサブホイールの1つを作成。

円状パターンで複製。

仕上げ

適当に面取りしてとりあえず印刷用データは完成とする。

(続く)