電子部品

2022年1月14日 (金)

オンボードDC-DCコンバータが入ってこない!

電子部品供給の逼迫で、DC-DCコンバータ(モジュール)が
入ってきません。
「コーセル」に「TDKラムダ」、有名どころのがアウト。
問い合わせに「納期不明」や「半年先」の回答。
この前、困ったのがこれ。
コーセルの15W。
  ・MGS152405  (degikeyで検索)
11_20220114103501
24V入力で5V出力。
できあがった基板へハンダしますんで、同一ピン配置じゃないと
あきません。
なにか代品が無いものかと探したところ、出てきたのが
このモジュール。
12_20220114103501
  ・PDQE15-Q24-S5-D
ctrl:on/off制御のロジックが異なりますが、使っていなければ
置き換えできます。
少し背が高くなりますんで注意。

もう一つがTDKラムダ。
  ・CC3-2412DF-E
13_20220114103501
24V入力で±12V出力。
これも入ってきません。
探しましたら、これが使えそうです。
  ・BTB24-12W12D  (現物はまだ入手していない)

いつまでこんな状態が続くんでしょうねぇ。



| | コメント (0)

2021年12月 7日 (火)

湿度センサー「DHT11」がやってきた・・・けど!?

注文していた湿度センサー「DHT11」、届いたのはこれ。
ASAIR」というメーカーのようです。

31_20211207155001
 ・https://www.aosong.com/en/productslist-4.html
 ・https://www.aosong.com/en/products-21.html

※前記事:出窓の結露対策用ヒータ制御回路

さっそくArduino-UNOで試運転。
  ライブラリは使わず自前のルーチンで。
すると・・・いくつかの疑問が・・・

(1) DHT11の応答速度

「読み出し速度は1秒以上」なんて書かれてるページが
あります。
センサーとしての応答速度と通信速度とは違う
わけでして。
試しに0.2秒サイクルでデータを読み出してみました。
上がってくる5バイトのデータ、10進と16進で示します。

・加熱しながら0.2秒サイクルで読み出し
- 湿度- -温度- sum ---HEXで------
15  0 40  3 58  0F 00 28 03 3A
14  0 41  2 57  0E 00 29 02 39 …0.0 41.2℃
14  0 41  2 57  0E 00 29 02 39   2
14  0 41  2 57  0E 00 29 02 39   4
14  0 41  2 57  0E 00 29 02 39   6
14  0 41  2 57  0E 00 29 02 39   8
14  0 41  2 57  0E 00 29 02 39  1.0
14  0 41  9 64  0E 00 29 09 40 …0.0 41.9℃
14  0 41  9 64  0E 00 29 09 40   2
14  0 41  9 64  0E 00 29 09 40   4
14  0 41  9 64  0E 00 29 09 40   6
14  0 41  9 64  0E 00 29 09 40   8
14  0 41  9 64  0E 00 29 09 40  1.0
14  0 42  6 62  0E 00 2A 06 3E …0.0 42.6℃
14  0 42  6 62  0E 00 2A 06 3E   2
14  0 42  6 62  0E 00 2A 06 3E   4
14  0 42  6 62  0E 00 2A 06 3E   6
  ※センサーのそばにハンダゴテを置いて加熱。
   湿度がえらい低く出てます。
「1.2秒」周期で湿度+温度データが更新されてました。
※追記
これ↑、私の勘違いを含んでいました。
6回のうちの5回はACK応答なしでタイムアウトエラー
生じていました。
つまり直前に読み取ったデータを出力していたのです。
AdafruitのDHTライブラリではMIN_INTERVALとして2秒が
取られています。
その間の呼び出しは、読み出しは行わずに前回値を使うという
処理になっています。


(2) 0.1℃の桁まで温度が出てるぞ!

あちこちにあるDHT11のデータシート、湿度と温度のデータの
分解能、湿度が1%、温度が1℃と記されています。
しかし、このデータ列を見ると、4つ目のデータが「0.1℃」
の数字になっています。
  (2つ目の湿度データは00が続く)
スケッチのサンプル、floatで処理しているようなんで、
分解能を気にしていないのか、はてさて。

(3) ライブラリはどうしてる?

よく使われているライブラリ「DHT.cpp」を見ますと・・・
DHT11はこんな処理に。

  case DHT11:
   f = data[2];      …3つ目が1℃桁
   if (data[3] & 0x80) {  …4つ目のMSBがマイナス符号
    f = -1 - f;      …★1
   }
   f += (data[3] & 0x0f) * 0.1; …4つ目の下位4bitが0.1℃

「0.1℃」が出ているのは間違いないようです。
で、★1のところに疑問。 データシートに出ていない、
マイナスの処理、これでエエん?

湿度が高分解能なDHT22の温度処理を見ると、

  case DHT22:
   f = ((word)(data[2] & 0x7F)) << 8 | data[3]; ★2
   f *= 0.1;   …3つ目が1℃で4つ目が0.1℃
   if (data[2] & 0x80) {  …3つ目のMSBが1なら
    f *= -1;       …マイナスに
   }

このDHT22のマイナス処理はなるほど。
★2の所、3つ目の8bitデータはちゃんとマスクしてあります。

ということで、温度がマイナスはどうなる? が疑問です。


(4) 氷点下は?

実データを見るため、センサーをビニール袋に入れて
サンハヤトの「Q-REI」で冷やしてみました。
  シリアル出力は2秒サイクル。

- 湿度- -温度- sum ---HEXで------
27  0  4  9 40  1B 00 04 09 28 … 4.9℃ 下降
27  0  4  1 32  1B 00 04 01 20 … 4.1℃
27  0  3  3 33  1B 00 03 03 21 … 3.3℃
27  0  2  5 34  1B 00 02 05 22 … 2.5℃
27  0  1  7 35  1B 00 01 07 23 … 1.7℃
27  0  0  9 36  1B 00 00 09 24 … 0.9℃
27  0  0  2 29  1B 00 00 02 1D … 0.2℃
28  0  0 133 161  1C 00 00 85 A1 …-0.5℃ ★3
28  0  1 129 158  1C 00 01 81 9E …-1.1℃
29  0  1 136 166  1D 00 01 88 A6 …-1.8℃
29  0  2 132 163  1D 00 02 84 A3 …-2.4℃
30  0  3 128 161  1E 00 03 80 A1 …-3.0℃
   :  :
45  0  2 132 179  2D 00 02 84 B3 …-2.4℃ 上昇
47  0  2 129 178  2F 00 02 81 B2 …-2.1℃
48  0  1 136 185  30 00 01 88 B9 …-1.8℃
49  0  1 132 182  31 00 01 84 B6 …-1.4℃
50  0  1 129 180  32 00 01 81 B4 …-1.1℃
52  0  0 135 187  34 00 00 87 BB …-0.7℃
53  0  0 132 185  35 00 00 84 B9 …-0.4℃
54  0  0 129 183  36 00 00 81 B7 …-0.1℃ ★4
55  0  0  3 58  37 00 00 03 3A … 0.3℃
57  0  0  7 64  39 00 00 07 40 … 0.7℃
58  0  1  1 60  3A 00 01 01 3C … 1.1℃
59  0  1  4 64  3B 00 01 04 40 … 1.4℃

温度が下降、上昇する速度から0℃付近の挙動が
見えてきます。
 (1) 3つ目と4つ目のLSBを加算してxx.x℃に
 (2) 4つ目のMSBが1ならマイナスに
ということでよさそうです。
しかし、★1の手順だと、「-0.1℃」を読んだときは、
「(-1 - 0) + 0.1」「-0.9℃」になっちゃいます。

DHT11の0.1℃処理、後からデータが出ているのが
分かったんで付け足した感じでしょうか。
プラスのことしか考えなかったんで、それで、ミスを!

「ライブラリをうかつに信じたらアカンぞ!」っという
ことになっちゃいました。

DHT11の処理をこのライブラリでしたことがある方、
氷点下の処理を見直さなくちゃいけません。
1℃内で温度の上昇と下降が逆になってしまいます。


※こんなスケッチです (完成形じゃありません)
  ・ダウンロード - test_hdt2.txt

タイマー1のインプットキャプチャ機能を使って
DHT11からのパルス幅を読んでいます。
  ※ソース、DHTとする所、間違ってHDTとなってます。
   次の手直しで直します。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※追記 DHT11、氷点下の処理 (↑の★1)

 case DHT11:
  f = data[2];     …1℃桁
  if (data[3] & 0x80) { …MSBがマイナス符号
   f = -1 - f;     …★1
  }
  f += (data[3] & 0x0f) * 0.1; …下位4bitが0.1℃

おそらく・・・★1は最小桁が1℃の時の処理だったかと。

温度が降下して「 4 3 2 1 0℃」と来た次、
データが「0」のままマイナスになって「-0℃
が出現します。
それを嫌って、「4 3 2 1 0 -1 -2」となる
ようにするための処理が「f = -1 - f;」だったと
推測できます。

それが、「0.1℃桁」まで出ているのが分かり
DHT11の機能アップ?)、それじゃと追加したのが
  f += (data[3] & 0x0f) * 0.1;

しかし、マイナス温度を考えていなかったのがミス。
DHT22と同じように、先に1℃桁と0.1℃桁を合成してから
マイナスを判断して処理しなければなりません。

気が付かない原因・・・
  ・昔からあるライブラリにミスは無いだろう。
  ・みんな、使っているし。
  ・動いているし。
  ・欲しいのは湿度。 温度はおまけ。
  ・DHT11で氷点下なんて使わないぜ。
  ・1℃桁が合ってればヨシ!

現場ネコ」みたいになってきました。


※追記  氷点下実験の様子
32_20211208113001
センサーをビニール袋に入れ、その上からQ-REIを噴射。

40.0% -19.6 28 00 13 86 C1
40.0% -19.7 28 00 13 87 C2
40.0% -19.7 28 00 13 87 C2
40.0% -19.8 28 00 13 88 C3
40.0% -19.8 28 00 13 88 C3
40.0% -19.9 28 00 13 89 C4
40.0% -20.0 28 00 14 80 BC
40.0% -20.0 28 00 14 80 BC  最低到達点
   :
「-20.0℃」まで到達。 ここで数値が張り付きました。


※追記 氷点下の温度数値が★1の処理だと狂う様子

 正          ★1の計算方法
 1.9 [20 00 01 09 2A ]  1.9 ↓温度下降
 1.4 [20 00 01 04 25 ]  1.4
 0.8 [21 00 00 08 29 ]  0.8
 0.3 [21 00 00 03 24 ]  0.3 プラスはok
-0.2 [21 00 00 82 A3 ]  -0.8 マイナスがアウト
-0.6 [21 00 00 86 A7 ]  -0.4
-1.0 [21 00 01 80 A2 ]  -2.0
-1.4 [21 00 01 84 A6 ]  -1.6
-1.8 [21 00 01 88 AA ]  -1.2
-2.1 [22 00 02 81 A5 ]  -2.9
-2.5 [22 00 02 85 A9 ]  -2.5
-2.8 [22 00 02 88 AC ]  -2.2 実際は0.2℃の変化なのに
-3.0 [22 00 03 80 A5 ]  -4.0 1.8℃も飛んじゃっている。
     :
-2.3 [31 00 02 83 B6 ]  -2.7 ↓温度上昇
-2.1 [32 00 02 81 B5 ]  -2.9
-1.8 [34 00 01 88 BD ]  -1.2
-1.5 [35 00 01 85 BB ]  -1.5
-1.3 [37 00 01 83 BB ]  -1.7
-1.1 [39 00 01 81 BB ]  -1.9 0.3の変化が
-0.8 [3A 00 00 88 C2 ]  -0.2  1.7に。
-0.5 [3C 00 00 85 C1 ]  -0.5
-0.3 [3D 00 00 83 C0 ]  -0.7
 0.0 [3F 00 00 00 3F ]  0.0 0はok
 0.3 [40 00 00 03 43 ]  0.3 プラス復帰でokに

こんな変化になるんで、0℃を中心に温度がゆっくり変わったとき、
「なんかマイナスがおかしい」と気づきそうです。

「センサーがおかしい」とか「回路がおかしい」「精度が出てない」
じゃなく、「ソフトがバグってる」というのがこの原因です。

 DHT11センサーで
 AdafruitのDHTライブラリを使って
 氷点下を計る
という条件なので、異常に気付くかどうか・・・微妙でしょうね。


※完成形へ
2021年12月10日:DHT11を使った出窓の結露対策用ヒータ制御回路

| | コメント (3)

2021年12月 6日 (月)

湿度センサー駆動回路 「センサ・インターフェージング No1」から

抵抗値変化型の湿度センサー、手持ちの本の中に資料はないものか
と探しましたら、出てきました。

CQ出版 トラ技別冊「センサ・インターフェージング No1」。
T11_20211206084001
1982年の本。 書架に眠っていました。
T12_20211206084101

「湿度センサ活用編」という章があって、当時のセンサーなど
があれこれ紹介されています。
今のように、湿度・温度がデジタル値として出てくるのは
無く、アナログ値。
T13_20211206084101

ちょいと関連しそうな回路をピックアップしてみます。

・ダイオードで対数変換。
T14

・コンパレータでレベル分けして湿度警報表示
T15

・抵抗値変化を周波数変化に
T16
  ※先日の三角波発振回路と同じ

・単電源回路で
T17

抵抗値変化型の湿度センサー、40年前でも考え方は
同じだっということを再認識。

| | コメント (0)

2021年12月 5日 (日)

タクトスイッチを押してみる …何万回も その5 続き

2021年12月2日:タクトスイッチを押してみる …何万回も その5
で、オムロンのB3F-1062を押し始めました。

今朝、仕事場に来たら72万回ちょいで停止してました。
新しいスケッチでは
  ・デジタル入力オフ検出1回で異常停止。
  ・接触状態見るA/D値の記録は、2以上の時に
   リングバッファに記録。
  ・リングバッファの大きさは1365個でF-RAMに記録。

今回記録していたのは、310個で
2以上のA/D値は全数記録していました。

グラフ化するとこんな具合。
Cap303

36万回と46万回あたりに大きくなったA/D値が出現。
しかし、「デジタル入力オフ」という異常事態は
起こっていませんでした。

その後、順調に「押し」が進みます。
しかし、72万4千89回目で、前触れなしに「オフ」が発生
数値で見ると、こんな具合です。
左側がサイクル数。
右がA/D値。 オフだとA/D値フルスケールに。

  :
 465137  4
 465143  3
 465205  6    前徴なく、
 724089 1023  1 ←突然オフに
         新しいスケッチは1回
         だけで異常停止。
 724090  11  その後、走らせたら
 724091 110  大きなA/D値が続く。
 724092 303
 724093 203
 724094 381
 724095  12
 724096  10
 724097  4  しかし、これ以降、
 724098  0   「0」に復帰。
  :

オフ検出で停止していたのですが、サイクルを
再開するとしばらく異常値が続いた後、再び「0」
になって、「まだまだっ」っという感じになっ
ちゃいました。

タクトスイッチの寿命、単純に「押す」だけでは
測れないようです。
湿気など、周囲環境の影響のほうが大きいのかも。

B3F-1062のスペックを見ますと、
 定格負荷 DC3~24V 1~50mA(抵抗負荷)
 接点材質 銀メッキ
 作動力  1.47N
 耐久性  30万回以上(1.47Nタイプ)
と記されています。

今回のテストでは、負荷はATmega328Pの内蔵プルアップ抵抗で
およそ30kΩ、0.17mA。
この負荷なら「金メッキタイプ(0.1~50mA)」を使えという
ことになるんでしょうが・・・

| | コメント (0)

2021年12月 2日 (木)

タクトスイッチを押してみる …何万回も その5

こんな回路に落ち着きました。

Cc01

Cc1_20211202155101
オムロンのタクトスイッチ「B3F-1062」を付けて
「押してみる」を始めています。

Cc2_20211202155101
  ボタンとの間隔、この写真↑よりもうちょい
  縮めて(接近させて)います。

タクトスイッチを押してみる …何万回も その4 続き
EEPROM、 2kバイトと4kバイトの間には壁がある (24LC16で)
EEPROM I2Cのクロックを早くすると・・・

接触不良はプルアップ付デジタル入力のon/offで
見ていますが、接触状態(接触抵抗)はA/D入力を記録します。
そのためのメモリーがF-RAM。
Cc3_20211202155101
FM24C64。 64kビット。 8kバイト。
リングバッファにして直近の1365データ記録できます。
  on/off回数4バイトと2バイトのA/D値で
  6バイトが1データ。

こんなスケッチです。
EEPROM、F-RAMアクセスの所が参考になるかと。
 ・ダウンロード - sw_life_test4.txt
    (テキストファイルにしてます)


 

| | コメント (2)

2021年11月29日 (月)

出窓の結露対策用ヒータ制御回路

寒くなってきて、そろそろ結露対策用ヒータの出番です。
2017年11月25日:そろそろ出窓の結露が ・・・あれ? 湿度センサーがおかしい
2018年11月27日:出窓の結露対策:温湿度センサーの異常
などと、苦難を乗り越えて運転してきました。

「今期はどうだ?」っと通電しますと・・・
下段の湿度値がおかしい。
11_20211129105601
   仕事場にもってきて↑
えらく大きく出てしまいます。

ヒータ制御は湿度の値を見てON/OFFします。
湿度値が大きく出ているもんだから、結露の徴候が
無いのにヒータがオンしてしまい、電気がもったいない。

最初に使った温湿度センサー「HDC1000」(TI製)が
おかしくなったのでSENSIRION社の「SHT31」に
換えて運転していました。
12_20211129105601
それもアウトになったような感じです。
結露が発生するような高湿度環境で長いこと使うと
あかんのかなぁ。

※秋月の湿度センサー
https://akizukidenshi.com/catalog/c/chumid/
さて、どうしたものか・・・
何か良いセンサーは?

正確な湿度値はいらないから、<結露センサー> か。
しかし、結露が発生してからでは遅いしなぁ。

結露センサーMDS05
アマゾン:HDS10
アマゾン:感湿抵抗 KKHMF
アマゾン:HR202L

※あれこれ
秋月の湿度センサー廃番品:
  DHT11
  AM2320、AM2322、AM2302
I2Cの DHT20 が現行品か。
そして、2本足のHS-15P もOKのよう。 ←駆動回路必要
HS-15Pのスペック、「湿度100%、結露環境下でも可」と。


| | コメント (5)

2021年11月19日 (金)

タクトスイッチを押してみる …何万回も その4 続き

タクトスイッチを押してみる …何万回も その4の続き。
今朝、on/off回数98万回を越えてました。
まだ「オフ検出」(デジタル入力)は出ていません。
しかし、接点の接触状態を見ているA/D値が上昇して
いるタイミングがありました。
グラフにするとこんな感じ。

Cap21

固まって出現する傾向があるような。
  ・負荷はATmega328P入力ポートの内蔵プルアップ抵抗。
  ・Vref=1.1VにしてA/D変換。10bit。
  ・A/D値 0 と 1 を除外してリングバッファに記録。
      (200を越えるデータは捨てられる)
このままオフ検出が10回を越えるまで続けてみます。

※追記 134万回へ (11月20日朝)
Cap022
133万7千200回でA/D値が「64」まで上昇。
十分に「接触不良ぽい」事態になっていますが、まだ
デジタル入力はオフと認識していません。

こうなると、リングバッファの容量をもうちょい増やし
たいところです。
現在は200データ。
これより前のデータは捨てています。
外付けで「FRAM」を増設かな。

Twitterにスイッチを押している動画をアップ しました。
毎秒4回の「コツコツコツ・・・」。
雰囲気が伝わりますかな。

※追記 11月22日
朝、仕事場へ来たら「200万回」越え。
リングバッファの200データをグラフにすると、こんなの。
Cap25
そして、1回だけオフを検出していました。
  (リングバッファを出てしまっているので、
   グラフの範囲外)
停止条件が「10回検出」ですんで、まだまだ継続。

A/D値のピーク、1993540回目で937。
でも、ここではオフ検出していませんでした。

試しているスイッチ、「頑張っている」としか言えません。


※追記 11月24日
休み明け、オン・オフ回数が「266万回」。
2回のオフ検出」をしてました。
リングバッファに残っていたのはこんなデータ。
Cap26
今回はこれで終了。
スイッチの中がどうなっているか、これからバラしてみます。

※スイッチの中
ソレノイド駆動部とスイッチの間隔は「0.4mm」ほど。
  ※ついでのとき、隙間ゲージが買っときます。
21_20211124125601

中央より円周部の傷みが大きい感じ。
22_20211124125601
23_20211124125601
24_20211124125601
  ↑
この金属板、磁石にはくっつきませんでした。

※制御スケッチ変更予定
・10回のオフ検出で停止ではなく、1回に戻す。
・I2CのFRAM(8kバイトのが手持ちである)を使って、リングバッファを
 大きく。 200コ→1365コに。


| | コメント (0)

2021年11月16日 (火)

タクトスイッチを押してみる …何万回も その4

タクトスイッチを押してみる …何万回も その3の続き。
スケッチにちょっと手を加えて。

・先日の続きから。
   スイッチはそのままで換えていない。

・「10回」の接触不良検出(デジタル入力ポートでのオフ検知)
 (連続しなくても)で、異常発生と判定して停止。

・リングバッファに200回分のサイクルとA/D値をログ。
   記録するA/D値は「2以上のもの」(0と1は飛ばす)

・10bit A/D値のMSB部(空いている)を使って、接触不良
 回数を同時に記録。

・内蔵EEPROMに接触不良が生じたサイクル番号を記録。
   (10コ)

結果、こんなデータが得られました。
まず、リングバッファ(200データ)の様子。

#  cyc A/D off
 193378  2 リングバッファの先頭
 193382  3
 193904  2
  :
 193905  5
  :
 193934  4
 193936  2
 193938  4
 193939  2
 193942  5
 193945  2
 193963  2
 193988  6
 193989  6
 194016  2
  :
 199110  2
 199118  7
 199120  14
 199121  3
 199125  8
 199127  3
 199128  14
 199129  14
 199130  17
 199131  7
 199132  9
 199138  6
 199140  4
 199143  2
 199146  15
 199151  3
 199154  12
 199155  20
 199156  12
 199157  13
 199158  12
 199159  10
 199160  4
 199161  6
 199162  13
 199163  10
 199166  6
 199167  14
 199169  10
 199173  3
 199665  7
 199666  2
 199673  17
 200010  2
  :
 205996  3
 205998  2
 206005  5
 206298 1023  2 2回目の接触不良検出
 206500  2
 206510  2
 206517  2
 206518  2
 206549  2
 206668 1023  3 連続して接触不良が発生
 206669 1023  4
 206670 1023  5
 206671 1023  6
 206672 1023  7
 206673 1023  8
 206674 360
 206675 1023  9
 206676 1023 10 接触不良10回検出で停止

接触状況が悪くなっているのでしょう、2と3が多数出現
しています。(途中省略)
そして、 206668サイクルから連続して接触不良が起こりました。

EEPROMに記録した接触不良が生じたサイクル数。

#off   cyc
# 1  51745
# 2  206298
# 3  206668
# 4  206669
# 5  206670
# 6  206671
# 7  206672
# 8  206673
# 9  206675
# 10  206676

最初の接触不良、51745サイクルのは、リングバッファ内に
は入っていません。

出てきたデータをグラフにしてみました。
縦軸がA/D値。 対数目盛にしています。
右上端に固まって出ている「○」が異常検出のタイミングです。
Cap003_20211116094201
A/D値が接触抵抗を示すわけですが、今回検出したのは
大きくても2桁。

さて、新品のスイッチに換えて実験を継続します。

※スケッチ
  ・ダウンロード - sw_life_test3b.txt

※GNUPLOTのスクリプト
  ・ダウンロード - taktsw4.txt

※リングバッファのデータ:cyc数とA/D値
  ・ダウンロード - 20.txt

※試したタクトスイッチの中 (秋月の各色100コ入)
11_20211116115901
中心より外周がこすれている感じ。
12_20211116115901

このテストより先、すでにン十万回の開閉を行っています。
でも、異常停止するまでに、ちょいと回数がかかりました。
1回目と2回目の間も15万回。
なにかの拍子、接触状態が回復するのかも。
接触不良を検知した直後、ちょっとだけ開閉を休むとかしたら
もっと回数が伸びるとか。

ソレノイドの下端が押しボタンを押す力も影響しそうです。
   ※押し過ぎはきっと良くないでしょう。
「何グラムで押す」とか、うまく規制できれば良いんでしょうが、
メカ細工をどうしたものか・・・

どんなもんでしょね。

※11月17日 08時50分
昨日に交換した新しいスイッチでの試験、すでに30万回。
まだ大丈夫です。

発端はこのトラブル↓
2021年11月6日:トラブル遭遇:3点  スイッチ、プラグ、電線
回路試験用のジグで使っていた秋月のスイッチでの生じた
接触不良です。
普通に指先で押さえるんで、ン万回も押してません。
内蔵プルアップ抵抗という軽い負荷で接触不良が発生。
グニグニすればオンしていたんですが、普通の操作(指先でpush)
では反応しないということが続いたんで、交換。
そして、この実験につながりました。

なんなんでしょね。
単にon/off回数でもなさそうだし。
ハンダ付けの熱とも考えにくい。

新品スイッチの保管、ビニール袋に入れて部品箱に入れてます。
それを回路に組み込んだら、室内ですが、そのへんにほったらかし。
仕事場、そりゃたまにはパネルの穴開けで油も使いますし、潤滑剤
として「シリコンスプレー」も使います。
洗浄に「IPA」や「大阪魂」も使います。
置いてある基板には直接はかかりませんが、たまに室内で使うケミカル
用品のガスが悪さをしてるのかな?

それとも、ほんとにたまたま調子の悪いスイッチに遭遇してる?

| | コメント (2)

2021年11月15日 (月)

タクトスイッチを押してみる …何万回も その3

タクトスイッチを押してみる …何万回も その2 の続き。
スケッチの変更概要
 ・A/DのVrefを5Vから内蔵1.1Vに変更。
  10bit A/D 0~1023で0~6kΩの接触抵抗を見る
  ことになる。 1LSBで6Ωくらい。

 ・リングバッファへの記録を、A/D値が0と1は飛ばして、
  2以上の時にサイクル数とともに記録。

 ・リングバッファは「160データ」。
  オフ検出まで記録。

「その2」で試したスイッチのまま(26万回開閉)、取り替えずに
試運転した結果がこれ。 (A/D値2以上を記録。 0と1は飛ばし)
開始してから1万8千515サイクルまで、A/D値は0か1。

#  cyc A/D
  18516  47
  18981  63
  19596 159
  19617  63
  19696 687
  19771 1023 ←PC1デジタル入力オフ検出で停止

接触抵抗が増大した値が連続し出すのではなく、パラパラと
大きなA/D値(スイッチの接触状態を示す)が出ています。

接触不良発生でいきなり使えなくなるのではなく、
「徐々に反応が悪くなる」という状態が見えます。

今回のテスト、負荷はマイコンの内蔵プルアップ抵抗。
電流はわずか。
少々接触抵抗が増大しても「オン」を検出してほしいところ
なんですが・・・

オン・オフのタイミングはこんな具合。
A/Dの平均回数64 = 50mSを1単位に処理しています。

25_20211115090401
1回の「オフ検出」で有無を言わせず「試験を停止」するん
じゃなく、何回かの「オフ検出」を待つ方が良いかな?

・今回のスケッチ:ダウンロード - sw_life_test2.txt

 

| | コメント (1)

2021年11月13日 (土)

タクトスイッチを押してみる …何万回も その2

2021年11月6日:トラブル遭遇:3点  スイッチ、プラグ、電線
のタクトスイッチの接触不良を受けて、
2012年08月20日:タクトスイッチを押してみる …何万回も
で作った回路を改造して試してみました。
以前の回路は14pinのATtiny24でしたが、Arduino-UNOで
プログラムを組めるようATmega328Pに交換。

こんな回路。

22_20211113174601

21_20211113174701

0.25秒周期(毎秒4回)でソレノイドを駆動して
スイッチのボタンを押し、オン・オフを繰り返します。

・スイッチを押してから50ms後にA/D変換を開始。
・次の50ms間にA/Dを64回して平均化。
・A/Dが確定して(押してから100ms後)から、スイッチの
 オン・オフ状態(デジタル入力)をチェック。
・A/D値を記録。
・オンなら正常でソレノイドをオフして150ms休憩。
・オフなら異常検出で停止。

これを繰り返します。
PC0ポートがA/D入力。
PC1ポートが、内蔵プルアップを有効にしたデジタル入力。
PC0とPC1を並列につないで、PC1のオン・オフをチェック
します。

A/Dの基準電源は5Vにしています。。
内蔵プルアップが30kΩほどなんで、A/D 1bitの分解能は
30Ωほどになります。
  短絡電流は0.15mAちょいと非常に小さいわけで。
  これで接種不良が発生したので、やっかい・・・

全データを記録するわけにも行かないので、リングバッファで
480サイクル分のデータ(2分間)のA/D値を保存しています。

「オンしたのにオフになった」を検出したら、サイクルを
止めて、このバッファのデータを見ると異常発生直近の
2分間の様子が観察できるだろうとの目論見です。

しかし・・・
結果はこんな具合。

  cyc  A/D
 263396  0
 263397 543
 263398  0
  :
 263608  0
 263609 287
 263610  0
  :
 263627  0
 263628  0
 263629  0
 263630 1022 ←SWオフ検出

2分間(480サイクル)、ほぼズ~と「0」が続いて、0以外の
異常値が出たのは2発だけ。

そして、26万3千630サイクル目に、いきなり「スイッチオフ」
を検出して停止。
徐々に接触状態が悪くなってくる様子が観察できませんでした。

異常記録の方法、直近の480サイクルじゃなく、閾値を超えた
A/D値を残すようにするほうが良いかも。
今はA/D値の2バイトだけ。 480x2で960バイト。
閾値を超えたのとなると、4バイトのサイクル数もいるので
1データが6バイトになって、160個ぐらいでしょうか。

・スケッチ:ダウンロード - sw_test1.txt
   (ファイルタイプを「.ino」にしてArduino IDEで読んでください。)

 

| | コメント (4)