電子工作

2020年2月17日 (月)

定電流回路の電流検出抵抗

JIS C8708:2019充放電試験回路製作中、この中の定電流回路
(充電用と放電用の2つ)この電流検出抵抗をあれこれ模索。
今回使ったのは手持ちの関係で5W・0.3Ω。
その発熱が悩みどころ。

セメント抵抗に電力を食わせた時の温度上昇。
こんなグラフが出ていました。

B0
https://www.e-globaledge.com/products/ecomponents/tdo/

温度特性が「±400ppm/℃」。
ということは、10℃変化で0.4%。
触れないくらいの50℃も上がると2%の変動。

電流検出抵抗としてはちょいとなぁ~なんですが、
とりあえず手持ち部品の関係で「5W0.3Ω」というのを
用いました。

今回の回路、最大1.5Aで0.3Ωだと0.7Wほど。
5W定格の14%ほど。
十分に定格内なのですが、↑のグラフを見ると、
上昇温度が30℃ほどと読み取れます。
ということは抵抗値として1%ほどの変動を覚悟しな
くてはとなります。

仕事の装置ではこんな抵抗を使っていました。
   ※手持ちが無いので今回は使えなかった。
B1_20200217091601
「PWR4412」という金属でできたコの字のバー。
これで「±20ppm/℃」。
ただし、ラインナップされている最高の抵抗値が「0.1Ω」。

抵抗値を小さくすると、電力が減って発熱も少なくなりますが、
定電流回路の制御電圧を下げなければなりません。
今は制御電圧0.5Vで1.6A。
電流検出抵抗を0.1Ωにすると、0.16Vで1.6Aという制御に
なり、ちょっと電圧が低いかな~というところです。


※参考
ねがてぃぶろぐ セメント抵抗の温度特性 その1
ねがてぃぶろぐ セメント抵抗の温度特性 その2

※追記
手持ちの「コの字状抵抗」を引っ張り出してきました。
11_20200218090301
30mΩのと50mΩのが各2つ。
調べてると・・・
PWR4412」、廃番になってました!
えらいこっちゃ。
代替品を探さなくてはなりません。

ビシュイでSR3R、SR5Rというのが使えそう。
ちょいと温度係数が悪いか・・・。
SR3R(3Wタイプ)だと0.1Ωがある。
RiedonというメーカーでMSR5というのでも0.1Ωがある。

抵抗値を小さくすると、同じ電流なら電力がダウン。
1.5Aで0.3Ωだと0.675Wだったのが、0.1Ωにすると0.225Wに。
これで、発熱がずいぶんと減ります。
↑にあるグラフのように「負荷率に対する温度上昇曲線」あれば
発生誤差が推定できるんですけれどねぇ。

| | コメント (4)

2020年2月16日 (日)

JIS C8708:2019充放電試験回路製作中

ざっとハードが固まりました。
制御プログラムをごそごそしています。

A2_20200216162501

0.5Cで充放電させる必要があるので、設定できる最大を1.6Aに
しています。

A1_20200216162501
充電側のヒートシンクをもうちょい大きくしたいところ。




| | コメント (0)

2020年1月24日 (金)

メモ:4-20mA電流ループ用ICとデジタルアイソレータ

回路設計で調べ物をしていたら、「TI」のであれこれ新しいデバイスを発見。

※4-20mAの電流ループ回路 (出力側)
OP-AMPで定電流回路を組んでというのがこれまでだったけど・・・
便利なデバイスがありました。
XTR115 外付けTR 1個で4-20mAのカレントループ。
      センサー回路の電流が4mA内でOKならむちゃ簡単。
      OP-AMPで組んでも同じ構成になるだろっと。
XTR111 センサー回路が大食いの時、3線式あるいは4線式ならこれ。
      電流流し出しで出力。 (GND側を共通にできる)

※デジタルアイソレータ
CANバス絡みに広がっているんだろか。
安価で使いやすいのがあれこれと。
フォトカプラでの絶縁とは異なる手軽さ。
ISO7310 (1ch)   ISO1320 (2ch)

そして、入力インターフェス用。
ISO1211 24Vを受けるのに便利そう。
http://www.tij.co.jp/product/jp/ISO1211
 ↑のhttp://www.ti.com/jp/lit/pdf/SLLA382
が面白いかと。
高電圧回路を絶縁受けする場合、フォトカプラだと電流制限抵抗が
「熱くなる」わけですが、これだと小ワットの抵抗でOK。

※関連→抵抗の熱で基板が変色



| | コメント (0)

2020年1月14日 (火)

メモ:awk(gawk)で「arcsin」

※エクセルでの文章はキライ!
エクセルで図と文を混ぜて書いて「ハイ、これが仕様書」っと渡させるとちょいとイライラします。
そんなときは「こちらの環境が悪いのか見にくいのでpdfにして送り直してちょ」と返答するようにしています。
まぁ↑は置いておいて・・・

数式処理の確認も、エクセルを使うと簡単にグラフ化できたりと便利なのは間違いないんですが、私の場合、「あまりしたくない感」が勝ってしまいます。
そんな場合、何を使うかというと「awk(gawk)」。

テキストエディターでスクリプトを書いて、コマンドプロンプトで実行。
リダイレクトで結果をテキストファイルに。
グラフ化したいなら、その結果をエクセルに食わせるという具合。

先日のこと、逆三角関数arcsin、arccosを使った処理の検証をしようとしたところ、・・・awk(gawk)には「asin()、acos()」関数は実装されていなかった。・・・あれま。

三角関数sin、cos、atan2、それにsqrtは実装されてますんで、これらを使ってどうにかしなくちゃなりません。
三角関数の変換式を検索しながら、awk(gawk)に関連付けて探すと、発見!
これ↓。
function asin(x) { return atan2(x, sqrt(1-x*x)) }
function acos(x) { return atan2(sqrt(1-x*x), x) }

asin()とacos()が得られました。
簡単にテスト。

BEGIN{
 PAI = atan2(0, -1)  # パイは数字指定じゃなくatan2で
 for(i=-1;i<+1;i+=0.1){ #-1~+1を0.1ピッチで
  printf("%+4.1f %+7.2f %+7.2f\n",
    i, asin(i)*180/PAI, acos(i)*180/PAI);
 }
}
function asin(x) { return atan2(x, sqrt(1-x*x)) }
function acos(x) { return atan2(sqrt(1-x*x), x) }

で、その結果
-1.0 -90.00 +180.00
-0.9 -64.16 +154.16
-0.8 -53.13 +143.13
-0.7 -44.43 +134.43
-0.6 -36.87 +126.87
-0.5 -30.00 +120.00
-0.4 -23.58 +113.58
-0.3 -17.46 +107.46
-0.2 -11.54 +101.54
-0.1 -5.74 +95.74
-0.0 -0.00 +90.00
+0.1 +5.74 +84.26
+0.2 +11.54 +78.46
+0.3 +17.46 +72.54
+0.4 +23.58 +66.42
+0.5 +30.00 +60.00
+0.6 +36.87 +53.13
+0.7 +44.43 +45.57
+0.8 +53.13 +36.87
+0.9 +64.16 +25.84
+1.0 +90.00 +0.00

 

| | コメント (2)

2020年1月 9日 (木)

溶けた? 焼けた?

1996年に製作した信号監視警報装置。
その「アナログ出力がおかしい」という修理依頼。

おかしい原因は判明したのですが、故障箇所とは関係
の無い警報出力用リレーの外観に異常を発見しました。

A1_20200109161601

2つあるリレーの片方、外装樹脂が溶けています。

端子台で外に出しているのはA接点だけ。
閉じた接点に異常電圧がかかって過電流が流れたのか・・・
  ※この場合はリレーの中から発熱。
しかし、外観を見る限り、何か溶剤のようなもので
溶けてしまったような感じです。
しかし、基板上にそんな痕はありません。

いったいなんだろか。
交換用に注文した部品が来てからリレーを外して解体
してみます。

※リレーを外した結果です。
A1_20200110113701

外装が溶けていたのは「コイル側」。
中はこんな状態でした。
A2_20200110113701
A3_20200110113701

コイルも接点も異常なし。 おかしな変色は見えません。
溶けた外装部、その裏を見ると・・・
A4_20200110113701
A5

裏にも影響が見えますが、表ほどひどくはありません。
ということは、今回の異常は表側が発端。

どのくらいの熱で溶けるのかと、切り取った外装切片に
加熱したハンダゴテを当てると・・・
簡単に溶けてしまいました。
A6
はて・・・原因はなんだろう。

ユーザーで何かしたとした思えない。


| | コメント (0)

2020年1月 8日 (水)

ミスが広まる 1/1023 vs 1/1024

定番回路、「これはあかんやろ」を指摘したんが
液晶表示モジュールを4ビットモードで使ったときの空きピン処理
誰かが始めた間違ったつなぎ方(この場合はチップメーカーのアプリケーションノートか)がずっと踏襲されて広まってしまったというのを発見しました。
これをトラ技の記事にしたのが2009年5月号。
以後、空きピンをGNDにつないでしまう例、だいぶ少なくなってきたように思います。

で、新年早々こんなのを発見しました。
ラジオペンチ Arduinoを使ったバッテリー放電器
A/D変換データを電圧値にスケーリングする処理がスケッチに書かれています。
ArduinoのanalogRead() は10bit。 0~1023(10進)の値が得られます。
これの処理が間違っていたのです。
ここ↓
//  battV = analogRead(0) * Vcc / 1023.0;       // バッテリー電圧測定(これは間違いで、)
  battV = analogRead(0) * Vcc / 1024.0;       // バッテリー電圧測定(正しくはこっち)

10bit値で1/1023と1/1024の違いですので、差は0.1%ほど。
わずかですが、原理的に間違っていますんでこれはまずいです。
   ※A/Dコンバータが8bitだとミスによる実際の誤差
    が目につくでしょう。
    1/255 vs 1/256 で差が0.4%ほどになり、
    実値との差に気がつく。

※理屈の詳細はラジオペンチさんの記事のコメントをご覧ください。

この「1/1023と1/1024」、調べてみると「1/1023」を使っているプログラム例があちこちに出てきます。
どこが発端なのかは調べ切れてませんが、ArduinoのanalogRead処理で多いような気がします。

ArduinoではArduinoのアナログ基準電圧入力 も勘違いの処理が広まっているかもです。
正しく使えば、「外部基準電圧とAREFピンの間に抵抗を入れておく」なんてことはしなくてもokですから。

| | コメント (3)

2019年12月31日 (火)

日置の65型メータ DC50mA どなたか使いますか?

もらい物の古~い直流電流計。
日置の65型 50mA。 1969年製。

21_20191231103601

どなたか使いますか?
無料です。 送料はご負担ください。
クリックポストやレターパックは厚みの関係で無理だし・・・
箱に入れての発送、ゆうパックのほうが安価かな。


仕事場:(有)アクト電子 頒布品への同梱でもかまいません。
今ロット最後の文鎮 といっしょに発送ということでも。


| | コメント (0)

2019年12月20日 (金)

Arduino UNOで周波数カウンタ

ありきたりなタイトルですが、目的は「VCOの直線性を調べる」ツールの
予備実験です。
   VCO:制御入力の電圧変化に従って出力周波数が変化するというデバイス。
これの特性を調べるためのジグ作りの前段階です。
周波数カンタが出力するシリアルデータを横取りしてごそごそするより、
Arduinoで作るのが手っ取り早いかと、まずは周波数測定の部分を試し
てみました。

「arduino 周波数カウンタ」
で検索するとあれこれサンプルが出てきます。
ざっと見たところ、
  Arduino Frequency Counter Library
を参考にされている記事が多いようです。
Arduinoの開発スタイル、どこかにあるスケッチやライブラリを探してきて、
それでもって簡単に作ってしまおう・・・ こんな感じかと。

この周波数カウンタ・ライブラリ、どんなものかざっと見てみますと・・・
・タイマー1のT1をクロック入力に。
・タイマー2を1mSタイマーにして割り込み許可。
・周波数計測を開始すると、
  タイマー0割り込みを禁止。(millisやdelayが使えなくなる)
  1mSごとにタイマー1のオーバーフロー(16bitカウント)を見て
    オーバーフローがあれば回数を+1。
・計測の完了は、
  指定回数の割り込みが完了(100回なら0.1秒=10Hzがゲート時間)
    すると、タイマー1を停止。タイマー2割り込みもオフ。
  オーバーフロー回数×65536+TCNT1で総カウント値を得る。
  この時、割り込み処理のための遅れをちょい時間待ちして補正。
  計測完了フラグをONして知らせる。
  タイマー0割り込みを再開。
こんな処理になってます。
つまり、カウント値を計数するための時間ゲートの処理はソフトウェア。
ソフト的な遅延があると誤差が生じます。
  ※周期的な割り込みを発生するタイマー0は止めていますが。
「計測を始めたら、計測が終わるまで何もするな」の処理というわけです。
計測中はシリアル出力もできないし(割り込み処理が入る)、割り込みを
使う処理とは共存できません。

※もうひとつ気になったのが、ゲート時間終了後タイマー1を止めるまで
 delayMicrosecondsで時間遅れを補正してるんですが、この間に発生した
 オーバーフローは無視しています。
 たまたまこの待ちの間にオーバーフローが起こったら65536カウント
 抜けてしまいます。 ちょいとまずいような。

このライブラリ、ちょいと不安だし計測中は何もしたらダメという仕様が
気になって自力製作することにしました。

※改善点
・主カウントに16bitのタイマー1を使うのは同じ。
・そのインプットキャプチャー機能を使う。
・ゲート時間の発生はタイマー2で行うが、
 タイマー2で1kHz方形波を発生させ、それをタイマー1の
 インプットキャプチャー端子に接続。
・つまり、物理的なゲートを構成し、ソフトの処理時間を無視
 できるようにする。  (遅れ補正などしなくて良いように)
・1kHz方形波の↓エッジでインプットキャプチャ割り込み。
    TCNT1の値がICR1に入る。
   前回とのカウント差を積算して総パルス数を得る。
     ※upカウントなのでオーバーフローは気に
      しなくて良い
・1kHz方形波の↓エッジのタイミングでゲートが作られるので
 ソフトが遅れても(割り込みが遅れても)誤差は出ない。
・測定完了待ちを待たなくても動き始めたらいつでも最新値を
 読める。 (1秒ゲート完了信号はある)
・割り込みがあってもOK。 タイマー0は止めない。

こんな具合にArduino UNOをつなぎます。
V1
こんなスケッチです。
ダウンロード - vcochk1.c (ファイルタイプをinoではなくcにしてます)
setupではATmega328のレジスタを直接触っています。

得られた周波数データを読む時は「割込禁止」にしてという
のが、割り込みで処理される多バイトデータを扱う時の基本です。

VCO性能の試験回路完成まではまだもうちょっと。 



※参考にした 「FreqCounter Library」の「FreqCounter.cpp」で
気になるところ。 タイマー2による1ms割込の処理。

ISR(TIMER2_COMPA_vect) {
 if(FreqCounter::f_tics >= FreqCounter::f_period){ // ゲート時間になった
  delayMicroseconds(FreqCounter::f_comp); // 時間補正でちょい待ち★1
  TCCR1B = TCCR1B & ~7;   // タイマー1停止★2
  TIMSK2 &= ~(1<<OCIE2A);  // タイマー2割込オフに
  TIMSK0 |=(1<<TOIE0);    // タイマー0割込再開
  FreqCounter::f_ready=1;   // データ確定
  FreqCounter::f_freq=0x10000 * FreqCounter::f_mlt; // 総カウント数
  FreqCounter::f_freq += TCNT1;   // 現カウント値を加算
  FreqCounter::f_mlt=0;
 }
 FreqCounter::f_tics++; // 割り込み回数+1
 if (TIFR1 & 1) {       // オーバーフローあれば★3
  FreqCounter::f_mlt++;  // mltを+1
  TIFR1 =(1<<TOV1);
 }
}

ここでタイマー1のカウント値を積算しています。
  ・オーバーフロー回数をカウント
  ・オーバーフロー1回で65536カウント
  ・タイマー停止後にTCNT1値を加算
というふうに総カウント値を得ています。

気になるのは★1と★2の間。
ここはまだタイマー1は動いていてカウントを継続しています。
もしここでオーバーフローが発生すると、総カウント値に反映
されません。
★2のあとに★3の処理を入れておかないといけません。

計測終了間際の一瞬ですんでまぁめったに起こる現象ではないでしょう。
しかし、起こるとアウト。周波数が低く測定されてしまいます。
現象をおこすの、むちゃむつかしそうです。

これ、オーバーフロー回数の積算をオーバーフロー割り込みでやる
のも手でしょう。
その時は、このタイマー割り込み内では割り込みはかかりませんから、
タイマーを停止する間、いったん割込許可にしとかなくちゃいけません。


※さらに
私が持ってるArduino UNO、発振子がセラロックになってます。
cstce16m0v53-r0
だもんで、周波数や周期がらみの処理をする時はちょい不満。
実測0.075%ほど周波数が高い。
セラロックの定格仕様だと±0.5%ほどなんでまだましかっと。
・・・水晶に変えてしまおうか


※水晶に変えました
セラロック発振子を外したところ。
ハンダを盛ってハンダゴテを当て、ピンセットでそろりと。
11_20191221105301

水晶は普通のHC-49U/S。
コンデンサは1608サイズのチップコン。
互い違いに置いてハンダ。
12_20191221105301

絶縁テープを貼って、水晶は寝かせています。
  これからほホットボンドで固定します

結果、発振周波数の精度「+23PPM」に。


| | コメント (0)

2019年12月17日 (火)

ピンクの電線が幅狭のリールでやってきた!

使い切ってしまった UL1007AWG22ピンク色電線。
いつも買っているシリコンハウス共立 に注文したら・・・
『100m巻きは無い。 610mでの取り寄せとなる。』とのお返事。
ピンク色、100mでもなかなか使い切らないのにその6倍となると
発注を躊躇します。
そこでネットで探してみると、時々電材品を買っているモノタロウには無し。
他の色は(黒~白の10色)はあるんですがピンクは出てきません。

あれこれ探していると電線屋さん ヤフー店 というところで、ピンクの100m巻きが
見つかりました。

さっそく注文。(昨日の話) で、ブツが先ほど到着。
右側のがその電線。 左のは共立で買っている100m巻き。
11_20191217132001

狭い幅のリールで届きました。
これはありがたい!

2016年にリール売りの電線の横幅 というタイトルで文句を言ってます。
今回、まさに望んでいた幅のリールでやってきたのです。

黒~白の10色、今回買ったピンク。
この他に「若葉」「水色」の計13色が揃っているようです。

送料はかかりますが、UL電線の購入はこのお店に決まりです。

| | コメント (0)

2019年12月11日 (水)

ステッピングモーターとその駆動回路をごそごそ

ちょっとステッピングモータの駆動実験。
というか、半分、お遊び的に。 半分、仕事がらみで。
11_20191211083301
机の上にモーターと駆動回路がちらかって・・・

さて、ステッピングモータで「1度」以下の分解能を出そうとすると・・・
 (1)減速ギアが付いたモータを使う。
 (2)マイクロステップ駆動できるドライバーを使う。
でしょう。

(1)の例が秋月で売っているこの減速機構が内蔵されたモータ。
  上の写真の(1)。
ユニポーラ ステッピングモーター 28BYJ-48
  2相励磁2048ステップで1回転。
ユニポーラ SPG27-1101
  これは120ステップで1回転。
ユニポーラ SPG20-1332
  こちらは480ステップ。

これらはいずれもユニポーラのモータ。
つまり、中点タップがあってそこを電源につないで4つの出力トランジスタでコイルを駆動すれば、専用のドライバーICを使わなくてもマイコンの出力ポートで制御できます。
しかし、分解能を得ようとしても「1-2相励磁」の2倍止まり。
マイクロステップでもって分解能を上げようとすると専用ICを使わなくてはなりません。
その専用ICの選択が悩みどころ。
でも、専用ICを使うとPWMでモータの駆動電流を設定できるので供給電圧の自由度が増えます。
単純にトランジシタで組むと、駆動電流はモータへの供給電圧に依存してしまいます。
しかし、専用ICを使うと5V用のモータでも電源24Vで駆動出来ちゃうわけです。

写真の「2」と「4」がマイクロステップできるユニポーラ駆動のIC。

「2」がサンケンのSLA7075
「1/16」のマイクロステップが可能です。
これは、ジグザグ23pin に登場。
ユニバーサル基板へのハンダ方法が参考になりますか。

「4」が東芝のTB67S149
お笑いピッチ変換基板・・・パターンが溶ける(!?) に出てきてます。
ただし、これのマイクロステップは1/8まで。

ところが・・・
「バイポーラ駆動用」のだとイイICがあってモジュールになって売られています。

「3」がTIのDRV8880
スイッチサイエンス:POLOLU-2971で扱っています。
これは「1/16」のマイクロステップが可能。

もうひとつが(写真には出ていないけれど)A4988
アマゾンで扱っています。
これ、3Dプリンターで使われるようでこっちの方がポピュラーか。
放熱板付きで売られてます。

DRV8880、A4988両方とも方向指令信号とステップパルスで正転逆転と回転速度を制御します。
  ※今回の仕事ではDRV8880を使った

そうそう。
私もネットの情報に倣って手を加えたのですが、ユニポーラのモータ28BYJ-48をバイポーラにすることができます。
  ※28BYJ-48 バイポーラ化
これで28BYJ-48がDRV8880やA4988で回せています。
  ※同トルクを得る場合、ユニポーラ駆動よりバイポーラ駆動の
   ほうがモータの発熱が少ないような感じなんですが、理屈的には
   どうなんでしょう?
   ユニポーラ→バイポーラの改造でコイルの抵抗値は
   2倍になります。

もうひとつ。
マイコンを使わずに発振回路でステップモータを回す時、単純に可変速にしたいだけということなら、発振回路はボリュームの回転角に比例して「周波数」が変わるようにするのが使いやすいです。
回転速度は周波数であって周期ではありません。
タイマーIC555でパルスを作ると、ボリュームの回転に比例して出てくるのは「周期」。
「ボリュームで周期を設定する」、これは回転速度制御には使いにくい。
なにせ「周波数=1/周期」ですんで、周期を直線的に変化させても周波数は1/Xカーブ。

ということは速度可変の発振回路には4046VCO PLL ICあたりが使いやすいかと。
(16ピンのICだけど)
低周波発振回路といえばなんでもかんでも555・・・この定石、この場合は外れます。

4046からPLL部を取り除いたようなお手軽VCO ICってありませんでしょうかね?

| | コメント (0)

より以前の記事一覧