TPU1の位相計数モードについて

RX630で2つモータの角度制御を行うために位相計数モード1を使っています。片方のモータはTPU2を使用して、TCLKCとTCLKDに入力したA相B相では無事にカウントが読めて制御がかかっています。同じ設定でTPU1を使用して、TCLKAとTCLKBにA相B相で角度制御しようとしたところ、カウントが読めません。以下に初期設定のコードを添付いたします。よろしくお願いいたします。

#include "iodefine.h"

void enc_init(void){

// レジスタプロテクション機能解除

        SYSTEM.PRCR.WORD = 0xA503;

// 16ビットタイマパルスユニット0(ユニット0) ストップ状態解除

MSTP(TPU1) = 0;

MSTP(TPU2) = 0;

// レジスタライトプロテクション設定

        SYSTEM.PRCR.WORD = 0xA500;

/* IOポート設定 */

// ポートモード選択

PORT1.PMR.BIT.B4 = 0x01; // 周辺機能として使用

PORT1.PMR.BIT.B5 = 0x01; // 周辺機器として使用

PORT1.PMR.BIT.B6 = 0x01; // 周辺機能として使用

PORT1.PMR.BIT.B7 = 0x01; // 周辺機器として使用

// ポート方向選択

PORT1.PDR.BIT.B4 = 0x00; // 入力 (TCLKA)J2.4

PORT1.PDR.BIT.B5 = 0x00; // 入力 (TCLKB)J2.5

PORT1.PDR.BIT.B6 = 0x00; // 入力 (TCLKC)J2.6

PORT1.PDR.BIT.B7 = 0x00; // 入力 (TCLKD)J2.7

/* マルチファンクションピンコントローラ設定 */

// 書き込みプロテクト解除

MPC.PWPR.BIT.B0WI = 0x00;

MPC.PWPR.BIT.PFSWE = 0x01;

// 端子機能制御選択

MPC.P14PFS.BIT.PSEL = 0x04; // 周辺機能を選択する(TCLKA)J2.4

MPC.P15PFS.BIT.PSEL = 0x04; // 周辺機能を選択する(TCLKB)J2.5

MPC.P16PFS.BIT.PSEL = 0x04; // 周辺機能を選択する(TCLKC)J2.6

MPC.P17PFS.BIT.PSEL = 0x04; // 周辺機能を選択する(TCLKD)J2.7

// 書き込みプロテクト設定

MPC.PWPR.BIT.B0WI = 0x01;

MPC.PWPR.BIT.PFSWE = 0x00;

/* TPUの位相計数設定 */

// 位相計数モードの選択

TPU1.TMDR.BIT.MD = 0x04; // 位相計数MODE 1(4逓倍)

TPU2.TMDR.BIT.MD = 0x04; // 位相計数MODE 1(4逓倍)

// カウント動作開始

TPUA.TSTR.BIT.CST1 = 0x01;

TPUA.TSTR.BIT.CST2 = 0x01;

}

Parents
  • 上記コードをコピペして実行してみましたが、

    TPU1.TCNT
    TPU2.TCNT

    は動きました。TCNTが全く動かないのか、期待する値にならないのかどちらでしょう?

    お使いのボードに、USBコネクタは付いていないでしょうか。P14/USB0_DPUPEが悪さをしているという可能性はないでしょうか。もしくは、CANコネクタが付いていて、P15/CRX1にCANのトランシーバが接続されているということはないでしょうか。(そもそも、入力端子に思ったような波形(エンコーダ出力)が入っていないという事もあり得るかと思います。)

  • tfさん 返信ありがとうございます。

    デバッカーでみると0と1を交互に表示したり、65535と0を交互に表示します。使用しているボードは北斗電子のHSBRX630PでUSBコネクタはついています。P15は評価用スイッチに接続しているようなのですが、この場合他のTCLKAとTCLKBを使うしかないのでしょうか。入力端子ににはエンコーダ出力の波形がA相B相ともに確認できております。

  • >デバッカーでみると0と1を交互に表示したり、65535と0を交互に表示します。

    これを見ると、「位相計数モードの設定は合っているが、片方の相入力が無い」と考えられます。

  • CANのトランシーバはP15にはつながっていない。P15はプルアップなので、エンコーダ出力が勝つでしょう。P14は、USBのプルアップ制御につながっていそう。1.5kΩで、USB D+につながっているとすると、こちらもエンコーダ出力が勝ちそうな気がします。

    デバッガで、適当なタイミングで止めて、PORT1.PIDR.B4, PORT1.PIDR.B5を観測。レジスタのリフレッシュボタンを何回か押し、0x0, 0x1の両方の値が観測出来るでしょうか。どちらかの端子が、0x0のみ、または0x1のみに固まっていないでしょうか。(怪しいのは、PORT1.PIDR.B4の方)

    入力端子をオシロ等で観測して、期待の波形になっていれば、期待通り動きそうですが。

    ↑添付のコードを貼り付けただけ。P14とP16を接続、P15とP17を接続して、入力に適当なパルスを入れた場合。

Reply
  • CANのトランシーバはP15にはつながっていない。P15はプルアップなので、エンコーダ出力が勝つでしょう。P14は、USBのプルアップ制御につながっていそう。1.5kΩで、USB D+につながっているとすると、こちらもエンコーダ出力が勝ちそうな気がします。

    デバッガで、適当なタイミングで止めて、PORT1.PIDR.B4, PORT1.PIDR.B5を観測。レジスタのリフレッシュボタンを何回か押し、0x0, 0x1の両方の値が観測出来るでしょうか。どちらかの端子が、0x0のみ、または0x1のみに固まっていないでしょうか。(怪しいのは、PORT1.PIDR.B4の方)

    入力端子をオシロ等で観測して、期待の波形になっていれば、期待通り動きそうですが。

    ↑添付のコードを貼り付けただけ。P14とP16を接続、P15とP17を接続して、入力に適当なパルスを入れた場合。

Children
No Data