Memorandumの小部屋
本ページは金銭授受を伴う行為を含むAuctionや商用Web
Pageからの無断リンク・無断参照を禁じます。
無断リンク・無断参照が判明した時点で然るべき処置をとらさせて頂きます。
パルス幅制御ICが欲しい! PICでDuty制御
1.背景
センサ信号に比例して豆電球の明暗を制御したいと思い構想を練っていましたが、FETや通常のバイポーラトランジスタでアナログ的な出力電力制御をしようとすると、電力制御デバイスの動作点を合わせ込むためにバイアス回路が結構面倒になります。 また、負荷として豆電球と言えども電流は0.5A程度と結構大きな電流となりますので変換効率もちょっと考えないといけないでしょうね。
そうなるとやはりスイッチング動作がよろしいかと思い、電圧信号をパルスに変換できないか手持ち部品を捜しました。 一番簡単なのがタイマーIC555を使用したDuty制御です。 しかし、以下の機能を満足させようとするとコンパレータなど余分な回路も必要となります。
(1) しきい値以下の電圧レベルだと、出力を強制的に0%にする。
(2) しきい値以上の電圧レベルだと、出力を強制的に100%にする。
と、いうことで、Pi_Pi_IC PICでVFコンバータと同様にPIC12F683-I/Pを使用してこの機能を実現することにしました。
なお、本機能は位相制御などの専用ICを使えばもっと高機能を実現することができると思います。 今回は、あくまでも手持ち部品を使い、1日程度で作り込むということで製作した事例です。 決して、市販されている専用ICとの比較は行わないで欲しいです。
初回公開後に、5項にPIC12F683-I/PのPWM機能を使用した改良版を掲載しております。 実際に試してみたい方は5項を参照して下さい。 2〜4項は、参考としてご覧願います。
2. パルス幅制御ICの仕様
基本的な仕様は前記の「こんなPi_Pi_ICが欲しい。」のとおりです。 前記仕様を実現するためのプログラミングと試作を行い、結果的に下記の仕様としました。
PIN |
信号名称 |
方向 |
Hレベル |
1 |
VDD |
− |
4.5〜5.5V (電源の+側) |
2 |
OSC1 |
− |
20MHz セラミック振動子/水晶振動子 |
3 |
OSC2 |
− |
20MHz セラミック振動子/水晶振動子 |
4 |
MCLR |
入力 |
リセット入力 (通常Highレベル) |
5 |
GP2 |
入力 |
出力パルス発生有効/無効信号入力 (後述のEEPROMでロジック設定) |
6 |
GP1 |
出力 |
出力パルス (後述のEEPROMでロジック設定) |
7 |
AN0 |
入力 |
アナログ入力信号 (0V〜VDD電圧の範囲内) |
8 |
VSS |
− |
GND (電源の−側) |
PIC12F683-I/Pは20MHzのHSモードで動作させます。
ADコンバータは10ビット分解能ですが、上位8ビットを使用しています。
Duty制御の分解能は255です。 約0.4%の分解能ということになります。
アドレス |
ビット |
データ名称 |
内 容 |
デフォルト |
0 |
バイト |
強制0% |
Duty制御スロープ設定ビット=0時 出力 0%強制しきいち 0〜255 Duty制御スロープ設定ビット=1時 出力 100%強制しきいち 0〜255 |
H’00’ |
1 |
バイト |
強制100% |
Duty制御スロープ設定ビット=0時 出力 100%強制しきいち 0〜255 Duty制御スロープ設定ビット=1時 出力 0%強制しきいち 0〜255 |
H’FF’
|
2 |
0 |
Duty制御 |
Duty制御スロープ設定ビット = 0 0%=H’00’ 〜 100%=H’FF’ Duty制御スロープ設定ビット = 1 0%=H’FF’ 〜 100%=H’0’ |
H’00’ |
2 |
1 |
出力パルス |
GP1出力論理設定ビット = 0 On(1)=Highレベル Off(0)=Lowレベル GP1出力論理設定ビット = 1 On(1)=Lowレベル Off(0)=Highレベル |
|
2 |
2 |
出力パルス発生 |
GP1出力論理設定ビット = 0 Highレベルで出力可能 Lowレベルで出力停止 GP1出力論理設定ビット = 1 Lowレベルで出力可能 Highレベルで出力停止 |
パルス幅制御ICのHEXファイルを下記に格納しておりますのでご利用下さい。
3. パルス幅制御ICの試作例
3.1 動作確認
このパルス幅制御ICの動作確認回路を下記します。 動作確認で、アナログ入力信号にはランプ波形を入力してパルス幅が変化する様子を観察しました。
【 パルス幅制御IC 動作確認回路図 】
ランプ波形はスイッチンオフ時に変化する回路にしています。 三角波のように発振させる必要がありませんので積分回路を利用しています。
R15,C11は出力波形観測時にノイズが大きく観測されていましたので設けたローパスフィルタです。
出力振幅が0Vちかく、+5V近くの両領域を使用しますのでRail to Railのオペアンプを使用しています。 今回は秋月電子通商で購入したLMC6482を用いています。
今回の試作もブレッドボードで行います。 下記に実装例を掲載します。 左側がLMC6482,右側がPIC12F683-I/Pです。
現在のソフトでは周波数はほぼ1kHzです。 アナログ入力によって周波数は若干変化しています。 周波数が1kHzのため、負荷によては負荷から音が聞こえることがあります。 耳触りかもしれませんが、ご容赦願います。 今回の製作例の一番の欠点です。
【 パルス幅制御IC 試作例 】
実際にスイッチをオンオフしたときの波形を下記に掲載します。 何となく思ったように動いていますので、動作確認の精査をしていません。 もし、動作のおかしいところに気付けばご連絡頂ければ助かります。
【 アナログ入力 立ち上がり時波形 (Duty制御スロープ設定ビット=0) 】
【 アナログ入力 立ち下がり時波形 (Duty制御スロープ設定ビット=0) 】
【 アナログ入力 立ち上がり時波形 (Duty制御スロープ設定ビット=1) 】
【 アナログ入力 立ち下がり時波形 (Duty制御スロープ設定ビット=1) 】
3.2 照明明るさ制御
アナログ入力信号として明るさに比例して抵抗値が変化(明るい→抵抗値低下)するCdSを用いた回路を下記に記載します。 また、出力にはパワーMOS FETを使って豆電球の電力を制御しています。
【 照明 明るさ制御回路 】
上記事例は暗い時はアナログ入力電圧が高く、明るくなるとアナログ入力電圧が低下する回路(Duty制御スロープ設定ビット=0時)用です。
暗い時は豆電球が明るく点灯し、明るくなると豆電球が暗くなります。
3.3 リモコン発光ディテクタ
TVなどのリモコンの電池が正常で赤外線を発光しているかどうかを確認するリモコン発光ディテクタです。 リモコンの赤外線を受光するとパルス列が出力されますので、このパルス列を平滑化してアナログ入力信号として用いています。
【 リモコン発光ディテクタ 回路図 】
赤外線受光モジュールは秋月電子通商で購入したPL-IRM0101-03を使用しています。
負論理出力のため、リモコンの発光を受光していないときは出力はHighレベルです。 このためQ31の2SA1015を使って論理反転を行っています。
リモコン発光を受光したときに5V電源をC32に充電します。 また、C32の電荷の放電をR32で行います。 このC32とR32で,受光しなくなった後でも直ぐに豆電球を消灯させず、徐々に暗くなるようにしています。
【 リモコン発光ディテクタ 試作例 】
豆電球は100円均一の自転車用ハンドル取り付けライトを使用しています。
【 リモコン発光ディテクタ 動作例 】
4. その他
(1) |
EEPROMの書き換えはPi_Pi_IC PICでVFコンバータの「4.1 EEPROMデータの書き換え」を参照願います。 |
(2) |
パルス幅制御ICを使用する場合、アナログ入力信号が電源電圧5V以上、0V以下にならないように保護回路を設けて下さい。 |
(3) |
アナログ入力信号としては、いろいろな信号を入力できます。 パルス状の信号もFVコンバータ的な回路を使うことで回転数に比例して照明を制御することもできます。 いろいろ応用例ができそうです。 |
大変お恥ずかしい事ですが、PIC12F683-I/PのPWM機能を使用することに全く思い至りませんでした。 未だに、PIC16F84Aから抜け出せていないようです。 早速PWM機能を用いた改良版を作成しました。 PWMの周波数は約20kHzにしていますので、負荷から音が聞こえることは無くなりました。 また、当然の如く、Dutyを変えても周波数は変化しません。
以下、改良版による変更部分を記載します。
5.1 改良版 PIC12F683-I/Pの仕様
PIN |
信号名称 |
方向 |
Hレベル |
1 |
VDD |
− |
4.5〜5.5V (電源の+側) |
2 |
OSC1 |
− |
20MHz セラミック振動子/水晶振動子 |
3 |
OSC2 |
− |
20MHz セラミック振動子/水晶振動子 |
4 |
MCLR |
入力 |
リセット入力 (通常Highレベル) |
5 |
GP2 |
出力 |
出力パルス (正論理固定) |
6 |
GP1 |
入力 |
出力パルス発生有効/無効信号入力 (後述のEEPROMでロジック設定) |
7 |
AN0 |
入力 |
アナログ入力信号 (0V〜VDD電圧の範囲内) |
8 |
VSS |
− |
GND (電源の−側) |
PIC12F683-I/Pは20MHzのHSモードで動作させます。
ADコンバータは10ビット分解能ですが、上位8ビットを使用しています。
PWMのDutyの分解能は10ビットですが、上位8ビットを使用し、下位2ビットは0としています。
Duty制御の分解能は255です。 約0.4%の分解能ということになります。
Duty100%の場合はPWM機能を停止して、GPIOポート設定としてHighレベルを出力させています。
アドレス |
ビット |
データ名称 |
内 容 |
デフォルト |
0 |
バイト |
強制0% |
Duty制御スロープ設定ビット=0時 出力 0%強制しきいち 0〜255 Duty制御スロープ設定ビット=1時 出力 100%強制しきいち 0〜255 |
H’05’ (約0.1Vもしくは4.9V相当) |
1 |
バイト |
強制100% |
Duty制御スロープ設定ビット=0時 出力 100%強制しきいち 0〜255 Duty制御スロープ設定ビット=1時 出力 0%強制しきいち 0〜255 |
H’FA’ (約0.1Vもしくは4.9V相当)
|
2 |
0 |
Duty制御 |
Duty制御スロープ設定ビット = 0 0%=H’00’ 〜 100%=H’FF’ Duty制御スロープ設定ビット = 1 0%=H’FF’ 〜 100%=H’0’ |
H’00’ |
2 |
1 |
未使用 |
未使用 |
|
2 |
2 |
出力パルス発生 |
GP1出力論理設定ビット = 0 Highレベルで出力可能 Lowレベルで出力停止 GP1出力論理設定ビット = 1 Lowレベルで出力可能 Highレベルで出力停止 |
パルス幅制御IC(改良版)のHEXファイルを下記に格納しておりますのでご利用下さい。
パルス幅制御IC(改良版)を使用した場合の回路図を下記に掲載します。
【 パルス幅制御IC(改良版) 動作確認回路図 】
本例をベースした製作例:「今何時! リモコンでナイトライト (おまけで、リモコン電池大丈夫)」参照。
【 照明 明るさ制御回路(改良版) 】
【 リモコン発光ディテクタ 回路図(改良版) 】
【プログラム書き込みサービス】
本事例は試作のため、現状ではPICマイコンの書き込みサービスの対象とはしません。
End of This Page.