「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



オペアンプのゲインを、帰還抵抗なり入力抵抗なりで
パチパチ切り替えて変化させるには、色々と起こる
っぽいので、きっと先人が奮闘された結果が書き残
されているのでは?と、検索してみる。



欲しい情報が見つかったってところまで行ってない
んだけど、面白い情報をいくつか発見。



http://note.chiebukuro.yahoo.co.jp/detail/n131956
まずこれ。ノイズゲインを調整できるボルテージ
フォロア。回路を見ても、動作の原理がよく解らない
んだけど、なんとなくボルテージフォロアとして機能
することだけは解る。なんでノイズゲインだけ高く
出来るのかがピンとこないなぁ。

今回、ボルテージフォロアで2.5Vの中点を作る部分は、
http://semicon.njr.co.jp/jpn/faq/10018.html
このページの下のほうに出てくる回路なら動作の原理
が理解できたから、これを使おうと思っていたん
だけどなぁ。



http://ednjapan.com/edn/articles/1302/28/news022.html
この回路も、なんか面白そう。外部信号を元にして
ゲインを上下できるみたい。
JFETの部分はフィードバック制御してないから、
ばらつきがありそうだけど。



http://toragi.cqpub.co.jp/Portals/0/backnumber/2004/01/p122-123.pdf
ゲインをR2Rラダーで、リニアに調整できるアンプ。
面白い。

そういえば、R2Rなら、デジタル的にリニアに制御
できるっぽい気もするな。この方向性はいろいろと
面白そう。



まぁ、とりあえず昨日の路線で動かしてみてから、
それで困ったら後で考えよう。




この間の、FFTライブラリから、結果を2の対数表示
で得た後の、db表示への換算方法を、もうちっと
キチンと整理しなおそう。

ザックリと計算方法は整理できたんだけど、あとは
その計算でキチンと正しい値に換算されるかどうか
検証してみないとな。



レンジ表示の切り替えも、できれば自動化したい
ところなんだけど、スイッチ入力で選択したレンジ
を知るには、普通に考えると6本のデジタル入力を
使っちゃうんだけど、それはやりたくないな。

74HC148(8to3エンコーダ)があれば、3本に減らせ
られるんだけど、手持ちは無いな。3to8デコーダは
ストックがあるんだけどな。

むしろ、別のADCを1個使ってアナログ電圧表示で
入力すれば、1本で済んじゃうだろうなぁ。それも
悪くなさそう。R2R抵抗で電圧作ればいいはず。

http://akizukidenshi.com/catalog/g/gP-00101/
これ使えば、片方のチャンネル6本でゲイン調整の
抵抗を切り替えて、もう片方のチャンネルは選択
しているレンジをR2Rで作った電圧で知らせるとか、
できそう。




コメント ( 0 )




Arduinoオシロのオペアンプ、増幅段の計算を
してみた。



E24系列で、1:1  1:2.5  1:10  1:25…
といった具合に、2.5倍と4倍を順々にしていく感じ
で抵抗を選べばok。

んで、あまり深く考えずに、反転側の入力抵抗を
300Ω固定、帰還抵抗を300、750、3k…と切り替えて
増幅率を制御する方向で考えてみた。
んだけど…



帰還側の抵抗の切り替えで増幅率を変えるのは
よろしくないよ、というのをどこかで読んだ記憶
があって、引っかかっていた…。たしか、帰還側
の抵抗値によって、異常発振する/しないとか、
しちゃうときの発振防止の対応が変わったり、
とかその辺だったような。


んで、心配だったのでアレコレと考えてみた。
それだけじゃなくて、もう一つあった。


帰還抵抗を、物理スイッチでパチンパチンと
切り替えようという作戦なんだけど、よく考えたら、
切り替えの瞬間に帰還が掛からなくなる時間帯が
できるから、そのときに、反転/非反転入力の
電圧差の定格(差動入力電圧範囲)を越えちゃう
ケースが出てくるはず。


オペアンプによっては、電源電圧範囲でバラバラに
なっても大丈夫なオペアンプもあるんだけど、
NJM2732なんかは差動入力電圧範囲は±1V以内って
ことになってる。

この場合、非反転は中点(2.5V固定)になっている
ので、反転側がナニになったとたんにドッカーン
ってことになりうる。良くて異常発振とか位相反転。
最悪、煙がモクモク。




じゃぁってんで、帰還抵抗は常時固定、入力抵抗を
パチパチ切り替えるならどうだ?と考える。
よく考えてみると、これもやっぱり駄目っぽい。

どっちも問題だな…


安全に対応するとしたら、
http://ednjapan.com/edn/articles/1209/25/news006_2.html
ダイオードで保護回路入れるのが吉かな。そうすれば
ナニがあっても電圧の差は0.7V以内に収まる。


あとは、手元のオペアンプとブレッドボードで、
簡単な回路組んで発振するか安定するか試して
見たところ、一応安定しているっぽいので、
この方向がいいなじゃないかなぁと。


まぁ、あとはオフセットがどのくらい生じちゃうか
といったあたりの対処だな。


帰還側を切り替える形だと、入力抵抗の値は
小さめで済むから、オフセット電流とかの影響
はあまり受けずに済むはずだけど、入力抵抗側
を切り替える形にしちゃうと、レンジによっては
影響しやすくなっちゃうからなぁ。

入力抵抗を小さい値で済ませられる「帰還側の
切り替え」にすれば、データシート上のオフセット
電圧を気にしておけばとりあえず足りそう。

データシートで、オフセット電圧の小さい
NJM2732(1mV)をチョイスすれば、オフセットの
調整幅も小さくて済むはず。

まずは、そっちの方向で仮組みして動かしてみよう。



https://twitter.com/Nabe_RMC/status/460210478489153536

>プログラマはめったに起きない確率の低い事象を重要視

そうだよねぇ。だいたい、想像してる心配事って、
まず現実になっちゃうし、しかもそれってリリース
当日に、モロに表面化することが多いよなぁ。

あれだな。被選挙権は、年齢だけじゃなくて、
いくつかのプログラミング言語について一定の
スキルが無くちゃだめ、みたいな法律でも
つくれば、もう少し慎重におじーちゃんたちも
アタマ使うようになるんじゃないのかな。



http://hackaday.com/2014/04/27/a-small-replacement-for-large-programming-headers/
このプログラミングコネクタ。小さくて、ピンヘッダ
生やさずにすんで、いいかんじなんだけど、素人工作
だとこれを高精度に作るのって、なかなか難しそう
だな。

だからと言って、これに変換する変換基板とか
作っちゃうと本末転倒だしな。
穴あけ位置が、手作業でものすごく高精度に
出来るツールがあればいいんだけどな。




コメント ( 0 )




Arduinoと5110液晶でオシロの、オペアンプ周り
の定数を詰めていくことに。



まず、プローブから1MΩで受ける部分。

大振幅側の電圧は、15~20Vppくらいまでは受けられる
ようにしたいな、という目論見。
ってことは、よく考えたら、5Vの単電源でボルテージ
フォロアで1MΩに掛かる電圧を受けると、出力はGNDと
5Vの外側が削られちゃう。ダメだ。

なので、一旦5Vppに減衰させてから、後段のアンプで
各レンジに合わせて増幅しなおすっていう方法が必要に
なりそう。

落書き帳で色々と数値を書いては眺めながら、最大で
16Vppとするか、20Vppとするか考えて、具体的な抵抗値
がE24系列で設定可能な方ということで、20vppをチョイス
する方向で考えてみる。

具体的には、1MΩを、750kΩと250kΩに分け(250MΩは
120+130とかを足して作る)、この250kに掛かる電圧
を読めば、1/4の電圧となり、20Vppまで受けることが
可能に。

本当は、こうすると後段でノイズまで増幅することになる
から、あまりうれしくないんだけど、RtoRアンプで簡単に
済ますという作戦からそれちゃうので、その辺は少し
目を瞑ることにする。



んで、2段めは、1倍、2.5倍、10倍、25倍、100倍、250倍
と増幅率を切り替えられるようにすれば、ADC入力端子は、
それぞれ20Vpp、8Vpp、2Vpp、0.8Vpp、0.2Vpp、0.08Vpp
を5Vレンジで受けとることになるはず。

この増幅率を実現出来る抵抗値を適当に見繕って、
スイッチでパチパチ切り替えすれば、各レンジの電圧を
ADCで受けられるって寸法。



3段めは、ナイキスト周波数以上の周波数をカットする
ためのLPFとして、急峻にカットオフする特性にしたい
ので、チェビシェフで、できるだけ高次で、リプルゲイン
は小さく抑えたい…という方向で考える。

ナイキスト周波数は、Arduinoのサンプル頻度に因るので、
20000sps程度と仮定して、ナイキスト周波数は10KHz程度。

それより少し下でカットオフするので、諸々計算してみて、
カットアンドトライでカットオフ周波数を8KHzに、
リプルゲインを1.5dbと置いてみる。



問題は、やっぱり2段めの大増幅を行う部分。

各増幅率を実現する増幅率を手動のスイッチか電子的に
切り替える必要があるんだけど、LCDに表示できる情報量
に限りがあるので、物理スイッチを使ってパチンパチンと
切り替える方法で考えることにしたい…んだけど、
なにしろレンジが広いので、色々と制約が出ちゃう。

増幅率が1倍(20Vpp)の時は、プローブからの入力信号
が、5Vppとなるんだけど、その時の帰還抵抗は小さく
せざるを得ないので、オペアンプの出力バッファの強度
によって、RtoRまで振れられない可能性が高い。

まぁ、この制約が出るレンジは1個だけだし、あまり大きな
制約でもないと思うので、見なかったことにする。


問題は、小レンジ入力を大増幅する場合。帰還抵抗が
でかすぎると、ハムノイズ拾ったりするんだよな。


そういえば、帰還抵抗でレンジ切り替えするつもりで
計算始めちゃったけど、帰還抵抗はあまり変化させない
ほうが良いって聞いたことがあったなぁ。どっちがいい
んだろう?

ひとまず、ブレッドボードで1倍時と100倍時で、どんな
ノイズが出そうなのか、ブレッドボードで実験してみる。
異常発振とかはしなさそうなので、計算してみた値で
とりあえず進めることにしようかな。




もう一つの問題。オフセットを大増幅しちゃうときの対策。

FET入力のオペアンプだと、オフセット電流とかバイアス
電流は、よほど大きな増幅率にしない限り、ADCの値に
大きな影響を及ぼすことはなさそうに思うんだけど、
問題はオフセット電圧。

RtoRオペアンプだと、FET入力が多いみたいなんだけど、
FET入力のオペアンプだと、どうしてもオフセット電圧
がmVレベルで出ちゃうものが多いんだよな。

mV単位のオフセット電圧に、250倍も増幅かければ、
1Vレベルのエラーが出ても不思議じゃない程度。

なので、オフセットの調整機能は不可欠と考えるのが
よさそう。


3段のオペアンプのうち、1段めと3段めはゲインが
ほぼ1なので、5VとGNDで作り出した2.5Vの中点を
そのまま使っておけばだいじょぶそう。ただ、
中点を作り出すのにボルテージフォロアを使うと
すれば、ある程度の容量負荷に耐える設計にして
奥必要がありそう。

2段目は、増幅率が結構大きいので、増幅の中点は
他の段と分けて設定して、若干の上下が出来るように
調整機構を付けておけばいいのかなぁ。



色々難しいねぇ。

とりあえず、部品組み上げて実験してみて、それから
考えることにしようかな。




コメント ( 0 )




この間aitendoで買ってきた、5110LCDと、3.3V昇圧基板
を、ハンダ付けしておいた。




HT7733搭載の昇圧回路は、付属してた100uHのインダクタ
のサイズ(電流量)が気になってたので、もっと電流が
流せるやつに交換してハンダ付け。ずいぶん前に鈴商で
買っておいたヤツ。同じ100uH。

コンデンサも、出力側をリプルを抑えるために増強。
100uFにしてみた。
コンパクトに仕上げるために、以前Arduino互換基板を
作る時用に買いためておいた背の低いやつをつかった
んだけど、これ、低ESRじゃないかもしれないなぁ。
たしか低ESRじゃなかった気がする。


んで、電池をつないで電圧計ってみると、ふつうに3.3V
くらいが出力されてた。まぁ、当たり前。

負荷をかけていく。10mA、20mAくらいは、難なく普通
に出てる感があるんだけど、30mAを越えたあたりから、
何となく出力が安定しない感が出てきちゃう。

使ってるコンデンサが低ESRかどうかで、電力効率に
違いが出るのは以前の実験で判ってたんだけど、今回は
そっち系じゃぁなさそうだな。なんとなく、電池ボックス
との接続方法(接続端子)だろうな。

単に、ピンソケットに電池ボックスの導線をつないだだけ
だと、大電流を流せず、動作が不安定になるんじゃないかと。

入力側のピンソケットは、なにか容量の大きい別のものに
替えたいところだな。
ネジ止めできるボックスヘッダが使いたいところなんだけど、
基板側は2.54mmピッチ1個分だから、入らないんだよな…

今度何か探してこよう。



あと、NOKIA5110液晶とキャリーボード。

どうやら、基板側の接点と液晶モジュール側のガラス
上に施された配線は、やっぱりあの
     「ゴム製エラストマーコネクタ」
で、圧力かけて密着させるようにするだけで、通電
出きるみたい。

無事通電して、表示できた。右側(写真で動いてる方)
がこの間買ってきたヤツ。基板とLCDを別々で買って、
パチッと組み合わせただけ。



ゴム製エラストマーコネクタが、さらに2個オマケで
付いてたんだけど、最初から取り付けてあったやつ
で、無事に動いたので、オマケの2個はポッケに
ナイナイしておく。…なにか他に使い道あるのかな?



ちなみに、あっさりと表示できたわけじゃなく、一度
取り付けてみて、LEDの青い光しか出てこず、困って、
色々画策。

基板側の端子を、布でよーーーーく拭いて綺麗にした
のと、4ヶ所の爪でパチンと取り付けた後に、端子部分
の付近を上から少し力入れて密着するように押したら、
安定して表示されるようになった。基板は、もしか
したらIPAとかで脱脂してから取り付けたほうがいい
かもしれない。

まぁ、この液晶モジュール自体は、もう新しくは
作ってないだろうから、いつか見なくなる日が、近々
やってくるんでしょう。


ST7565チップ搭載の液晶の方が、機能的には似ていつつ、
表示エリアは広いし、各社バリエーションもいっぱい
あるので、メモリ量との兼ね合いがとれるアプリケーション
なら、そっち使う方が良さげ。



改めて、ArduinoのFFTライブラリで、デシベル表示
する方法について考え直す。

ArduinoのFFTライブラリは、この間触れたとおり、
2が底の対数をとって、16倍した値なんだけど、
これを底が10の対数にして20倍した値にするのと、
元のサンプル値のレンジに合わせて1Vrmsの時に1倍
というふうに換算しなおさないと。

つまりdbに置き換えないと、単位を表示出来なくて
困っちゃう。


底の変換公式を使ったりすれば、定数計算をチョロッと
するだけで計算できると思うんだけど、16で割り戻し
たり、20倍してdb表示にしたりっていうところは、
頭の中で式を暗算で変換出来ないので、落書き帳
の出番だな。


問題は、電圧レンジの切り替えは、オペアンプまわり
の抵抗切り替えでやるんだけど、その切り替え状態が
どうなっているかをArduino側で認識する方法。

それがArduino側で認識できないと、単位表示が変わら
ないから、使用時に頭の中で換算する必要もありそう
で、ちょっと不便。

6段切り替えにしたいので、6段×2組のロータリー
スイッチ使うのが吉かな。探すと、ロータリー
エンコーダばかり見つかるんだよな。
アナログスイッチで、Arduino側から制御した方が
楽ちんなのかな。



あちこちでチューリップの花がいい感じらしので、
おでかけしたいのも山々なんだけど、昨日が久々に
すごい花粉でめげていたので、今日はあまり出たく
なかったんだよな。

場所次第かもしれないけど、明日以降は少なくなる
のかな。

最近、ネコニウムも不足してるんだよな。まぁ、
まずはチューリップかネモフィラあたりで調整かな。



コメント ( 0 )




引き続き、Arduinoと5110液晶を使ったオシロを
少しずつ進める。



ソフト周りばかり考えていたので、少し逸れて、
アナログ回路周りももう少し詰めていくことに。


基本的には、プローブ越しに1MΩで受けた電圧を、
オペアンプで増幅してから、折り返しノイズの
影響が出ないようにアンチエイリアシングフィルタ
を掛けて、ADCから取り込むという流れにする目論見。

オペアンプ周りの設定と、それに関する電源周りを
考えておく必要がありそう。




電源は、正負電源を使うのが吉なんだろうと思う
んだけど、負電源を作るのが面倒だったり、
アンプの出力が0~5Vに収まらないときのADC側
の対処とかも面倒。
なので、手を抜いて、R-to-Rアンプで5V単電源を
想定してみる。


いくつか候補はあるけれど、オフセット電圧とか
バイアス電流とかモロモロ考えて、
http://akizukidenshi.com/catalog/g/gI-06840/

全部NJU7043Dを使って行うと想定してみる。本当は、
もうちょっとオフセットの小さいオペアンプがいい
んだけどな…。




まず、電源。

5V電源の抵抗分圧で2.5Vを作り出し、CRフィルタで
スパイクやリプルを除去。それをオペアンプ1回路
使ってボルテージフォロアで2.5V電源としてみる。
アナログ側の「A-GND」と仮定。

当然、この2.5V出力をオシロのプローブ部分の
GND側にも使っちゃう。

オシロ自体が独立した電源で動いてないと、2.5Vが
あちこちにショートして危険極まりない状態に。
たとえば、USB-シリアルでPCと繋ぎつつ、PC内の
電圧を計ろうとしたら大変。
A-GNDと称する2.5V出力があちこちに…。

なので、電池駆動とか、モバブーとかを電源として、
「単体オシロ」として使うことを想定。
(絶縁型のシリアルとか使えば、PCとかと接続する
 のも無理ではないけど)

まぁ、回路を手抜きするための、一つの方便として
こんな形で進めてみる。PC接続オシロは、もう既に
持ってるから、こんなもんでも充分なのだ。オイラ
的には。




次、アンプ部。

最初の段。
普通はインスツルメンテーションアンプを組むの
がいいんだろうけど、面倒なので、ボルテージ
フォロアで済ませると仮定。

各オペアンプは2.5Vを仮想GNDとして扱うので、
増幅の中心は2.5Vとなるんだけど、ADCで入力後に、
2.5V電位(入力値では512あたり)を、ソフト的
にはGND電位として扱えば、特に問題にならないはず。



続いて2段目。
入力信号のレンジに合わせて増幅する部分。切り替え
は、マニュアルスイッチでカチャカチャ切り替えを想定。
増幅幅用の抵抗を切り替える寸法。

UIの表示内容とかも想定しながら、それなりに使い
やすそうな増幅の倍率を、E24系列で実現できそうな
範囲で考えてみる。
4倍、2.5倍、4倍、2.5倍…としていくと、小数桁が
べらぼうに細かくならずゴキな感じ。750Ωと3kΩの
組み合わせとかかな。

入力のレンジを何V~何mV程度に設定するかにもよる
けど、初段のボルテージフォロアの出力を、一旦
分圧でちょっとだけ小さくしておいてから、改めて
レンジに合わせて増幅するのがヨサゲかなぁ。

ちなみにここは反転増幅。



3段目。折り返しノイズを削るフィルター。

ざっくりと、ADCのナイキスト周波数を10kHzと
置いてみて、カットオフ周波数を8kHz、3次の
チェビシェフ特性のフィルタに掛けることを想定
してみる。

ゲインリプルをあまり大きくしたくないので、
1.5dbと置いてみると、10kHzで-10db、12kHzで
-40dbくらいになるみたい。
本当は、もうちょっと急峻なフィルター使って、
カットオフを10kHzギリギリにしたいんだけど、
こんくらいで勘弁しておいてやるか…。

欲を言えば、10ビットADCのデータをFFT掛けると、
-60dbくらいまで見れるはずだから、もっと急峻
なのがいいんだけどな…
ゲインリプルをもっと大きくとるか、もっと高次の
フィルタにするか…。いずれにしても、Arduino側
の性能の制約で、ナイキスト周波数はこれ以上は
殆どあげられないんだよな。

ちなみにここも反転増幅。2回の反転で正転に戻る
寸法。



オフセット調整も欲しくなるんだけど、ここまでで
4個のアンプを使ってて、さらに1個というと奇数に
なってナニなので、アタマを切り替えて、2.5V電源
を作り出す抵抗の分圧部分を若干上下出来るように
しておくことで、お茶を濁すかな…




DC信号はこんな感じでなんとかなりそうな気がするけど、
AC信号はどうしようかなぁ。

とりあえず、プローブに外付けでコンデンサ通して、
DCカットする方法かなぁ。
1MΩで受けるとすると、タイムスケールが数秒~数十秒
まで扱うと考えると、計算では10uF程度でカットすれば
よさそうかなぁ。

内蔵にすると処理が面倒っぽいし、扱う周波数によって
容量を変えないと、実用上困りそうな気がするし。




あと厄介なのは、ADC周りのノイズかな。

オペアンプの出力は、アンプ自体のPSRRに任せて、
それなりのノイズ除去が期待できると仮定しつつ、
ADC側の参照電圧のリプルは検討要。

まぁ、小さいレンジをそのまま拾うわけじゃなく、
増幅後の電圧を入力するわけだから、電源に載る
リプルより、スパイクとかについて有効に対応
しておくのが吉なのかな。

AREF端子へのリプルフィルタ(100Hz前後を想定)を
バカ正直に計算してみたら、文字通り馬鹿みたいに
デカイLCRフィルタが必要になっちゃいそうなので、
そこそこであきらめるかな。



モロモロ考えつつも、実際に動かしてみると、
色々とトラブったりするんだよな。まぁ、まずは
動かしてみて考えよう。動かすための部品を買い
漁ってこないとな。

まぁ、db表示のFFTはともかく、波形自体の表示は
「縦48ドット」なので、あまり追求しても得るモノ
があまり多くないはずだと思うんだけどな。





http://www.dfrobot.com/index.php?route=product/product&product_id=1084#.U1qsslfzEvw

DFrobot社から、128×64ドットの液晶シールドも
出てるのか。
ドット数から見て、ST7565系のコントローラかな。

まぁ、NOKIAの5110液晶みたいに、いつなくなるか
判らない廃盤の携帯用の液晶より、汎用性のあり
そうなST7565の方が、使い勝手はいいだろうな。

オイラのオシロも、一通り動くようになったら、
メモリの許す範囲で、ST7565でも動くように
改造版も作りたいところ。




http://www.switch-science.com/catalog/1714/
スイッチサイエンスに、LPC1114搭載のmbed基板が。

ナカナカ良いな。安いし、RAMが8KB載ってるし。



コメント ( 0 )



« 前ページ