| Miyata's Robot Factory |
このホームページでは宮田がロボットを製作する過程を記録したものです。
主に工夫した事や苦労した事を公開する事で少しでもロボットに興味を持つ
人が増えてくれたり、ロボットを作っている人の役に立てたら良いなぁと思っています。

since 2002/10/26
| 製作日記 | 掲示板 | リンク |
|
バーニング・スター |
|||
![]() |
|||
|
目指せ究極のアクチュエータ、俺サーボ! |
|||
|
俺サーボは漢の浪漫 |
|||
|
お手軽ロボット制御システム製作プロジェクト 「Little Burning Core」 |
最近のロボット人生
| 2006/03/26 (日) | |
|
■ダイヤモンドは永遠の輝き 森永さんのHPで先に公開されてしまいましたが、先日籍を入れました。 実は結婚に辿り着くまでがナカナカ苦労があってここでは書けない色々な悩みもあったのですが、 まぁ結果オーライです!それよりもずっとロボワンに参加できなかったにも関わらず、 皆様の暖かいお祝いのお言葉が頂けてとても嬉しかったです!どうも有難うございます! 式は5月なのでまだまだバタバタしてますが、皆様これからもよろしくお願いしますね! 左は奮発した婚約指輪です。ハリーウィンストンと言えばその筋ではかなり有名らしいです。 私は知りませんでしが、さすが160サーボのお値段は伊達ではない輝きです。 |
|
■もう一つの秘密!? 何故森永さんがご存知かは不明ですが、子供も授かってしまいました! 現在5ヶ月で、予定日は9月です。超音波映像では既に元気に手足を動かしていました。 なんというか自分が父親になるというのは不思議な気分ですね。 元気に生まれてくるのがとても楽しみです。 |
|
■近況報告 言い訳のようであまりこういう事を書きたくは無いのですが、平日は仕事がとても忙しいです。 時間が多く拘束されるだけでなく、常に自分の実力の120%を要求されるので、 家に帰ると余裕が無い感じですね。その代わり久々に仕事で充実して楽しんでいます。 それに家に帰ったら食事が用意されているのは嬉しいですね〜 とか言いながら家に帰って、食事して妻と少し話とかをした後で、30分でも1時間でも 睡眠時間を削ってコソコソとやってます。 そうそう、1年ほど前に4畳の寮から引っ越して少し広いマンションに2人で住んでます。 作業部屋だけで5畳も確保してあるので非常に良い感じです。ただ機械加工は非常に 近所迷惑な感じなのであまり出来ないのが悩みですね。 今はオリジナルCPUの設計を進めています。というかコンパイラをやるのはやっぱり面倒だったので 既にコンパイラの在る有名なCPUをフルスクラッチで作ってます。もう直ぐドライストーンが動くと思うので そのうち性能を報告できると思いますよ。ともあれ仕事、結婚式、出産と高優先度のタスクが 詰まれているで、なかなかロボットに思いっきり時間を割く事が出来ませんが、 復活の暁には生まれてくる子供の遊び相手が勤まるくらいには賢くて丈夫で安全なロボットを 作りたいですね。頑張るぞぉ〜!! |
|
| 2005/12/11 (日) | |
|
■革新的なモータのアイディア 現在のモータの動作原理は大きく分けると3つに分類されます。 1つ目は界磁タイプでロータとステータ間で界磁による鎖交磁束の変化とステータの 電流に比例したトルクを発生するタイプ。DCモータやブラシレスモータ、 SPMや巻き線界磁タイプのモータが含まれます。 2つ目がリラクタンスを利用したもので、ステータの電磁石とロータの 鉄心が引き合う力を利用したもので、インダクタンスの変化とステータの電流の 2乗に比例したトルクを発生します。SynchronousRMやSwitchedRMなどが含まれます。 これら2つの特徴をあわせた物にIPMなどもあります。 最後の3つ目がローレンツ力を利用したものでステータによる回転磁界によって ロータに誘起された電流との間に発生するローレンツ力を利用したものです。 工場や電車なんかで使われる誘導モータが含まれます。 で、革新的なモータのアイディアですが、どういうわけか古いラジオの回路を見ていて 上記のどれにも属さない原理で動くものを考え付きました! まぁトルク特性なんかがどうなるかは分からないのですが、 効率だけは素晴らしく良さそう。宣言どおり世にある磁場解析ソフトでは 解析できないタイプになったのですが、かえって特性が把握できないのが かなりネックです。ともあれ原理試作はもう直ぐ完成!年明け辺りで本格的な 試作を行って特性評価と行きたいところですね。 これで世界に革新を起こせれば嬉しいです。しかし特性評価する方法が問題かな。 測定器高そう。。。 |
|
| 2005/12/04 (日) | |
|
■気に入らない 先日設計したモータですが、色々検討してみると形は少々奇抜ですが、 特性的にはブラシレスモータと同じである事が分かりました。 ブラシレスモータは効率の良い範囲が限られる上、高出力範囲も狭く、 トルク重視で設計したので鎖交磁束が高いため速度範囲も狭いのです。 コレじゃあ単にハイトルクなブラシレスモータと変わらない。 気に入らないですね。 もっとこう世界が変わるような革新的なモータを作りたい。 市販の磁場解析ソフトで解析できるようなモータじゃある意味ダメなのかも。 ここまで時間とお金と労力を掛けていて勿体無い気もしますが、一度御破算にして もう一度原理から見直し、革新的なモータを考えたいと思います。 くそう、なかなかロボワンに復帰できないなぁ〜 |
|
| 2005/11/28 (月) | |
|
|
|
■買っちゃったよ なんというか最近毎回こういう書き出しですが3ヶ月近くぶりの更新です。 皆さんお元気でしょうか?掲示板やメールの方もほったらかして済みません。 で、暫く前に遂に磁場解析ソフトを買ってしまいました!お値段なんと50サーボ!! これでも一番安いタイプなんです。上の画像はチュートリアルを実行した画面です。 コレにもうハマリまくりで一心不乱に設計しては解析の繰り返しの日々を送ってました。 買ったのはフォトンの MAGと言うソフトです。使いやすいのでモータを自作してやろうと言う人は是非是非。 で、何で購入したかというとDDモータの試作を何度かしたにも関わらず、あまり芳しくない 結果しか出ない上に何が悪いのか原因が良く分からなかったんです。磁気は目に見えないですから。 これじゃあ何度試作しても時間とお金の無駄だと言う事で思い切って磁場解析ソフトを 買ってしまいました。既に使い方もバッチリ覚えたお陰で500回分の試作と同じ位は 色々試せてます。試作1回で10万円、2ヶ月以上は掛かるので4950万円、998ヶ月以上の 節約です(笑)。 |
|
|
■恐らくトルク世界最強!でもDDは。。。 解析を進めているとトルクも含めて色々分かってくるもので、最初に考えていた アイディアはあえなく撃沈。色々な紆余曲折を経て全く思っても見なかった形に なりました。で、トルクですがステータの直径100mm、厚さ50mmで17Nm(173Kg.cm)になりました。 体積1リットル換算ですと43Nm/L(441Kg.cm/L)になります。実際は軸受けのフタの分、ステータの 割合が減るので80%換算すると34Nm/L(353Kg.cm/L)となります。 トヨタのプリウスのモータが24.3Nm/L、NSKのメガトルクモータが29.9Nm/Lなので、 たぶん世界最強トルクを達成できたんじゃないかな?(シミュレーション上でですが) 後はどれだけ出力を絞りだせるかと、効率が気になるところですが、50万円の安い解析ソフト では動磁場解析が出来ないので作ってみなくては分からないです。 で、これをロボットの間接に使おうとすると直径40mm厚さ30mmで重量160g程度として まぁトルク60〜80Kg.cm以上は出て欲しいところですが353Kg.cm/Lから換算すると13.3Kg.cmと なります。いくら世界最強トルクでもやっぱり足りないですね。2足歩行ロボット恐るべし。 と言う事でDDはアッサリ諦めてギアで1段だけ減速することにします。これなら 5:1で66.5Kg.cm!7:1で 93.1Kg.cm!!と十分すぎるトルクを発生する事が出来ます。 そしてスピードなんですが7:1減速でも1000rpmを目指しています。今のサーボが良くて 100rpm程度なので十分なトルクに圧倒的な動作速度で物凄い運動能力が期待できそうですね。 出力は30W〜60W辺りかな?むふふ。1年越しの夢が遂に実現に近づいてきましたね〜 | |
| 2005/09/01 (木) | |
|
■やっぱり赤はイイ! 基板完成から2ヶ月もほったらかしにしておまいましたBSB-01基板に 部品を実装しました。やっぱり赤は良いですね〜。 実はまだ裏面のドライブ用のICと大容量コンデンサーは未実装。 今Digikeyから海を渡ってくるのを待ってるところです。 しかし結構な実装密度になりましたね。左の昔の俺サーボ基板の時も 自分ではかなりのもんだと思ってましたが、今回は完全にそれを 上回ってます。やれば出来るもんだ。 しかしこう見ると基板の赤と 部品の黒、半田の銀が良い具合のコントラストで見栄えがしますね〜。 ともあれパッドのミスも、実装しづらい箇所も無く スムーズに一発実装!幸先が良いですね! |
|
■ソフトは意外と手強いかも で肝心のソフトの方ですが、色々検討中です。 というのも実は次のオリジナルCPUのBurning CoreではμITRONを載せようと 思ってるんです。別にリアルタイム性が欲しいとかと言うわけではなくて (現状は既に割り込みベースでリアルタイム処理を実現している) 検討中の歩行やセンサーのルーチンを割り込みベースでやると結構大変なことに なりそうなのでμITRONを載せてイベントドリブンで書けると楽が出来そうかなと。 で、その前段階としてBSB-01にも最低限の機能に絞ったμITRONを載せると 何か良いことがあるかなぁ〜と色々考えていたのですが結論として デメリットの方が大きいというか全く良いとこ無しだと分かりました。 ITRONなどのリアルタイムOSを載せるメリットは優先度やイベントに応じて タスクを高速に切り替えてくれる事なのですが、いくら高速と言っても 割り込みベースには適わないのです。まぁ普通はそれでも応答性が十分に間に合えば OSの機能のお陰で複雑なタスクをスッキリ書けてバグが出にくく開発が早いと言う メリットが勝るのですが、ことサーボ制御に関してはそんなに複雑に絡み合った タスクがあるわけでもない上、極限の応答性が求められるのでOS介在によるタスク切替の オーバーヘッドのデメリットばかり目立ってしまったと言う感じです。 実際の処理の方ですが、なんと言っても一番の難所はホストとの通信部分です。 Jinさんとの約束で通信速度は最高1.25Mbps(R8Cの限界速度)の全二重通信で通信効率90%以上を実現と なってます。1byteの転送に10clock (Start:1+Data:8+Stop:1)ですので、 1.25MHz/10=125KHz=>8μsで1Byteのデータの送受信&プロトコル処理を完了しなくてはなりません。 8μsだと20MHz換算で160クロックしかありません。そのうち24クロックは割り込みのオーバーヘッドに 食われてしまうので残りは136クロック。C言語で一画面分のコードを書いたら確実にアウトですね。 しかも135クロック全部使ったら他に何も出来なくなってしまうので半分くらいは空けたいところ。 となるとせいぜい60クロックしか使えない。10〜20行程度か?ムフフ腕の見せ所ですね。
■周辺回路の割り当て
割り込みと優先度
その他 結局R8C15に用意されている周辺回路を全部使うことになりそう。 |
|
| 2005/08/15 (月) | |
|
■CPU作ってました あぁ〜やっちまった。ヘネパタ本(ヘネシー&パターソンの有名なCPUの本)を 寝る前に読んだりしながら「CPU作るの面白そ〜」とか思っていたところに、 このページを発見したのが運のつき。 むぉ〜yaccというMIPS互換のCPUを自作!しかもFPGAで160MHz Overとは! でもな〜AlteraのFPGAは入手性が。。うぉ!Digikey-USで買えるように なっている!これは早速にも無償の Quartus II Web Editionをダウンロードして 試さねば!むほぉ〜StratixII速ぇ〜〜!32bitのフルアダーが350MHzとは! これはトンでもなく速いCPUが作れるのでは!?とかやっているうちに 気が付けば1ヶ月半。いつの間にかオリジナルCPUが完成してしまいました!
■オリジナルCPUの目標 まずは実行速度ですが目標は200MHzオーバー!! できれば240MHz達成を目指して頑張りました。さすがにMIPSは早くてそれでも 追いつけていないのですが、SH4やARM9とは良い勝負が出来ると思います。 それとDhrystoneの速度ですが1.2MIPS/MHz以上を狙っています。 SH系は16bitコードによって実行効率がやや悪くなっているのと、条件分岐が Tフラグを明示的にセットしなくてはならない辺りに勝機がありそうです。 ARM系は分岐が全部3クロックというところと即値が8ビットまでというところで 勝負できそうですが、条件付き実効命令をフル活用されるとどうなるかな〜というところ。 MIPS系はお手上げで分岐も全部2クロックでしかもディレイスロットがあるので かなりの速度。自分でもお手本にしてるだけあってあまり文句がありません。 でもFPGAで良い勝負なら同じ土俵のASICとなれば楽勝なわけでPowerPC405とかにも勝負を 挑めるかもしれませんね。まぁASICを作るお金なんかないのですが。。。 次がコードサイズ。これですよコレコレ。いや〜ここは頑張っちゃいました! というのも組み込みは少ないメモリでやりくりする場合が多くてコードサイズが 大きいことは即ち悪なのです。またDRAMの速度やキャッシュのサイズに対する要求が 高すぎても価格が高騰しがちで高い割りに遅いという烙印が押されてしまいます。 というわけでなんと16bitと32bit混載です!SHは16bitオンリー、ARMはARM命令(32bit)とThumb命令(16bit)、 MIPSはMIPS32(32bit)とMIPS16(16bit)という命令体系を持っていますが、 SHはともかくARMやMIPSの16bit命令はジャンプして32bitから モードを切り替えるというものです。これじゃあ意味無いということで、 1命令単位で16と32を切り替えて実行できるようにしました。ARMやMIPSの 16bit命令は16bit命令だけで一通りの機能が実行ができるように、複雑なフォーマットに なっているうえレジスタが8本しか使えなかったりデコードに負荷が掛かったり というデメリットがあります。またARMは32bit命令のコード効率を上げるため32bitも複雑な命令セットと なっており面積やクロック周波数に悪影響が出ているように見えます。MIPSの32bit命令の場合は逆に あまりコード効率を考慮していない上、分岐にディレイスロットがもれなく付いてくるので コード効率は歴代のCPUの中でも最悪の部類に属します。 私の場合は16bit単独、32bit単独だけでは動かないという割り切りの替わりに デコードが簡潔になるように工夫しました。ここは本当に頑張ったので 16/32混載のデメリットを一切感じさせずにコードサイズを縮小できます。 またSHの命令と比較しても16bit命令を2回使うと32bit命令と同じサイズで 実行速度は半分になることから、32bitも選べるこちらの方が有利になる かなと考えます。32bit命令では特に16bit即値や24bit相対分岐、3項演算が使えるのが大きいですね。 また16bit命令でコード効率を高めると命令読み込みによるメモリへの負荷が軽減され より少ないキャッシュ、あるいはより遅いバスでも性能を伸ばせる可能性があり、 消費電力も下げられる可能性があります。 ゲートサイズも組み込みでは重要です。単純に小さい方が安くて消費電力も小さいという理由も ありますが、最近は複数のCPUを入れるマルチコアが当たり前になりつつあり、小さいことのメリットが より重要になりつつあるからです。でデートサイズというか面積はARMとMIPSは公開してます。 でもこちらはFPGAなので比較し辛いんですよね〜。仕方がないので前述のyaccとAlteraのFPGA用CPUの NiosIIを比較対象としました。あまり情報がないのですがyaccはStratixIIで2926ALUTs。 NiosIIは最速のfタイプでStratixIIで900ALMs以下ということでした。単位が違うので比較しづらいのですが、 とりあえずyaccの1/3のサイズの1000ALUTs、NiosIIの2/3の600ALMsを目指すことにしました。 どちらもyaccはMIPSのサブセット、NiosIIもMIPSそっくりで32bit命令のみなので、シンプルさを極めた 構成なのですが、それより圧倒的に小さいところに目標を置くのは、まぁ腕の見せ所というか自信過剰という かそんな感じです。 最後に消費電力ですが、前述の16/32混載命令で命令読み込みの負荷を下げる事と、 ゲートサイズを小さくする以外には特にしてないです。他には動作にしていない部分を スイッチングしないようにFFで細かく切ったりとか色々出来るのですが、 正直消費電力はFPGAではASICと勝負にならないので、今回は考慮しませんでした。
■オリジナルCPUの仕様というか概要
●レジスタ構成 32bitx16本 このほかにPC(Program Counter:プログラムの実行番地を示す)、LR(Link Registor:戻りアドレスを保存しておく) やSRS(Special Registor Set:フラグとかカウンターが入っている) の3本の特殊レジスタがあります。 フラグは4bitで |z|n|c|v|(SRS[19:16])でz:ゼロ、n:符号、c:キャリー、v:オーバーフローとなってます。 カウンターは16bitで CNT (SRS[15:0]) です。
●パイプライン 6Stage |IF|ID|EX|MEM|xx|WB|
●命令長 16bit/32bit混載
●命令セット 命令のフォーマット中のxの部分をさらにデコードした結果の動作を[OP]以下に 説明しています。またxが複数箇所ある場合は31bit側からOP1,OP2...となります。 [OP]の項目の最後が実行クロックです。n/mとあるものは 分岐命令でnが分岐した場合のクロック数mが分岐しなかった場合のクロック数です。 またo(p)とある場合はoはスループットでpはレイテンシーとなっています。 ○分岐命令 ********************************************************** 31...27...23...19...15...11.............0 16:|0000|xxxx| simm8 | PC <- PC + Ext(simm8) / PC<-LR 32:|1000|xxxx| simm24 | PC <- PC + Ext(simm24) / PC<-LR |z|n|c|v| |-|-|-|-| [ OP ] |0000| J 無条件ジャンプ 2/1 |0001| JAL サブルーチン呼び出し 2/1 |0010| RET サブルーチンから戻る 2/1 |0011| RETI 割り込みから戻る 未実装 |0100| BEQ 等しいなら分岐 3/1 |0101| BNE 等しくないなら分岐 3/1 |0110| BGEu 以上なら分岐(符号無) 3/1 |0111| BLTu より小さいなら分岐(符号無) 3/1 |1000| BGTu より大きいなら分岐(符号無) 3/1 |1001| BLEu 以下なら分岐(符号無) 3/1 |1010| BGE 以上なら分岐(符号付) 3/1 |1011| BLT より小さいなら分岐(符号付) 3/1 |1100| BGT より大きいなら分岐(符号付) 3/1 |1101| BLE 以下なら分岐(符号付) 3/1 |1110| - |1111| LOOP CNTが0以外なら1引いて分岐 2/1 ○遅延付き分岐命令 ************************************************** 31...27...23...19...15...11.............0 16:|0001|xxxx| simm8 | PC <- PC + Ext(simm8) / PC<-LR 32:|1001|xxxx| simm24 | PC <- PC + Ext(simm24) / PC<-LR |z|n|c|v| |-|-|-|-| [ OP ] |0000| J+ 無条件ジャンプ 1/1 |0001| - |0010| RET+ サブルーチンから戻る 1/1 |0011| RETI+ 割り込みから戻る 未実装 |0100| BEQ+ 等しいなら分岐 2/1 |0101| BNE+ 等しくないなら分岐 2/1 |0110| BGEu+ 以上なら分岐(符号無) 2/1 |0111| BLTu+ より小さいなら分岐(符号無) 2/1 |1000| BGTu+ より大きいなら分岐(符号無) 2/1 |1001| BLEu+ 以下なら分岐(符号無) 2/1 |1010| BGE+ 以上なら分岐(符号付) 2/1 |1011| BLT+ より小さいなら分岐(符号付) 2/1 |1100| BGT+ より大きいなら分岐(符号付) 2/1 |1101| BLE+ 以下なら分岐(符号付) 2/1 |1110| - |1111| LOOP+ CNTが0以外なら1引いて分岐 1/1 ○レジスタ直接分岐命令 ********************************************** 31...27...23...19...15...11.............0 16:|0010000|x| Rs |0000| PC <- Rs |z|n|c|v| |-|-|-|-| [OP] |0| JR 無条件ジャンプ 3/1 |1| JALR サブルーチン呼び出し 3/1 ○特殊レジスタ操作命令 ********************************************** 31...27...23...19...15...11.............0 16:|0010010|x|Rd/s|00xx| |z|n|c|v| |-|-|-|-| [OP1|OP2] |0|00| MFLR Rd <- LR 1(1) |0|01| MFSRS Rd <- SRS 1(1) |0|10| - |0|11| - |1|00| MTLR LR <- Rs 1(2) |1|01| MTSRS SRX <- Rs 1(2) |1|10| MTCNT CNT <- Rs[15:0] 1(2) |1|11| - ○ロードストア命令 ************************************************** 31...27...23...19...15...11.............0 16:|00110|xxx| Rs |Rd/t| 32:|10110|xxx| Rs |Rd/t | simm16 | |z|n|c|v| |-|-|-|-| [OP ] |000| LBu Rd <- 24'b0 || Byte(Rs + 0/Ext(simm16)) 1(3) |001| LB Rd <- Ext(Byte(Rs + 0/Ext(simm16))) 1(3) |010| LHu Rd <- 16'b0 || Half(Rs + 0/Ext(simm16)) 1(3) |011| LH Rd <- Ext(Half(Rs + 0/Ext(simm16))) 1(3) |100| SB Byte(Rs + 0/Ext(simm16)) <- Rt[7:0] 1 |101| SH Half(Rs + 0/Ext(simm16)) <- Rt[15:0] 1 |110| SW (Rs + 0/Ext(simm16)) <- Rt 1 |111| LW Rd <- (Rs + 0/Ext(simm16)) 1(3) ○シフト命令 ******************************************************** 31...27...23...19...15...11.............0 16:|010000|xx|Rds | Rt | 16:|010010|xx|Rds |imm4| 32:|110000|xx| Rs | Rt | Rd |0000|0000|0000| 32:|110010|xx| Rs | Rd | imm16 | |z|n|c|v| |-|-|-|-| [OP] |00| SLL 論理左シフト Rd <- Rs << Rt/imm4/imm16 1(2) |01| - |10| SRL 論理右シフト Rd <- Rs >> Rt/imm4/imm16 1(2) |11| SRA 算術右シフト Rd <- Rs >> Rt/imm4/imm16 1(2) ○+16シフト命令 ***************************************************** 31...27...23...19...15...11.............0 16:|010011|xx|Rds |imm4| |z|n|c|v| |-|-|-|-| [OP] |00| SLL 論理左シフト Rd <- Rs << (imm4+16) 1(2) |01| - |10| SRL 論理右シフト Rd <- Rs >> (imm4+16) 1(2) |11| SRA 算術右シフト Rd <- Rs >> (imm4+16) 1(2) ○乗除算命令 ********************************************************* 31...27...23...19...15...11.............0 16:|01010|xxx|Rds | Rt | 32:|11010|xxx| Rs | Rt | Rd |0000|0000|0000| |z|n|c|v| |-|-|-|-| [OP ] |000| MUL 符号付乗算 未実装 |001| MULA 符号付乗算加算 未実装 |010| DIV 符号付除算 未実装 |011| - |100| MULu 符号無乗算 未実装 |101| MULAu 符号無乗算加算 未実装 |110| DIVu 符号無除算 未実装 |111| - ○論理演算命令1 ****************************************************** 31...27...23...19...15...11.............0 16:|01100|xxx|Rds | Rt | 32:|11100|xxx| Rs | Rt | Rd |0000|0000|0000| [OP ] |z|n|c|v| |000| AND Rd <- Rs & Rt |O|O|-|-| 1(1) |001| XOR Rd <- Rs ^ Rt |O|O|-|-| 1(1) |010| OR Rd <- Rs | Rt |O|O|-|-| 1(1) |011| TEST Rs & Rt |O|O|-|-| 1 |100| AND. Rd <- Rs & Rt |-|-|-|-| 1(1) |101| XOR. Rd <- Rs ^ Rt |-|-|-|-| 1(1) |110| OR. Rd <- Rs | Rt |-|-|-|-| 1(1) |111| MOV Rd <- 0 | Rt |-|-|-|-| 1(1) ○論理演算命令2 ****************************************************** 31...27...23...19...15...11.............0 16:|01101|xxx|Rds |imm4| 32:|11101|xxx| Rs | Rt | imm16 | [OP ] |z|n|c|v| |000| ANDi Rd <- Rs & imm4/16 |O|O|-|-| 1(1) |001| XORi Rd <- Rs ^ imm4/16 |O|O|-|-| 1(1) |010| ORi Rd <- Rs | imm4/16 |O|O|-|-| 1(1) |011| TESTi Rs & imm4/16 |O|O|-|-| 1 |100| ANDi. Rd <- Rs & imm4/16 |-|-|-|-| 1(1) |101| XORi. Rd <- Rs ^ imm4/16 |-|-|-|-| 1(1) |110| Liu Rd <- 0 | imm4/16 |-|-|-|-| 1(1) |111| Lui Rd <- imm4/16 << 16 |-|-|-|-| 1(1) ○算術演算命令1 ****************************************************** 31...27...23...19...15...11.............0 16:|01110|xxx|Rds | Rt | 32:|11110|xxx| Rs | Rt | Rd |0000|0000|0000| [OP ] |z|n|c|v| |000| ADD Rd <- Rs + Rt |O|O|O|O| 1(1) |001| SUB Rd <- Rs - Rt |O|O|O|O| 1(1) |010| ADD. Rd <- Rs + Rt |-|-|-|-| 1(1) |011| SUB. Rd <- Rs - Rt |-|-|-|-| 1(1) |100| - |101| CMP Rs - Rt |O|O|O|O| 1 |110| NOT Rd <- -1 - Rt |-|-|-|-| 1(1) |111| NEG Rd <- 0 - Rt |-|-|-|-| 1(1) ○算術演算命令2 ****************************************************** 31...27...23...19...15...11.............0 16:|01111|xxx|Rds |imm4| 32:|11111|xxx| Rs | Rt | imm16 | [OP ] |z|n|c|v| |000| ADDi Rd <- Rs + Ext(imm4/16) |O|O|O|O| 1(1) |001| - |010| ADDi. Rd <- Rs + Ext(imm4/16) |-|-|-|-| 1(1) |011| - |100| - |101| CMPi Rs - Ext(imm4/16) |O|O|O|O| 1 |110| Li Rd <- 0 + Ext(imm4/16) |-|-|-|-| 1(1) |111| -■来た!32bit RISC CPUが FPGAで216MHz!! という訳で完成したので論理合成してみました。 気になるクロック周波数の方ですが、ご覧のように余裕で200MHzをオーバーし、 216MHzとなりました。でも240MHzはちょっと厳しい感じですね〜 現状だとARM9とは良い勝負が出来そう。SH3は楽勝な感じでSH4だとRと戦うのは 厳しい感じ。Sまでならかなり良い勝負でしょうね。MIPSとは勝負にならないか〜 せめて240MHz出てれば300MIPS辺りを狙えて勝負出来たかもしれないですね。 それでも昨日は190MHz辺りをうろうろしていたのでもうちょっと頑張れば あと10MHzくらいは上げられるかも知れません。ちなみに論理合成のオプションですが ・Optimization Technique:Balanced ・Fitter Effort:Auto Fit ・Physical Synthesis:全て選択しない で行いました。あまりスピードが出ないセッティングですね。 フルに最適化を効かせると現状でも220MHzはオーバーしますが サイズが結構大きくなっちゃうんですよ。 ![]()
■面積はyaccの1/3達成!
■NiosII/fの2/3達成!
■今後の予定 |
|
| 2005/07/01 (金) | |
|
■今度は赤い! 来たぁ〜来ましたBSB-01基板が60枚!今回は凄いですよ〜 見ての通り「赤」い基板です!しかもそれだけではない! 板厚が今までの半分の0.8mm!!さらに、銅箔の厚さが3倍の100umなんです! パターンの幅、厚さとも格段にパワーアップで電流バリバリですぞ! 以前の俺サーボ基板の比較してみると薄くなって大分小さくなった気がしますね〜 面付けタダだし、ルーターカットOKだし、激安だし今回の基板屋は最高です! ぐふふ。この調子でドンドン基板発注だ! |
| 2005/06/16 (木) | |
|
■俺サーボの完成形・BSB-01完成! 今回の俺サーボ基板は量産を前提にしています。 なので価格を抑えるために部品の選定には凄く時間をかけました。 でも性能には一切妥協してませんよ!今までの俺サーボ基板で最高の完成度です! まずはCPUですがR8C15を3.3Vで20MHzで動作させます。 前の日記で検証した通り、このCPUはH8を遥かに凌駕する処理性能を持ってるので、 単なるPIDのみならず電流制御を前提にした、 他の市販サーボのなんちゃってコンプライアンス制御と全く違う 真のコンプライアンス制御をやっちゃう予定です! |
|
次に電流検出ですが、今まで散々苦労した経験から今回は専用の電流検出抵抗に 専用の電流検出ICを使うことにしました!さらに市販サーボで使っているリニア制御できない ダメダメな2線制御には完全に見切りを付け、4線制御のLow-side PWM方式を使うことで 高精度の電流制御を行います。 サーボの命ともいえるポテンションからの角度取り込みには CPU内臓ADCとは一線を画す性能の外付けの12bit ADCを奢っちゃいました! 電源ノイズフィルターやローパスフィルターと相まって高精度サーボ制御に貢献する予定。 通信方式ですがRCサーボ互換モードと全二重シリアルの両方に対応します。 特にシリアルは超高レスポンス通信を実現し、ホストから高周期での位置指示を 行いつつ同時に現在位置やトルクの送信を行うことで、ホストでのリアルタイムの ロボット制御に全間接の現在角やトルクを利用可能にします。 さらに今までの俺サーボで積んだ経験をフルに投入してノイズ対策を 徹底して行い、劣悪な電源やノイズ環境でも安定した制御を実現します。 今度は動作中にリセットなんて絶対に入りませんよ〜 という訳で自分で言うのもなんですが会心の出来栄えです! これだけ詰め込んで、14mm×17mm。全ての標準型サーボに入るはずです。 しかも電源、通信ケーブルや、ポテンションとの結線はスルーホールを 用意したので配線取り回し、半田付けとも楽ちんになる予定です。
■次はコイツで |
|
| 2005/06/15 (水) | |
|
■完成! 俺サーボ基板のCPUをAVRからR8Cにスイッチして一から設計し直しました。 部品点数が増えたにも関わらず前より幅0.5mm、高さ1mm小さくなって 14mm×17mmに収まりました。しかも配線はスルーホールで半田付けと ユーザーフレンドリーになっております。 っていうか疲れたぁ〜細かい説明は明日にでも。 |
| 2005/05/31 (火) | |
|
■割り込み速度 R8Cの割り込み速度を測定しました。タイマー割り込みを使って割り込み周期を 短くしていきハングアップしたら終了。ハングアップ寸前の周期が割り込みに 要する処理時間になります。R8Cは裏レジスタというのを持っていて、 割り込み中にこっちを使うようにすればレジスタの退避をしなくてすみます。 という訳でどのくらいの効果があるもんなのかやってみました。
#pragma INTERRUPT /B int_timerx(vect=22)
void int_timerx(void)
{
TIMER++;
ir_txic = 0;
}
プログラムの方はこんな感じ。で結果は
裏レジスタなし:2.8us(357KHz) なんか半分くらいの処理時間ですんでますね〜結構効果ありそうな感じです。 って言うかレジスタの退避だけで1.2us取られてます。 1200/50=24クロックですから、そんなもんなのかな。 |
|
| 2005/05/31 (火) | |
|
■DSR8801到着! JinSatoさんのはからいで JRのDSR8801がI Beeさんから到着しました! 噂の最強サーボです。噂に違わず重厚な作りで良い感じですね〜 モータのパワーも凄そうですが、ポテンションも見たことない形ですね。 ふ〜む。ナカナカ面白い。 ともかく、写真の通りDSR8801のケースに突っ込むのは楽勝そうですよ〜>Jinさん |
| 2005/05/27 (金) | |
|
■見える、私にも見えるぞ! ヤフオクで買ったアナログオシロが大分前に壊れて以来、ずっとオシロなしで 頑張ってきたのですが、遂に耐え切れなくなって買ってしまいました! いや〜やっぱ良いっす!今まで分からなかった細かい信号やノイズまで丸見えです! 買ったのは SDS200AでUSBでパソコンに繋いで波形はPC画面で見るタイプ。卓上スペースの節約と、 何より¥87,500と比較的リーズナブルな値段に惹かれました。 でも5GS/s(5ギガサンプル毎秒)と本格的なオシロより高性能でビックリ! でもリアルタイムサンプルは100MS/sらしい。(違いが分からない。。。) 何にせよ、私にとっては十分すぎるくらい実用になります。 PC用のソフトも使いやすくてとっても良い感じです。買ってよかった! |
|
■やはりアナログは深いぜ んで何を測定したかというと、マイコンから出力したPWMをローパスフィルターに 突っ込んでアナログ電圧を作る回路の出来具合を測定してました。 RC(抵抗とコンデンサ)の高カットオフ周波数のローパスに加え、 オペアンプでのアクティブフィルタの低カットオフ周波数のローパスの 2段構えにしたので結構綺麗なアナログ電圧が取れました。 でも200mVp-p程度のノイズが観測されます。 高周波が回り込んでいるならコンデンサ容量を下げてカットオフ周波数を上げる 方向で調整かな?でも電源に載っているノイズのような気もします。アナログは深いですね。
と、色々測定しているとPWMのデューティを上げてオペアンプの出力電圧が3.08V以上になると(電源は3.3V)、 ゆ〜っくりと発振したような挙動を示す事を発見しました!ぬぅ〜さすがオシロ様ですね。 で、原因は一番安いオペアンプを使ったためにレールtoレール出力(0Vから電源電圧まで出力可能)ではなかったのが 原因のようです。っていうかデータシートに出力電圧範囲書いてなかったしなぁ。
■HEWの個人的備忘録
デバッグ対象ファイルの指定 この辺はいつも忘れてしまうので苦労してます。 |
|
| 2005/05/21 (土) | |||||||||
|
■CPLD書き込み成功! 仕事の方は相変わらず忙しいのですが、もう少しで一息つけそうです。 これでロボットのペースを上げて行けそうですね。 んで平日は時間が無いながらもチマチマと俺サーボDDの回路をシミュレーション&デバッグ。 少し間違いが見つかって修正したので回路が増えましたが、目的どおり動作するのを確認しました。 おし!次は動作確認、略して動確だ! 今日はXilinxのダウンロード回路+ケーブルを作って、テスト用のCPLD+マイコン基板を作って ついでにスイッチ+LED付きの3.3V電源を真面目に作りました。 早速全部繋いでXilinxのISE6のiMPACT(DL用ソフト)を使ってCPLDの書き込みだ! おぉ!一発成功!素晴らしい! |
||||||||
|
■楽しい週末になりそうです これで電気回路は大体終了。後はマイコンの制御ソフトを書いたり、 初めて組むフィルター回路とかコンパレータとか電流測定とか やった事がない楽しい作業が目白押しです。ふふふ。楽しい週末になりそうだ!
|
|||||||||
| 2005/05/13 (金) | ||||||||||||||||||||
|
■ひらめいた! 久々の更新です。途中まで完成したCPLDを実験する基板の設計を していたのですが、やっぱり最後までCPLD内部の回路を設計して、 ちゃんと入る事を確認することにしました。 それで、残りのフェーズ切替や正転/逆転にあわせてFET制御を 行うモータドライバ部分をずっと考えていたのですが、ナカナカ手強い! なんせ今回は72個しかマクロセルがないCPLDなもんで、かなりコンパクトに 作る必要がありますから。ゴールデンウィーク中もウ〜ンウ〜ン、 仕事から帰ってからもうむぅ〜と唸って遂に閃きました! おし!早速設計だ!
■入らねぇ!
■徹底的に削る!
■仕様も削る!
■何とか入りました!
散々苦労しましたが、DD俺サーボのドライブ回路を 何とか72マクロセルのCPLDに収める事ができました。 CPLDはFPGAと違って複雑な回路はリソースの消費が激しい事と、 90%を超えると上手く入らない事が多い感じがしました。 まぁこのCLPDは240円@100個。対してFPGAは最低1000円+コンフィグロム1500円なので 仕方がないところですね。でもCPLDはとっても速いんですよ! なんとこれだけ詰め込んで最大53.476MHzで動きます! 今回の回路、8bitレジスタが3個。しかもリードは1個となってます。 使用したI/Oポートは19本。とても小規模ですね。 早速実験したいところですが散々設計を変更して仕様まで変えてしまったので、 シミュレーションをし直さないと。上手く動くかな? |
||||||||||||||||||||
| 2005/04/27 (水) | |
|
|
|
■シミュレーション完了! 最近の無料ツールは凄いですね!XILINXから 無償 ISE WebPACK 6.3iをダウンロードして設計をしていたのですが、回路設計が 終わるとまずは、シミュレーションで動作チェックしたくなるものです。 ちょっと探していたら同じくXILINXからModelSimというシミュレータの 機能制限版が無料で使えることを知りました! 早速ダウンロードしてライセンス登録して使ってみました! 確かに機能制限があるようですが、小さい回路ならハッキリ言って全く問題なし! 設計した回路の動作が手に取るように分かるのは快適そのものです! もちろんVerilogでシミュレーションパターンもバリバリ書けて良い感じですね。 作成したSPI I/Fの動作もデータシート通りちゃんと動くのが実機でオシロを当てずとも分かっちゃいます。 さらにオシロでは見れない内部信号も全部見れちゃいます。間違いを見つけたら 速攻で記述を直してまた直ぐ確認できちゃいます。今までの無償ツールでは出来なかったことなので とっても快適というか殆ど仕事の環境と変わらんですよ。マジで。良い時代になったものです。 というわけで、先日設計した回路のシミュレーションはサクッと完了です! |
|
| 2005/04/25 (月) | |
|
|
|
■ハードウェア設計 今回DDモータの制御にはR8C15マイコンと、XilinxのXC9572XLというCPLDを利用しようと 思っています。44pin-QFPとR8Cほどではないですが、なかなかコンパクト。 但しマクロセルが72個と、回路規模もとってもコンパクトなのです。 仕事では数100万ゲートのLSIの設計に携わっているのですが、それと比べると かなり感覚が違いますね。普段から回路が小さくなるように心がけているのですが、 今回の場合は仕様から設計までマクロセル1個単位で節約してます。 そのお陰で、マイコンと通信するSPIのスレーブインターフェースと電流制御回路や、 制御ロジックを入れて今のところご覧のように53マクロセルで収まってます。 後はフェーズ切替や正転/逆転の機能とかを入れれば終わりなのでなんとかなりそうな感じ。 残念なのは、回転速度測定の回路が仕様からドロップしてしまったことですが、 これはマイコン側で実装する事にしました。マイコンのタイマーを余分に1個消費するので RCサーボとの互換モードは絶望的な感じ。 ともかく現状の回路をCPLDに書き込んで電流制御が上手く行くか試して見ます。 |
|
| 2005/04/17 (日) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
大きさはダントツR8C(左)の方が小さい。処理速度の方は!?
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
■なんとR8CはH8より断然速い!! いや〜やっとベンチマークの移植が終わりました。最初はDhrystone2.1を 移植していたのですが、もう一歩のところでメモリが足らず。結局比較的 メモリを使わないDhrystone1.1を移植しました。結果は以下の通りです。
CPU:R8C15 (20MHz トラ技の付属基板)
Dhrystone( 1.1) time for 50000 passes = 6869 (msec) 自前のprintfが浮動小数点表示をサポートしてなかったので、こんな表示になって ますが、要は1000で割ったのが結果です。
7278.020 dhrystone/second
う〜む思ってたのよりずっと速い!さすが惚れ込んだマイコンだけあるね!むふふ
CPU:H8/3664 (16MHz 秋月基板)
Dhrystone( 1.1) time for 50000 passes = 12570 (msec)
3977.724 dhrystone/second まぁこんなもんでしょうか。純正のコンパイラを使えばもう少し速いのかな? ともあれ私の環境ではR8Cの方が1.8倍以上速いですね〜H8/3664を20MHzに換算しても 1.4倍以上速いです。今までH8/3687(20MHz)というマイコンで3つのサーボを制御していたので、 それよりずっと速いR8Cを1つのサーボの制御に使うのですから処理速度に関しては楽勝な感じがして来ました! さぁこれで一安心!作りこんでから処理速度足りねぇ〜なんて事になったら悲惨ですからね! よしっ!これからDDモータ実現に向けてガンガン行くぞぉ!
■Dhrystone1.1移植用ソースコード
■コンパイルオプションの影響
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2005/04/10 (日) | |
|
■買い物は楽しいね 今日はDigikeyから部品が届いたり秋葉に買い物に行ったりでテンションが ガツンと上がってます。これで暫くは楽しめそうですね〜 まずはDigikeyから届いたDDモータ用のFETとか電流検出抵抗とか各種の アンプなどです。真ん中にはXilinxのCPLDなんかもありますね〜 CPLDは44pinのくせに結構でかい。0.8mmピッチだったのか。 |
|
■センサーも買ってみた 次はセンサー関係ですね。まずはDDモータ用で、murataのポテンショメーターや 電流検出アンプ。そのほかに高精度の加速度センサー2種類と、地磁気センサーなんかも 買ってみました。次はセンサーも気合を入れないとね。むふふ。 |
|
■ピッチ変換基板を色々と そして次はピッチ変換基板各種です。今回はなるべく本番用の部品で試作をしたいので こんな事になってしまいました。0.5mm、0.65mm、0.8mm、1.27mmのSSOPやQFPを 2.54mmピッチに変換してくれます。最近はシールタイプの変換基板なんかもあるんですね〜 |
|
■その他の部品を色々と 最後がコネクタやら、ロジックICやら電源やらその他もろもろです。 はぁ〜気分すっきり!さぁ頑張るぞ! |
|
■やっぱガンダム!? とかいいながら結局ガンダム 一年戦争に どっぷりはまる。良いよぉ〜今回は操作が小気味良くなって、「俺ってニュータイプ!?」状態で 楽しめます。シャァがイマイチ弱くなったのは納得行かないところですが、ザクのクラッカーや ギャロップの援護が結構効いてきて、「くそっ!そこかっ!?」みたいな気分を味わえます。 ってそんな事してる場合じゃないぞ!とっととR8Cのベンチマークを取らねば! ケロロ軍曹 を見たら頑張るぞ! |
|
|
■E8デバッガ到着! サンハヤトで注文していたRenesasの E8デバッガ が到着!早速繋いで試してみました。最初は上手く動かなかったのですが、 原因は手抜きをしてコネクタのVssを全て繋がなかったため。テスターで当たると Vssが全部繋がっているわけでは無い事を発見して気が付きました。 コネクタが刺さっているかのチェックに使っているみたいですね〜 と言うわけで無事にE8デバッガでデバッグできるようになりました! う〜むとっても快適!良いですね〜貴重なI/Oピンを全く消費しなくて済むのが最高です! |
| 2005/04/02 (土) | |
|
■トラ技買っちゃいました 付録に惹かれてトラ技を買っちゃいました。しかも4冊! 今回の付録はR8C15。超小型で高性能なマイコンです。 なんとサイズは足を含めても6.5×6.4mmと凄く小さいです! 基板も凄く小さい!なんと秋月のH8/3664より大分小さいです! 実は俺サーボDDにはATmega8を使おうかと思っていたのですが、 チャーリーさんのところで R8C15をリーズナブルな価格で購入していただけるようで 俄然やる気が出てきました。しかもDigi-Keyでも在庫0ながらRenesas製品の 取り扱いが始まっていてR8C、M16、M32、H8、SH2が買える様になっちゃいました! やっぱりマイコンは日本製だよな〜 ともかく勉強がてら早速基板を作ってソフトをインストール!書き込みだ! 。。。書き込み出来ん!おぉModeピンをGNDに繋ぐのはいいとして、書き込みは 13、14pin(DebugTXとRX)を繋ぐのか。しかし分かりづらいなトラ技の記事。 今度は大丈夫だろ!?書き込み。。。出来ん!う〜むテスター使うか。 ふむふむ。。。シリアルのレベル変換ICが死んでいる。電圧0.16Vってなんだよ! くそう、壊れてるじゃん。仕方が無い、他のを使うか。4冊買っておいて良かった。 しかしながらシリアル書き込み&デバッグは貴重なpinを使ってしまうのでイマイチ。 特に使おうと思っていたSPI端子を使っちゃうのはイケてませんな。 Modeピンだけ使うE8デバッガ の購入を真面目に検討しますか。 |
|
■ちょっと感動 午後から色々用事があって、作業を開始したのが2時過ぎになっちゃいました。 明日は仕事で朝早いのですが、R8Cを動かそうとトラ技の回路図をもう一度よく見る。 あっ!しまった!繋ぎ忘れ発見!そうかシリアルのレベル変換ICはイネーブル端子が あったのね。皆さん、Pin8〜10を繋ぐのを忘れずに。って壊れてたと勘違いした 自分が恥ずかしいぃ〜 というわけで早速HEWを起動してサンプルを実行してみる。LEDを光らせるだけの簡単な ヤツですが、さくっと動作。しかもシリアルデバック機能を使ってステップ実行で 動作を確認しました。いやぁ〜こんな小さなマイコンのくせにバッチリデバッグできる じゃないですか!しかも無償のツールでっ!!ちょっと感動しちゃいました。 今までLEDやシリアルで一生懸命デバッグしてたのがむなしくなっちゃいましたよ。 3.3Vでもキッチリ20MHzで動きますしね〜良いです。今度ベンチマーク取ってみよう。 と言うわけで、RenesasのE8デバッガをサンハヤト で早速発注しちゃいました。ずっと欲しかったマイコンだけに、かなり入れ込んでます。 |
リンク切れや間違いのご指摘、アドバイス、ご相談、
内緒の情報、個人的な連絡は
mimiin at qj9.so-net.ne.jpまでご連絡ください。