2014年2月15日土曜日

電源装置のプチ改良

先日ヤフオクで落としたKENWOODのCVCC電源(PR30-6P)に、CV/CC状態表示LEDが付いてなかったので追加した。



↑こいつ


電子負荷で動作確認。


とりあえず分解時の写真をいくつか。



半固定抵抗の実装方法が面白い。





電圧、電流を制御しているオペアンプの出力を観測してみる。


CV動作しているときは、黄色い波形が赤い波形より上に来てる。


オペアンプ周辺の回路を少しだけ書き出してみると、よく見かけるダイオードORを使った制御方法だった。
2つのオペアンプで電圧と電流を監視し、いずれかでも設定値を超えると電流を吸い込む方式。
ちなみに自作のCVCC電源でもこの方式を使っている。

この方法では片方のオペアンプが制御状態に入ると、もう片方のオペアンプの出力が飽和状態になるので2つのオペアンプの出力電圧を比較すればCV/CCのどちらのモードで動いているかが分かる。

今回はLM358をこの電圧の比較器として使った。
追加回路はとてもシンプル。


前面パネルのアルミ板に直径5mmの穴を開けてLEDを差し込む。

追加回路はパネルメータの取り付けネジに共締め。

完成!
これで使い勝手が少し良くなったかと思う。
全面のプッシュスイッチは電圧のプリセット用。
スイッチの下に穴が見えるが、そこにドライバーを突っ込んで半固定抵抗を回すと、電圧を設定することが出来る。

~  おわり ~












2014年1月23日木曜日

接地抵抗の測定実験

今回は接地抵抗の測定ネタです。

~ 経緯 ~
自室のデスクトップパソコンとオーディオコンポをUSBケーブルで接続して使用しているのですが、数日前に掃除をしていた時、一旦外していたUSBケーブルをコンポ側のコネクタに挿すときに小さな火花が散っているのを発見しました。
気のせいかな?と思ってUSBコネクタのシールド部分とコンポの差込口金属部を両手で触れてみると、少しビリビリ来たのでテスターで電圧を測定してみるとAC70V程度ありました。おそらくPC側のノイズフィルタから来ているものだと思います。
この状況はあまりよろしくないので「接地をしよう!」と思ったわけです。
といっても、部屋のコンセントはエアコンのコンセントを含めて接地端子は付いていません。
来ているのはDRSSTCのテストに使っていたアース線くらいです。ここに接続するのも気持ち悪いので新たにアース棒を埋めることにしました。
~ 経緯終わり ~

ホームセンターで購入してきたアース棒は、断面がS字になっている物で長さは60cmです。
これを部屋からすぐ近くの庭に埋めました。
地表から約30cm掘り下げたところに打ち込んでいます。




頭が隠れるまで打ち込んだあと、じょうろで水を掛けてから土を戻しました。
念のため地表10cmのところに「アース棒が埋まっていますよ~」って分かるようにラベルを入れておきましたw。

ちなみにアース棒に付いている銅線と黒色の線は、はんだ付けした後にビニルテープで保護してあります。本当は緑色の線を使いたかったのですがこの電線がたくさんあったので、、、
1.25sq HKIV耐熱電線です。

とりあえず埋め終わったのですが、接地抵抗がどの程度なのか知りたくなりますよね?

D種接地は漏電遮断機が付いている場合は500Ω以下と決められていますが、そのくらいはあるだろうなー と予想していました。
(今回はD種接地の規定に沿っているわけではないが。)

で、接地抵抗の測定方法をいろいろ調べていますと、主となる接地棒の他に測定用の補助接地棒を2本打ち込んで測定する「電圧降下法」ってのがよく使われていることがわかりました。
詳しく知りたい方は、「接地抵抗測定方法」とかで検索するといくらでも分かりやすい説明が出てきますが、ここでも簡単に説明してみます。

まずはこの図を見て下さい。

図中でEと書かれているものが主となる接地棒です。P、Cは測定時に必要となる補助接地棒です。
各接地棒の間隔を大きく取るのは、接地棒付近では導体と土との間で接触抵抗が大きく、それにともなって電圧勾配も大きいためです。
この電圧勾配がほぼ水平になったところに補助接地棒Pを打ち込まないと正確に測定できません。
電圧降下法ではE-C間に一定の交流電流を流して、その時にE-P間に生じる電圧を測定することで接地抵抗を求めます。

理解しやすいように各接地棒に生じる接地抵抗をRe, Rp, Rcで表記したのが以下の図です。

まず、接地棒E-C間に3mA程度の交流定電流を流します。
この時、ReとRcによって電圧降下が発生しますが、定電流源を接続しているので各抵抗に流れる電流は変わりません。

次に交流定電流を流したまま接地棒E-P間の電圧を測定します。
ここで用いる電圧計の内部抵抗はRpに比べて無視できるほど十分大きいものでなければいけません。
内部抵抗が十分に大きければRpにはほとんど電流が流れず、Rpの電圧降下を無視することができます。つまり、Rpを短絡したと考えてOKです。
そうすると電圧計はRe両端の電圧を測定していることになります。

よってオームの法則よりRe = V / I と求めることができました。

これが電圧降下法の測定原理です。


市販の測定器には交流定電流源と電圧計が内蔵されていますが、交流定電流を作るのが面倒なのでオシロスコープで電流値と電圧値を測定してそこから接地抵抗を求めることにします。
各機器の接続を以下に示します。

↓実験の様子


まず、PC上でWaveGaneというソフトウェアを使って820Hzの正弦波を出力させます。
820Hzという周波数は市販されている接地抵抗計で使われていたのでそれを真似ています。

この信号をオーディオアンプで増幅し、さらに1次と2次を逆接続した電源トランスで昇圧して絶縁された高電圧の正弦波交流を得ます。

この電圧をE-C間に印加しますが、Eに近い側に10Ωの抵抗を入れて、ch1のプローブに入力し電圧降下より電流を計算します。

補助接地棒Pはch2に入力します。

観測された波形を次に示します。

割ときれいな正弦波が出ています。
ch1の電圧が39.15mVrmsなので流れている電流は3.915mAとなります。
ch2の電圧は2.407Vrmsなので、接地棒Eの接地抵抗Reは2.407 / (3.915*10^-3)より614.8Ωと求まりました。

予想していたよりも大きな値でちょっと残念。
100Ω以下にするには結構大変なことが分かります。

電圧降下法による測定は以上です。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

次にLCR METER DE-5000を使って同じく接地抵抗を測定してみます。
こちらも測定対象に交流電圧を印加して抵抗値を求めます。測定周波数は1kHzとしました。

方法は単純で、接地棒E-P、P-C、C-E間の抵抗を測定し、連立方程式を解いて各抵抗値を求めます。

各接地棒は電圧降下法で実験した時と同じ位置に打ち込んであります。
精度よく測定するには、各接地棒を正三角形の頂点に位置するように打ち込み、間を10m程度ずつ離すのが理想です。
今回は簡易的な測定のため、直線上に打ち込んでいます。

↓測定の様子

結果は、
E-P間 1.434kΩ
P-C間 2.023kΩ
C-E間 1.855kΩ
となりました。

これより、接地棒Eの接地抵抗Reは (1.434+1.855-2.023)/2 = 0.633 → 633Ωと求まりました。
同じように計算してRp = 801Ω、Rc = 1222Ωとなります。

上で行った電圧降下法の結果とだいたい一致しています。

いちいちオシロスコープを持ち出すのは億劫なのでこの方法で十分でしょう。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

こうして庭に埋めた接地棒から線を部屋まで引き込み、端子台に接続しました。

PC本体とモニタ、コンポのアース線をここに接続しています。

後日、アース棒をもう一本打ち込んで接地抵抗を330Ωまで下げました。

接地後は異常電圧はなくなりました。 
あと、コンポでFMを聞いている時のノイズが小さくなったような気がします・・・。

アースは大切ですね!??

~ おわり ~

2014年1月4日土曜日

Tiny10を使ったサーボテスタ

明けましておめでとうございます(・ω<)

最近ブラシレス関連に興味がありまして、、
海外の安いESCを買ってみて分解して回路構成なんかを勉強していました。
というか、海外のESCが安すぎて自作する意味があまり無いようなwww

そのESCを動かすにはサーボ信号などと呼ばれるパルス信号が必要です。
パルス信号は周期約20ms、パルス幅1~2msとなっています。
重要なのはパルス幅で、周期はアバウトでも大丈夫みたいです。

このパルスはタイマIC555などを用いて簡単に発生させることが出来ますが、今回は米粒AVRであるTiny10を使ってみました。

Tiny10は、小さい割にA/D、16bitタイマ、アナログコンパレータ、内蔵クロックなどが搭載されていて素晴らしですが、EEPROMが非搭載なのが残念ですね。。

製作したサーボテスタは恒例のフリスクケースに収めてみました。

可変抵抗の厚みで蓋が若干浮くのでネジで固定しています。

内部は結構スカスカです。
ピンヘッダや基板は瞬間接着剤で固定しています。

Tiny10周辺の拡大

小さすぎて扱いにくいので変換基板に実装

マイコンを用いたので周辺回路はとてもコンパクトになりました。
手描きでナンですが、回路図です。

2014/03/07追記 保護用のポリスイッチなど抜けてたところを書き足しました。

※可変抵抗からの信号を入力するポートには、周辺ノイズの影響を抑えるために0.1uF程度のコンデンサをGNDとの間に挿入したほうが良いです。 
今回はプログラム書き換えの都合上省いていますが、特に問題になっていません(゜ε゜)

プログラムの開発環境はAVR Studio5を使用しました。

~動作の説明~
動作モードは5つあり、以下のようになっています。
1 ・・・ マニュアル(可変抵抗の角度に応じて出力パルス幅が決まる。スイッチを押すとパルス幅が1500usになる。)
2 ・・・ オート、三角波状にパルス幅変化
3 ・・・ オート、ノコギリ波状にパルス幅変化
4 ・・・ オート、逆ノコギリ波状にパルス幅変化
5 ・・・ 停止(パルス幅は直前のままで固定)

オートモード(モード2,3,4)では可変抵抗を回すとパルス幅の変化のスピードが変わります。

スイッチを押さずに電源に接続すると、モード1で起動してモードは固定です。
スイッチを押しながら電源に接続すると、モード2で起動します。再度スイッチを押すごとに、モード3→4→5→2→3... と切り替わります。

パルス幅は内蔵クロックの精度に依存し、周辺温度で結構変化するみたいです。
可変抵抗の角度読み取りの分解能は、内蔵A/Dの都合上8bitになっています。
2014/01/04時点の最新のファームウェアはコレです↓
https://www.dropbox.com/s/l4nyqr6aumg3p2f/tiny10%20analog%20to%20servo.hex?dl=0
MD5: 523CD4EC39FE797A6192AA287000510A

動作の様子です。(文字が見えにくいような..



2013年10月23日水曜日

パルス幅制限回路

インタラプタが暴走しても大切なテスラコイルを壊さないために、パルス幅制限回路があると便利。
そこで、74HC14と抵抗、コンデンサ、ダイオードで簡単な回路を組んでみた。
上手く動いているようなのでメモっておく。


↑ 実験した回路


インバータとRC直列回路を組み合わせたシンプルな回路。


パルスが入力されていないときはCtは充電されており、反転された電位が右側のダイオードにかかるが、逆方向なので電流は流れない。

正のパルスが入力されるとインバータで負のパルスに変えられ、コンデンサCtの電圧がRtCtの時定数で下がっていく。
電圧が更に下がってシュミットトリガのしきい値電圧に達すると、右側のダイオードが導通し出力がLになる。
パルスの立下りでは左側のダイオードでRtが短絡されるので、Ctはすぐに充電されて次のパルスに備えることが出来る。

Ctに使うコンデンサは小さい容量のものを使わないと74HC14の負担が増えるので注意。

この回路で制限されるパルス幅はおおよそ RtCt[s] になる。

いくつかの組み合わせで測定してみると、おおよそ理論値になっていた。
ダイオードの電圧降下やシュミットトリガのしきい値電圧のバラつきでずれているのだと思う。

測定結果↓

現在製作途中のMIDIインタラプタは、前回のように555によるパルス幅調整回路が無いので、マイコンが暴走した時のためにこの制限回路を付加しようと思う。

動作の様子↓



以上。

2013年9月8日日曜日

MIDIインタラプタ v2.1まとめ

なんか中途半端なとこから書いてますが。

◆出来ること
・MIDI信号を受信して、6和音までの固定パルス幅の信号を出力。
・ノート番号(音の高さ)によって出力ポートを振り分けられる。
・MIDIチャンネルによって       "

◆出来ないこと
・ベロシティに対応してパルス幅を可変させる。
・ピッチベンドでうにょ~~~んする。


DRSSTCの制御用として開発しましたが、パルス幅は外部のタイマICで固定されるのであまりよろしくないです。マイコンからは約9.6usのワンショット用信号を出しているだけです。
図1. よく分かる図

つまり、周波数が高くなったり和音数が増えると、デューティが大きくなりすぎて音が汚くなったり渦電流でヒューズが飛んだりするということです。

hex、説明書、回路図は下記URLからどうぞ
クロックは20MHz、8分周無しです。

バグなどあればコメントに書いていただけば修正するかもです。

【2018/03/16 追記】
パルス信号は、LMC555などのトリガとして使用しやすいようにHigh/Lowが反転した状態で出力されます。
つまり、図1に記載の”マイコンから出力される波形”は誤りです。脳内でHigh/Lowを入れ替えて下さい。近いうちに修正版をリリース予定です。

2013年8月12日月曜日

WINSTAR WEH001602ALPP5N00001 初期化メモ

シリコンハウスで購入したOLED(有機EL)キャラクタディスプレイ、WEH001602ALPP5N00001を動かしてみたので初期化方法を忘れないようにまとめておく。

普段、マイコンとキャラクタディスプレイを接続するときには、配線数の少ない4-bit modeを採用しているので、4-bit modeでの初期化方法を書く。 8-bit modeでも2回に分けているのを1回で送信するだけでほとんど同じだが。。。

まず、このOLEDディスプレイを使うにあたって、一般のバックライト付きキャラクタディスプレイよりも電源ラインのノイズが多いことに注意しないといけない。ディスプレイの裏面を見ると昇圧用のDC-DCっぽいものが見える。ここでDC12V程度を発生させている。

電源ラインにはこのDC-DCからのノイズが混入してくるので、ディスプレイ基板のVss-Vdd間に追加で10uFのコンデンサを入れておいた。
Eピンはプルダウンしておいたほうがよいかも(内部でプルダウンされている?)

マイコンにはATtiny2313を使用し、ディスプレイの端子割り当ては以下のようになってる。
<LCD: AVR>
Vss: GND
Vdd: +5V
RS: PB5
R/W: GND
E: PB4
DB0-DB3: NC
DB4: PB0
DB5: PB1
DB6: PB2
DB7: PB3

ディスプレイにデータ、コマンドを送信するときは、DB4-DB7にデータをセットしてからEを立ちあげ250ns以上待ってからEを下げる。下げた後も250ns以上待つ。
データシートのRead/Write Characteristicsを見ると、Eの立下りエッジでDB0-DB7が読み込まれるようだ。
RSピンは文字データを送受信するときは1、コマンドを送信するときは0にする。
コマンドによっては実行するのに10ms近く掛かるものもあるので、ビジーフラグを使わない場合は注意する必要がある。

4-bit mode初期化手順は以下のとおり。
この中で幾つか記号が出てくるが、意味は次のようになっている。
N: 表示行数の設定。 0を設定すると1行、1を設定すると2行になる。今回は2行なので1。
F: 文字フォント設定。 通常は0にしておくらしい。。
FT1, FT0: フォントテーブルを選択する。 今回は00にした。
D: ディスプレイ表示のON/OFF設定。 1で表示ON、0で表示OFF。 1を設定。
C: カーソル設定。 1でカーソル表示あり、0でカーソル表示なし。 0を設定。
B: ブリンク設定。 1でカーソル点滅あり、0でカーソル点滅なし。 0を設定。
I/D: 文字の表示方向を設定。 1で左から右、0で右から左。 1を設定。
S/H: 文字書き込み時のシフト設定。 1でシフトあり、0でシフトなし。 0を設定。


マイコンの代わりにスイッチで初期化してみる動画を撮った。
バスの状態が目に見えるので分かりやすいかな?




以上。


2013年6月30日日曜日

秋月 小型I2C液晶 AQM0802A-RN-GBW  駆動方法

小型のI2C液晶を動かしてみたので忘れないうちにメモ。(調べると沢山情報が出てきますがw

まず配線。液晶のピン番号はデータシートに書いてあるように左から1,2,3,...,9
接続例も載ってあるのでそのように繋げばおk

私はチップコンデンサを直接ピンに実装したが、あまり長く加熱してるとICのモールド部分が焦げるので短時間ではんだ付け。汚いけど問題ない。
このようにピンの名前を書いておくと間違わなくて良。

電源電圧が3.3Vであることに注意。3.3Vで動作させているときはコントラスト調整が最小でもちょうどいいくらい。

次に制御プログラム。
今回はMikroElektronika社のPIC用Cコンパイラ、mikroC for PICを使用した。知らない間にVer 6.0.0が出ていたが、、、目立った変化はない感じ。ライブラリが豊富で良いんだけど、エディタに若干バグがあるのが残念。試用版では2Kワードまですべての機能を使うことが出来る。
マイコンはPIC12F683を使用し、内蔵クロック4MHzで動作させた。

I2C通信はこのLCDの場合は書き込みのみなので割とシンプル。
データバイトを1つだけ送信する場合は、

1.スタートコンディション発行
2.スレーブアドレス送信(このLCDだと0x7c)
3.コントロールバイトを送信
4.データバイトを送信
5.ストップコンディションを発行

という流れになってる。
この中の「コントロールバイトを送信」ってのが、次に送るデータバイトが「コマンド」であるか「データ」であるかを識別するために重要。

コントロールバイトの構成は2進数で
[Co][RS][0][0] [0][0][0][0]
となっており、下位6ビットは0で変わらない。コマンドを送りたいときは[RS]を0に、データを送りたいときは[RS]を1にする。
[Co]は連続してデータを送るか指定する為に用いる。
[Co]に0を指定すると、そのコントロールバイトの後に続けて複数のデータバイトを送信することができる。つまり、

1.スタートコンディション発行
2.スレーブアドレス送信(このLCDだと0x7c)
3.コントロールバイトを送信[Co] = 0
4.データバイトを送信
  データバイトを送信
  データバイトを送信
  .
  .
  データバイトを送信
5.ストップコンディションを発行

となる。
逆に言えば、途中でコントロールバイトは変更できないので、文字を幾つか送信してその後にコマンドを送信ってのはおそらく出来ない。一度ストップコンディションを発行して終了させる必要がある。

[Co]に1を指定した場合はコントロールバイト、データバイトの二組を続けて送信しないといけない(データを2つ以上連続して送れない)。
つまり、

1.スタートコンディション発行
2.スレーブアドレス送信(このLCDだと0x7c)
3.コントロールバイトを送信[Co] = 1
4.データバイトを送信
  コントロールバイトを送信[Co] = 1
  データバイトを送信
  コントロールバイトを送信[Co] = 1
  .
  .
  コントロールバイトを送信[Co] = 1
  データバイトを送信
5.ストップコンディションを発行

となる。最後のコントロールバイトも1にしておく。途中でコマンドとデータが別れる場合に便利。
秋月のデータシートを見ると、「データを複数送る場合Co=1で、最終データはCo=1です。」と書かれてあるが、データを複数送る場合は[Co] = 0の間違いではなかろうか..? 

以上を踏まえて液晶に「Hello World!」と表示するプログラムをベタで書くとこんな感じになる。

液晶1行目の「Hello」は[Co] = 1としてコントロールバイトとデータを1組づつ送っている。
液晶2行目の「World!」は[Co] = 0としてデータを連続で送っている。
実際に動かすとこのように表示される。

以上が文字表示時のデータ送信手順。

LCD初期化はデータシートの通りにやれば問題ない。
コードはこんな感じ。

液晶にコマンドを1つ送るための関数(i2c_lcd_cmd)はこうなってる。


あとは文字を一文字送信する関数、文字列を送信する関数などを作っておくと便利。

とりあえずメモは以上。

マイコンとは2線で繋ぐだけだからポート数も余裕があるしデバッグが捗るね。