title0a.gif

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が欲しい。」のとおりです。 前記仕様を実現するためのプログラミングと試作を行い、結果的に下記の仕様としました。

パルス幅制御IC ピンアサイメント

PIN
No

信号名称
(PIC)

方向

Hレベル

DD

4.5〜5.5V (電源の+側)

OSC1

20MHz セラミック振動子/水晶振動子

OSC2

20MHz セラミック振動子/水晶振動子

MCLR

入力

リセット入力 (通常Highレベル)

GP2

入力

出力パルス発生有効/無効信号入力 (後述のEEPROMでロジック設定)

GP1

出力

出力パルス (後述のEEPROMでロジック設定)

AN0

入力

アナログ入力信号 (0V〜VDD電圧の範囲内)

SS

GND (電源の−側)

 

パルス幅制御 IC EEPROM設定

アドレス

ビット

データ名称

内  容

デフォルト

0

バイト
設定

強制0%
しきい値

Duty制御スロープ設定ビット=0時

 出力 0%強制しきいち 0〜255

Duty制御スロープ設定ビット=1時

 出力 100%強制しきいち 0〜255
 

H’00’

バイト
設定

強制100%
しきい値

Duty制御スロープ設定ビット=0時

 出力 100%強制しきいち 0〜255

Duty制御スロープ設定ビット=1時

 出力 0%強制しきいち 0〜255

H’FF’

 

Duty制御
スロープ
設定

Duty制御スロープ設定ビット = 0

 0%=H’00’ 〜 100%=H’FF’

Duty制御スロープ設定ビット = 1

 0%=H’FF’ 〜 100%=H’0’

H’00’

出力パルス
GP1
出力論理設定

GP1出力論理設定ビット = 0

 On(1)=Highレベル Off(0)=Lowレベル

GP1出力論理設定ビット = 1

 On(1)=Lowレベル Off(0)=Highレベル

出力パルス発生
有効/無効
信号入力
GP2
出力論理設定

GP1出力論理設定ビット = 0

 Highレベルで出力可能 Lowレベルで出力停止

GP1出力論理設定ビット = 1

 Lowレベルで出力可能 Highレベルで出力停止

 

パルス幅制御ICのHEXファイルを下記に格納しておりますのでご利用下さい。

   jsk45_a.hex (1,219バイト)

 


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を使って豆電球の電力を制御しています。

 

【 照明 明るさ制御回路 】

 

3.3 リモコン発光ディテクタ

 TVなどのリモコンの電池が正常で赤外線を発光しているかどうかを確認するリモコン発光ディテクタです。 リモコンの赤外線を受光するとパルス列が出力されますので、このパルス列を平滑化してアナログ入力信号として用いています。

 

【 リモコン発光ディテクタ 回路図 】

 

【 リモコン発光ディテクタ 試作例 】

 

豆電球は100円均一の自転車用ハンドル取り付けライトを使用しています。

【 リモコン発光ディテクタ 動作例 】

 

4. その他

(1)

 EEPROMの書き換えはPi_Pi_IC PICでVFコンバータの「4.1 EEPROMデータの書き換え」を参照願います。

(2)

 パルス幅制御ICを使用する場合、アナログ入力信号が電源電圧5V以上、0V以下にならないように保護回路を設けて下さい。

(3)

 アナログ入力信号としては、いろいろな信号を入力できます。 パルス状の信号もFVコンバータ的な回路を使うことで回転数に比例して照明を制御することもできます。 いろいろ応用例ができそうです。

 


5 PICでDuty制御 改良版

 大変お恥ずかしい事ですが、PIC12F683-I/PのPWM機能を使用することに全く思い至りませんでした。 未だに、PIC16F84Aから抜け出せていないようです。 早速PWM機能を用いた改良版を作成しました。 PWMの周波数は約20kHzにしていますので、負荷から音が聞こえることは無くなりました。 また、当然の如く、Dutyを変えても周波数は変化しません。

 以下、改良版による変更部分を記載します。

 

5.1 改良版 PIC12F683-I/Pの仕様

 

パルス幅制御 IC(改良版) ピンアサイメント

PIN
No

信号名称
(PIC)

方向

Hレベル

DD

4.5〜5.5V (電源の+側)

OSC1

20MHz セラミック振動子/水晶振動子

OSC2

20MHz セラミック振動子/水晶振動子

MCLR

入力

リセット入力 (通常Highレベル)

GP2

出力

出力パルス (正論理固定)

GP1

入力

出力パルス発生有効/無効信号入力 (後述のEEPROMでロジック設定)

AN0

入力

アナログ入力信号 (0V〜VDD電圧の範囲内)

SS

GND (電源の−側)

 

パルス幅制御(改良版) EEPROM設定

アドレス

ビット

データ名称

内  容

デフォルト

0

バイト
設定

強制0%
しきい値

Duty制御スロープ設定ビット=0時

 出力 0%強制しきいち 0〜255

Duty制御スロープ設定ビット=1時

 出力 100%強制しきいち 0〜255
 

H’05’

(約0.1Vもしくは4.9V相当)

バイト
設定

強制100%
しきい値

Duty制御スロープ設定ビット=0時

 出力 100%強制しきいち 0〜255

Duty制御スロープ設定ビット=1時

 出力 0%強制しきいち 0〜255

H’FA’

(約0.1Vもしくは4.9V相当)

 

Duty制御
スロープ
設定

Duty制御スロープ設定ビット = 0

 0%=H’00’ 〜 100%=H’FF’

Duty制御スロープ設定ビット = 1

 0%=H’FF’ 〜 100%=H’0’

H’00’

未使用

未使用

出力パルス発生
有効/無効
信号入力
GP1
出力論理設定

GP1出力論理設定ビット = 0

 Highレベルで出力可能 Lowレベルで出力停止

GP1出力論理設定ビット = 1

 Lowレベルで出力可能 Highレベルで出力停止

 

パルス幅制御IC(改良版)のHEXファイルを下記に格納しておりますのでご利用下さい。

   jsk45_b_r1.hex (1,264バイト)

 

パルス幅制御IC(改良版)を使用した場合の回路図を下記に掲載します。

 

【 パルス幅制御IC(改良版) 動作確認回路図 】

 

本例をベースした製作例:「今何時! リモコンでナイトライト (おまけで、リモコン電池大丈夫)」参照。

【 照明 明るさ制御回路(改良版) 】

 

【 リモコン発光ディテクタ 回路図(改良版) 】

 


【プログラム書き込みサービス】 

 本事例は試作のため、現状ではPICマイコンの書き込みサービスの対象とはしません。


 Memorandumの小部屋 へ戻る      ホームページへ戻る


End of This Page.