プログラミング初心者です。SH7144でエンコーダのパルス信号をそのまま出力する方法が分かりません。エンコーダ入力=出力だとエンコーダのエッジ検出が追いつきません。位相計数モードでカウントはできるのですが、出力波形をエンコーダのA相エッジカウント数(設定)で"1"を出力したいです。IRQでやるべきか、位相計数モードでうまくできるのかもわかりません。仕様としては、エンコーダから来る信号のA相エッジ数を検出し回数をカウント。あるカウント数になったら出力する。または出力を変える。分かる方教えてください。
「そのまま出力する方法が分かりません。」はマイコンの入力パルス信号をそのままマイコンが出力するで良いでしょうか?入出力ピンが無駄になるので、このようなことはしないと思います。CPUあってのマイコンです。エンコーダのパルス信号を分岐してマイコンと他の回路に入力すれば良いように思います。
「エンコーダ入力=出力だとエンコーダのエッジ検出が追いつきません。」は、エンコーダーの回転数が早くてマイコンがエッジ検出できないということでしょうか?7144だと50MHz以上では動作できなないのでこれ以上の信号は根本的に無理だと思います。また、汎用ポートで読み込んで汎用ポートで出力する場合の遅れが問題とも読み取れます。汎用ポートを読み込んで、汎用ポートから出力を続けて実行する以上のスピードは出せません。
「カウントはできる」と「仕様としては、・・・・」からコンペアマッチで割り込みをかけて汎用ポートをセットするで行けそうな感じもしますが、やはりそれなりの遅延があります。PLDやACシリーズでカウンターとデコーダー回路を作っても数十nSの遅れは発生します。
ありがとうございます。参考になります。
初めてC言語の制御プログラムを書くのと、SH7144の資料も乏しいので、できれば参考になるソースがあるといいのですが。
エンコーダの入力はA相は(PA8)をTCLKCとして設定してあり、B相は(PA9)をTCLKDとして設定しています。
(PA6)TCLKAと(PA7)TCLKBの足は壊れた??ので、入力できません。
特に設定している記述は下記です。
PFC.PACRL1.BIT.PA8MD=1
PFC.PACRL1.BIT.PA9MD=1
MTU2.TMDR.BIT.MD=4;
カウントできるというのは、「MTU2.CNT」を変数に設定してデバッグで表示しています。
よろしくお願いします。
追記、実際にやりたいことはエンコーダ(A相)のパルスエッジを検出し、カウント。ある設定値(変数)がカウントと一致すると出力パルスを出す。
簡単に記載するとこんな感じです。
7144のマニュアル11.4.6 位相計数モードの出だしに、「ただし、TCRのCCLR1、CCLR0 ビット、TIOR、TIER、TGR の機能は有効ですので、インプットキャプチャ/コンペアマッチ機能や割り込み機能は使用することができます。」とありますので、現状の接続のままチャンネル2を位相計数モードで使って、コンペアーマッチ機能の割り込みでポートを設定すれば、目的は達成できると思います。実際に試してみる時間と環境がありません。
確かにルネサスホームページにアプリケーションノートなどは少ないようです。すでに参照されているかもしれませんが、CQ出版TECH I Vol.41 SH-2マイコンで学ぶ組み込み開発入門サポートページにエンコーダー入力や割り込みのサンプルがあります。残念がら、そのものズバリのサンプルは無いようです。SHは比較的シンプルです。ハードウエアマニュアルだけで何とかなると思います。概要やレジスタの説明だけでなく動作説明も読んでください。遅れに関しても動作タイミングで解説されてます。
たびたびありがとうございます。
私自身がC言語での制御プログラミングが初めてで、Whileのループにはまったりしています。
動作確認用LEDを点滅させるために、While(t--)を使って点滅するとエンコーダ入力に不具合があったりして、プログラムの見直しをしています。
CMTで上手くできれば良いのですが、for文とかでチャレンジ中です。
「SH-2マイコンで学ぶ組み込み開発入門」についても購入済みですが、やはり、ずばりというプログラムの記述が無くて悪戦苦闘しています。
SH7144のMTU2、位相計数モードの取込最高周波数ないし、スピードが分かるようでしたら教えてください。
チョコです。
ハードウェア マニュアルの「26.3.6 マルチファンクションタイマパルスユニットタイミング」
には、「タイマクロックパルス幅(位相計数モード)」として2.5(min)tpcycと規定されて
います。周辺モジュールクロックサイクル時間(tpcyc)は25ns(min)となっているので、
位相計数モードでの入力クロックの周期は25ns×2.5×2=125ns(min)となります。
つまり8MHzが最高になります。
ありがとうございます。
初心者で分からないことだらけなんですが。
周辺モジュールのクロックは40MHzが最高速度なのでしょうか?(ハードウェアマニュアルにも記載されていて、気になったのですが。)
12.5MHzの発振子を付けているのですが、×4倍モードは使用できないということでしょうか?
それと、エンコーダと接続し位相計数モード4を使用しているのですが、4逓倍入力というのは内部での計算方法という解釈ですか?
周辺モジュールクロックで4逓倍カウンタ入力を計算しているのであれば、125ns×4=500ns(min)ということになるのですが。
分かるようでしたら回答願います。
> 周辺モジュールのクロックは40MHzが最高速度なのでしょうか?
> 12.5MHzの発振子を付けているのですが、×4倍モードは使用できないということでしょうか?
マニュアルに書いてある通りのはずで、解釈はあっていますよ。
---
> 4逓倍入力というのは内部での計算方法という解釈ですか?
ちょっと質問の意味がよくわからないのですが、12.5MHzの事例を計算してみます。
まず、「周辺モジュールクロックサイクル時間(tpcyc)は25ns(min)」という値が、40MHzの時間表現になっています。
後は、その2.5倍のパルス幅がH,Lの2個で125nsという計算のようなので、
例えば12.5MHzのクロックを使用するとなると、
周辺はx2で25MHz(40ns)となり、MTUのパルス幅は、40ns×2.5×2=200ns (5MHz) になるはずです。
位相計数モードが良くわかっていなくて、4逓倍の位相計数モード1と2逓倍の位相計数モード4があることがやっと理解できたところです。
内部カウンタMTU.CNTの波形を利用し、高速に動作するエンコーダ(50KHz程度で動作する,5500rpmで400P/R)入力に対しての逓倍出力を出したいのですが、なぜかMTU.CNTの波形が飽和(サチる?)ので。
MTU.CNT分解能がどこまであるのか、調べてはいますが。分かるようでしたら教えてください。