05月02日(火) 05月03日(水) 05月05日(金) 05月05日(金) 05月13日(土)
時間のあるときにOAKS-miniでAX-12のプログラムをしていたのですが、 全く反応がありません・・・ あれこれやっても、うんともすんとも言やぁしない・・・
で、へんだなぁと思っていたのですが(もちろん何か間違っているのかもしれませんが)・・・
BestTechnologyのホームページに Dynamixel AX-12 ファームウェア変更のお知らせが出ていました。 出荷時の通信速度がいつのまにか1Mbpsになってます・・・とほほ・・・
OAKS16-miniで1Mbpsを設定しようとすると、 転送速度レジスタに設定する値は0.25を四捨五入して・・・0!
しかし、0で設定すると通信速度は1.25Mbpsで25%も違っています。 さすがにこれではダメだろうなぁ・・・
そういうわけで、(通信速度の変更をするまで)OAKS-miniでは通信できないようです。
ここで投げ出すのもなんなので、もう少しスピードのあるボードを使ってみます。 どれにしようかなぁ・・・
OAKS-miniの拡張ボードの回路図などを見るとUART1とパソコンをつなぐようになっているのですが、 サンプルはなぜかUART0のエコーバックだったりします。 で、ちょっと書き直して実行。
.lword dummy_int ; uart2 transmit(for user)(vector 15) .lword dummy_int ; uart2 receive(for user)(vector 16) .lword dummy_int ; uart0 transmit(for user)(vector 17) .lword dummy_int ; uart0 receive(for user)(vector 18) .lword dummy_int ; uart1 transmit(for user)(vector 19) .glb _receive ; .lword _receive ; uart1 receive(for user)(vector 20) |
/****************************************************/ /* プロジェクト名: sci01 */ /* ファイル名: sci.c */ /* 内容: UART1エコーバックプログラム */ /* 日付: 2006.05.05 */ /* コンパイラ: NC30WA (Ver.4.00) */ /* 作成者: ono */ /****************************************************/ /* 転送速度:19200pbs */ /* (20M/19200/16=65:よって設定値は65-1) */ /* データ長:8bit ストップビット:1 パリティ:なし */ /* インクルードファイル */ #include "sfr26.h" /* OAKSmini用定義ファイル */ /* プロトタイプ宣言 */ int main(void); /* メイン関数 */ void uart1ini(void); void receive(void); /* 割込み関数 */ #pragma INTERRUPT receive /* マクロ定義*/ #define U1_BRG 64 /* 転送速度レジスタの設定値 */ /************************************************************************** メイン関数 : main() **************************************************************************/ int main(void) { uart1ini(); /* uart1初期設定 */ _asm( "\tFSET I"); /* 割り込み許可 */ while(1); return(0); } /************************************************************************** * uart1初期設定関数 : uart1ini() **************************************************************************/ void uart1ini(void) { u1mr = 0x05; /* 送受信モ−ドレジスタ 内部クロック */ /* 非同期、8ビット、パリティなし、*/ /* スリープなし */ u1c0 = 0x10; /* 送受信制御レジスタ0 クロックf1選択 */ u1brg = U1_BRG; /* 転送速度レジスタ */ s1ric = 0x06; /* 割込みレベルの設定 */ u1c1 = 0x05; /* 送受信制御レジスタ1 送受信許可 */ } /************************************************************************** * 受信割込み関数 : receive() **************************************************************************/ void receive(void) { int rdata; /* 受信バッファ */ rdata = u1rb; /* データ受信 */ rdata &= 0x0ff; /* 受信データ送信 */ u1tb = rdata; } |
文字列送信関数などを作る必要があるなぁ・・・
OAKS16(TMの環境構築)の時には TeraPadを使っていたのですが、 その後調べていたらXYZZYでも行を指定して開けることがわかりました。
ところが、情報がどこにあったのか分からず。 延々と探し回った挙句、解凍したところに「html」というフォルダがあり、 その中の「00README.html」というファイルに書いてあることが判明しました。
「Parameter」は「%F -g %L」。
ln30のときの-ORDER は不要。
付属CDに入っている、スタートアッププログラム(ncrt0.a30)と セクション定義ファイル(sect30.inc)、OAKSmini用定義ファイル(sfr26.h)を利用する。
AX-12はシリアルで制御をするので、 そのためにシリアルのポートがひとつ必要になります。
データはパソコンから送信し、 受信データもパソコン側で表示したいので、 そのためにもシリアルポートが必要になり、 合計で二つのシリアルポートがいることになります。
幸いOAKS-miniは安価な割りにシリアルが2ポートあるのでこれを使うことにしました。
シリアル0をAX-12用に、シリアル1をパソコンとの通信に使います。
AX-12はTTLレベルですので、つながっているHJP3と4をそれぞれ切断し、 CN1-23とCN1-24に短絡させました。
AX-12は3ピンしかなく、
というふうにつなぐらしいのですが、ICがなかったので、
という接続の仕方を採用することにしました。 (BestTechnologyのホームページに載っていたものです。)
歩行に関する簡単な計算をしていたのですが、 途中でMicroMGの精度とか LBC(Little Burning Core:©宮田耕自氏)の性能とかが気になりだしました。
そこで次期モータとマイコンボードを物色中・・・
今のところコントローラは、 AT91SAM7S128マイコンボードと SAM7S I/Oボード(TTL)、 モータはDynamixel AX-12で どの程度できるかやってみようと思っています。
本当はDynamixel DX-117が 欲しいんですよね・・・でも予算が・・・
KRS-4014HV ICS Red Versionは 値段的にも今使うことを考えても最も現実的。 しかし、しばらくモータは買えないことを考慮すると、機能的にいまひとつな気が・・・
FUTABAのモータは機能的には最も充実しているが、値段がわからないしトルク的にちょっと弱い気が・・・
モータについては、さらに魅力的な商品が出てくることを期待して・・・とりあえずAX-12をいじってみようかと・・・
もちろん、計算の続きのもやりますが・・・
Dynamixel AX-12は、 いくつか用意したのですが、 AT91SAM7S128マイコンボードと SAM7S I/Oボード(TTL)は すぐには買えません(@@)/
そこでしばらくはOAKS-miniでAX-12を動かすことに挑戦してみたいと思います。
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||