前回「昔懐かしいゲートレベル回路図の論理シミュレーション」結果をVCD波形ビューワーで観察。何十年ぶりかでゲートレベルのロジックを作って動かしてみるべし、と機運?が盛り上がりました。単なる年寄りのノスタルジーでないかい。忘却の彼方にあるものどもを黄泉の国から呼び起こさねば。リハビリの第1回はPWMであります。
※かえらざるMOS回路 投稿順 INDEX
※ゲートレベルのシミュレーションに使わせていただいておりますツールは以下のものです。
なかなかユーザフレンドリーなツールで感銘を受けたのですが、残念なことに2014年10月で開発は “suspended indefinitely” です。上記からソフトウエアをダウンロードして動作させることはまだ可能でした(Windows10)
リハビリのPWM
PWM、Pulse Width Modulation は、マイコンの周辺回路における定番といっても良いでしょう。LEDやらモーターやら、いろいろなものの制御に大活躍します。多くのマイコンのタイマ・カウンタにPWM機能が含まれております。プリミティブな動作の場合以下のようになるんじゃないかと思います。
-
- カウンタ(今回はアップカウントとする)は時間レゾリューションにあわせたカウントクロックでカウントアップしている
- コンパレータその1が指定のカウント値と一致したらトリガをかけて上記カウンタを0に戻す。また、そのときPWM出力信号をHIGHに設定する。
- コンパレータその2が指定のカウント値(コンパレータ1に設定してある値より小さくなければいけない)と一致したら、PWM出力信号をLOWに設定する。
コンパレータその1の設定値でカウント周期=PWMの出力周期を制御し、コンパレータその2の設定値でPWMのHIGH期間(デューティ)を制御する、という仕組み。
今回のリハビリはそんな「雰囲気」「もどき」の回路をこさえてみようと。
回路の作成方針
ゲートレベルの回路が懐かしいといってもいろいろです。回路図を描いてシミュレーションなどしていた遥か昔、私なんぞがこさえていた回路は、本シリーズの最初の頃に書いたですが、2相ノンオーバラップ・クロックのレベルセンスな論理回路でした。しかし、使用させていただく Logisim のライブラリは基本
エッジセンスな1相クロック
です。この方が一般的か。そこで当面(リハビリが進むまで)Logisimのライブラリをそのまま活用させていただく方向で行きたいと思います。どんなものがあるのかもわかっていないので、多分、泥縄。
作製した回路とその動作
泥縄で作成してみた8ビットのPWM回路「もどき」が以下に。真ん中上にあるのが8ビットのカウンタで。その下に周期を設定する値と、デューティを設定する値が定数で並んでいます。マイコンであればソフトで設定する値ですが、ここでは、RESET時に8ビットのレジスタにロードしておしまいにしています。コンパレータはLogisim所蔵のものを使ったので、大なり、小なりまで端子があるゴージャスなものですが、そちらの端子は使っておりませんよ。使うのはイコール(EOR並べれば判定できる)だけです。
上記の回路をシミュレーションした結果のWaveForm表示が以下に。まあ、PWMっぽい波形が出てますなあ。
でも、クロックの数を数えていて思っていたのと違うことに気づきました。
PWM周期もHigh期間も定数で「設定した数+2」になる
実は+1のつもりでしたんですが、+2になってました。カウンタをクリアするところで1発多く数えているのね。まあ、PWMにはなっているので、多くを語らずそのまま立ち去ることにしました。いい加減だな。やっつけ。
PWMのHigh期間を8から4に変更してみました。回路図の定数を1箇所変更。こんな感じ。
さて、上記のHIGH期間を短くしたシミュレーション結果を、さきほどの長い結果と並べてみたものが以下に。
お間抜けな回路ですが、実際にこさえるわけではないし、まあいいか。知らんけど。