Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント

[C17] Re: ブログお引越ししました

了解です!
  • 2011-03-25 02:43
  • DT
  • URL
  • 編集

[C16] ブログお引越ししました

ブログお引越ししました。リンク貼り直しよろしく!http://arpp.blog86.fc2.com/
  • 2011-03-22 03:29
  • matsu
  • URL
  • 編集

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rmfvru.blog14.fc2.com/tb.php/8-382cfc1a
この記事にトラックバックする(FC2ブログユーザー)

+8軸サーボ基盤

そんなに書くネタなんて積もらないですよ
本とかゲームじゃないんだから

※マイコンはSH7125使ってやりました。
※ICはどっちも千石で買いましたよー

で、今回作ったのが+8軸サーボ基盤です。
中身はそのまんま東、サーボをより制御できるようにしただけです。
正確に言うとPWM一つ使っちゃうので8-1=7軸サーボ基盤なのですが
実際はんだしたらこんな感じですね
+8軸表
+8軸裏

汚いとかいわないで!

写真みたらわかると思いますが、3入力です。
PMWと周期と初期化
の三つです

簡単に説明しますと図のように

デマルチ

サーボの周期が20ms(って決まってるわけじゃないですけどね)とすると、パルス幅がせいぜい最大2.5msしかないことに注目して、じゃあ、その2.5ms以外の17.5msの間に別のサーボ制御しちゃおうぜ! っていう回路です。
ちなみにこの回路を使うと2.5msで周期クリアします。
だから、制御の細かさもかなり上がってます。
42500分割っぽいです。
こんなに使うの?って言われると 使う人は使うんじゃない? って感じです


その一つのPWMを8つにわけるのにデマルチプレクサ TC4051BF使ってます
で、もう一つのICがD-flipflopですね
こいつで、デマルチの出力の選択を制御してます。
まあ、こんな感じにデマルチの出力ピンを選択する事が出来るのですが、

デマルチ真理値表

このA,B,CをD-flipflopの1/2パルスにしちゃうのを利用して作ります。

DFF表

このパルスはPWMの周期クリアフラグで反転を行います。
ここで注意なのですが、波形の作り方は
PWMの立ち上がりを 初期値が0、コンペアマッチで1(デューティ)
PWMの周期を    初期値が0、コンペアマッチで0(周期)
という風にしてください
じゃないとノイズ乗ります。

とりあえず、8つ全部出力したら、ちょっとだけ初期化挟んでループ って流れです

で、回路図がこちら

8軸回路図

この回路図にのってないんですが(なぜにのってないし……)デマルチの出力は抵抗でGNDと結んであげてください。出力選択されてないピンはフリーになってしまうので。プルダウンでしたっけ? プルアップでしたっけ?

で、最後にプログラム
MTUの設定と割り込み処理のところだけでいいよね?

MTU2の設定
STB.CR4.BIT._MTU2=0; //MTU2の機能解除
//チャネル0の設定(PE0-TIOCAからの出力)
MTU2.TSTR.BIT.CST0=0; //カウントストップ
MTU20.TMDR.BIT.MD=2; //PWM1を使用します
MTU20.TCR.BIT.CCLR=1; //TGRAでカウントクリア(周期)
MTU20.TCR.BIT.CKEG=0; //立ちあがりエッジでカウント
MTU20.TCR.BIT.TPSC=0; //MPφ/1でクロック
MTU20.TMDR.BIT.BFE=0; //TGRE_0とTGRF_0を通常使用(バッファとして使用しない)
MTU20.TMDR.BIT.BFB=0; //TGRBとTGRDを通常使用(バッファとして使用しない)
MTU20.TMDR.BIT.BFA=0; //TGRAとTGRCを通常使用(バッファとして使用しない)
MTU20.TIOR.BIT.IOB=2; //TGRBを初期値を0、コンペアマッチ値を1
MTU20.TIOR.BIT.IOA=1; //TGRAを初期値を0、コンペアマッチ値を0
MTU20.TGRA=60000; //CMTする値(周期)
MTU20.TGRB=3025; //CMTする値(デューティ)
MTU2.TSYR.BIT.SYNC0=0; //TCNT0を独立動作
MTU2.TSTR.BIT.CST0=1; //TCNT0をカウントスタート
MTU20.TIER.BIT.TGIEA=1; //TGRAの割り込み許可
INTC.IPRD.BIT._MTU20C=15;
INTC.IPRD.BIT._MTU20G=15;

周期割り込み
int freuqency_flag=0;
int pwm_mode=8;
void INT_MTU2_0_TGIA0(void){
// MTU2.TSTR.BIT.CST0=0;

while(MTU20.TSR.BIT.TGFA==1){
MTU20.TSR.BIT.TGFA=0;
}

if(freuqency_flag==1){
PE.DRL.BIT.B1=1;
freuqency_flag=0;
}else{
PE.DRL.BIT.B1=0;
freuqency_flag=1;
}

if(pwm_mode<8){
if(pwm_mode==0){
PE.DRL.BIT.B1=1;
MTU20.TGRA=60000;
}
MTU20.TGRB=3205+pwm1[pwm_mode];
pwm_mode++;
}else if(pwm_mode==8){
PE.DRL.BIT.B1=0;
PE.DRL.BIT.B2=0;
MTU20.TGRA=3000;
freuqency_flag=1;
pwm_mode++;
}else if(pwm_mode==9){
PE.DRL.BIT.B1=0;
PE.DRL.BIT.B2=1;
freuqency_flag=1;
pwm_mode=0;
}
}

pwm1[]という配列をグローバル変数にしてあげて、ここに数字をぶち込むとサーボが変化しますよ
プログラム汚いけど、許してくれぷっちょ
深夜のテンションで書いてるから非常にウザい日記ができとる……
あと、絶対に説明不足だ……
まあ、回路図とプログラムがあるから大丈夫でしょ

VRっぽいもの作りたいので、合間をぬってホログラムでも作ろうかなと思います。
あと、シリアル通信うまくいきました といっても受信が確認できただけですが
送受信の確認ができたら、また書きます
では、おやすみなさい ぐーぐー
スポンサーサイト

コメント

[C17] Re: ブログお引越ししました

了解です!
  • 2011-03-25 02:43
  • DT
  • URL
  • 編集

[C16] ブログお引越ししました

ブログお引越ししました。リンク貼り直しよろしく!http://arpp.blog86.fc2.com/
  • 2011-03-22 03:29
  • matsu
  • URL
  • 編集

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://rmfvru.blog14.fc2.com/tb.php/8-382cfc1a
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。