RX631にはMTU(マルチファンクションタイマパルスユニット)とTPU(16ビットタイマパルスユニット)という2つのタイマがある。
MTUのほうが高機能だが、DCモータの制御やエンコーダの位相係数を読む程度ならTPUでも十分。
FAULHABERのエンコーダを使う場合は5Vトレラント端子の数が多いTPUのほうが良い場合もある。
MTUとTPU共に、チャンネル毎に違いがあるが、A~Dのレジスタとそれに対応する出力端子がある。
PWMモード1ではAとCからしか出力できず、PWMモード2ではA~Dすべての出力端子から出力できる。
DCモータ2つを制御しようとすると、1つのチャンネルから2本のPWMを出したい。
PWMの周期を設定するためのレジスタが1つと、デューティ比を変えるレジスタ2つの計3つが必要なため、レジスタが4つあるMTU0、MTU3、MTU4、TPU0、TPU3が候補となる。
さらに、配線の自由度を高めるためにPWMモード2が選択できるもの、とするとMTU0、TPU0、TPU3のどれかを使うのがよい。
48ピンパッケージではMTUのほうが割り当てられているピンが多いため、MTU0のA~Dか、MTU3またはMTU4のAとCをPWMモード1で使うのがおすすめ。
レジスタの設定では以下のものが必要
MPCで出力するポートの機能の設定(P○○PFS、プロテクトを解除してから設定すること)
ポートモードレジスタで周辺機能に切り替え(PORT○.PMR)
モジュールストップ解除(MSTPCR、MSTP_MTU○ = 0;というマクロでも可)
動作周波数設定(TCR.BIT.TPSC)
どのレジスタのコンペアマッチでTCNTをクリアするか(TCR.BIT.CCLR)
PWMモードの設定(TMDR.BIT.MD)
(MTU3,MTU4を使う場合)端子の出力許可(TOER.BIT.OE○○)
コンペアマッチしたときの出力(TIOR○.BIT.IO○)
周期とデューティの設定(TGR○)
タイマースタート(TSTR.BIT.CST○)
ブザーで使う場合はPWMモードをノーマルモードに設定する。
A相B相の出力があるインクリメント型のエンコーダの出力を読み、TCNTをカウントする機能が位相係数モードである。
MTU、TPU共に位相係数モードを設定でき、MTU1、MTU2、TPU1、TPU2、TPU4、TPU5で使用できる。
このとき、エンコーダは以下の端子にAとB、CとDのペアで繋ぐこと。
以下に100ピンでの5Vトレラントのクロック入力を挙げる。
P14:TCLKA,MTCLKA
P15:TCLKB,MTCLKB
P16:TCLKC
P17:TCLKD
PC0:TCLKC
PC1:TCLKD
PC2:TCLKA
PC3:TCLKB
レジスタの設定では以下のものが必要
MPCで入力するポートの機能の設定(P○○PFS、プロテクトを解除してから設定すること)
ポートモードレジスタで周辺機能に切り替え(PORT○.PMR)
モジュールストップ解除(MSTPCR、MSTP_MTU○ = 0;というマクロでも可)
位相係数モードの設定(TMDR.BIT.MD)
タイマースタート(TSTR.BIT.CST○)