« 2006年02月 | メイン | 2006年04月 »

2006年03月31日

SH2でタイマーを使わずにサーボ制御(出力完成)

下記のコード(主要部分を抜粋)で、24軸のサーボ制御パルスを出力できました。
クリスタル6.144MHz(CPU内部で4倍するので 24.576MHz)、プログラムは内蔵フラッシュ、RAMは内蔵RAM、メモリアクセスのウェイトはゼロ、という条件で、パルスの分解能は 4.8832 μ秒(ロジアナで計測)となりました。
700μ秒~2300μ秒の時間を作るには、各チャンネルの数値を、144~470の範囲で与えればOKです。
キャラクタリスティックチェンジも全体のループ回数とチャンネルごとの数値を変えることで対応できます。
明日からは、ポジションキャプチャにトライします。

define    lPortDH    r10
define    lPortB    r11
define    wpPtr    r12
define    lCnt    r13

    mov    #0,lCnt
;--------------------------------------------------
_ServoOutLoop:
    mov.l    _Imm500,r4
    cmp/ge    r4,lCnt
    bf    _Skip
    bra    _ServoOutLoopEnd
    nop
_Skip:
    mov.l    _lTmpOutAdr,wpPtr
;-----------------
    mov    #0,lPortDH
    mov    #0,lPortB
;    mov    #0,lPortAL
;--------------------------------------------------
;--- PD31
    mov.w    @wpPtr,r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD30
    mov.w    @(2,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD29
    mov.w    @(4,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD28
    mov.w    @(6,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD27
    mov.w    @(8,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD26
    mov.w    @(10,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD25
    mov.w    @(12,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD24
    mov.w    @(14,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD23
    mov.w    @(16,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD22
    mov.w    @(18,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD21
    mov.w    @(20,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD20
    mov.w    @(22,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD19
    mov.w    @(24,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD18
    mov.w    @(26,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD17
    mov.w    @(28,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PD16
    mov.w    @(30,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortDH        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--------------------------------------------------
    add    #32,wpPtr
;--------------------------------------------------
;--- PB9
    mov.w    @wpPtr,r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortB        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PB8
    mov.w    @(2,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortB        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PB7
    mov.w    @(4,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortB        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PB6
    mov.w    @(6,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortB        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PB5
    mov.w    @(8,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortB        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PB4
    mov.w    @(10,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortB        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PB3
    mov.w    @(12,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortB        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;--- PB2
    mov.w    @(14,wpPtr),r0    ; 出力するパルス幅のデータを取得
    cmp/gt    lCnt,r0        ; r0 > lCnt のとき T=1
    rotcl    lPortB        ; 出力データ取りまとめ変数にTフラグの内容をシフト
;-----------------
    shll2    lPortB
;--------------------------------------------------
    mov.l    _PDDRH,r6
    mov.w    lPortDH,@r6
    mov.l    _PBDR,r6
    mov.w    lPortB,@r6
;--------------------------------------------------
    bra    _ServoOutLoop
    add    #1,lCnt
;--------------------------------------------------
_ServoOutLoopEnd:
;
_ServoOut_end_:

_Imm500:    dc.l    $000001F4    ; =500
_PADRL:    dc.l    $FFFF8382
_PBDR:    dc.l    $FFFF8390
_PDDRH:    dc.l    $FFFF83A0

投稿者 hiranoy : 02:19 | コメント (0)

2006年03月30日

SH2でタイマーを使わずにサーボ制御

昨日から風邪を引いてしまいました。最初、今年も花粉症が来たかと思ってたら、数時間後に熱が出てきました。
病院でもらった薬でだいぶ落ち着いてきたのですが、仕事は休みました。

24時間寝てるわけでもないので、ベッド上で出来る作業をということで、SH2を使って、タイマー機能を使わずにソフトのみでサーボのパルスとポジションキャプチャを行うことにチャレンジします。

投稿者 hiranoy : 18:22 | コメント (0)

2006年03月29日

大同工大バトルとRoboCountryIVにエントリー

日曜日のネタなのですが、
名古屋で4/15(土)開催の大同工大ロボットバトルと、香川で4/23(日)開催のRoboCountryIVにエントリーしました。
交通手段はいつもの夜行高速バスにしようかどうしようか迷いましたが、仕事が立て込んでるので、名古屋は新幹線、香川は飛行機としました。両日とも日帰りです。
飛行機がぎりぎり4週間前で安かったのはうれしい誤算でした。

投稿者 hiranoy : 01:38 | コメント (0)

2006年03月28日

もらったブラケットを早速活用

060328Gurad3.JPG
アールティでいただいた、イトーレイネツのブラケットで早速メカボンBの胴の前のケーブルガードを作りました。

そのままでは付かないので、切って、曲げて、穴を開けて、タップを立てて、使いました。

腰のヨー軸をつけたので、ガードの内側の区間にケーブルを通して、旋回時にある程度動くようにしています。

投稿者 hiranoy : 03:40 | コメント (0)

2006年03月27日

アールティを訪問

午前中に、アールティを訪問してきました。
イトーレイネツブラケット・プレゼントをいただきに。
「ゆ」さんも、たまたま買い物にいらっしゃってました。

いろんな部品がありました。どういう風に使っていたか分からないようなものまで。
反対軸が無い時代のサーボブラケットを見ながら、(私はいろいろロボット専用パーツが出始めて2足を始めたので)昔の方たちは苦労していたんだなと、しみじみ思いました。

ここでお約束のひとこと

イトーレイネツは太っ腹!!」

ありがとうございました。アングルや足裏などいただきました、活用させていただきます。

それから部品を頂きに行っただけなのにお茶やお菓子を出してくださった

アールティも太っ腹!」

ごちそうさまでした。

そして、先週アールティのミステリーバーゲンで頼んでいた2350HV10個セットも、丁度発送前だったとかで、受け取って参りました。

投稿者 hiranoy : 18:45 | コメント (0)

2006年03月26日

メカボンBを改造

ARMのプログラミングをやる予定でしたが、4/1の練習会に参加したいと思い、メカボンBの改造を行いました。
・HVをやめる。(HVは新しく作るロボットにまわす)
・HVをやめるので背を低くする→足のヨー軸のサーボを縦置きから横置きに変更
・足首ロール軸無しで歩けるかのテスト
といったテーマでの改造です。

で、出来たのが下の写真です。今日はメカのみ。
060326Bonb.JPG

投稿者 hiranoy : 07:57 | コメント (0)

2006年03月25日

ARMボード、配線ミスしました

060325DWbrd2.JPG
DesignWave付録のARMボードですが、昨日の作業で取り付けたRS232C用のD-SUB9ピン(メス)のコネクタは、ピン番が合っていませんでした。ボード上のパターンはオスコネクタ用だそうで、並びが逆になります。USBシリアル変換ケーブルに直結したいので、メスコネクタはあきらめたくない。そこで線を引っ張り出して対処しました。今日の作業はココまで。

そういえば、今日発売のインターフェース誌の次号予告に載っていたのですが、次号(4月25日発売)のインターフェース誌には、SH2/7144FのCPUボードが付録になるようです。SRAM用のパターンもある(チップは未実装)とか。4層基板だとか。SH2をメインで開発している私は5冊ぐらい買ってしまいそうです。

投稿者 hiranoy : 03:28 | コメント (0)

2006年03月24日

付録のARM基板の検討の準備

060324DWbrd1.JPG
DesignWaveの付属基板をちょっと進める。
内藤さんの「なひたふJTAG日記」
にしたがって、バイパスコンデンサを26,27ピンとGNDの間に半田付け。最初チップコンデンサをつけようと試みたものの、手持ちのチップコンデンサがでかすぎたので断念。GND側は、スルーホールのところのレジストを1mmのドリルで軽く揉んで剥がして使いました。
電源コネクタとD-SUB9ピンコネクタも半田付け。今日はココまで。

投稿者 hiranoy : 03:11 | コメント (0)

2006年03月23日

DesignWave3月号購入

060322DW.JPG
遅まきながらDesignWave2006年3月号購入を購入しました。2冊。
目当ては、付録のARM基板。
アナデバ(AnalogDevices)のARMチップなので、A/Dコンバータは他社のARMよりちょっと良くて12bit。
欲を言えば16bitA/Dを乗せて欲しかった。16bitA/Dが載ってたら仕事でも使います。
他に簡単なプログラマブルロジック回路(PLA)が付いて2180円は安いですね。
今週末は、サーボの信号を出してみるつもりです。うまく行ったらソースをアップします。

投稿者 hiranoy : 04:07 | コメント (0)

2006年03月22日

4014用フリーホーンは使える!

060322FreeHorn.JPG
4014用のフリーホーンなんですが、M3のネジで固定できるので、反対軸を自作するときにも重宝しそうです。

投稿者 hiranoy : 03:19 | コメント (0)

2006年03月18日

第9回ROBO-ONEに参加

ギリギリまで粘って作業をしましたが、予選参加を断念しました。
でもまあ配線作業の続きをやろうということで、ロボと道具を持って、9時半に次男と出発。

会場に着くと、10時50分くらい。受付してもらえるか心配でしたが、受付してもらえ控え室へ。
席はNAGさんのお隣り。みなさんに挨拶。

長男も昼前に到着し、長男と次男は会場で観戦。私は、控え室で配線しながらモニター観戦。
結局予選開催中は1度も会場に行きませんでした。

自分の作業の進め方や、ロボットの方針など、いろいろ考えてしまった大会でした。
第10回大会は、地道な作業の積み重ねが必要だと感じました。

060322Bonb.JPG

投稿者 hiranoy : 23:01 | コメント (0)

2006年03月17日

最後の追い込み

今日も休みをもらって作業。(3週連続、金曜に休みをもらいました)
ただ今日は、次男の小学校の卒業式というイベントもありましたので、作業だけではないのです。

で、大会前日というのに、先ほど金属加工が終わって、今から配線に取り掛かろうという状態。
先週、スラストベアリングが手に入って、やっぱり、腰ヨー軸追加をやり始めました。これが遅れの元。
軸数も、軸配置も変わったので、予選に出られる確率5%くらいか。

まあ、寝ずに頑張ります。

投稿者 hiranoy : 23:54 | コメント (0)

2006年03月11日

秋葉へ買出し

今週も金曜日に休みをもらった。
サーボのケーブルをフリーホーンの中心から出すと、サーボブラケットが広がって、だんだん外れてくるというのが、去年の連戦の中で分かったので、フリーホーン側をきちんとネジ止めすることに。また、追加した軸用のメタルホーンも無かったので、王国へ買出しに。

買ったもの
・ローハイトメタルホーン
・軸付きボトムケース

ついでに買ったもの
・ベステクATmega32ボード
・スラストベアリング(Robovieのやつ)

思いがけずスラストベアリングが手に入ったので、腰のヨー軸を作りたくなってしまった。

投稿者 hiranoy : 22:52 | コメント (0)

2006年03月04日

練習会参加断念

金曜日に休みをもらって改造に取り掛かる。
膝は他のサーボより速くしたいので2350HVダブルサーボ。
脚の残りのピッチ軸もHV化。
でも、バラバラになったところで朝。練習会への参加を断念しました。
なんかアールティーで開催の回は不参加になってます。

投稿者 hiranoy : 12:42 | コメント (0)