Renesas Synergy™

FAQ 1007816 : 100kHz~0.1Hzの出力が可能なタイマICをマイコンで置き換えたい。

タイマICであるUPD5555は比較的簡単に幅広い周波数範囲のパルスを出力できるICです。その機能を小ピンマイコンで実現することを考えてみます。プログラム例は8ビット・タイマ・カウンタHのパルス発生への応用プログラム例を参照してください。

[概要]
構成を簡単にするために、8MHzの高速内蔵発振器のクロックを用いて動作させるものとします。このため、クロックの発振精度から5%のバラツキが考えら れますが、アナログ入力に半固定抵抗を接続して、トリミングを行うことで精度を高めることができるように考慮しています。ここでは、できるだけ短い周期か ら対応できるようにするためと、半固定抵抗での設定が微妙にならないように、ポート3ビットへの入力により出力パルスの周期を大きく8つのレンジに分割し ます。



さらに、この中での細かな指定についてはA/Dコンバータを用いて指定するものとします。これらの情報は定期的に確認を行い、その結果を反映できるようにするものとします。



[処理方法]
パルス出力方法として大きく2つに分けて考えます。1つの方法は短い周期に対応するためにタイマの出力機能を利用するものです。レンジ1についてはタイマ のPWM出力機能、レンジ2は方形波出力機能、レンジ3はPWM出力を用いてパルス出力を行います。この一覧を下記の表に示します。パルス出力中に、 CPUはタイマ割り込みを無視して後述の変更タイミングのカウント動作のみを行います。

ハードウェア出力の設定一覧

レンジ カウント・
クロック
刻み 動作モード
1μ秒 fXP(8MHz) 0.125μ秒 PWM出力
10μ秒 fXP/4(2MHz) 1μ秒 方形波出力
96μ秒 fXP/32(250kHz) 8μ秒 PWM出力


もう1つの方法は長い周期の場合に使用するものです。タイマで基本的な時間で割り込みを発生させ、それをソフトウェアでカウントして、指定された間隔でポートを操作し てパルスを出力します。レンジ4~8についてはこの方法で実現します。この方法では、タイマ割り込みをHALTモードで待ち、割り込みによりHALTモー ドを解除することで割り込み応答の変動を最低限に抑えて、ポートを操作します。時間計測は3段階に分かれて処理します。最小の時間間隔はタイマそのものの インターバル時間(カウント周期)です。このインターバル時間を計測するプリ・カウントを行うことで、インターバル時間と組み合わせて各レンジの時間差を吸収し、各レンジの分解能に 相当する時間を得ます。(実際には出力を反転する時間間隔なので、分解能の半分の時間になります。)最後に、レンジ内での設定値に達するまでカウントする カウンタとなります。各レンジはA/D変換結果の上位7ビット分の値を用いて、最小と最大の比を1対13程度に設定して、分解能の10倍~135倍の時間 を指定できるようにしています。



各レンジでの各種パラメータの一覧を以下の表に示します。

ソフトウェア出力の設定一覧

レンジ カウント・
クロック
カウント
周期
プリ・カウント値 刻み
(分解能)
1m秒 fXP/4(2MHz) 50μ秒 1 50μ秒
10m秒 fXP/16(500kHz) 0.5m秒 1 0.5m秒
100m秒 fXP/64(125kHz) 1m秒 5 5m秒
1秒 fXP/4096(2kHz) 50m秒 1 50m秒
10秒 fXP/4096(2kHz) 0.1秒 5 0.5秒


指定回数のカウントを行ったら、ポート出力の反転操作を行い、ポート操作を行った回数をカウントして、設定の変更タイミングをチェックします。ポート操作後に、設定の変更を確認することで、変更確認の時間がパルス出力に影響しないようにしています。

いずれの場合にもパルス出力にベクタ割り込みは使用しません。

[設定モードの確認]
ハードウェア出力での設定モードの確認は、ソフトウェアによるタイマで時間を計測します。(18クロックのループを216回ループさせることで、約150ms毎にモード指定スイッチ(P34)の内容を確認します。)
ソフトウェア出力処理では出力パルスを反転させた直後にモード指定スイッチの内容を確認します。
モード指定スイッチの内容が2回連続でON(ロウ・レベル)のとき(これはレベル検出です)に新しい設定の確認を行います。



確認処理はA/Dコンバータを起動して4回の変換を行い、その平均を用いることでノイズの影響をなくします。ソフトウェア出力処理では、この間にタイマ割 り込みが発生してもいいように、タイマ割り込みをベクタで処理して、出力タイミングの計測だけを行います。ソフトウェア出力処理は1msレンジ(従って、 出力の反転は0.5ms毎)以上なので、基本的に次の出力の反転処理までの時間はかかりません。
以降はモード指定スイッチの内容が2回連続でON(ロウ・レベル)でなくなるまで、この処理を繰り返します。

[設定モードの変更]
4回のA/D変換の完了タイミングでレンジ設定スイッチの状態も確認して、新しい設定値を取り込みます。新しい設定値(レンジとその中での値)がこれまでと同じなら何も変更しないでそれまでの処理を継続します。
ソフトウェア出力処理でレンジが同じ場合には、次の周期からカウント値を変更することで、出力の乱れがないようになります。ソフトウェア出力処理でレンジ が切り替わった場合には、一旦タイマを停止して、新たに設定しなおすので、その処理分は変更時の周期のバラツキが発生してしまいます。これは、プリ・カウ ントを16ビットでカウントすると解消できるのですが、そうすると長い周期の場合2000倍も頻繁にタイマ割り込みが発生することになり、動作電流が大き くなってしまうことが考えられます。ここでは、周期が長い場合の動作電流を考慮して、設定を行っています。

[設定されたモードの保存]



ロウ・レベルの後で、ハイ・レベルが2回続いた場合(これはエッジ検出です)に設定された内容の保存タイミングとなります。内蔵フラッシュの専用領域に保存されている従来の(最新の)条件と新しい設定値を比較し、変更されていたら、内蔵フラッシュに新しい情報を保存し ます。このために、内蔵フラッシュに対してセルフ・プログラミングを行います。これにより、電源を切っても次回は新しく設定した条件で動作するようにしま す。このために、フラッシュメモリの最後の256バイト分をEEPROMのように使います。なお、ここでは書き換えやクリア中のエラーは考慮しません(内 蔵フラッシュのROM容量が許すならば、領域を複数準備して切り替えたり、エラー処理を追加したりすることも考えられます)。
更新によりデータ保存領域に新たなデータを書きこむ領域がなくなると、領域をクリアして、領域の最初から書き込みます。

他にご質問がございましたら、リクエストを送信してください