TOP >
製作日記 >
4月
下の写真はクリックすると大きい写真が見れます。
なんだかんだで
昨年の7月以来半年以上更新してませんでしたが、皆さんいかがお過ごしでしょうか。
去年はあ〜んなことや、こ〜んなことがあって、久々の予選出場もでき、ジャンプもできて・・・というところで、時間が止まっております。
最近ようやく、やる気もチャージされたのでチビチビと再開しております。当面の目標は、芝浦工業大学の大宮祭に向けてがんばろうかと思います。4月の練習会は間に合わんかも。
ちなみに、ロボットは、胴体だけまともに存在していて、腕は片腕のみ装着済み。
SH/TINY (αP)
最後の設計で、マイコンの搭載場所について悩みましたが、腰内部に搭載するというマスマススペースのなくなるような設計をやらかしてしまったので、H8/3052F(秋月)では収まらなくなってしまいました。
で、H8/3069F(秋月)ならギリギリ入らないでもないのですが、厳しいです。3069を無理やり押し込もうとしていたとき、(〜長いので中略〜)まぁ、そんなこんなで去年の展示会にて入手したSH/TINYの小ささと性能が決めてになり、コイツでサーボを動かす事になりました。
そうは言っても、今まで使用していたDMACがないので、割り込みで32ビットPWMを作ることになります。現時点では、最大0.3°刻みでPWMを16chx2を作っています。ポートが足りないので、74HC541辺りのバッファICを使う予定。
プログラムの掃除もほぼ終わったので、コイツを柱にしてしばらくはコントロールボードに困らなくて済むようにしようかと。
基板の配置検討
PWM生成ルーチンもひと段落。現状のテスト基板にはその他機能を実験できるほどの機能も着いていないので、どうせ作るならロボットのマザーボードを作ったほうがマシかなと思い、部品の配置を検討。
部品の配置にはEAGLEを使ってみました。ただ、ライブラリに日本圧着端子(通称:日圧)がなかったり、48M05Fのような小さなレギュレータが無かったので、単列のピンヘッダを代用しています。解りづらいので、そのうちライブラリでも作ろうかと。
この基板の右の方にあるのがバッファICです。これだけだと16chしかPWM生成できませんが、その辺りの話は今後するとしましょう。SH/TINYの真下には加速度センサADXL311JE(ADXL202のアナログ出力のみ)と、EEPROMのAT24C1024があります。
他は、シリアル3ch(内2chは、SCKポートあり)と、A/Dが4ch、書き込み、電源(サーボの電源&マイコン用電源)のコネクタがそれぞれ着いています。
後は半田付けするのみ
今までは、適当に部品つけて配線していたので、結構痛い目を見ていたんですよね。EAGLEで配置して自動配線を使うと、複雑な配置も意外と行けたりするので、効率よかったかも。まぁ、基板を起こす訳ではないので、配線でどうとでもなります。それは、最終手段として取っておけば、結構綺麗に仕上がるかも。
さて、これから半田付けを行いますが、どのくらいでできるかな。今日中には無理かもしれないけど、結構早く仕上がるんじゃないかなと思っています。
EAGLEの配線図(パターン図)を見ながら
基板の配線を行っています。途中で外出していたというのもあり、なかなか進まず。しかし、実験基板よりもはるかに多い配線を半田付けできたので、効率は良いです。自分の場合は、こうやって図を作ってから配線する方が作業がはかどるみたいですね。
現状の進捗は、約70%ほど。残る作業はSCI0、SCI1、電源回路、電圧監視用の配線くらいです。完成すればEEPROM、加速度センサで遊ぶことができるようになります。
本当は圧電ブザーも付けたかったのですがスペースがないので断念。コネクタを配置するスペースもないので、空中配線でやるしかない。疲れていなければ、明日の夜には完成かな。
完成後の基板
ようやく完成です。ココだけの話、最後のチェックにて電源用端子のVCCとGNDが全て逆だった事が判明して配線しなおしたというのは秘密です。今まで作った基板の中でも良く配線できた方だと思います。
やはり、予めどう配線すれば良いか分かっているってのは効率いいですね。今後は面倒でもEAGLEにて配置を検討していくことにしよう。
さて、動作チェックについてですが、5V電源、マイコン用電源、サーボ用電源(A/D取得用)の配線のチェックをテスタにて行い、シリアル通信のチェックも行いました。マイコンは問題なく動作し、きちんと文字が表示されました。
ひとまず大丈夫そうです。
SH/TINYの裏側とか
SH/TINYの裏側はこんな感じです。EEPROMだけ取り付けてみました。加速度センサは半田付けし忘れたので、取り付けられず。まぁ、まずはEEPROMの動作チェックからなので、必要にはなりませんが・・・。
しばらくは、各種周辺機器の動作チェックで終わりそうです。書き込み回路も作らないとなぁ。(・_・ )
これらの話に全く関係ありませんが、写真取るためにデジカメを使おうとしたら電池がゼロ&デジカメ用電源ケーブルも行方不明で、探しだすのに苦労したことを付け加えておきます。OTL
設計ミス!?
書き込み回路を作る前に、加速度センサを取り付けようと思いコネクタを挿し、加速度センサを載せてみると・・・?SH/TINYの基板に接触することが判明。これは完全に設計ミスですね。本来ならば外に出さなきゃいけないのに・・・。
既に作ってしまったので、この状態でなんとかしなければ。LEDのジャンパ線を挿してみると結構良さそうなので、これを加速度センサに半田付けすることに。
ICソケットにLEDのジャンパを8本立て、加速度センサをICソケットに載せて半田がICソケットと加速度センサモジュールを接着しないように十分注意しながら作業を行った結果、なんとかなったようです。
プログラム上ではまだ確認していませんが、値がちゃんと取れることを祈りたい。
書き込み回路完成
大した回路じゃないけど、そこそこ時間がかかってしまった。DCジャック、電源スイッチ、書き込みスイッチ、リセットスイッチ、NMIスイッチ、各種コネクタだけなんですけどね。
黄色スイッチはNMIスイッチで、基板の都合上コネクタを用意できなかったため、配線はされていません。緑色スイッチはリセットスイッチでこちらは配線がされています。動作チェックしたところ問題なく動作。
書き込みスイッチも動作チェックしたところ書き込まれました。特に目立ったトラブルもなく、プログラム作成の土台は整ったようです。
早いところEEPROMと、加速度センサのチェックを終わらせないとっ。
秋月でSH2とSH/TINYマイコン
秋月の新商品をチェックしていたら、
SH/TINY(R5F71253)と
SH2/7144のCPUが単品で売られていた。秋月でこういうCPUが出る時は、新しいマイコンボードができる前兆だったりする。
どんなマイコンボードになるのかちょっとだけ期待かな。まぁ、出なければ基板を自分で起こすというのもありかもしれないですね。とりあえず今はアルファプロジェクトのボードがあるのでこれで遊びつつ、楽しみに待ってみる。
EEPROM動作検証完了
EEPROMのテスト完了。問題なく動作。いつもなら、SDAとSCLをどの端子に繋いだのか忘れたり確認作業が必要なのだが、今回はEAGLEで書いてあるため、確認作業は非常に簡単だ。
書き込み後のWaitの調整をして終了。今回のSH/TINYでは以下のように記述して3.5msec以上待機している。結構いい加減な値ですけど。(^^;
i = 0xffff;
while( i-- );
ラジコンサーボ繋いでみた
EEPROMもすんなりと動いてしまったので何をすればいいか一瞬分からなくなりましたが、幸いにもやることは多々あるので仕事を見つけるのは簡単。
まだサーボ繋いでなかったので、今回初めて接続してみようと思います。ただ、コネクタとサーボを繋げる手段が現状では皆無なので、ささっと変換コネクタ製作。基板製作の経験が生きて、今回は図面なしでもOKでした。
最初にサーボを一個挿して起動。1.5msecのパルスにより、90°の位置まで動作。その後角度を変更して遊んでいましたが、問題なさそうです。
次にもう一個繋いで動作させてみる。片方のサーボを動かしていると、もう一方のサーボがチリチリと震える(1°ではなく0.5°くらい?)
サーボを接続してないとそんな現象も起こらないんですけどね・・・ちょっとキニナル。
プログラムで20msecごとに1°増やす処理を実行しても特に影響なし。もちっと、詳しく見てみる必要がありそうです。
今後の予定でも考えてみる
作業を効率的に進めるために、ToDoリストでも書いてみよう。さて、何があったかな。
- A/D変換の処理(試験)
- 加速度センサのA/D取得
- 74HC541の増設(別基板)
- 16bit→32bitPWM出力試験
- シリアルコマンドによるデータの送受信
- モーションエディタの製作(アプリ)
- ジャイロセンサの搭載
- 加速度センサによるコマンド実行
- 無線コントローラ
- ロボットの足製作
- ロボットの塗装
うん、それ無理!(ぉぃ)
モーションエディタの製作がかなりへビィな気がする。来月に間に合わせるには難しいだろうから、エディタは何かで代用するしかないな。
他は必要な機能だし可能な限り実装する。無線は
コレにする予定。
来月のロボットフェスティバルが終わったら、エディタの製作も可能なはずだ。休日の作業でどれだけ消化できるかが鍵になるか。
A/D変換できました。
SH/TINYのハードウェアマニュアルを読むと、A/DトリガでA/D変換開始みたいな記述があったので、MTUもしくはタクトスイッチで操作しないといけないと思っていました。
でも、そういう機能も
あるというだけで、A/Dスタートフラグを1に設定すれば、変換してくれるみたいですね。トリガ機能はA/Dスタートフラグを自動で1に設定してくれる機能のようです。
解ってしまえば、あとは簡単でした。
void main(void){
unsigned int adat[4];
STB.CR4.BIT._AD0 = 0; // スタンバイモードの解除
AD0.ADCSR.WORD = 0x0013; // 4チャネルスキャンモード、チャネルセレクトAN0〜AN3
AD0.ADTSR.WORD = 0x0000; // トリガは使用しないが、念のために0クリア
while(1){
AD0.ADCR.BIT.ADST = 1;
while(!AD0.ADCSR.BIT.ADF); // A/D変換終了まで待つ
AD0.ADCSR.BIT.ADF = 0; // フラグクリア
adat[0] = AD0.ADDR0 >> 6; // 下位6bitには値が入らないので、
adat[1] = AD0.ADDR1 >> 6; // 10bitデータにするために6ビットシフト
adat[2] = AD0.ADDR2 >> 6;
adat[3] = AD0.ADDR3 >> 6;
}
}
最初試験したときに動かなかったので、なんだろうとちょっと読み返したら、スタンバイモードの解除ができていなかった。OTL
どうもH8時代の癖で見落としがちですね・・・スタンバイモード。しかしA/D変換ができたので、加速度センサ、電圧の値ももバッチリ読めました。加速度センサも無事に機能しているようです。( ̄▽ ̄ )
ちなみに、この加速度センサは50Hzで動作中です。20msecごとってヤツです。コンデンサが0.1uFしか手元になかったので、こうなってます。
今後の予定
- A/D変換の処理(試験) 完了
- 加速度センサのA/D取得 完了
- 74HC541の増設(別基板)
- 16bit→32bitPWM出力試験
- シリアルコマンドによるデータの送受信
- モーションエディタの製作(アプリ)
- ジャイロセンサの搭載
- 加速度センサによるコマンド実行
- 無線コントローラ
- ロボットの足製作
- ロボットの塗装
A/D変換終了割り込み
昨日に引き続き、A/D変換で遊ぶ。今回は、A/D変換終了割り込みもやってしまいました。ADCSRのADIEビットを1にセットし、ADSTを1にセットすれば、A/D変換の割り込みが終了するのと同時に値をゲットできます。( ̄▽ ̄)
その後、現在の電圧を0.1V単位で計算できるようにし、加速度センサのためにキャリブレーション機能も搭載してみました。しかし、初期化時に値を取ろうとすると0が返ってきてしまうので、しばらく待機しないとダメみたいですね。(-_- )
値が安定するまで待つ処理を加えたところうまく正常な値を入手できたので、加速度センサの値を±で保存することが可能になりました。
見せてもらおうか、秋月の加速度センサの実力とやらを
さて、せっかく値が見れるようになったので、垂直の時にどんな値がでるのか見てみることにしました。で、垂直に立ててみると?
0(0°)→58(90°)
ひょっとして、冗談を言っているのか?角度測れないじゃん。OTL
これでは、ロボットへの衝撃くらいしか計測できませんねぇ。オペアンプ増設するスペースもないし・・・。まぁ、この辺はジャイロに任せましょ。
倒れる時の加速度センサの値ってどんなの?
気になったので、調べてみた結果こんな感じの値が取れました。マイコンボードごと倒れるような軌道を描いた時のものです。
結構大きな値が取れるものなんですね。MAXで512が限界の中300辺りまでの値が取れてますからねぇ。ロボットに積んだら、各モーションの時の加速度とか計測してみたいなぁ。モーション製作の役に立つかもしれないし。
今は10msecごとにA/D変換を行い、4回分の値を平均化しています。一番古い値に新しい値を上書きする方式なので、40msecほど反応が遅れているはず。
そんなにノイズなどの影響を受けていないので、これくらいでも十分そうですけどね。でも、ロボットに載せたときの状態はまた違ったりするので、油断はできませんね。
今後の予定
- A/D変換の処理(試験) 完了
- 加速度センサのA/D取得 完了
- シリアル通信の割り込み化
- 74HC541の増設(別基板)
- 16bit→32bitPWM出力試験
- シリアルコマンドによるデータの送受信
- モーションエディタの製作(アプリ)
- ジャイロセンサの搭載
- 加速度センサによるコマンド実行
- 無線コントローラ
- ロボットの足製作
- ロボットの塗装
特に進まず。新たに、シリアル割り込みを予定表に追加してみました。
シリアル割り込み
シリアル通信を割り込み化してみた。送信側と受信側にそれぞれ256個の配列を用意して、リングバッファにした。char型のオーバーフローを利用した処理のため、if文などをほとんど使うことも無く簡潔に書けた。
さっそく使ってみたが、なかなかいい感じに仕上がっている。先日問題となった、サーボを動かすと、他のサーボが動くという現象も収まる。割り込みがかかった時に現在の作業を退避するのに時間がかかっているためパルス生成にも影響を及ぼしてしまったようですね。
今後の予定
- A/D変換の処理(試験) 完了
- 加速度センサのA/D取得 完了
- シリアル通信の割り込み化 完了
- シリアルコマンドによるデータの送受信
- モーションエディタの製作(アプリ)
- 加速度センサによるコマンド実行
- ジャイロセンサの搭載
- 無線コントローラ
- 74HC541の増設(別基板)
- 16bit→32bitPWM出力試験
- ロボットの足製作
- ロボットの塗装
ボチボチ、モーション作れるような手段を見つけないと・・・。24MHzだと115.2Kbps作るのが厳しいのが難点。(=_= )
変換装置を作らないとナ。
ホコリかぶっているH8/3069Fを使う
某エディタと接続するには通信速度の壁が立ち塞がるので、H8/3069FをPCとSH/TINYとの翻訳装置にすることにしました。なぜH8/3069Fかというと、配線が面倒だったから。(=_= )
H8/3069Fだと、電源コネクタは付いているし、SCI0,SCI1には3ピンのピンヘッダが出ているので、即使えるんですね。しかも、書き込みスイッチ(ディップスイッチですが)も付いているので、書き込み回路を作る必要もないというナイスな一品。
おかげで、テスト用のプログラムは1時間くらいで書き終えられました。処理は、115.2Kbpsを57.6kbpsに変換するというもの。一方向ではなく双方向ですよー。
STK-7125で作ったリングバッファ式のシリアル割り込みが役に立ち、そのままの形で移植ができました。(レジスタ名がちょっと違うのでその手直しくらい。)
USBシリアル二本接続して、動作検証完了。特に文字化けもしていないので、いけます!
せっかくのH8/3069Fをシリアル通信だけしかできないというのはもったいないので、色々機能を追加していこうかなと。モーションスタートスイッチとか、そのまま無線機の機能もつけてしまうとか、まぁ、いろいろやりようはあるかと。
4月24日 火曜日 タイトル: HtoHへ接続を開始
[眠い]
ポジション設定、読み込みを試す
もう気づいている方もいると思いますが、某エディタ(HtoH)と通信するためにH8/3069Fを使っています。通信がうまくいってそうなので、そろそろSH/TINYとコマンドのやり取りをやってみようと思います。
まずは、ポジションの設定から。いきなり送るのもアレなので、読み込みでデータを取りながら調整していきます。まだまだ通信関係の調整が甘く、HtoHからの通信をロストしたりタイムアウトエラーが起こったりすることも度々あり、調整に少々手間取りましたがなんとか動作!
ひとまず、24chを割り振ることに成功しました。各4chずつ余るんですけどね・・・今はこのままで行きます。
ポジション設定
昨晩動いたところで終わっていたので、もうちょっと遊んでみる。SH/TINY側が結構コマンドロストをしていたので、受信タイムアウトを増やしたところ、ほぼ100%でコマンドを受信し、角度が更新されるようになりました。
ただ、SH/TINY側に保存してあるポジションを読もうとすると、通信失敗してHtoHに反映されないんですよね。H8/3069Fのもう一つのシリアルを使ってモニタしたほうがいいかも。現状では、よく分からない・・・。
ホームポジション
ポジションが確実に更新されるようになったので、コマンドリストに載っている分の空の関数を用意しました。それに伴い、別ファイル化。ホームポジションの保存コマンドを実装して試してみると、電源を切っても値が保存されていました。
ただ、こちらもやっぱり読み込みのところで失敗しています。一体どんなやりとりがされているのだろうか・・・。次回はモニタできるようにしてやってみようと思います。(〓ω〓)
通信状況をモニタ
H8/3069Fはシリアルが3つあります。現在は、「HtoH ←→ AKI-H8/3069F」、「SH/TINY ←→ AKI-H8/3069F」となっているので、ここにもう一つ「PC ←→ AKI-H8/3069F」を加えました。
さっそくモニタしてみると、全て見えますよ!ごちゃ混ぜになってはいるけど、どちらの通信か解るレベル。これによると、HtoHから送られてくる量が少ない時は、SH/TINYから送る前にすぐ再送信しちゃうみたいですね。
でも、送られてきたコマンドは全て送り返しているので、ロストしている信号はなさそうです。なかなか優秀だ。ひとまず、これでデバッグしやすくなりそうです。
ホームポジションの読み込み
ホームポジションを読み込む事ができるようになりましたが、その際にPWMがめちゃくちゃな更新を永遠と続けてしまうというバグを発見。たぶん、更新するタイミングが悪いせいだと思う。
ポジション読み込み
昨日できなかった、ポジション読み込みも修正。ソフトウェアスイッチの処理がうまくいってなかっただけで、この部分を直したら動いた。シリアル様様ですよ。後はトリムができれば、いよいよモーションですねぇ・・・。もうちょっとだ。
ホームポジションのバグが取れた
ホームポジションに戻すコマンドを送るとパルスが乱れる原因がありましたが、解決しました。ただ単に構造体のアドレス渡しの際に指定するアドレスがあさっての方向のアドレスだっただけでした。OTL
すぐ取れたけど、なんだかなぁ・・・。(=_=)
トリムとモーションの書き込み、読み込み
通信モニタのおかげで、トリム、モーション共にすんなり実装できました。これでほぼ必要な機能は揃いました。シナリオモードの実装はまだですが、ひとまずモーションが動作しないことにはね。
モーション再生用の処理はまだないんですよー。これを作らないと、モーションが実行できないんですよね。そんな訳で、次回はモーション再生機能のプログラミングですね。
4月中に上半身くらいは動かせそうだ。下半身はゴールデンウィーク中に加工したいが、できるかな。
4月30日 月曜日 タイトル: あまり進まなかった(T-T)
[まずいな。]
モーション再生処理
終わってないです。なんだか、やる気がダウンしてしまったので、気分転換に下半身の設計&製作してました。まぁ、これからまた平日が来るので、ソフトの方の作業を再開すると思います。
足フレームの製作
そんな訳で、日曜日辺りに足の設計を終わらせて、月曜日に製作しました。仮組みしてたら、夜中になってましたよ。(=_=|||)
今回は、SC-2350ARM1を使用したので、板金はそんなにやらずに済みました。どちらかというと、このブラケットの製作に手間取るんですよね。穴の数も多いので・・・。
上半身と合わせると
こんな感じになります。上半身は自宅の遺跡から発掘されました。(^-^;
腕のブラケットも旧型から取り替えればそのまま使用できそうです。そんなことよりも、今回製作した足フレームで耐えられるのかが気になりますね。スネのパーツはかなり強化しましたが、どういう結果になるのか・・・。
あぁ、配線もしないといけませんねぇ。このままでは、ただのガラクタでしかない。
ちなみに、腰部分は干渉したりするので作り直したほうが良さそうです。
[BACK]
[TOP]
[NEXT]
Copyright (C) 2007 U-hirohito All rights reserved.