前回でI2C自体の稼働は確認できましたので、今回からそれぞれの機能の調整に入ります。
電源は前回ご紹介したリポ電池です。
ご存じのようにI2Cのスレイブには番号が振ってあります。
今回のバルキリーでは
8・・・・・・左足 arduino
9・・・・・・右足 arduino
10・・・・・・モーター類、DFPlayer用 arduino
11・・・・・・ライト類,DFPlayer用 XIAO
12・・・・・・スラスター用 XIAO
てな感じでナンバーを振りました。
今回はおそらく一番の難所となりそうな10番のモーター類、DFPlayer用のarduinoの調整からです^^
まずは、エルロン!
コマンドと逆の動きしますwww
こんなのは序の口wプログラム書き換えて一発オッケーでした^^
色々な動かし方をしても問題ないようです。
次、主翼開閉のステップモーター!
ここは動きさえもしませんww
コマンドはロジアナで確認。問題なしです。
テスターでarduinoの端子の電圧を測るとプログラム通りに端子は出力をしています。
となるとAttiny13Aの部分での問題か・・・・・・・
arduinoの端子の数の問題で少しプログラムを改変したのでその部分が問題なのかな~??
とりあえずは一番単純な電源が入ったら一定方向に動くというプログラムを流し込んで確認することに。
・・・・・・・・・・・動かないww
となると配線?しかしこの部分の配線は変わっていないし・・・・・
となると電源。
リポ電池充電したもの使っていたんですけどね・・・・エルロンの可動を少ししたくらいなのにもう電池切れ???そう思いながらも電池交換してみると動き始めましたw
なんだよ~と思っていたのですが・・・・・・・
・・・・・・・・むっ・・・・・なんか危険な匂いがし始めた・・・・・
何処だ!!!???
動かしていないのにステップモーターが異常な加熱をww
なんだなんだ??急いで電源用のリポ電池を引き抜きましたw
ステップモーターが冷めるを待って、モーター部分分解して定電流電源に接続。
電流量を確認。
可動時約0.4A
結構喰うのねw
停止時
約0.5Aってww稼働時より電流くってんじゃんかww
ステップモーターは停止時でも回転角度維持のために電流を流しますが、流れ過ぎでしょww
これなら電池すぐ無くなるのも、発熱するのも当然ww
ドライバー基板にある電流調整ネジを最小にしても全く効果なしwてか最小でもステップモーター動いてるしw動いてはいるけど壊れてるのか??
なにはともあれ、停止時にモーターへの電流を切る必要が有ります。
そこでこのステップモータードライバーであるA4988について再度ネットで検索
(ちなみにこのドライバーの使い方について以前書いた記事はこちらです。)
あった!無視していたENABLE端子がそれで、ここをHighにするとモーターへの電流供給が止まるようです。
うむ・・・・・・やり方はわかった。だがどこからそのHighの信号送る???
Attiny13Aの端子はすべて使い切っていますw
それにA4988の電流調節ネジが全く効いてない感じだし・・・・・。
あ~~~っもう!!
配線外してこの部分は基板作成しなおしw
Attiny2313でのドライブとしました。プログラムも修正。端子も余りまくりなので、ついでにステップの変更も出来るように配線だけしておきましたwwプログラムはしていませんw
yangminさ~ん!AVR用ですがプログラム載せておきます。ピンの設定とかが違うだけであとはそのまま移植できませんかね?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
/*/===================================================== ステッピングモータードライバーA4988用 ======================================================== -----------使用モーター----------------------------------- https://www.amazon.co.jp/gp/product/B072HZG9Y9/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1 モーターステップ15度 1周24ステップ ギアー比 1:41 軸1周ステップ数 24X41=984ステップ -------------配線----------h----------------------------- アシェットVF-1 主翼開閉ステップモーター 1B 黄色 1A 赤色 2A オレンジ色 2B 黒 SLEEPとRESETのピンを接続 VMOT モーターの電源(5V1Aで可動確認) GND モーター電源のマイナス GND GND VDD 5V DIRECTION PB4 STEP PB3 ENABLE PD6 MS1 PB0 MS2 PB1 MS3 PB2 MS1 MS2 MS3 L L L Full Step H L L Half Step L H L Quarter Step H H L Eighth Step H H H Sixteenth Step ------------関数---------------------------------------- moveto(int v,int steps) v回転スピード 500~15000位まで 数字が小さいほど回転が速くなります。 step 移動させるステップ数 マイナス数字の場合は反時計回り 通常の数字なら時計回り -------------------------------------------------------- とりあえず動いたら電流調整ネジを反時計回りに回して最小の電流で稼働させるようにする。 */ #include <avr/io.h> # define F_CPU 8000000UL #include <util/delay.h> int p0=1,p1=0,p2=0,s; void delay_us(int time){ for(int i=0;i<=time;i++){ _delay_us( 1); } } void movetoP0(int v,int steps){ PORTD&=~(1<<PD6); if(steps<0){PORTB&=~(1<<PB4); steps=-1*steps;} else{PORTB|=(1<<PB4);} for(int i=0;i<=steps;i++){ PORTB|=(1<<PB3); delay_us(v); PORTB&=~(1<<PB3); delay_us(v); if (~PINB & 0x20) {PORTB&=~(1<<PB1);p0=1;p1=0;p2=0; break;} } PORTD|=(1<<PD6); } void moveto(int v,int steps){ PORTD&=~(1<<PD6); if(steps<0){PORTB&=~(1<<PB4); steps=-1*steps;} else{PORTB|=(1<<PB4);} for(int i=0;i<=steps;i++){ PORTB|=(1<<PB3); delay_us(v); PORTB&=~(1<<PB3); delay_us(v); } PORTD|=(1<<PD6); } int main(void) { DDRB =0b00011111;//PB0:MS1 PB1:MS2 PB2:MS3 PB3:step PB4:direction PORTB =0b11100000;//PB5:limit PB6:SW2 PB7:SW1 DDRD =0b01000000;//PD6:ENABLE LOWでモーター可動可能 PORTD =0b00000000; movetoP0(900,1600); while (1) { //sw1:ポジション2 sw2:ポジション1 if (~PINB & 0x80 && PINB & 0x40){//P1 if(p0==1){s=1;} if(p2==1){s=2;} } if (~PINB & 0x40 && PINB & 0x80){//p2 if(p0==1){s=3;} if(p1==1){s=4;} } if (~PINB & 0x40 && ~PINB & 0x80){ //p0 if(p1==1){s=5;} if(p2==1){s=5;} } if(s==1){moveto(900,-600);s=0;p0=0;p1=1;p2=0;}//p0-p1 if(s==2){moveto(900,1000);s=0;p0=0;p1=1;p2=0;}//p2-p1 if(s==3){moveto(900,-1600);s=0;p0=0;p1=0;p2=1;} //p0-p2 if(s==4){moveto(900,-1000);s=0;p0=0;p1=0;p2=1;}//p1-p2 if(s==5){movetoP0(900,2000);s=0;p0=1;p1=0;p2=0;} //p1-p0 } } |
これで停止時の電流は当然0となりました^^
さらに稼働時の電流も0.3A程度まで減少出来ました。やはり電流調整ネジ壊れていたのかもねw
発熱も無くなり安定しました。
ちなみにリミットスイッチは霊験あらたかな、げんぶつ合わせ教に則りアームを削って調整w
次はラダー。
ここもまた変な動きww
右には動くけど左には動かない。
2本の信号線で左右の判断しているのですが、要は1本が信号を出していない状態。
これは答え簡単w
プログラムを確認 OK
配線を確認
やはりお前かww
黄色のサーボ可動用の信号線と、グレーのサーボスピード用の信号線がこのコネクター部分で入れ替わっていましたw
これを修正して、よしこれで可動だな!
あれ???それでも左に動かない!!なぜだ~!!(簡単と言ってたでしょwww)
arduinoのD2,D3をデジタル出力で可動用の信号線として使ってたのですが、テスターで端子を調べると
プログラムでD2がhighの時は
D2=====5V
D3=====0V
でそのままなのですが、
プログラムでD3がhighの時は
D2====約 3.1V
D3====約1.8V
となっていますww
何じゃこりゃw?????意味わからんw
そういえば、以前tone()関数を使っているとD3ピンのanalogWriteが正常に動かない事あったな~。(こちらの記事です。)
でも今回はdigitarWriteだしな・・・・。うむ意味わからんw
よしD4端子に切り替えて速度調整用の端子をD3にしてAttiny13A側の速度調整は無視しちゃえw
てなことでラダー可動端子をD2とD4に切り替えたら正常可動するようになりましたw
でもそうなるとD3端子と関係が有るD11端子も心配になるな・・・・・・
D11端子はDFPlayer用のTX端子として使用しているんだけど、念のためTXをD10にしてRXをD11に変更しておきましたw
結局原因は分からずですwww
とりあえず、これで動翼のチェック終了~!
I2C(10)のチェックはまだ続きますww
関連すると思われる記事:
- None Found
なんか動かすことを内部ですべて統括しているけどひょっとしてラジコン化したほうが話が早いような気がするのは気のせい?
元々の制御を一括して内部に収めようとするあまり本格的な機体になってますけど
各サーボをBluetoothか、無線LANで外部コントロールしたらかなり簡略化出来そう。
てな意見ですが、軽くなった分きっとジェットエンジンとか積めるし万々歳!!
てつのさん こんばんは!
そうだね~wラジコン化した方が早いかもですねww
何チャンネル必要なんだろうw
なるほど~制御部分を外に持ってくるという事ですね~!
つまり本体には動力系のみにしてプロポの方に制御系のプログラムを入れてしまうと。
それもいい案かもしれませんね~。
ただその動力系だけでも相当な配線になりそうですがね^^;
Bluetoothも一つのコントローラーからいっぺんに何個もつながると便利なんですけどね~
まっ、それでもデモとかやるのに微妙なタイミングとか取るのには配線がつながっている方が安心ですからww
軽くなってもジェットエンジンは積みませんよwww本当に燃えちゃうwww
mega2560入れちゃう?w
ステッパモータの停止過熱はみんじおホスの時もありましたね。
止まってるのにアッチッチ。
実は私もいろいろなサイズの極小ステッピングモーター仕入れてあるので、
色々参考にさせていただきます^^
メカトロウィーゴちゃんに仕込んでみようかなと。
gyoさん こんばんは!
う~ん。
megaの小さい奴でも意外と大きくてスペースないんですよね・・・・・
それと一番の問題はサーボとか動かすのにその一点だけが動くのでは困るんですよね・・・・
同時に何か所もサーボ以外も動いてくれないと・・・・そうなるとやっぱプログラムが複雑になりすぎるのとモニターとの連携のための通信のタイミングがタイマー割り込みやピン割込みが有ると優先順位とか決めるのが難しくなるので私には無理かな・・・・
ステップモーターのアッチッチ事件ありましたねww
あれも電流止めているつもりが止まってなかったwww
極小のステップモーター減速ギアとか入っていない奴はとにかくトルク無いから注意ですよ~w
こんばんは!
まぁ、制御(プログラム)の問題がでるのは当たり前ですよね。サクサク解決していってるところがさすが6jiroさんです!D2端子とD3端子の挙動は不振ですね。ハードが壊れてるってことはないでしょうから、なんらか制御の問題なんでしょうけど。D2=H、D2=Lができてることからショートでもないし。D2=L、D2=Hの時に端子がHi-Z設定(電流ドライブOFF)になっちゃってるとかだとその挙動もわからんでもないですが、、、、ライブラリが噛んでるからよくわかりませんね。PORTに直接書き込んでもダメなもんでしょうか?ま、解決してるからもういっか。
燃えなくてよかったです(意訳:チェッw)
こんばんは!
お~進んでいますね! 流石、トラブル対応に論理的に取り組まれていますから、一つ一つ手順を追っていけば、道は開かれますよ~ 信じる者は救われる。(笑)
ステップモータドライバのネジの事、思い出しました。あれで電流を調整しておかないと火事の原因になりますから。
それにしても、この写真に写っている配線のスパゲティシンドロームは凄すぎます。
これ6jiroさん以外、いやご本人さえ、もう何が何だかわからないのでは?
配線記録とっていますよね?
なおさん こんばんは!!
何とか力業で解決していってますw
前回言っていたようにもう不具合の塊ですよww
D2とD3端子は謎ですw私も初めはショート疑ったのですが、どうやら問題は簡単で花曽佐応ですw
そういえばあのarduinoは取り換えたので機器の呼称かどうか、時間がある時にもう一度テストしてみます。
基本は放置ですねwww
Vividさん こんばんは!
ちょっとだけVividさんチックにロジアナ使ったりして理論的ポイ感じで修正していたのですが、D2,D3端子の問題は手に負えず放置になりましたwww
ステップモーターのネジは、どうやら最初の物は壊れていたみたいで全く効果ありませんでしたw
アレッて反時計回りに一杯に回るとステップモーターの回転も止まるはずなんですが、快調に動いてましたww電流制限全く効いてなかったんでしょうねww
配線ですよね・・・・記録全くとっていませんwww
とりあえず、今は覚えていますが、これは後程写真と文章でブログに保存しておこうと思います。
この配線の記録をちゃんとしていないから、次回のブログで面倒に巻き込まれますwww
さすが予言者Vivid!!!