いまさら聞けないデジタル電源超入門 <br>第2回 タイマ編

いまさら聞けないデジタル電源超入門 
第2回 タイマ編

デジタル電源を設計する際にはアナログ電源とは異なり、いろいろな要素技術が必要になります。
第1回ではデジタル電源の概要について、解説しました。
第2回では、プログラムを作るのに大変重要な機能である、タイマについて解説させて頂きます。

タイマの概要

デジタル電源ではソフトウェアを使って電源の制御をします。
制御はランダムの時間で制御するのでなく、一定の時間中で制御が行われなければいけません。

デジタル電源の制御は下図の様に複数の制御周期が必要となります。
それぞれのプログラムによって制御周期が違います。

電源制御用のマイコンは外部クロックを基に動作しています。
マイコン中にあるタイマ・モジュールはクロック入力を分周するプリスケール・カウンタ及びタイマ・カウンタによって構成されています。
ユーザーはこのレジスタの値を設定して制御周期を決めます。

タイマのシミュレーション

それではScideamを使って、タイマのシミュレーションを行ってみましょう。
下記のURLからタイマの例題をダウンロードして、適当なフォルダーに格納してください。

シミュレーションモデルについて

本モデルは、パワエレ向け高速回路シミュレータScideam(サイディーム)で動作可能です。
本記事のモデルは以下からダウンロードしてください。

次に、Scideamを立ちあげます。
左上のファイルアイコンをクリックして、先ほどダウンロードしたTimer.sファイルを選んで開きます。

最初の例題では、10μsごとにタイマ割込みがかかるようにセットされています。

それでは、この例題のプログラムを見てみましょう。
Scideamではプログラムを記述することができます。画面上部のScriptアイコンをクリックします。

画面右側のスクリプトエクスプローラーに表示されているTimer Test1をダブルクリックすると、下記の様に画面の中央にプログラムが表示されます。

プログラムの様子
if(counter1 == 1000)            //もしcounter1が1000ならば
{
    counter1 = 0;                      //counter1を0にする
}
else                                       //そうでなければ
{
    counter1++;                     //counter1を1増加させる
}
setoutvar(counter1);        //counter1の値をグラフに出力する
C

上記の様にプログラムはタイマ割込みごとに処理を行い、counter1の値を増やし値が“1000”になったら”0”にするという動作を行います。

それではScideamの機能を使って、counter1の値をグラフに表してみましょう。
Scideamの画面の上部にTransientとWaveformがありますので、Ttransientを選んでください。

右の方にある三角マークをクリックすると、プログラムが実行されます。

実行した後、下部のヒストリーでTransint Result 1をクリックします。
そうすると、別画面に下記のようなチャートが表示されます。

拡大図に示すように、10μs×1000=10msごとに出力の値が0になっていることが分かります。

演習問題

それでは、下記の演習問題を考えてみてください。

タイマ割込みの動作速度を100kHzから20kHz(50μs)に変更し、10ms毎にカウンタをクリアするような波形を出力するためには、どのようなプログラムを作ればよいですか?

回答

Circuit Editor画面に戻り、画面右のコンフィグを選択します。
メイン周波数を100kHzから20kHzに変更します。画面中央のFrequencyは、直接エディットして20kHzに変更して下さい。

それでは、プログラムを実行して波形を見てみましょう。
画面上部の三角のボタンをクリックして、プログラムを実行させます。

画面下部に新しいチャートが出てくるので表示させると、下記のようなチャートが表示されます。

チャートを見ますと、50msごとにカウンタの値がクリアされていることが分かります。

それでは、10msごとにクリアされるようにプログラムを変更してみましょう。
画面上部のScriptアイコンをクリックし、プログラムを表示させます。

そして、counter1の値が200になったら、counter1の値を0にするように変更します。

if(counter1 == 200)
{
  counter1 = 0;
}
else
{
    counter1++;
}
setoutvar(counter1);
C

それでは、再度プログラムを実行してみましょう。
画面上部の実行ボタンをクリックし、チャートを表示させます。
そうすると、下記のグラフが表示されます。

10msごとに出力が0になっていることを確認してください。

まとめ

デジタル電源入門 第2回では、タイマについて解説しました。
タイマは、プログラムを作るのに大変重要な機能です。
どのような周波数でプログラムを処理するのか、考えながらタイマの値をセットしてください。

次回はA/Dコンバータについて解説します。

▼関連投稿 ーデジタル電源超入門

投稿者:

上司 豊

お問い合わせ