はじめまして。
マイコンプログラム初心者です。
H8/3694Fを搭載したライントレースカーを作っています。
2つのモータをPWM駆動するために、タイマWのPWM出力機能を使っています。
GRAを周期レジスタ、GRBをFTIOB端子のPWM出力カウンタ。GRCをFTIOC端子のPWM出力カウンタとして使っています。
このとき、GRDを使って、FTIOD端子にエンコーダ信号を入力して、インプットキャプチャ動作をおこなわせることはできるものでしょうか?
タイマWとしてはキャプチャできると思いますが、実用的ではない感じがします。
PWM周期(ほぼ一定)とエンコーダの信号周期(速度により広範囲)が食い違うというのがその理由です。
エンコーダ信号で割り込みを発生させてカウントし、別タイマで一定周期毎にカウント数を調べて、回転量を推測するというのはどうでしょうか。
なお、エンコーダに対応したタイマは、ルネサスでは位相係数モードという呼び名のモードを持っています。
H8でも違う型番やSH,RXなどは、このモードを持っているのをよく見かけます。
Higetakeさん。こんにちわ。アドバイスいただきありがとうございます。
タイマAは既に使用しているので、タイマVを使用します。
アイデアとして、次を考えています。
エンコーダ信号を/IRQ3/TRGV端子に接続し、
タイマVを内部クロック(φ/128)6.4μS周期でカウントさせます。
立下り信号で、タイマVのカウントを開始します(TRGV端子機能)
立上り信号で、タイマVカウンタの現在値を取得します(/IRQ3端子機能の立ち上がり割り込みを利用)
これだと、エンコーダの立下りから立ち上がりまでを6.4μS×255倍した1.6ms位の幅の信号は図れますが、
実際のエンコーダのパルス幅はもっと大きいものもあり、もうすこし100ms程度のパルス幅も図りたいのですが
この場合は、オーバフロー割り込みで桁上がりをカウントするのでしょうか・・・
このような、イメージなのですが。速度により広範囲のエンコーダの信号周期をを測定するのに、
よい例があれば教えていただけますでしょうか。
エンコーダ信号のLow期間を毎回測定しようとすると、そのようなやり方になります。
別のやり方として、一定時間毎に何回パルスが得られたかで、平均速度を求めるというのはどうでしょうか。
この方式の弱点は、低速になるほど誤差や変動が大きくなる事です。
この弱点は制御で工夫して克服する事になります。
エンコーダは1個ではなく、2個あると思っているのですが、タイマ固有の機能を使うなら、そこも考慮に入れておかないと手詰まりになります。
確認ですが、どんなエンコーダを使っていますか?(シンプルな1相だけのもの?それとも回転方向がわかるタイプ?)
Higetakaさん。ありがとうございます。使っているエンコーダは、今のところ1個ですが、
将来は2個使う予定です。タイプは、A相とB相の2相ですが、使う信号は1相のみですので、
IRQ0とIRQ1の信号にそれぞれを入れて、割り込みでカウントして、0.1秒間隔で別タイマで周期割り込みして
カウント数を計ろうと思います。波形をオシロで測定したら、20パルスから40パルスぐらいの間でカウントしてました。
とりあえず、これでやってみます。
ありがとございました。