n_shinichi’s blog

日々の備忘録、 趣味のあれこれなど紹介 (すみません、メニュー、リンク、カテゴリー分けがうまくできてません、★記事一覧★で見てください...) NHK魔改造の夜ではDンソーのベテランアドバイザーってことで出ました♪

MENU

M5stack ATOMS3 ポート出力で2つのモータを独立して回す

先日、モータドライバを使わずポートの出力でモータを回すのが

思った以上に評判良かった。

 

教本などでは、

マイコンのポート出力は小さいのでモータは回すことはできない。

モータドライバが必要ってよく見かける。

 

最近何かと話題のチャットGpt先生に聞いてみた

すごいな・・・

 できないとははっきり答えない。"一般的に”とか”お勧めできません” って

 上手いこと言う。

 

この前、BLDCをモータドライバでステッピングモータのように回せるか聞いたら

 できないって言ったけど。

 自分はできたよって教えてあげた♪

 

そうなんだな。一般的は無理だ。

モータ回すと言っても出力はいたって小さいのだけど。

ざっと測って50mW くらいの電力消費。

 モータの出力は高いとこでもその半分の20mWくらいかな。

 

それの続き。。。

モータ1個動かすだけだとちょっとロボ的なことするにもつらい。

せめて2個はないとライントレースロボとかにするにもリモコン、ラジコン?

にするにもつらい。

 

なので2個を独立して回してみた。

 

回転速度が遅いと楽なところ。。。

割込みが必要ない。特にESP32なんか高性能だからポーリングでふつうに動かせる。

マイコンが高性能になったおかげでほんと超便利になった。

モータを回す理屈がわかってればなんてことなく

ソフトがすぐ書けて試せる。30年前のマイコンでは辛かった。

マイコンの仕組みをいかにうまく使うかしばらく考えてからでないと

とりあえず書き始めるなんてできなかった。

ソフトの設計・・・みたいなのが必要だったもんな。

 

動かしてみたのがこちら

 

 

 

 

3相ステッピングモータ・・・ BLDCをステッピングモータ風に動かす。

以前も3相BLDCをステッピングモータ風に動かしてみたことあるけど

小さなBLDC動かすには大げさな基板に載ったDRV8830とか

基板に載った東芝のモータドライバとかでした。

ちょっと

ATOMS3での小型ロボで使うにはかさばるもんだった。

 

ATOM-S3で使うように小さくまとめたものを試しにちょっと作ってみることにした。

モータドライバICではあるけど実際の使い方はただのパワーバッファとして使うのだけど。

モノはこちらのBL113

 

ロジックはこんな感じ

 

 

ピン配置の関係から使いやすいのは

IN1をVCCに接続してH固定でIN2を入力でOUT1を使った反転バッファ

out2は使わないので切る。なのでICは3個使う。

これまた仕様書にはない使い方・・・

 

 

サイズはSOT23なんでこんな感じ。

 

ちょっと写りが悪いので指に載せてみた。。。あまり変わらんか...

そこそこ小さい。けど、これくらいなら足にリード付けるのも簡単。

 

3個、足切って伸ばしたりリード付けやすいようにちょいと加工

3個重ねて・・・

 

拡大するとこんな。

 

リード線付けて、モータを繋いで、ATOMS3に組み合わせたのがこちら。

 

でもって動かしてみたのがこちら。

 

M5stack ATOM-S3 ステッピングモータをポート2つだけ使って回す ・・・トルク、そこそこある。

ステッピングモータ、3.3V電源で

 3レベルインバータ風におよそ1/2電圧で動かすので

 電流は小さい。モータの相抵抗が約30Ω、

 ポートの出力抵抗が何Ωかわからんけどけっこう大きいと思うけど

 単純に電源に繋いでΦ6ステッピングモータの動きを見てた感じからだと

 30mA程度かなといったところ。。。

 

以前の初音ミクちゃんカーではHブリッジで3.5V程度で動かしてたので

あれに比べたら投入電力は半分以下。

ステッピングモータは効率も悪いのでさてどんなもんトルクあるだろうか。。。

ということでよくやるテープ腕でのモータ起こしをやってみた。

これでモータを持ち上げるくらいトルクがあったらたぶん、

ATOM-S3に電池つけてモータ2つくっつけたらたぶん走れる・・・

 

でもって試したのがこちら。

前のミクちゃんカーみたいにフツーに置いたまま、、、リード線の重量もかかると

まともには動けなかったのでちょいとぶら下げて、

テープ腕で床を突っ張らせる動作をさせてみたのがこちら。



 ま・・・これならゆっくりなら走れるかな。。。って感じ。

 

M5stack ATOM-S3 で3レベルインバータ駆動で ステッピングモータをポート2つだけ使って回す ・・・ その2、アトムくん

せっかくなので回転数を変化させるようにしてみた。

とりあえずのテストは

そんなに速く回さないのでmax1000rpmくらいなんで

割込みも使わずやることまんまのべた書きで。

 

アトムくんの左上方のはただ背面の中性点LEDの様子を撮影するように

 100キンの太陽電池を鏡代わりに置いてるだけ。

LEDが2個代わる代わる光るのだけど

弱く、強く、弱く光ってる。。。 ここがポイント。

 

この時強く光ってる時は電気角45度で2相通電。

LED2相分の電流が流れVfが大きくなって3.3Vから

Vf引いた残りのコイルにかかる電圧が少し小さくなって、

1相あたりの電流が1相単独の時よりちょいと小さくなる。

これが上手い具合に合成ベクトルの電流値は1相単独と

似たような電流値になって電流ベクトルはハーフステップで

45度づつ回るけどほぼ同じベクトル電流になる。。。

でもっていい感じに滑らかに回る助けになってる。

 

void loop() 
{

    if(ph_No  > 7) ph_No  = 0;   // 0 - 7 
    if( millis() > (plus_t_old  + p_delay  ) ){ 
        ph_drive(ph_No);
        plus_t_old  = millis();
        ph_No++;   
    }

    if (millis() >  ms500){
      
        M5.Lcd.setCursor(30, 0);
        M5.Lcd.printf("%4drpm  ",rpm); 

        if(p_delay > 20 )  p_delay = (float)p_delay*0.95;
        else               p_delay = (float)p_delay*0.99;
        
        if(p_delay < 1 ) p_delay = 100;
        rpm = 60000 / (p_delay*40);
        if(rpm > 999) rpm = 999;
        
    ms500+=500;  
    }

}// loop_end

 

void ph_drive(int ph_No){ // step 0 - 7
    //ハーフステップ駆動 φ6ステピングモータの場合40ステップで1回転
    switch(ph_No){
        case 0:
           {pinMode(6,OUTPUT); digitalWrite(6,HIGH); pinMode(8, INPUT);                      break;}
        case 1:
           {pinMode(6,OUTPUT); digitalWrite(6,HIGH); pinMode(8,OUTPUT); digitalWrite(8, LOW);break;}
        case 2:
           {pinMode(6, INPUT);                       pinMode(8,OUTPUT); digitalWrite(8, LOW);break;}
        case 3:
           {pinMode(6,OUTPUT); digitalWrite(6, LOW); pinMode(8,OUTPUT); digitalWrite(8, LOW);break;}
        case 4:
           {pinMode(6,OUTPUT); digitalWrite(6, LOW); pinMode(8, INPUT);                      break;}
        case 5:
           {pinMode(6,OUTPUT); digitalWrite(6, LOW); pinMode(8,OUTPUT); digitalWrite(8,HIGH);break;}
        case 6:
           {pinMode(6, INPUT);                       pinMode(8,OUTPUT); digitalWrite(8,HIGH);break;}
        case 7:
           {pinMode(6,OUTPUT); digitalWrite(6,HIGH); pinMode(8,OUTPUT); digitalWrite(8,HIGH);break;}
        default: break;
    }

}

 

動かした様子がこちら

 

 

 

 

 

 

 

 

 

M5stack ATOM-S3 で3レベルインバータ駆動で ステッピングモータをポート2つだけ使って回す 

学校では教えてくれないモータ駆動の仕方だな。。。

ATOM3のスッテッピングモータ配線

 3レベル中性点をLEDのVfの非線形特性を利用して

 およそいい感じに電流ベクトルの大きさが一定で制御できるようにした♪

*************************************


最近のIoTマイコン、まだまだ使い方わかってない。。。

 IoTマイコンの技術進歩がすごいのしょっちゅう感じてる。

 

仕事じゃHV車のインバータ設計とかしてきたけど

 量産設計、忙しくやってると頭がガラパゴスになってるとこけっこうありそう。

 車載モノ、型が古いこなれたICモノよく使う。特に安全第一の走行系なんか。

   超安い。でもって品質が極められてる...?

 

ちょいと前から若い衆に最近のIoTマイコン進んでるから使ってみてって

ESP32関係、触り出してからは驚きの連続がまだ続いてる。

 激安であの高性能、ほんとすごい。

 

ポートが動的にモード切り替えれるの気付いてなかった・・・

 昔々のマイコンはポートの役割は決まってた。

 20年くらい前サイプレス、今はインフィニオンだったかな からPSoCが出て

 ポートの役割を動的に変えれるのがすごいなって思った。

 

でも、今はフツー?になってるなんて。

 

ESP32、Arduinoで pinMode(X,OUTPUT); pinMode(X,INTPUT);とか

setup()でフツー?設定するけど、それって 

そうじゃなきゃいけないってどっかで見たわけじゃないけど

setup()でしないといけないみたいに思い込んでた。

 

ふとこれって loop() の方でもできるんじゃね?って思った。

 まずコンパイルやってみた。 通るやん。。。

  書き込んでみた。エラーなんか出ない。

   ちゃんと動くじゃん!!!

スリーステートポートで使えるじゃん!

 

書く順番ちょっと間違えた。

  そもそもの始まりは小さいロボ、ステッピングモータをドライバ使わず

 いい感じで動かせないかな。。。が始まりだった。

 ドライバ使ってモータを回したりしてるとどうにもかさばる。

 でもって定格出力のほんのちょっとしか使ってない。

 

数cmくらいのミニカーロボとかならちょっと走らせたりとか

 するくらいなら数十mW程度の仕事で動ける。

ESP32のポートは約30m程度定常的に流せる。

  冷えてたらトータルmax1.2Aも流せる...

 

10g程度なら数十mWのパワーで十分動ける。

 M5 ATOM3は約7g

 

Φ6ステッピングモータでミクちゃんカー動かせてる。

 このモータの相抵抗が約30Ω

こいつをポートでフツーに動かすと3.3Vなら約100mA流れてしまう。

ちょいと大きい。PWM掛ければそれなりにいけるけど面倒。

30mAだと1v程度で動かさないといかん。。。

で思ったのがPSoCとかなら3.3Vの1/2電圧で動かして

簡単に3レベルいけるんだけど...だった。

ESP32も動的にポートをハイインピーダンスにできればなぁって思って、、、、あれ、

 

でも、ESP32のポートってsetupでピンモードを指定しておかないといけない...

 なんて見たことないぞ。ってふと思った。

  で、、、やってみようってなった。

 

そしたらできた♪♪♪  なんもおまじないもいらない。

スリーステート駆動できるやん♪

LEDでVfが2.3Vくらいので分けたら1Vで30mAっていけるやん。

 

おぉー そしたら車載、産業用の高級?モノと同じように

 3レベルインバータできるやん♪ Hブリッジなんかいらんくなる♪

 ポート2本でステッピングモータが全パターン駆動できるじゃん。

ポート叩くのにPWMで刻みも入れたら気の利いたベクトル制御もいけるな。。。

ちょうどいい感じのポート出力使い切りくらいでモータ駆動ができそう。

でもってやってみたのがこちら。

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

ハイテクミクちゃんカー  ・・・初音ミクちゃんカー改

初音ミクちゃんカー、

 ボディーにESP-01でラジコン化したモノを収めようと

 ダイキャストボディーの内側を削り込んでいたら

 それはそれで ハイテクミクちゃんカー ってことでいいんじゃない...?って

 ことになった。

 ラジコン、だけじゃなく自律走行とかもステッピングモーター使ってる

 もんで位置、速度とか決めた制御が割と簡単にできる。

 ESP8266使ってるのでこんなちっちゃくてもWebサーバーにもなるし。

 

なもんで初音ミクちゃんカー改造 1号機はまずは一旦これで完成ってことにした。

サイズ感的にはオリジナルより一回り小さい。

ちょっと拡大すると造作の雑なとこがバレるな...

 

 

レギュレータ使わずダイオードドロップで電池電圧をちょっと落としてるけど

手持ちのモノがちょっとでかい。

 

後ろから見た方がハイテクっぽいかな。

 

M5Atom-S3 思った以上にハマった・・・ けど一応は使えるようになった...

M5,Atom-S3 なんとか動かせた。

M5 Atom-S3 これまで売り切れの時がよくあって

 買ってみようと思っても中々買えなかった。



ここ最近、やっと落ち着いたのか売り切れじゃなくなったんで買ってみた。

ネットでは割とハマった...ってのよく見かけてた。

正規のライブラリはエラーが出るよ...とかいろいろ。

M5Unified.h 辺り使うのがよさそうってのが多かったので

その辺りの試すとエラー・・・???

 

いろいろ試してうまく動かない・・・よくわかんなくなってしまったので

フツー?にやったらどうなんだろうって正規のM5AtomS3.h試すと

Serialがらみのエラーが出る。

でもどうも正規のライブラリでエラーはSerialのとこだけっぽい。

 何が起きてるのかはよくわからんかった。

 

自分の使い方は無線にするのでUSBSerialはほとんど使わないから、

とりあえずライブラリのその部分をコメントにした。

そしたら通った♪

 

ま、しばらくはこれで様子見るかな。