どんどんマニアックになってきます。
もはや太陽光のお話ではないのですが、最後まで続けたいと思います。
今回は、抑制監視装置のセンサーからマイコンまでの説明をしたいと思います。
回路図を見ながらの説明になります。
エコ住宅 ブログランキングへ

AC100Vを測定するのには抵抗による分圧を使います。
なんのために分圧するのかというと、PICマイコンのアナログ入力の計測範囲に、電圧が収まるようにするためです。
今回、PICマイコンのアナログ入力のリファレンス電圧として、固定参照電圧という機能を使いました。この機能により、安定した4.096Vの電圧を作り出し、0~4.096Vの信号をデジタルに変換することができます。
したがって、AC100Vを、この範囲に入るような信号に変換できればいいわけです。
AC100Vというのは電圧の実効値のことなので、実際は、-141.4V~+141.4V(100×sqrt(2))をピークとする交流です。これを330kΩ(実際は330kが手持ちに無くて、100k×3個=300kΩ)と6.6kΩ(3.3kΩ×2個=6.6kΩ)の抵抗で分圧します。
±141.4V×6.6/(6.6+300)=±3.04V
さらにダイオードを通します。これにより、マイナスの電圧をカットします。
ダイオードによる電圧降下もあるので、こうなります。

実際にミニオシロで測定してみると、こんな感じです。

分解能ですが、AC100Vでの1Vは、フルスケール1024に対して、
1V×sqrt(2)×6.6/(6.6+300)/4.096*1024=7.61V
に相当しますから、1V/7.61≒0.13Vになります。
これ以上の分解能を求めると、ADC(電圧を数字に変換する機能)の精度が高いマイコンを使うか、オペアンプを駆使して、計りたい部分の信号だけをうまく増幅して、マイコンに入力してあげることが必要です。
今回は、電圧の傾向がわかればいいので、0.13V程度の分解能でも十分ということにしておきます。
続いて、マイコンレベルに変換された電圧を、PICマイコンに取り込みます。
PICはマイコンなので、プログラムを組む必要があります。
プログラム用のコンパイラにはXC8を、統合環境にはMPLABIDEを使います。
どちらも無料なので、PICマイコンを買うだけで使うことができます。PICマイコンは安いので100円くらいから高くても500円くらいで買えます。たったそれだけでこんなに遊べるなんて、(以下オヤジの回顧話)
測定のためのプログラムはこんな感じです。
for(i = 1;i <= 1250;i++) ①
{
CHS4 = 0;CHS3 = 0;CHS2 = 0;CHS1 = 1;CHS0 = 0; ②
__delay_us(5); // Acquisition Time ③
GO = 1; ④
while(GO){}
voltH = ADRESH; ⑤
voltL = ADRESL;
volt = voltH * 256 + voltL;
if(voltMAX < volt){
voltMAX = volt;
}
}
①で、同じ処理を1250回繰り返します。
なぜ1250回も繰り返すかというと、交流の電圧を測るためにはそのピーク値を測定する必要があるからです。
交流は、電圧が上がったり下がったりを繰り返すので、その瞬時値を測定しても、そのタイミングしだいで、全くでたらめな数字しか捕まえることができません。
そこで、交流1サイクルの間に測定するだけ測定し続けます。その間のピーク値がその交流の電圧値になるわけです。(直流なら1回の測定で済みます。)
で、なんで1250回かの説明です。
1回の測定にかかる時間は、③のAcquisitionタイムで5μ秒、④の測定で約11μ秒です。
そのほかに⑤の処理で数μ秒かかるはずですが、正確にはわかりません。なので、とりあえず、1回の測定には、最低、16μ秒かかるということにしておきます。
一方、東北地区での交流の周波数は50Hzですから、1サイクル(交流の山の頂上から次の頂上まで)は、
1 / 50 = 0.02秒
です。0.02秒の間に16μ秒の処理を何回繰り返せるかというと、
0.02 / 16μ = 1250
です。ということで、1250回繰り返せば、1サイクルの間の電圧の動きをもれなくカバーできます。1サイクルをカバーできれば、その間の最大値を捕えることができるわけです。
②は、マイコンのどのピンの電圧を測定するかを設定しています。
③では、マイコンの処理をわざと5μ秒間だけ停止させます。この間に、ADCに必要な前処理が完了します。具体的には充電処理が終わります。最初はこの処理がわからなくて、苦労しました。必要な処理であれば、自動的に停止してくれればいいのに。(^_^;)
④で、測定を始めます。④の2行目で、測定が終わるまで待ちます。
⑤以降は、最大値を求めるアルゴリズムです。1250回測定した結果の最大値が、変数voltMAXに保存されます。
AC100Vの話は終わりにして、続いてパワコンのLEDランプの監視について説明します。
パワコンのLEDランプを監視するのには、CDS素子というセンサーを使います。
これは、明るい場所では抵抗が低く、暗い場所では抵抗が高くなる性質があります。だいたい10kΩ~100kΩの範囲で変わります。
例えば、回路図のように100kΩの抵抗と直列にして、5Vの電圧をかけると、こんな範囲で電圧が変わります。
明るい場所 5V×10/(100+10)≒0.5V
暗い場所 5V×100/(100+100)≒2.5V
実際には、工作したキャップの隙間からの光の影響も受けますし、LEDが光ったからといって、そんなに大きく抵抗値が下がるわけではありません。
しかし、細かい時間間隔で監視し続ければ、LEDが光っている範囲を十分に特定できるはずです。
監視のためのプログラムは交流電圧と比べると簡単です。
CHS4 = 0;CHS3 = 0;CHS2 = 0;CHS1 = 0;CHS0 = 1;
__delay_us(5); // Acquisition Time
GO = 1;
while(GO){}
voltH = ADRESH;
voltL = ADRESL;
register1 = voltH * 256 + voltL;
1回測るだけです。
このようにしてマイコン内に取り込んだ値を、次はパソコンに取り込むわけです。
PICでAD変換する場合に、他に注意する点をまとめておきます。
まず、アナログ値を読み込む場合のお約束です。ADCとして使いたいピンのAN番号のビットを1にセットしておきます。
ANSELA = 0b00010110; // AN1,AN2,AN4
TRISA = 0b00010110; // AN1,AN2,AN4
アナログ値を読み込む時間を指定します。今回は1μ秒に設定しています。クロックによって設定する数値が違うので、マニュアルをよく読む必要があります。
ADCS2=1;ADCS1=0;ADCS0=1; //ADC Clock Source Fosc/16 => 1usec at 16MHz
結果を2bit+8bitの値として扱います。ADRESH*256+ADRESLから結果を得ることができます。
ADFM = 1; //Result Format : Right Justified
アナログ値を変換する際に基準とする電圧を設定します。
FVREN = 1;ADFVR1 = 1;ADFVR0 = 1; // FVR enable FVR=4.096V
ADPREF1 = 1;ADPREF0 = 1; // use FVR
AD変換機能をONします。
ADON = 1; // ADC ON
今回は、プログラムをばらばらに説明していますが、連載の最後にまとまっているものを掲載する予定です。
次回は、RS232Cを使ったマイコン-パソコン間通信についてまとめてみたいと思います。
にほんブログ村に参加しています。
下のボタンのうちお好きな一つをクリックしていただけるととてもうれしいです。(^-^)/
にほんブログ村 にほんブログ村 にほんブログ村
