探索済み区画
これまで
区画を探索
カレンダー(月別)
12 ≪│2015/01│≫ 02
- - - - 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ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--(--) --:-- |
ステッピングモータ駆動用のパルス出力を行う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 |
検索フォーム
夢を叶えるための名言集


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