« 2022年10月 | トップページ | 2022年12月 »

2022年11月

2022年11月29日 (火)

Arduino UNO(のチップ)を使ったUSB電流計

単電源で反転アンプ マイナスの入力電圧は増幅できます
は、電流をアナログ出力するだけのものでしたが、
Arduino UNOのチップATmega328Pと3桁7seg LEDで
USBラインの電流値を表示してみました。
U51  
  ※ちょっと訂正。 TNX ラジオペンチさん
  ※電源側のコネクタ、USBではなくXHにしてるのは
   こちらの都合です。

スケッチをアップするためのArduino UNOとのつなぎ
はこんな具合。 +5Vラインはつないでいません。
Aa36
こんな目的です。
・回路の動作テスト、通電OKとなれば(電源周りは正常だと
 わかったら)CVCC電源じゃなく、5V出力のACアダプタ
 (USBコネクタで出てる)を使うことが多くなった。
・CVCC電源にしても手持ちのUSB電流計にしても、電流
 表示の最小桁が10mA。
・試運転中の回路の動作電流、せめて1mAの桁で見ておき
 たい。
ということで、1mA表示の電流計が欲しいとなった次第です。
電流を見るのにテスターをつないだままにするのもちょっと
なぁだし、常用的に電流を監視できるようにと作りました。

内蔵のVref=1.1Vを使っている関係で、電流の計測、
ATmega328Pの10bit A/Dではちょっとチカラ不足。
1bitが1mAステップじゃなく値によっては2mA飛び
になる所も。

電圧のほうは5V±1Vを計るようにしましたんで、
10bitで0.01V表示は余裕です。

まず、これが5年ほど前に買ったUSB電流計。
B11_20221129172301  

携帯電話などの充電時、充電した電流量をチェックで
きます。
でも、電流は10mAが最小。
文字も小さいし。

せっかくなんで中味も。
B12_20221129172301
B13_20221129172401
PIC16F1933が使われています。
電源はレギュレータで落として3.3Vで動いています。
B14_20221129172401  

電流検出のアナログ部はこんな具合。
電流検出抵抗はGND側に入っています。
B15_20221129172501

50mΩを2パラで25mΩ
LM358で増幅。
R38が01Bで1kΩ。
R39が30Cで20kΩ。
20倍か21倍かのアンプ。
1Aで25mV。 それを20倍だと0.5V。
スペックでは最大3.5Aとなっているので
4Aで2V。 2Vあたりの基準電源でしょうか。

製作した回路。
A15_20221129174501

基板をこのケースに入れるつもりで大きさを決めました。
「ダイソー ミニケース 5個組」が見つからない

この記事で紹介した
No.1434 トラベルケース S 2P
完全に透明なのでLEDもエエ感じ。
  (フィルタが欲しいか)

A12_20221129172501

スケッチのアップはもうちょい整理してからに。

※実験ベンチのCVCC電源(下段)と低周波発振器二つ
B41_20221130102101
上のが「8038」で。
中段のが「MAX038」で。

トラ技Jr.2018年秋号に「8038」復活の記事
20MHzまでの正弦波をスイープ出力するMAX038を使った周波数スイープ・ジェネレータの製作
実験用電源の中身
電源を改造 AD8724D

電流値表示の最小桁が「0.01A =10mA」。
装置をデバッグする時、1mAを読みたいなぁ~と
なったわけです。

※追記
7seg LEDの表示タイミングとA/D変換の関係。
U11_20221201091701

7seg LED表示は500Hz(2ms)割り込みで。
  タイマー1のOC1A割り込みが周期
そのタイミングを使ってA/D変換(電流,電圧の2ch)。
2ms × 2ch × 128回平均で512msごとにデータを
更新。
上図波形の「電流,電圧値計算」の時間で、
「浮動小数点化したmap関数」で2点calを実行。
512ms周期でこれを実行。
  AVRマイコンの浮動小数点計算、なかなか
  早いゾ!

まずタイマー1のOC1B割り込みでLEDの駆動をオフ。
  COMをLに。セグメントをHに

その10us後のOC1A割り込みでA/D変換の
開始を指令。
A/D変換中はLEDがオフしているので、チップ
内の電流増加の影響は少ないはず。

A/D変換完了割り込み(100usちょい後)でLEDの
駆動を再開。
そして10bit A/D結果を平均処理。
2ch × 128回の平均加算完了をメインルーチン側に
知らせて「浮動小数点化したmap」で2点cal。

こんな流れです。

※追記
これが2点cal用の校正データ
1~4が電流用、5~8が電圧用
1,3,5,7がY軸の値(out)。
それぞれ10mA 900mA、4.50V 5.50Vが校正点。
2,4,6,8がその時のX軸(in)、つまりA/D値。

# 1 mA-Lo : 10 …10mA
# 2 mA-Lo A/D : 13
# 3 mA-Hi : 900 …900mA
# 4 mA-hi A/D : 882

# 5 V-Lo : 450 …4.50V
# 6 V-Lo A/D : 264
# 7 V-Hi : 550 …5.50V
# 8 V-Hi A/D : 779

ターミナルとつないで変更できるようにしています。
  EEPROMに保存。

浮動小数点化したmap関数にはmAとVの実値と
A/D値をそのまま食わせます。
いったん電流値や電圧値に変換してからゴソゴソは
ありませんので「1023 vs 1024」は関係ありません。
AREF電圧(定格1.1V)の偏差や抵抗の誤差、A/D変換に
つきまとう誤差は、実値による校正操作で考えなくて
良くなります。
  これが本来の「map関数」だぁ!
Arduino なんとかして誤用を正したい:A/Dの1/1023とmap関数
Arduino 10bit A/D値をmap関数でスケーリングする例


※こまかい補足
AD4の電流入力、1MΩで4Vにプルアップ(!)してるでしょ。
その先はINA180の出力につながる1kΩ。
ちょっとだけプラスに持ち上げることで、0V付近のADC
データを使わないで良いようにしています。
INA180の出力も完全に0Vにならないし。

※追記が続く
単電源で反転アンプ マイナスの入力電圧は増幅できます
この最終回路「INA180を使ったハイサイド電流検出回路」で
表示回路の電流を計ってみました。
U12_20221201102001

一番上の波形(ノイズでジャギジャギ)がこのアンプの出力
です。
  つなぐのにGNDラインが15cmほど延びてい
  るので、ノイズの影響大。
  プローブのGNDは表示回路側。

負荷電流を「18mA」にしました。
7seg表示は「ブランク 1 8.」となり、
COM1の最右桁を点灯したときの電流がいちばん
大きくなります。

そしてCOM3のブランクの所が、負荷電流+回路電流
となります。
全セグメントを点けている「8.」表示で、ブランクより
20mAほどアップ。
セグメントあたり2.5mAの電流ということで、おもわく
通りの駆動ができています。

※「88mA」だと。
表示は「ブランク 8 8.」となります。
U13

「8.」と「8」で電流がちょいと変化しているのが
見えるかと。

中央を拡大。
U14

A/D変換中は全桁をブランクにしている様子が
見えています。

INA180A3(100倍アンプ)の帯域幅は「150kHz」
それによる遅れも見ておかなくてはなりません。

使っているオシロには「高分解モード」という
平均処理的モードがあって(平均回数を指定できる
モードとは別に)、ノイズを低減できます。
  ただし細いパルスは抜けちゃう
それを使うと、こんな具合にジャギジャギを
消すことができます。
U15
  見やすくなりますが、割り込みタイミングの細い
  パルスは消えかけています。


※とりあえずスケッチを (ZIP圧縮)
  ・ダウンロード - usb_cur2.zip

900行ほどのプログラムです。
校正はターミナルとつないでということに
なります。
  ※ちょっとしたバグを発見しましたんで注意。
   校正モードでの「.」入力の処理。

※追記が続く
Arduino-UNO基板と、アノードコモン7seg LED、
抵抗、ボリューム、スイッチがあれば、電流検出ICが
無くてもこんな接続で「試運転」できます。
U21
calしなくてもボリュームを回せば表示が変化するはず。



| | コメント (4)

2022年11月28日 (月)

単電源で反転アンプ マイナスの入力電圧は増幅できます

「ちっこい箱に組み込むシリーズ」と言ったらいいのか・・・
  (フリスクは未体験だけど)
これは「ニチフの圧着端子」 が入っていたプラケースです。

A11_20221128174801

その箱にUSBケーブル・コネクタ接続の電流検出アンプ
組んであります。
1Aで1Vのスケールでアナログ出力
  電流変化をオシロで見るためのツールです。

B11_20221128175201

導通チェッカーの検出抵抗値、1Ωを目指す
で買ったオートゼロアンプ「MCP6V01」の応用ということで、
組んだような記憶があります。

GND側に入れた電流検出抵抗、普通だと、こんな
「非反転アンプ」にするでしょうか。
B12_20221128175201
電源入力側のGNDを基準にして、電流検出抵抗の+側電圧を
増幅するという仕掛けになります。
この場合、負荷側のGNDとアンプ出力のGNDの電位が違う
ものになっちゃいますので、オシロで負荷側装置の波形と
この電流アンプの波形を見るときは注意が必要です。

そこで、このオペアンプの電源GND端子を出力側コネクタに
持ってくると「非反転アンプ」だったのが「反転アンプ」に。

B14_20221128175501
こうすると、負荷のGNDとアンプ出力のGNDが同レベルに
なります。

そして、単電源の反転増幅回路、入力がマイナス電圧なら
ちゃんと増幅してくれます。
B13_20221128175601

サンプルはこちら。
2013年06月28日:マリオカートのラジコン
ここでの検波回路、マイナスを出力するようにして反転アンプで
電圧を大きくしています。
Img20130627154836060
LEDを点けるためのTrを駆動しているだけですが。


※追記
電流検出アナログ出力回路、以前にも紹介してました。
  ・2021年5月20日:USB電源電流アンプ
この時はまだ供給電源側にGNDをつないでいる
「非反転アンプ」を構成しています。
その後の手直しで今回の回路です。

しかし・・・GND側で電流検出すると測定時の問題が
あれこれ(ほんとのGNDはどこ)出てくるので、抵抗を
入れるならハイサイド側に決まりです。

※さらに追記
持ち出してきたついでっと言っちゃなんですが、
手持ち部品もあることだし電流検出抵抗をハイサイド側に
移しました。
電流検出アンプはテキサスインスツルメンツの「INA180A3」。
100倍のアンプです。
検出抵抗の抵抗値は10mΩ。
1Aで10mVとなり、それを100倍して1Aで1Vを出力する
ようにしています。
Usb_cur3
※INA180の注意点
・サフィックス A と Bで ピン位置が異なる。
・その後に付く数字でゲインが決まる。
  1 x20
  2 x50
  3 x100
  4 x200
・電源電圧(VS)の範囲は 2.7~5.5V。
・入力 IN+、IN- の電圧範囲は -0.2V~+26V。


| | コメント (0)

早よ寝過ぎだと思う

今朝の毎日新聞、広告ページ。
女性用の腹巻き(たぶん)の宣伝。
Cc1_20221128171501

なんというか・・・この月齢のお月さんが見える
時刻から寝ているのは、ちょっとぉぉ。です。
Cc2_20221128171501

夜中に目が覚めてしまうんで調子が悪いのではっと
心配しちゃいます。

| | コメント (0)

2022年11月25日 (金)

三和電気計器デジタルテスター「CDS-820」 表示がぁぁぁ

いつ買ったのか・・・
サンワのデジタルテスター「CDS-820」。
スペックの表記に「何カウント」という記述が
出る前の基本的な「3・1/2桁」表示のテスターです。
  ※ケースの裏に会社名と電話番号を記してあるので
   すが、それが「6」無しでした。
     今:06-6975-0353
     昔:06- 975-0353 ←テスターの裏
   それくらい前から使ってます。

そのテスター、さっき使おうとしたら
こんな表示に。
Tt1_20221125101801

「もう、あかんか」っとダメ元で液晶部を掃除
したら復活。
まだ使えそうです。

このテスターの電源、太陽電池で充電できるように
なっていたんですが、その部分は昔々に死んでます。
内部の充電池を替え、ケースに充電用端子を設けて
ACアダプタで充電できるように改造してあります。

 

| | コメント (0)

タミヤ★★ミニ四駆用充電池「NEO CHAMP」950mAh 2000サイクル目

2021年11月15日にスタートしたNEO CHANPの充放電実験
およそ1年で2000サイクル目です。

Cap013
Cap014
充放電時間の減少と充電停止電圧の上昇を見ると、
ちょっと劣化が進んできた感じがします。
内部抵抗は45mΩでした。
1600サイクル目 で32mΩでしたので、内部抵抗の上昇でも
劣化が進んでいる様子がうかがえます。
2400サイクル目に向けて、実験継続です。

| | コメント (0)

2022年11月24日 (木)

放置していた2014年製の「eneloop lite」を充放電 1600cyc目

休みの間に1600サイクル目の充放電を終えていました。
Cap011_20221124110801
実験はまだまだ続きます。

 ※1450サイクルから120サイクルほどの間、
  シリアル出力データロガーの記録がオフになって
  いたため(ごそごそした時、スイッチが
  押されて記録オフになっていたのに気付
  かなかった)、この部分の毎サイクルご
  のと充放電データが抜けています。
  空白じゃなく直線で描画しています。

それにしても、劣化が進むのかと思ったら
途中での回復には驚きです。

 ・実験開始:
 ・800サイクル目
 ・1200サイクル目

※シリアル出力データロガー
実験回路の横、棚の奥に突っ込んであります。
11a_20221124111201
▲のスイッチを何かの拍子にに誤って押して
しまったようです。
長押しだと新規ログファイルの作成。
ちょっと押すと、ログのオンとオフ。
記録オンしている時は隣の緑色LEDが点滅
するんですが「あれ? 止まっているぞ」と
なって、スカタンしたんに気が付いたという次第。

 ・Arduino-UNO + SDカードでシリアルデータロガー 完成形 今度こそ

奥の「0.0A」と表示してるのが電源。
5Vではなく、24Vを充放電実験回路基板へ供給し
ています。

| | コメント (0)

2022年11月22日 (火)

BZ2バージョンのマイコン型導通チェッカー完成品 おまけ付き 1台

マイコン型導通チェッカー  このアンプ付BZ2バージョンの
完成品が1台だけ残っています。
  ※検出感度をスライドスイッチ切り替える方式

B11_20221122111401
右がフタを開けた導通チェッカー。
左のツマミ付き箱は、ディケード(抵抗)ボックス

これで、本機の実力を計ってみると・・・
 高感度側 連続報知:1.7Ω以下 断続報知:5.3Ω以下
 低感度側 連続報知: 20Ω以下 断続報知: 62Ω以下

   現在頒布中のものの回路、制御ソフトは
     マイコン型導通チェッカーBZ3バージョン
   で、スライドスイッチは使いません。
   ですので、これはBZ2の売れ残り・・・最後の1台。

オマケを付けますので、どなたか買っていただければと・・・
オマケはトランジスタ技術付録のCD-ROMを3枚
B12_20221122111601
 ・2015年 電気屋必携!
      ポケット便利帳7冊詰め合わせCD
 ・2010年 別冊付録4冊のPDFを収録
 ・2011年1月号 通巻555記念特別付録
   この最後のが値打ちかも。
   昔のTr規格表、互換表など6冊の復刻版が
   入ってます。

B13_20221122111601

お代は4,750円 + 運賃
厚み制限が無く手渡しのレターパックプラス(520円)でお送りします。
  (到着後に振り込みを)
早い者勝ちということで。
メールアドレスを記し、この記事にコメントしてください。
  ※厚み制限が無いので他にもオマケを入れられるかも。

2022年11月16日に告知しましたように
「マイコン型導通チェッカー」と
「電池電圧チェッカー」、来月12月より値上げしますので。

| | コメント (2)

フレデリック・フォーサイス著「シェパード」

先日の本、松原 始 著 『鳥マニアックス』  は鳥だけで
はなく、飛行機関連のお話しがてんこ盛り。
その中で紹介されていたのが、
   ・フレデリック・フォーサイスさんの「シェパード」

フォーサイスさんの本、長編はあれこれ読みましたが、
「シェパード」には短編が3本。
最後のお話が本のタイトルに。
  ・ブラック・レター
  ・殺人完了
  ・シェパード

図書館にリクエストしたら、1976年の第3版がやって
きました。
こんな表紙です。
F11_20221122094701

拡大。
飛行機マニアさんはきっとこの絵だけでアウトでしょ。

左上がデ・ハビランド モスキート。
F12_20221122094701

右下がデ・ハビランド バンパイア。
F13

エエお話でした。

 

| | コメント (2)

2022年11月17日 (木)

1023 vs 1024 、255 vs 256 なんでみなさん「2^n-1」が好きなの?

Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMを使おう
この直前の名なしさんから頂戴したコメント(2022年11月17日  09時28分)。
1/255や1/1023がおかしいと分かってもらうのに、こんな絵を描いてみました。
いかがでしょう。
Ss11_20221117180001
1cmを8bitにしたとき、上位桁がどういうふうに見えるかを
表現してみました。

※定規はほんまもんをスキャン

1cm、2cm・・・とcm単位での区切りのところが、
0x0100、0x0200・・・と8bit単位での桁上がりに
なります。

そこで「分解能」を示すのなら、1cmピッチの定規だと「1/10」。
「1/9」じゃありません。
それを8bitにすると・・・
「1/255」だとアカンのが見えてくるかと。

※コメントした所をコピペしておきます。
~~~~~~~~~~~~~~~~~~~~
1mmごとに目盛が刻まれた定規。
この定規の分解能は1mmで、(基点の0mmにも目盛を
入れるとして)11本目が10mm = 1cm。

目盛0~9の10本、1桁の数字で表現できるのは0~9mm。
0/10cm~9/10cmが計測範囲。
分解能は1/10cm = 1mm。
  1/9cmではありません。
10mm=11本目になると桁が増えます。

ADCだとこの10mmが基準電圧。
「基準電圧 - 1LSB」の入力電圧が最大値です。
~~~~~~~~~~~~~~~~~~~~


※追記 4cmを1023にしたら (2022-11-19)
Ss12
1mm目盛の定規、4cmでの分解能は「1/40」。
「1/39」ではありません。


※さらに追記 1cmフルスケールで
Ss2_20221126092001
定規の読みでも「-1LSB」が値が得られる最大値です。
これで、ADCによる測定が基準電圧を越えられない
ことがわかるでしょう。

| | コメント (6)

松原 始 著 『鳥マニアックス』

松原 始 著 『鳥マニアックス』
  サブタイトルが「鳥と世界の意外な関係」
Tt0
東成図書館の書架で見つけました。
  図書分類番号が「488」。 動物学・鳥類と。
Tt1_20221117120501

面白いです。
鳥の本なのに「翼面荷重」や「翼断面形状」「可変後退翼」
「ボルテックス・ジェネレータ」などなど飛行機の用語が
飛び交います。
   鳥と零戦や雷電、ミグ23を比較。など、なんなんだ。

巻末の参考文献には鳥関連だけじゃなく、
「世界の傑作機」、「異形機入門」、「丸メカニック」、
「隠された飛行の技術(加藤 寛一郎/著)」などが。
   ↑
調べたら、技術じゃなく秘術で本が出てきました。
加藤 寛一郎さんの本をいくつか、図書館にリクエスト。

 

| | コメント (3)

2022年11月16日 (水)

予告:「マイコン型導通チェッカー」「電池電圧チェッカー」値上げします

電子部品高騰のため、私の仕事場:(有)アクト電子 で頒布しています
マイコン型導通チェッカー電池電圧チェッカー
を来月12月より値上げします。

■新価格(税込)
・マイコン型導通チェッカーキット  5,400円
・マイコン型導通チェッカー完成品  6,900円

・電池電圧チェッカーキット     10,800円
・電池電圧チェッカー完成品     13,000円

11月中は現在の価格で頒布いたします。

数が出る商品ではありませんので、大量購入して
材料費を安くするという恩恵を受けられません。
申しわけありませんが、ご理解ください。

 

| | コメント (0)

2022年11月15日 (火)

FLUKE 87IV デジタルテスターのデータをIrDAで吸い上げる

2022年7月6日:デジタルテスター「FLUKE 87IV」の赤外線通信ユニット完成
これでいちおう完成してるんですが、IrDAのインターフェース・チップを
テキサス・インスツルメンツの「TIR1000」 に換えて試してみました。

マイクロチップの「MCP2122」 と何が違うのか・・・

図示すると・・・ピンは同じ配列。
Tt11

(1) MCP2122は8pin DIPのがある。 そして安価。
 TIR1000はSOPとTSSOP。

(2) リセット入力の論理レベルが異なる。
 MCP2122はLでリセット。 TIR1000はHでリセット。

(3) 赤外線の自己反射光の処理が違う。
 こちらから出した赤外線、どこかに当たって返ってきて
 受信光としてRXIR信号に入ってきます。
 MCP2122では送信中のRXoutは禁止してくれるので、
 これを考えなくて良いのです。
 ところがTIR1000では筒抜けに。
 自分で処理しなくちゃなりません。

この(3)せいで、単純なターミナルでの実験だとローカルエコーが
返ってくる感じになります。

マイコンでの処理だと、IrDAへのシリアル送信処理が始める前に、
IrDAからの受信を禁止しちゃって無視するように。
そして、送信完了で受信を再開。
こんな手順を制御プログラムに入れなくてはなりません。

前に紹介したATtiny841のプログラムでは、
「送信データレジスタ空き割り込み」で次データを送り込んで
いたのですが、受信を再開させるには送信完了(全フレームの
送出完了)を知らなければなりません。
送信割り込みの方法を変えなければなりませんでした。

TIR1000を使うメリットって無いぞ、なんですが、
試しに回路を作っちゃったんで、仕上げてしまいました。
ジャンパーを追加してMCP2122かTIR1000かを切り替えられ
るようにしました。

| | コメント (0)

2022年11月12日 (土)

『1/1023 vs 1/1024』問題 analogReadを2bitにして確かめてみる

未だ、Arduino環境での「1/1023」が蔓延っています。
10bitでデータを出すanalogRead()の値から、実際の
入力電圧を算出するのは・・・
何度も書いてますが正しくは「1/1024」
「1/1023」じゃありません

2020年1月8日:ミスが広まる 1/1023 vs 1/1024
2020年5月17日:Arduino なんとかして誤用を正したい:A/Dの1/1023とmap関数
2022年10月 6日:ArduinoのA/D:1/1023 vs 1/1024 その後

このA/D入力を10bitじゃなく2bitにして変化の様子
見られるようにしてみました。
オシロとシリアル・モニターで観察します。

使うのはArduino-UNOと抵抗、コンデンサ。
  LEDを光らせるのはオマケ。

Aa1_20221112132201
いったんA0を出力にして、コンデンサを放電します。
0V近くまでの放電を確かめたら、A0を入力に戻して
A/D変換を続行。
読み出した10bitA/D値の上位2bitを使って、2bitの
A/Dコンバータとして扱います。
その結果をD8(LSB)とD9ポート(MSB)に出力します。

こんな波形が得られます。
Aa2_20221112132601

100kΩの抵抗で1uFを充電するので、
0Vから上昇する指数関数カーブになります。
時定数は「100ms」。 (63%位置 3.15V)
  5V近くになるとなかなか上がらないので
  1000を越えると再放電しています。

2bitですので0V~5Vが4分割されます。
  5V÷4=1.25Vになるので、オシロのY軸を
  1.25V/divにしたかったのですが、
  1.24V/divしかできませんでした。

1.25Vピッチで4分割されてデータが変化して
いる様子が分かるかと思います。

シリアルモニターには、2bit値変化点での
10bit値(0~1023)が出てきます。
  :
1 256 512 768
0 257 512 768
1 256 512 768
0 256 513 768
0 256 512 768
  :

1/1024」の式にならえば2bitだと「1/4」。
1/1023」だと「1/3」。
「1/3」しちゃうと、半値の2.50Vは出ませんし、
実値入力が3.75Vを越えると、いきなり5.00Vに
なっちゃうしで、「1/3だとなんかおかしい」を
感じていただけるかと。

こんなスケッチです。

//  『1/1023 vs 1/1024』問題
// analogRead()を2bitにして動作を確かめてみる
// 10bitデータを1/256して上位2bitだけの値を見る
// A0 A/D入力 100k抵抗で5Vにプルアップ
// 1uFコンデンサでGNDに
// Lレベルを出力し放電してからスタート
// 0Vから始まるエクスポネンシャルカーブが得られる
// 2bitでの変化点をチェック
// D8 LED bit0 LSB Hで点灯
// D9 LED bit1 MSB

/***** STEUP *****/
void setup() {
pinMode(8, OUTPUT); // D8 出力に設定 HでLED点灯
pinMode(9, OUTPUT); // D9 (bit 1のLED)
analogReference(DEFAULT); // 5Vを基準電圧に
Serial.begin(9600); // 9600BPSでシリアル出力
}

/***** LOOP *****/
void loop() {
word ad10; // 10bit A/D値 0~1023
short ad2; // 1/256して2bitにした値(比較するので+/-値に)
short ad2x; // 変化チェックデータ (-1からスタート)
byte exc = 0; // 実行区分
while(1){
// A/D入力
ad10 = analogRead(A0); // 10bit A/D値読み出し (0~1023)
ad2 = ad10 / 256; // 2bitに (0,1,2,3) プラスの値
// LED出力
if(ad2 & 0b01) digitalWrite(8, HIGH); // bit 0
else digitalWrite(8, LOW);
if(ad2 & 0b10) digitalWrite(9, HIGH); // bit 1
else digitalWrite(9, LOW);
// 実行区分で処理
switch(exc){
case 0: // 放電開始
pinMode(A0, OUTPUT); // A/D入力をいったん出力に
digitalWrite(A0, LOW); // Lにしてコンデンサを放電
Serial.println(); // 改行
exc++; // 次処理
break;
case 1: // 0V近くになるまで待つ
if(ad10 < 1){ // 10bit A/D値がゼロに近づいた
pinMode(A0, INPUT); // A/D入力を入力に戻す
ad2x = -1; // 変化チェックデータをセット
exc++; // 次処理
}
break;
case 2: // 5V近くになるまで待つ
if(ad2 > ad2x){ // 2bit A/D値が大きくなった
ad2x = ad2; // チェックデータ更新
Serial.print(ad10); // 10bit A/D値をシリアル出力
Serial.print(" "); // space
}
if(ad10 > 1000){ // フルスケール近くになった
exc = 0; // 放電から繰り返し
}
break;
}
}
}
/*===== end of "test_ad_2bit.ino" =====*/

直線で変化するノコギリ波が良いのですが、
ノコギリ波を作ろうとすると、定電流回路用に
オペアンプがいります。
エクスポネンシャル・カーブだと抵抗+コンデンサ
だけなんで簡単。

※データシート(ATmega328P)の記載
・英文
Aa4_20221112150401
・和訳
Aa3_20221112150401

出てくるのはあたりまえに「1024」です。
最大値 「1023 = 0x3FF」になる電圧は「Vref - 1LSB」と。

※参
ルネサス:A/D,D/Aの量子化の単位は、2^n ? 2^n-1?
  量子化誤差というと「1/2LSB」の変動を問題にします。
  Vref=5Vで2bit ADCだと、1/2LSBは0.625V。
  さすがここまで大きくはフラフラしませんので、
  ADCの「原理的」な変換結果がオシロ波形に現れま
  した。

| | コメント (1)

2022年11月10日 (木)

GX200でもLEDリングライト活躍

現在の工作物撮影カメラ、GXR+S10とGX200の2台体制。
  ※GX100は残念ながら故障で引退。
GX100で便利だったのがLEDリングライト。
これ、GX200でも同じように使えるのです。
  ※GXR+S10ではダメ。
   レンズフードが合わないので
   装着できません。

11_20221110135101
12_20221110135101

  ・Caplio GX100用LEDリングライトまとめ

今回の撮影ブツは、とあるメカ。
電子回路回りの修理は終わったんですが、メカに
組み付けると不調。
うまく行って動くときもあったり、ダメな時もあっ
たりと安定しません。

修理依頼元に聞いても、設計・製作したんじゃないので、
メカの動作や調整方法は分からないからどう対処したら
良いかが不明というなんぎな案件です。

動きを見たくても、可動部はケースの中。
かろうじて、隙間から中が見えます。

どうなっているのか、その状態をリングライトを使って
写してみました。
マニュアル露出にピントもマニュアルで。

回転軸に平行にバーが出ていて(対向して2本)、
それをツメが引っかけます。

===||←回転軸
 ------
 I || I←バー(縦棒)が対向して2本
 I || I
 ------
===||===

00000
  手前の柱は、上下板固定部で回転軸ではありません。

00001

00002

ツメがちゃんと引っかかって奥へ引っ込むと、軸が回転。
00003

正常ならちゃんとツメが引っかかって軸が回るのですが、
それが滑っていたのです。
動きを見れたので、「ツメが滑って引っかからなかった
のが不調の原因だ」と判明。
修理を終えた電子回路は正常動作。
動画よりも、インターバル撮影モードを使っての連続撮影
のほうが、よく分かりました。

メカの修理は分野違い。
しかし、まぁ、今回はなんとかなりました。

| | コメント (0)

2022年11月 9日 (水)

1年半ほどの放置した東芝のTNH-3ME(1900mAh)

この時↓に入手した東芝のTNH-3ME(1900mAh)、
 2021年6月19日:東芝TNH-3ME(1900mAh) JIS C8708:2019充放電実験開始
1年半ほどの放置になるんですが、
 放電特性記録機能付きバッテリー放電器組み立てキット
で、放電してみました。
T11_20221109124801
負荷は1Ωのセメント抵抗。
電圧が1.00Vになるまで放電します。

1900mah

1年半ほどの放置でも、ちゃんとエネルギーを残していました。
けっこう頑張っているように思います。

ただ、新JISでの充放電実験、最後はこんな結果。
2021年9月24日:東芝TNH-3ME(1900mAh) 新JISでの充放電実験終了:突然死で
この突然死が残念でした。

電池あれこれ ←まとめ

| | コメント (0)

BSch3V CE3ファイルからコメント文字をピックアップ

常用している回路図CADが、
   水魚堂さんの回路図エディタ BSch3V
仕事、趣味、トランジスタ技術の原稿も、みんなこれ。
  ※指定のある場合を除いて

過日、トラ技編集部から
  「原稿の回路図から文字だけを抜き出したい」
という要望があり、gawkで試してみました。

# BSch3V CE3ファイルからコメント文字をピックアップ
# CE3ファイルはUTF-8N
# gawkとUTF-8Nの相性がもうひとつなので,いったんCE3ファイルをSJISに変換して保存
# +COMMENT,L:0,X:560,Y:100,D:1,DIR:0,W:-1,S:Pch%20MOSFET,FN:Tahoma,TAG:0,FS:12,FF:,-COMMENT
# +COMMENT,L:0,X:780,Y:430,D:1,DIR:0,W:-1,S:マイナス%0D%0A出力,FN:Tahoma,TAG:0,FS:13,FF:,-COMMENT
# 1 2 3 4 5 6 7 |---- 8 ------
# 「Pch MOSFET」「マイナス」「出力」をピックアップ
BEGIN{
FS = "," # 区切りをコンマに
}

#loop
{
if(($0 ~/^+COMMENT/) && ($0 ~/-COMMENT$/)){ # コメント行
if($8 ~/^S:/){ # S:先頭
gsub(/^S:/, "", $8) # S:消す
gsub("%20", " ", $8) # %20はスペース
gsub("%0D", "\r", $8) # 復帰
gsub("%0A", "\n", $8) # 改行
gsub("%2C", ",", $8) # ',' コンマ
print $8 # 出力
}
}
}

CE3ファイルの中から「+COMMENT」~「-COMMENT」の1行を
ピックアップして、コメント文字の本体部を拾い出します。

コメント中の改行はそのまま変換しましたが、編集用には
削除して1行にしてしまうほうが良いかもしれません。

UTF-8N → SJISの変換はテキストエディタの機能を使いました。
  探せばなにか良いツールがあるんでしょうけれど。
GAWKそのものでもなにか対処方法があるのかもしれません。

| | コメント (0)

2022年11月 6日 (日)

Arduino map関数をfloatに

map関数の処理は、
 C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\WMath.cpp
ヘッダーファイルは、
C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h
ここで記述されています。

中味がこれ。

long map(long x, long in_min, long in_max, long out_min, long out_max) {
 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

ちょっとわかりにくいので、図にします。

M11_20221106164101

傾き「a」を出す計算が重要なわけです。

long値での割り算ですんで切り捨てで処理されます。
ですので、map関数が出した答えを使って四捨五入しても、
間に合いません。 ※<5>の処理
ということは、map関数自体をfloatにして、内部の割り算での
切り捨てをなくします。

/***** 線形補間  *****/
// floatで
float mapf(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

「long」を「float」に置き換えるだけ
簡単なのも。

先日のA/D値を補正する例だと、

/***** A/D値補正    *****/
// in ad : 0~1023 A/D値(10bit)
//   ch : ch1sitei
// 補正テーブルを使ってキャリブレーション
short adadj(word ad, byte ch)
{
float a;
long g;
  a = mapf((float)ad,       // floatにしたmap(線形補間)
      (float)pgm_read_word(&adj_tbl[ch].x0), // in_min
      (float)pgm_read_word(&adj_tbl[ch].x1), // in_max
      (float)pgm_read_word(&adj_tbl[ch].y0), // out_min
      (float)pgm_read_word(&adj_tbl[ch].y1)); // out_max
  g = lround(a);     // 四捨五入してlongに
              // 必要ならshort範囲をチェック
  return (short)g;    // shortにしてリターン
}

浮動小数点の四捨五入には、関数「lround()」という便利なの
があります。
少数以下を四捨五入してlongの整数に変換してくれます。
+/-を判断してくれるので、
  マイナス、右(数値が大)か左(数値が小)、どっちにそろえる
  ねん? も問題なし。
こんな結果になります。

 lround(+2.3) = 2 lround(+2.5) = 3 lround(+2.7) = 3
 lround(-2.3) = -2 lround(-2.5) = -3 lround(-2.7) = -3

昔のCだと、lroundは標準関数には無いんですよね。

これで、「A/D値 → 電圧値」の変換が、実値(A/D値の読みと
テスターで測定した電圧)で可能になります。
変換テーブルは実値をwordにして2バイトで。
電圧だと「12345mV」などと5桁で表現できます。

ただ・・・floatを使ってmath.hをインクルードすると
1.5kバイトほどプログラムが大きくなっちゃいます。


※関連
Arduino なんとかして誤用を正したい:A/Dの1/1023とmap関数
Arduino 10bit A/D値をmap関数でスケーリングする例
ミスが広まる 1/1023 vs 1/1024
5chサーミスタ温度計のA/D入力、map関数を使って補正

| | コメント (1)

2022年11月 5日 (土)

2.54mmピッチのピンヘッダに挿したソケットが抜ける

ユニバーサル基板に手ハンダした秋月電子通商扱いの
ボックスヘッダ ライトアングル(横型)10P(2×5)

A11_20221105105201
これに、JAE(日本航空電子)製のバラ線圧着タイプの
ソケットを挿入したら・・・簡単に抜けちゃうのです。
グサリっと刺さりません。 あらら・・・
A12_20221105105201

10ピンのが無かったので、ピン数の多いソケットを切断。

秋月のではなくちゃんと同じJAE製のピンヘッダに挿すと・・・
とりあえずは止まるけれど不安定。
A13_20221105105201
ちょっとのチカラで外れちゃいます。

オムロンのXG4Mソケットだときちんと嵌合。
簡単には抜けません。
A14_20221105105201

「なんでや?」っとあれこれ試していますと・・・

A15_20221105105201

「ありゃ。 違うピンが混じってるやん!」っと。

A16

微妙な違い、わかりますか?
上と下、ソケット側の接触部、その位置が違います。
下のがピンの根元に近づいて接触します。

JAEのバラ線圧着コネクタを入れたパーツボックスに
これらの圧着ピンが入っていたので、
  「適合品に間違いない」
と思っちゃたのです。
しかし、形状の異なるピンが混入。
  電線外皮保持部や芯線圧着部の形はほぼ
  同じ。 (同じ圧着工具がOKなようにか?)
  OKなほうには「F2-3」と刻印があります。
混ざった中からダメな方を使ってしまっていたようです。
「ピンヘッダー側が悪い」っと思っちゃいましたが、
真の原因は異なりました。

(いつからストックしていたのか分からん古い)JAEの
コネクタはやめて、QIコネクタを買ってくることに
しますわ。

| | コメント (1)

2022年11月 2日 (水)

お手軽・高電圧発生回路を探して

ネットをさまよってましたら・・・
リニアテクロロジーのアプリケーションノート「AN45」で
こんなのを発見。
https://www.analog.com/media/en/technical-documentation/application-notes/an45f.pdf

Figure 17. 1.5V Powered Radiation Detector

500v
1.5Vの乾電池から500Vを生成。
高圧整流部がコッククロフト・ウォルトン回路

回路に記されたセンサーの型番が「LND-712」
電源ICは LT1073  ちょっと高価だけど現行品。
著者は Jim Williams さん。

※関連
2011年06月22日:訃報:アナログの皇帝、逝く
(EETIMES)アナログの巨星が相次いで逝く、Linearのジム・ウィリアムスとNationalのボブ・ピーズ

| | コメント (2)

2022年11月 1日 (火)

テスター精度確認用DC500V電源制御回路案 #3

お手軽に高電圧を出せるかどうか・・・
2015年04月25日:ダイソーで買ったACアダプタを解体してみる
この残骸を引っ張り出してきて試してみました。
  ※左側G208のが残ってました
T10
電源回路を組むのは面倒なので・・・
トランスの2次側(元の)に5V電源とパルスジェネレータ
(Nch MOSFET出力を装備してるので)をつなぎます。
T11_20221101105701
元の1次側には100:1の高圧プローブを。
とりあえず負荷は無しで。

電源5V、周波数10kHz、デューティ6%でこんな波形
(P-Pで600Vほど)が出てきました。
T12_20221101105701

5V電源の電流は0.17A。
周波数を20kHzにしても大きくは変わりませんでした。
このあたりはFET駆動系の問題(ゲートの遅れ)もある
かと思います。

ACアダプタのトランスを物色すればなんとかなるか
なぁ~っという感触。  100V/200V両用のとか。

※5V電源 10kHzで
デューティ 5V電流 出力P-P
  2%  0.02A  300V
  4%  0.10A  500V
  6%  0.17A  600V
  8%  0.26A  680V
と、変化しました。

パルスジェネレータ、デューティを一定にして
周波数(設定は周期)を可変できるので、なかなか
便利っす。

※11月7日追記
ダイソー製ACアダプタのトランスを、MC34063で駆動
してみました。
しかし一次側(低圧側)のインダクタンス値が小さくて
思うように2次側出力(高圧)が出てきませんでした。
  元の回路から。フライバックコンバータであるのは
  間違いなし。

昔、試しに手で巻いたトランスがあったよな~っと
探してみたら、20巻き:200巻きのが出てきたんで、
同じようにMC34063をつないでみました。
T11_20221107101101

5V入力で150Vくらいの直流が出ました。
巻き数を増やせばなんとかなりそうです。
電源電圧を上げると、DCコンICの出力耐圧が
やばそうなので、無理はしてません。
電源を12Vにして、耐圧の高い駆動用トランジスタを
追加すれば巻き数比は楽になるかな。

ジャンクのスイッチ電源から取り外したトランス、
ヒートガンで加熱したら、コアなどを固定してある
樹脂(接着剤)?が柔らかくなって、うまいことバラ
せます。


| | コメント (0)

« 2022年10月 | トップページ | 2022年12月 »