Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

RL78F15_PWMのデューティを計測する方法

RL78/F15 (R5F113ML) を使用し、環境はCS+for CA,CXを用いています。

今回、外部よりCPUに入力されるPWM信号のデューティ(%)を算出させたいと考えています。

そこで、CPUの周辺機能(と一部プログラム)の使い方について考えていますが、以下のような手段で達成できそうでしょうか?

 

案1:タイマ・アレイ・ユニットを利用する

 ・機能を「入力パルス間隔測定」

 ・入力信号エッジ設定を「両エッジ」

 ・キャプチャ完了時に割り込み発生。割り込み関数でL期間かH期間かを判定し其々変数に代入

 ・メイン関数でデューティをH期間÷(H期間+L期間)×100で求める。

案2:イベントリンクとタイマ・アレイ・ユニットを併用する

 ・タイマチャネル1の機能を「入力信号のハイ/ロウ・レベル幅測定」

 ・タイマチャネル1の入力信号のハイ/ロウ・レベル幅測定設定を「ハイ」

 ・タイマチャネル2の機能を「入力パルス間隔測定」

 ・タイマチャネル2の設定を「立ち上がりエッジ」

 ・タイマチャネル2の入力ソースを「ELC」

 ・イベントリンクコントローラの出力先設定:「タイマチャネル2のインプットキャプチャ」に「タイマチャネル1のキャプチャ完了」を割り当てる

 ・メイン関数でタイマチャネル1からH期間、タイマチャネル2からパルス間隔を得る。

 ・デューティをH期間÷パルス間隔×100で求める

 

※2の手段は、1だと割り込み関数に頻繁に飛んでしまうためそれを無くしたいという案ですが、

ELC機能をまだあまり把握できていないため間違ったことを書いているかもしれません。

  • わわいです
    別の案として、PWM信号をCRで積分して、A/Dで電圧を読む、というテもあります
    まあ、リアルタイムに読む必要がある場合はつかえませんが
  • チョコです。
    PWMの分解能と最小の信号幅にもよりますが,制限が一番少ないのは,2チャネルを入力信号のハイ/ロウ・レベル幅測定に分けて使用することが考えられます。これで,短いロウ幅やハイ幅でも対応できます。(「両エッジ」での「入力パルス間隔測定」では,同じレジスタを使用するので,ハイやロウの時間が短いときに処理が間に合わなくなります。)
    タイマ・アレイ・ユニットと組み合わせるのはイベントリンクコントローラではなく,
    DTC(データトランスファコントローラ)にして,複数回の結果をCPUを使わないで転送することが考えられます。
    PWMのデューティが0%や100%ではこれらの方法は使えません。
    どちらにしても,入力するPWM信号の仕様がはっきりしないと確実なことは言えません。
  • わわいさん
    回答ありがとうございます。
    外側回路でアナログ変換する手段も条件次第では使えますね。
    今回はリアルタイムで計測したいため、おっしゃる様に難しそうではありますが、
    実験的に確認してみたいです。

    チョコさん
    回答ありがとうございます。
    PWM信号は10msec周期、10%~90%のデューティ変化幅を考えていて、100%や0%は無しとしています。
    >2チャネルを入力信号のハイ/ロウ・レベル幅測定に分けて使用する
    →この場合、回路としてはPWM信号入力ラインを2線に分け、
    ハイ/ロウそれぞれのチャネルに入力すれば良いのでしょうか?
    (もしくは1線の入力のみで可能なものなのでしょうか?)
    DTCについて、CPUの負荷をできるだけ下げる手段として検討したいです。
  • In reply to キロ:

    チョコです。
    >→この場合、回路としてはPWM信号入力ラインを2線に分け、
    >ハイ/ロウそれぞれのチャネルに入力すれば良いのでしょうか?
    PWM信号入力を2つに分けて,タイマ・アレイ・ユニットの異なる2つのチャネルに入力します。その上で,片方をハイレベル幅,反対側をロウレベル幅の測定に設定します。これで,処理時間の余裕はPWM信号の1周期になります。
    >PWM信号は10msec周期、10%~90%のデューティ変化幅を考えていて
    これなら,短くても1msですから,DTCを組み合わせれば,「両エッジ」での「入力パルス間隔測定」も使えるかと思います。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page