ステップモーターを試してみました。バイポーラ編

今回はステップモーターのバイポーラ編です。

ストロベリーリナックスで発売されているこちらのドライバーL647012V4相のステッピングモータを使用しました。

なんでもこのL6470は細かな操作ができるようでかなり高機能のようです。

配線とプログラムは「北の国から電子工作(仮)」さんの物をそのまま使用しました。

ただ、void L6470_setup()の部分はドライバーの説明書に一緒に購入したステップモーター用の設定の数値が載っていますのでこれを書き換えました。

プログラムはL6470のライブラリーをインストールして使ってみました。なんとか動くのですが・・・・・。コマンドなども調べて色々試してみるのですが何かしっくりこない・・・誤作動が多い感じです^^;多分私の数値の調整や配線が悪いのかも・・・・。

さらに一番欲しい、スピードとステップ数を指定してのコマンドも無くて、多分色々なコマンドを組み合わせて作ればいいのでしょうが分からん^^;

かなり高機能なドライバーとのことなのですが、逆に高機能すぎてついていけないw

3、4日このソフトで悩んでいたのですが、諦めましたw

 

てな事で次のドライバーを探すことに。

先ほどの大きなモーターよりも模型に内蔵できそうなこちらのモーター

でテストを進めていくことにしました。

まずは家にあったDRV8835をテスト

取り扱い説明にあるプログラム

で稼働させてみるのですが・・・・・微妙に動いたり動かなかったり・・・・

それに妙にモーターが発熱して来ますwこれもやばそうなので却下^^;

どうしよう〜と思いながらネットをさまよっていると

A4988というドライバーが配線も簡単で使いやすそう^^。

アマゾンのこちらで購入

早速「programresource-netさんのこちらの記事」を参考に配線を行い、プログラムもそのままコピペでAccelStepperライブラリを導入後動かしてみました。

ちなみにモーターとドライバーの配線は少し悩みましたが上の写真左上付近のような配線色の並びでうまく動くようになりました。

おおっ!動く動く!!バイポーラ型の駆動テスト始めてようやく満足のいく動きをしてくれるようになりました!

よし、これならとこのプログラムを元に少しいじっていくのですが・・・・・・・。

あれw全然動かないw私のプログラムミスなんだろうなと色々やってみるけどダメ・・・。

それならとあらゆる部分を削って行ってプログラムミスの原因を探すのですがそれでも見つからない・・・・。最終的には提示してくださっているちゃんと動くプログラムの一番最後の行のstepper1.runSpeedToPosition();の後ろにdelay(1000);とディレイ関数を入れるだけでも動かないことに気がつきましたwえ〜〜何で???結局わからず^^;

そもそも、AccelStepperライブラリーの理解もしていないし・・・と思いこれの勉強を始めるも挫折w

またまた、ネットをさまようことにw

するとこのA4988というドライバーは2本の線でarduinoと繋がっているのですが、それぞれの役目が1本はLOW,HIGHで向きを決めるだけ、もう一本はHIGH→LOWの1パルス送るとステップモーターが1ステップ動くというすごく単純な構造のようです。この記事が載っていたブログを見失ってしまいました・・・・。

配線はそのままで、上記の言葉通りのプログラムを書き込んでみました。

いやなにこの単純なプログラムはw LEDの点滅ではないんだからwこんなのでステップモーターが動くわけないじゃ・・・・・・・・むちゃくちゃ快調にステップモーター回っていますwwすごいぞA4988!!

ただむちゃくちゃ快調すぎてモーターが発熱してきました。

こんな時は電流量が多すぎるらしいのでドライバー上の緑矢印部分のスクリューを反時計方向に動かします。

いっぱいまで動かすとモーターの回転が止まりますので、今度は時計回りにこのスクリューを回してモーターが綺麗に回転する最低限の電流の位置に調整します。

これを行うとモーターの発熱がなくなりました。

おおっ!これは簡単なドライバーだ!5個で1000円しないくせにすごく使いやすいw

てなことで上記のプログラムを元に簡単なプログラム書いてみました。

(半分以上が説明文というw)
スピードの数字が大きくなると遅くなることに注意してください。

これを動かすと(途中の状態から動画が始まっています^^;)

てな感じで向き、スピード、ステップ数を指定しての動きができるようになりました!
ちなみにこのモーターも1:41の減速ギアーが組み込んでありますのでそれほど高速が出せません。

それなら一番最初のモーターも!と動かしてみると

ちょwL6470ではあれだけ苦労したのに・・・・無茶軽快に動いていますw

もちろんスピードの変更はしていますが、これはいい^^。

このプログラム程度ならarduinoにこだわらなくてもAVRのATtiny13Aとかでも実行できるのでスペースの節約もできそう。

よし、バイポーラ型はこのA4988のドライバーとプログラムで動かすことにしよう^^
ちなみにこのドライバーはフルステップ、ハーフステップ、1/4ステップ、1/8ステップ、1/16ステップと細かくコントロールできるようなのでより滑らかな動きができるそうです。
自作のいろいろさんのこちらの記事」に乗っていました^^

これで、ユニポーラ、バイポーラ型のドライバーとプログラムが決まりましたので、大概のアマゾンのステップモーターは動かせそうです。

それにしてもステップモーターて、配線やプログラムが合っていても、色々な要件で脱調して動かないとか結構繊細なんだな〜感じました。

ただ、これを使いこなせると、通常のギアードモーター+リミットスイッチの組み合わせや、サーボの代わりとなる動力源として色々と便利になりますよね〜。がんばろ^^。

 

関連すると思われる記事:

18 comments

  1. こんばんは!
    もう寝よかと思ってたらこんな爆弾記事が(笑)
    最初はぐぬぬ!となってましたが、中盤から、なんかできそう!って思えてきました。
    ユニポーラに続いて、各種実験とその考察がとても参考になります。ありがとうございます。ステップモーター、予想外に?便利そうですね
    このA4988のシンプルなインターフェースすごくよいです。6jiroさんおおっしゃるようにライブラリに頼らずに簡単に制御できそう。さっそく5個セットをアマでポチリましたw

  2. こんにちは
    ステップモーターの実験が本格的に進んでいますね!
    これまた、本格的な科学実験! まずは、ちゃんと動作するところまでこぎつけて、よかったです。
    DRV8835は、2系統内蔵のDCモータードライバなので、ステップモーターに使うには、ちょっと厳しいかもしれませんね。
    A4988は、じつは私も昨年にライントレースカー製作時に購入していました。(まだ実験していませんが)
    6jiroさんに先行実験していただき、大いに参考になります。ありがとうございます。
    あっ、そうそう、発熱の件ですが、ステップモーターはご存知の通り、電磁石と同じです。
    加えた電力は、磁石に使用されたエネルギー以外は熱になります。
    例えば、6Vで10Ωの場合、固定した状態で連続通電すると、電流は、0.6Aながれ、Wとしては、
    6Vx0.6A=3.6w (最大で)
    結構な熱量になります。

  3. なおさん こんばんは!
    夜遅くにも関わらず、ありがとうございました!
    バイポーラ型A4988なら簡単に動かせそうでしょ〜。ただ、欠点も有ってコマンドを与え続けないといけないんですよね〜。マイコンに他の仕事をさせようと思うとちょっと不便です^^;タイマーとかで動かす手もありますが、複数となるとタイマーが足りなくなるかもですね^^;
    まっ、大して難しいコマンド送信しているわけでないので、このA4988を操る専用の小型のマイコンとかを別で用意してメインのマイコンから始動命令だけ送るてな感じでマイコンの数で勝負でもいいかもですw
    ステップモーターはほんと便利そうなのですが、あとは大きさの問題ですよね・・・小型のものは結構トルクがなくて・・・・・もう少しいろいろ探ってみようかなと思っています^^。

  4. Vividさん こんばんは!
    どうにか動いてくれてよかったです^^。
    私程度の知識ではなかなか難しかったです。
    VividさんもA4988購入されていたのですか〜。さすがですね〜。
    ・・・・・初めからVividさんに相談していたらあっさり結果まで到達できていたのかもw
    まっ、ここまでの過程をいろいろと楽しみましたので良かったとしておきましょう^^。
    DRV8835は通常のモーターで使用していますので、使い慣れているのですが、ステップモーターに初めて使ってみましたが、全然ダメですね^^;さらに言えば、あの説明書のプログラムで動くとも思えないのですが・・・・・。
    なるほど〜!ステップモーターて結構電力消費大きのですね〜。あの電流調節しないとかなりな温度になっていました^^;電流調整ようのネジがあるのもアナログでわかりやすいかも^^。

  5. 今回は無茶苦茶勉強になりました!
    メイン記事だけでなく、Vividさんのコメント欄までも!

    ずっと待機しているだけで電力消費しちゃうんですね。
    ということは、展示会でモバイルバッテリー駆動していると、
    3000mAhクラスのものでは、何もしなくても1時間持たない可能性があると・・・?

  6. gyoさん こんばんは!
    少しは有益な情報ありましたかね^^;?とりあえずはVividさんのコメントが一番有益であるますw
    あっ!消費電力ですが、ステップモーターの待機トルク必要なければ電源の供給を切ることができますので、プログラムで対応できますのでその辺についてはご心配なく^^。

  7. こんにちは
    たびたび失礼します。
    ステップモーターって細やかな角度制御にサーボの代わりに使えるのかなぁ?と思い始めてます。電力考えなければ保持トルクが大きいとかも魅力です。
    ただ、サーボのように絶対角(相対ではなく)を管理するにはやはり+αでリミットスイッチのようなセンサーを併用しないと無理なんでしょうかね?
    壁掛け時計とか、電池入れたら勝手に12時に戻るので、そういう仕組みもありそうな気もしつつ、、、
    自分で調べて実験しろって話だと思いますが、もしご存知でしたら教えてください。

  8. なおさん こんばんは!
    あっ!そうか!ギミックに仕込んだあと動かしている途中で何らかの原因で電源が切れると、相対位置の可動ではギミックの動きがおかしくなってしまいますね・・・。ギミックの動きが変になるくらいならいいですが、最悪壊れちゃいますもんね・・・・。
    流石なおさん!気がつきませんでした^^;

    絶対位置についてですが、この記事にあるL6470では位置記憶や絶対位置回帰とかのコマンドがあるのですが、電源が切れてもその位置を記憶しているのかは不明です。

    プログラム的にはステップ数を数えておけば0ポイントはわかりますのでEEPROMに常に位置を書き込むとか・・・・・(ちなみに私の能力だとできませんがww)
    やはり、おっしゃるようにリミットスイッチを1つ取り付けてそこを絶対位置にするようにして、初期化の際にそのスイッチを押す方向に動かして絶対位置を決めるとかのほうが簡単そうですね。

    今思えば、アシェットのトムキャットやファントムのギミックでステップモーター使っているのにリミットスイッチが付いていた理由がわかりました^^

  9. 三度お邪魔します。こんばんは
    早速のご指南ありがとうございますm(_ _)m
    なるほど、ドライバにそういうコマンドが用意されているものもあるのですね。そこは使うものによって色々と方言があってデータシート読んで実験してが必要なのでしょうね。私もEEPROM使うとか全く未踏の地でとてもとても。。。www
    トムキャットとファントムもリミットスイッチ+ステップモーターの構成だったのですか。製品レベルの品質確保にはそういうフェイルセーフは必要なのかもしれませんね。いろいろとありがとうございます、かなり予備知識ができました。私も自力で少し勉強してみます。

  10. なおさん こんばんは!
    いえいえ!こちらこそ色々と気づきを与えてくださり感謝です^^。
    ちなみにL6470のデーターシートはこちらです。
    http://www.ne.jp/asahi/o-family/extdisk/L6470/L6470_Rev7_DSJP.pdf
    親切な方が日本語に訳して公開してくれています。
    ステップごとにEEROMで記憶というのもあるかもしれませんが、EEPROMの書き換え回数上限てどのくらいなんでしょうね~。1回転で2048ステップとかだとあっという間に書き換え上限超えそうな気もしますw
    トムキャットとファントムを見本にやはりリミットスイッチを1でもつけての可動が安全かもしれませんね。確かにトムキャットでも翼を開いたまま電源コードを抜くと次に電源を入れた時には必ず閉じる動作していました。多分ステップモーターの初期位置を決めるためにリミットスイッチを押しに行っていたんでしょうね~。

  11. 前の記事への書き込みですみません。
    皆さんがどんどん新しい技術を身につけて進んでいるのに自分はまだこんな所で躓いておりまして…(;-_-)
    PICの初期設定などの”お作法”も満足に身についていないので、どうしてほぼコピペで利用出来るプログラムに頼ってしてしまっているのですが、半年以上経ってもどうしてもL6470での制御が安定しないので、6jiroさんのこの記事の”まるでLチカ”同様に制御出来ると書いてある12行のプログラムを参考に、入手したTMC2208とL6470で使用していたPIC 18F2xK22を使って動かそうと試みたのですがステッピングモーターが全く動きません(T_T)
    PICの初期設定はクロック64MHz動作設定、全てデジタル出力、使うポート(ポートB)は内部プルアップにして以下のような感じ(主要部分だけの抜粋ですが)にプログラムを書いてみたのですがなにか根本的なところが違っているのかもしれません。
    この部分を6jiroさんが見て何かおかしなところがあるでしょうか?
    #define _XTAL_FREQ 64000000 // delay用に必要(クロック64MHzを指定)
    #define LAT_B4 LATBbits.LATB4 // RB4用にPIC18用のLATレジスタを使用
    #define LAT_B5 LATBbits.LATB5 // RB5用にPIC18用のLATレジスタを使用
    // 回転方向を決定(RB5)
    LAT_B5 = 1 ;
    while(1){
    // 回転パルスを決定(RB4)
    LAT_B4 = 1 ;
    time_ms(500) ;
    LAT_B4 = 0 ;
    time_ms(500) ;
    }
    ※PICでは__delay_msで大きな数字や変数が使えないようなのでネットで見付けた変数化させる方法(time_msを定義して__delay_msを繰り返す)を利用しています。

  12. yangminさん おはようございます!
    時間の単位が違いま~す。
    ミリ秒でなくてμ秒です。
    そのせいで脱調している物と思われます^^

  13. へ!?
    単位が!!??
    ホントだマイクロだ(汗)
    朝早くからすみません、返信ありがとうございますm(;_ _)m

  14. こんばんは。
    勘違いしていたディレイをμsに直して数値を(300) (500) (5000) (30000) (50000)と色々変えてみたのですがモーターはウンともスンとも言わずでどれも回転しませんでした(T_T)シクシク
    試しにPICの信号出力ピンにLEDを接続してみるとディレイの数値が小さい時はほぼ点灯しているようにしか見えませんが、ディレイの数値が大きくなるほど目視で確認できる程LEDの点滅がチカチカしてきていたのでPICからの出力は無事にされているようなんですが・・・。
    TMC2208が5個あるので3つほど試してみたのですが結果はどれも同じでした。
    何がダメなんだろう(;+_+)

  15. yangminさん おはようございます!
    PICの方は専門外でよくわかりませんが、とりあえず出力は出てると考えると、
    あとはTMC2208の電流調節ネジをいじるくらいですかね・・・・
    それとステップモーターの配線も確認しておいてください。
    モーターによっては配線のグループわけが、A、Bのグループに分けられてるものが有りますが、
    このドライバーでは1,2のグループわけとなっています。

  16. こんにちは
    度々の返信ありがとうございます!

    ちなみに自分の購入したTMC2208ですが電流調整用ポテンションメーターがピン側(裏側)からじゃないと回せなかったんですけど6jiroさんのはどうでしたか?
    しかも、わざわざ調節用のプラスドライバーが付属しているのに合わなくて全く使えないという(;^^)
    こういう場合、ポテンションメーターは裏から見て左回りで減、右回りで増と解釈して良いんでしょうねぇとか色々心配になってしまいます(苦笑)

    モーターグループはL6470の時もそうですがA1 A1 B1 B2 だったり1A 1B 2A 2Bだったりと散々くらっているので大丈夫だと思うんですが・・・。

    パルス送出のμsディレイ間隔ですが、もっとモーター毎に計算などで割り出さないとダメなんですかねぇ。
    他にも2021-06-20の6jiroさんの記事のでも教えてもらっていますが、データシートも見てenableをlaw(gnd)接続でモーター出力有効、high(5v)で出力無効ということでgndにしてもいるのですが・・・。

  17. yangminさん こんばんは!
    うむ・・・・なんでなんでしょうね・・・・
    簡単に回せるはずなんですけどね・・・・
    PICの方ですがLATレジスタを使わないで、通常の出力でテストしてみました?
    それと、全く関係ないかもしれませんが、外部クロックですか?周波数を少し下げてみるのもどうでしょうか?
    もしどうしても分からないようなら、モーターとドライバー送ってもらったらテストしてみますよ。

    ちなみに、うちのTMC2208も基板に穴が開いていてそこからマイナスドライバーで回せるようになっていますw

  18. 6jiroさん、こんばんは!
    クロックは内部クロックで、そんなに高い必要は無いのでは?
    と思って8MHzに変更後の結果でなんです。

    LATレジスタは18Fシリーズ特有のレスポンスの良いレジスタのようで、良かれと思ってやって通常のPORTレジスタは試していないので後で試してみます。

    自分のTMC2208も穴は空いているのですが、ピンと反対側に凹みやスリットが無く、そこからマイナスドライバーでポテンションメーターが回せるようになっていなかったんですよ(困)

Leave a Reply

メールアドレスが公開されることはありません。

wp-puzzle.com logo