電子工作

L, Cを測ることを考える

LCを測る原理は、LC回路を発振させてその周波数を読むか、高周波をかけて電圧を読むか、ないしはパルスをかけて過渡現象をみるか。

LCを測るには、次の方法がある。

  • LCメータを買って使う。秋月のポケットLCメータ ~ 6000 円。ただし測定範囲が狭い。
  • LCメータを作って使う。前者の原理を使ったのが、フランクリン発振型のLCメータ。一般的にリファレンスのLCは固定して使うので,測定周波数も一点に限られ周波数特性は測れない。消耗部品代が1500円程度。
  • 高周波発振器とテスタあるいはオシロを利用して測る。私がちょくちょくやる方法。
    • インピーダンスは、jwL, – j/wCなので、被測定のLかCに、Rを直列につないで高周波をかけて、全体の電圧を測る。つぎにRにかかる電圧を読むと流れる電流値が知れるので、オームの法則から被測定物のインピーダンスがわかる。この方法は、周波数特性も測れる。電圧計の精度が許す範囲で。

発振器を組み立てるのがいつも面倒なので、フランクリン発振を利用したLCメータをつくろうと調べた。LM311コンパレータとか5V 1c接点リレーを使った例ばかり出てきたが、よく考えずにはじめに作った人の回路をトレースしているだけの人が多いのかもしれない。誰かがこの辺のことを考えて書いておいてくれたら自分では考えずに済んで楽なのですが。

机上で思ったのは、

  • リレーはいらないのでは。キャリブレーションと称して高精度のキャパシタを接続するが、どうせそのキャリブレーション用のキャパシタはつけっぱなしなのだから、それを直接使えば、リレーもキャパシタ一個も使わなくて良い。このLCメータの原理は、水晶で測った高精度のfと、高価で高精度のコンデンサを使って、未知パラメータのLとCまたはLのみを求めるという話なので。
  • 小さいLを測る機会が多いなら、被測定Lはコンデンサとおなじ並列につなげたらどうか。たとえば100 uHをreferenceに使うなら、50 uHくらい?までは並列のほうが敏感そう。小さいキャパシタを測るときも同様に直列につなぐとか。しかし定数をうまく選ばないと、周波数が大きくなりすぎてしまうか。300uH,10pFで3 MHzと大きい。一方、インピーダンスがreference値と被測定物値の和になるような接続だと、精度が出るのはreferenceの10/1から10倍までの範囲くらいである。
  • 発振させたいなら、74HCU04を使うほうが安いし、より高周波特性がよいのでは?発振特性の問題か?マイコン内蔵の発振端子は水晶で埋まるか。内蔵のコンパレータの特性は?

referenceのリアクタンスL0と,キャパシタンスC0の値を考えた.水晶発振子の精度がよいので,周波数fの測定精度を例えば0.1%などとすると,L0 = 50uH–1mH, C0 ~ 500–5000 pFのオーダーにすれば,調度良いみたいだ.fにはルートで効くので,精度を増すために変更するならオーダーを変える程度に変えないと効果がなさそう.微小測定値は,寄生容量・誘導で精度が悪くなることを考えると,その定数値が丁度良いのかも.あまり高周波で測るとreferenceも被測定物も特性が変わるので,低い周波数がよいが、可聴域には入れたくない.

よく考えたら,LCメータを作るほどLCを測る機会もないかなと思ったりした.今測りたいものは今までどおり高周波を印加して測ればよいしな.

Raspberry piで大気圧と温度を記録してグラフにして他のPCからグラフを見る(メモ)

前エントリの続きです。前エントリでは、大気圧・温度センサのRaspberry Piへの接続を行っています。

概要

次の機能を一つのpythonコードに押し込んで、(root権限の)crontabで定期的に(5分ごとないしは、20分ごと)実行して、pngグラフ作成までを行う。

  • i2cでLPS331から、大気圧と温度を読んできて、ファイルに書き出す。
  • ファイルから読み込んで、グラフにする。

このグラフを外のPCから読めるように簡易httpサーバを立てて、pngにリンクする。
他のPCのブラウザから接続すると、こんな感じになる。
f:id:beiz23:20140726222355p:image:w350

httpサーバ

pythonの一行で建てれる簡易サーバを使った。
SimpleHTTPServer
次の一行をコマンドラインから実行するとサーバが立ちます。well-knownポートを使う場合はroot権限がいるかもしれないので、8000番とした。コマンドを実行したディレクトリ以下を外から見ることができる。pngのあるディレクトリをまるごと見せるか、そこにindex.htmlでも置けば良い。


python -m SimpleHTTPServer 8000
crontabの設定

$ sudo crontab -e

として次の行を追加。


*/5 * * * * /home/pi/pressure-logger.py
データファイル形式

次のよう。


20140726-2210 1006.48 31.45
20140726-2212 1006.35 31.40
20140726-2215 1006.37 31.34
スクリプト(pressure-logger.py)はこちら。

matplotlibによるグラフ作成の部分はトラ技2014年7月号(これもお借りしてきた)をだいぶ参考にした。

続きを読む

raspberry pi を使って何かするメモ。

何ができるかについての(偏った)考え方

  • ADCがない

raspberry piは、一般的なマイコンに付いているADCがついていないので、何かセンサをつなげるならば、デジタル信号がでてくるようモジュール化されたセンサを使うと楽。I2CやSPIはRaspberry piのGPIOにimplementされているので使いやすいのではないか。最近は秋月でI2Cインタフェースのセンサが多く売られている。

  • タイミング制御が得意でなさそう。

OSが走っているので。

 

上の二点のことがあるので、凝ったことをするなら、AVRなりで前処理して、AVR-raspberry pi間をUART,SPIなどで結ぶとか。
今回はraspberry piの動作確認程度を目的に、家に転がっていたI2Cインタフェースの大気圧センサ(秋月で650円, AE-LPS331、以前、液晶表示の温度・気圧計を作るときに使ったチップ)を使って大気圧と温度の履歴をグラフ化でもしてみます。
トラ技2014年7月号の3章にLPS331を使った似たような応用が紹介されていますが、センサは一緒だけどモジュール化しているメーカーが違って、ピン位置が異なるので、見ないようにする。

 

Raspberry piのI2Cピンは1k8Ωでプルアップされている。回路図をみると、R1,R2に相当している。GPIOピンの真横に見えるチップ抵抗。
プルアップが強すぎなので、チップ抵抗をマイナスドライバでふっ飛ばしてしまいたいが、借り物なのでそれもできず、このままやってみる。

 

基板を作って、LPS331をRaspberry piに載せた。
f:id:beiz23:20140726150536j:image:w250f:id:beiz23:20140726150552j:image:w250f:id:beiz23:20140726154939j:image:w250
表裏と載せたところ。

 

i2cの設定は各所で紹介されている通り。
/etc/modprobe.d/raspi-blacklist.conf
/etc/modules
の書き換えと、i2c-toolsでの動作確認。


pi@raspberrypi ~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- 5d -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

接続できた通信相手のアドレスの上位7ビット分が表示される。この場合は5d。
pythonでi2cポートを制御するため、python-smbusをapt-getでインストール。

 

ここまでできたら、あとはソフトウェアの開発。
大気圧と温度を記録してグラフにして他のPCからグラフを見る。までを作ることにする。次エントリ

 

次のラズパイ本が人気です。