探索済み区画
これまで
区画を探索
カレンダー(月別)
09 ≪│2017/10│≫ 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
プロフィール

Suma

Author:Suma
東北の田舎でロボット開発に励んでいます。
現在のメインはマイクロマウス。目指すは東北地区大会優勝!!

ご注意
・当ブログはリンクフリーです ・当ブログの掲載情報を元に行った行為によって何らかの損害が生じたとしても管理人は一切責任を負いません。予めご了承ください。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--(--) --:-- |
先日の長井合宿にて、レンタルPi:CoでPi:Co杯に出場することになった
日曜に参加が決定したのだが、火曜日にはレンタル機が届いた
アールティさん仕事が早い

2015年度マイクロマウスキット大会Pi:Co杯

日時:7月26(日)
場所:山形県長井市館町北6番27号 (一財)置賜地域地場産業振興センター
詳細はニューテク財団のページ

マイクロマウスキット大会は市販されているマイクロマウスキットを使用した大会
今回はアールティさんより発売されているのマイクロマウスキットPi:Co Classicの大会となる
PiCoClassic
写真はVer1。現在は基板が黒いVer2に進化している。

私のPi:Coさんは東北マウス爽のソフトをまるっと移植中
マイコンがどちらもSH7125でマイクロマウスとしてのシステム(ステッピングモーター、壁センサ)もほぼ同じなので移植自体はそんなにかからない見込み

問題は車体の固有パラメータの調整
斜め走行に手を出さなければホイール径とトレッド幅を調整すれば済むのだが、せっかくなので斜め走行したいところ
何よりサンプルプログラム以上の走りはしたい

今週末の金沢大会に持って行って調整だ

2015/07/15(水) 23:28 | コメント:0 | トラックバック:0 |
7月にマイクロマウス東北支部長井合宿開催決定

日時:7月11(日)13:00~12(日)13:00
場所:山形県長井市館町北6番27号 (一財)置賜地域地場産業振興センター

<一日目>
・マイクロマウス製作講習会、各自機体調整
・懇親会
<二日目>
・プチ大会

マウサーの方々との交流してモチベーションを上げるチャンスでありフル迷路が使える数少ないチャンスでもある。
ちょうど金沢草の根大会の一週間前なので最終調整にはもってこいである

2015/06/27(土) 12:20 | コメント:0 | トラックバック:0 |
2/21(土)~22(日)にマイクロマウス合宿開催が決定
今回は新しく長井に生まれる3台のマウスの制作講習会とのこと

詳しくはマイクロマウス東北支部またはマイクロマウスつぐっぺ日記を参照

我々も負けてはいられない
4台目の東北マウスがこの合宿で走りだすはず、きっと
頑張っぺしKさん!!

2015/02/11(水) 10:14 | コメント:1 | トラックバック:0 |
ステッピングモータ駆動用のパルス出力を行うMTUの設定

ハードの接続は以下のとおり
・MTIOC4A:左モーター用パルス出力
・MTIOC7A:右モーター用パルス出力

最初にMTUのストップを解除しておく
SYSTEM.MSTPCRA.BIT.MSTPA9 = 0; //MTUストップ解除

MTUはICLKで動作するのでベースクロックは96MHz

まずは全MTUを停止状態としてから各レジスタを設定していく
MTU.TSTRA.BYTE = 0x00u; //全MTU停止
MTU.TSTRB.BYTE = 0x00u; //全MTU停止

以下にMTU4の設定を記載する
(MTU7も設定方法は同じため省略)
ベースクロックを64分周した1.5MHzをカウントクロックとして使用する
MTU4.TCR.BIT.CCLR = 1; //TGRAのコンペアマッチでカウンタクリア
MTU4.TCR.BIT.CKEG = 0; //UPエッジでカウント
MTU4.TCR.BIT.TPSC = 3; //ICLK/64でカウント

MTUのモードはGRAを周期、GRBをDutyレジスタとするPWMモード1を使用
また、GRCをGRAのバッファレジスタに設定
MTU4.TMDR1.BIT.MD = 2; //PWMモード1
MTU4.TMDR1.BIT.BFA = 1; //TGRAとTGRCはバッファ動作
MTU4.TGRA = 5299; //MTIOC4A 周期設定レジスタ
MTU4.TGRB = 50; //MTIOC4B Duty設定レジスタ
MTU4.TGRC = 5299; //MTIOC4C TGRAへのバッファレジスタ(速度設定先)
初期値としてTGRA,TGRB,TGRCに設定した値は、ベースカウントが1.5MHzなので
周波数283Hz、Duty≒1%

TCNTとTGRA、TGRBの値が一致(Compare Match)した時にMTIOC4A端子から出力するレベルを設定する
MTU4.TIORH.BIT.IOA = 2; //TGRA:初期値0、CMで1出力
MTU4.TIORH.BIT.IOB = 1; //TGRB:初期値0、CMで0出力

ステッピングモータへ出力したパルス数をカウントするためにTGIA割り込みを使用する
MTU4.TIER.BIT.TGIEA = 1; //TGIA割り込み許可

TCNTのカウント方向を設定し、フラグとカウンタををクリアしておく
MTU4.TSR.BYTE = 0xC0; //TCNTはアップカウント,フラグクリア
MTU4.TCNT = 0;

最後にMTU波形出力許可を設定する
MTU.TOERA.BIT.OE4A = 1;

MTUの設定はこれで完了
次にMTIOC4A端子(P72)を出力端子に設定
PORT7.DDR.BYTE = 0x7Du;

割り込みの設定もタイマー割り込みと同様に設定しておく
ICU.IPR[0x59u].BIT.IPR = 3; //MTU4割り込み優先度設定
ICU.IER[0x10u].BIT.IEN6 = 1; //MUT4 TGIA4割り込み許可

後はタイマーをスタートすればMTIOC4A端子から波形が出力される
MTU.TSTRA.BIT.CST4 = 1;

波形出力と同時に1パルス出力する度に割り込みが発生する
パルス数をカウントする割り込み関数は以下の通り

#pragma interrupt (Excep_MTU4_TGIA4(vect=134))
void Excep_MTU4_TGIA4(void) {
 u8 dummy;
 dummy = MTU4.TSR.BIT.TGFA;
 MTU4.TSR.BIT.TGFA = 0;
 u32LeftMotorStep++;
}
TGFAビットは1を読んだ後に0を書きこむとクリアされる

これで、TGRAの値を変更すれば出力するパルスの周波数を変更できる
つまりステッピングモーターの場合は回転速度を変更できることになる
ただし、走行中にTGRAの値を更新した場合は更新タイミングによって出力波形の周波数が乱れる場合がある

これはステッピングモータの脱調を誘発するために対策が必要
ステッピングモーターを高速で回転させている場合、この対策がないとあるタイミングでカツっと一瞬止まるような動作となってしまうことがあった

バッファ動作機能を使用すると出力波形が乱れないタイミングで自動的にTGRAを更新してくれるため非常に便利である

以下はTGRAの値をTGRA’に更新する際の動作をタイミングチャートで示したもの
RX62T_MTU_PWMモードでのバッファ動作




2015/01/12(月) 23:00 | コメント:0 | トラックバック:0 |
今回はAD変換
RX62T内蔵の12bitA/Dコンバータ(S12AD)を使用する

最初にS12AD0とS12AD1のストップを解除しておく
SYSTEM.MSTPCRA.BIT.MSTPA16 = 0; //12bitAD1ストップ解除
SYSTEM.MSTPCRA.BIT.MSTPA17 = 0; //12bitAD0ストップ解除

S12ADはPCLKで動作するためベースクロックは48MHz
今回はベースクロックを8分周して使用する
サンプリング時間は0.4us以上とするようにマニュアルに記載があるため、0.5usに設定
サンプリング時間は本来回路のアナログ特性から時間を決めるべきだが、目的の値が読めていればいいので今回は適当に最速に設定
なお、SH7125からの移植が目的なので変換精度はSHのADCに合わせて10bitに設定した

S12AD0.ADCSR.BYTE = 0x00u; //ADC停止、Clock=PCLK/8、シングルモード
S12AD0.ADCER.WORD = 0x0103u; //サンプルホールド回路未使用、変換データ右詰め、変換精度10bit
S12AD0.ADSSTR = 3; //サンプリング時間=0.5us
S12AD1.ADCSR.BYTE = 0x00u; //ADC停止、Clock=PCLK/8、シングルモード
S12AD1.ADCER.WORD = 0x0103u; //サンプルホールド回路未使用、変換データ右詰め、変換精度10bit
S12AD1.ADSSTR = 3; //サンプリング時間=0.5us

次にAD変換処理を記載する
AN000~AN003はS12AD0、AN100~AN103はS12AD1となることに注意

u16 AdConvert(u8 u8Ch) {
 u16 u16LocalAdValue = 0;
 if (u8Ch <= 3) {
  S12AD0.ADANS.WORD = (u8Ch << 12); //変換チャンネル指定
  S12AD0.ADCSR.BIT.ADST = 1; //AD変換開始
  while(S12AD0.ADCSR.BIT.ADST == 1); //AD変換完了まで待つ
  /* --- Get ADC value --- */
  switch (u8Ch) {
   case 0 : u16LocalAdValue = S12AD0.ADDR0A; break;
   case 1 : u16LocalAdValue = S12AD0.ADDR1; break;
   case 2 : u16LocalAdValue = S12AD0.ADDR2; break;
   case 3 : u16LocalAdValue = S12AD0.ADDR3; break;
   default : break;
  }
 } else if ((4 <= u8Ch) && (u8Ch <= 7)) {
  S12AD1.ADANS.WORD = ((u8Ch - 4) << 12);
  S12AD1.ADCSR.BIT.ADST = 1;
  while(S12AD1.ADCSR.BIT.ADST == 1);
  /* --- Get ADC value --- */
  switch (u8Ch) {
   case 4 : u16LocalAdValue = S12AD1.ADDR0A; break;
   case 5 : u16LocalAdValue = S12AD1.ADDR1; break;
   case 6 : u16LocalAdValue = S12AD1.ADDR2; break;
   case 7 : u16LocalAdValue = S12AD1.ADDR3; break;
   default : break;
  }
 } else {
  /*none*/
 }
 return(u16LocalAdValue);
}

例としてAN100につながっているボリュームのAD値を読みたい場合は以下のようにする
volumeAdValue = AdConvert(4);

2015/01/12(月) 11:35 | コメント:0 | トラックバック:0 |
検索フォーム
夢を叶えるための名言集


presented by 地球の名言
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。