2016年12月7日水曜日

PSoCでオペアンプとコンパレータを試す(コンパレータ―は別の記事で書くよ)

I2CやキャラクターLCDを含め、割とCPUのパワーを使う事が多かったので
今回は真反対のアナログ系について触れてみようと思う。

さて、以前の記事ではアナログをデジタルに変換をするADCのコンポーネントをつかって温度センサーの値を変換した。しかし、ADC以外にもPSoCには、アナログ回路を直接的に構成する事ができるコンポーネントがある。「高速、高分解能のADCがあればいいのでは?」っと思うかもしれない。けど、ADCへ接続する前に必要な電圧を取り出したり増幅する事が出来れば、ADCをより効果的に使う事ができる。これにはオペアンプを使ったり、コンパレータ―を使う事で取り出したり増幅することが出来る。ADCへつなぐ前の信号に、増幅や加工をすることをアナログフロントエンドとかシグナルコンディショニングと呼ぶ。
PSoC3,PSoC5LP,PSoC4に差はあるもの、オペアンプとコンパレータを内蔵している。
どのファミリーでも最大でオペアンプが4個、コンパレータ―が4個を内蔵している。
特にPSoC3とPSoC5LPにはスイッチキャパシタとオペアンプを合成したSC/CTブロックが4個ある。
これにより外部から抵抗を足すことなく特定のアナログ回路も構成することが出来る。
そのためPSoC3,PSoC5LPはPSoC4よりもアナログ系が得意と言って問題は無いだろう。
 通常のMCUばかりでオペアンプやコンパレータ―になじみが薄い人も多いので
少しオペアンプとコンパレータについて触れよう。
オペアンプとコンパレータは2つとも電圧の状態によって動いている部品になっている。
MCUではCPUがメモリー内にある数値を読みだす事で計算を出力する。
しかしオペアンプやコンパレータ―はメモリーではなく、
電圧同士の計算を行った結果を出力すると考えてもらえばいいだろう。

オペアンプは簡単に2つの機能がある。
 ①電圧を増幅する機能
 ②電圧同士を演算する機能(微積分もできたりする)

コンパレータの機能は1つ
 ①電圧同士を比較する機能

っと簡単にこんな機能がある。
オペアンプやコンパレータ―は単体ではほしい機能を得ることは中々少ない。それは入力部側(+と-の線)の関係性が出力側の結果へ反映される。そのため、抵抗やコンデンサを外付けする必要がある。オペアンプやコンパレータ―の全てを解説するのはなかなか難しいので、電子回路の本等でどういう使い方をするのかを調べて欲しい。
今回はPSoCをつかって簡単にオペアンプとコンパレータ―を使ってみようと思う。
今回はオペアンプを使って、増幅率2倍の反転増幅回路をしてみる。
反転増幅なので、オペアンプに入力した信号がプラスの電圧なら、出力は入力と比べて
マイナスの電圧が出力される。教科書でも出てくる標準的な使い方だ。
けど、PSoCが持っているオペアンプは方電源(+だけ)のため、教科書に出てくるような正負電源(プラスマイナス両方)をつかったオペアンプとは少し違う。
簡単に言うと増幅した信号が0Vより下回ると出力されない。
そのため出力電圧が0Vよりも下回る場合にはちょっとした工夫が要る。

それではやってみよう。
必要なものはPSoC5LP、もしくはPSoC3。100KΩ1個と200KΩ1個。
オシロスコープ(キットのオシロスコープでもかまわない)
今回は電源電圧を5Vで行う方が良い。

空のプロジェクトを用意したら。

アナログコンポーネントから

OpAmpとWaveDACとVDACをトップデザインへドラックアンドドロップする。



WaveDACは周波数発生器の代わりとして使って、
VDACは0Vより下に出力されてしまうのを解決させるのに使う。
トップデザインに並べるとこんな感じ。


先ずは、OpAmpのコンポーネントをダブルクリックして設定をしよう。

今回は実験なのでPowerのプルダウンメニューからHigh Powerを選択して


設定が出来たら、OKボタンをクリックして閉じよう。
その次はVDACをダブルクリックして設定をしよう。

Speedの項目にあるラジオボタンのHigh Speedに設定をして、
Valueの項目のmVの項目を668に設定をする。

出来たら、OKボタンをクリックして閉じよう。
その次はWaveDACをダブルクリックして設定する。

設定はほとんど触らないのですが
Range selectionのプルダウンメニューから
VDAC0 1.020V(Buffered)を選ぶ。


それが出来たらOKボタンをクリックして閉じる。
このままだと回路が動かないので、必要な所に結線とAnalog Pinを足して
抵抗をつなげるようにしていく。
WaveDACにはWSのピンにDigtal → LogicのLogic Lowのコンポーネントをつなげてあげて

WaveDACの先にはPort and Pins → Analog Pinのコンポーネントを追加する。

ピンやコンポーネントを反転させたいときはコンポーネントを選択した状態で、
メニューバー近くの反転ボタン(青い囲いの中)をクリックすると反転する。

繋ぎ終わるとWaveDACはこんな感じになる。

VDACはOpAmpの入力側のプラス側につなげる。

OpAmpは入力側のマイナス側にAnalog Pinをつなげる。

使うAnalog Pinは名前を変更しておいた方があとあと楽なので変えておく方が良いでしょう。
ここまで出来たら左側のツリーチェーンからPinをダブルクリックして
使うピンを設定しよう。
どこでもいいと言えばいいけれど、今回はOpAmpを使うのでプルダウンメニューから
OpAmp[*],***と表記されている物の方が内部リソースを無駄に消費しなくて済む。

例えば、オペアンプのマイナスに繋ぐピンにはOpAmp[*],vminusに設定をするような感じで設定してほしい。WaveDACの出力ピンはOpAmp[*],Voutに設定してほしい。
私はあまりギチギチにしなかったので、こんな感じにしました。

ここまで出来たら一度コンパイルしよう。
コンパイルをしている間にPSoCに抵抗を追加して反転増幅回路を構成しよう。
WaveDACとOpAmpのマイナスの間に100KΩをつないで、
OpAmpのマイナスと出力側の間に200KΩをつなぐ。
繋ぐとこんな感じ。

コンパイルが終わったら、プログラムを書いてOpAmpやDACが使えるようにしよう。
プログラムは単純。
int main(void)
{
    CyGlobalIntEnable; /* Enable global interrupts. */

    WaveDAC8_1_Start();
    Opamp_1_Start();
    VDAC8_1_Start();

  
だけ。For文の中身は空っぽでOK
それが終わったら、もう一度コンパイルをしてPSoCに書き込もう。
書き終わったら、WaveDACの出力ピンとオペアンプの出力ピンに
オシロスコープのプローブをつなげてみよう。
(1CHがWaveDAC,2CHがオペアンプの出力)

WaveDACからは0~1Vの電圧で1Khzの正弦波(sin)が出ていて
OpAmpの出力側からは0~2Vの間でWaveDACとは電圧が反転した波形が2倍で出力されていれば成功!
(/・ω・)/

反転増幅回路は「マイナス」X倍で出力される。そのためどうしても0Vより下の電圧値が出てしまう。
オペアンプのバーチャルショートを利用して0Vより下回っている部分を0Vより上にする事が出来る。

記事が長くなり過ぎたので、ここで中断するよ。
別の記事にコンパレータ―の実験を試してみるよ~。

0 件のコメント:

コメントを投稿