トラブル遭遇

2020年11月11日 (水)

センサーICが入ってこない! 旭化成の工場が火災!

えらいこっちゃ。 選んだ石が入ってこない。
その原因が、
旭化成エレクトロニクス 延岡製造所火災

そのまま代替できるデバイスは世の中に無し。
似たようなのを探しても、足配置やインターフェースの
方法が違うし。
困ったぞ!

チップはこれ↓
2019年9月29日:360度グルグル回したろ AK7401
回転角センサーです。
類似品は世の中にあるんですが、AK7401に特化した回路に
なってまして・・・ 困った・・・


| | コメント (0)

2020年10月26日 (月)

ビニールコードの外装絶縁物が分解

昨日の自宅お片付け。
USBケーブルやLANケーブルを入れてあった箱を
整理していたら・・・
箱の底に「黒い小片」がパラパラと落ちています。
「怪しい生物(G!?)の痕跡か?」っと思ったら・・・
ACアダプタから出てる電線の外装が分解してました。
バラバラになって黒い怪しい小片に分かれてたのです。
中心の「赤・黒」線が出現してました。

11_20201026084701

ところどころ残ってるけど、ネチャネチャ。

いっしょに仕舞ってあった他のケーブル。
よく見ると、外装がネチャついているのや、
透明外装で見えているシールド線部に緑青が
出ているもの、コネクタの端子が錆びているもの
など、劣化品が多数出現。
いつか使うかと仕舞っておいてもこうなるとゴミ。

| | コメント (7)

2020年10月21日 (水)

gawk 文字列から1文字を取り出して8bit数値として扱いたい

「XOR」によるサムチェック・コードの生成、この処理
の確認用テストプログラムの作成に手こずりました。

通信電文の処理ですんで、CR、LFで区切られたテキスト。
GAWKを使ってチェックしたろっと、
  ちょちょいと・・・のはずが・・・

手順としてはこんなの
  (実際はもうチョイ別の処理も
   入りますが、核の部分だけ)

・入力した1行文字列の文字数を数える。
・先頭から1文字取り出す。
・順にXORしてサムチェックコードを作る。
・全文字完了で2桁の16進値で出力。

試したのはこんなGAWKのコード。

# 文字コードをXORしたい
BEGIN{
a = "ABCDEF"; # チェック文字
n = length(a); # 文字数
sum = 0; # XOR結果
for(i = 1; i <= n; i++){ # 先頭=1から最後まで
c = substr(a, i , 1); # 1文字取り出し
printf("%c", c); # ★1 確認で出力
printf("(%02X)", c); # ★2 HEXで出力
sum = xor(sum, c); # ★3 XOR演算
sum = and(sum, 255); # 00~FFでマスク
}
printf(" : %02X\n", sum); # 結果出力 sum
}

しかし結果はこんなのに。

  A(00)B(00)C(00)D(00)E(00)F(00) : 00

取り出した1文字を、printf("%c",c)で文字として出力
できていますが、8bit数値としての処理ができてません。
ゼロのまま。
  ★1は動作。
  ★2、★3がゼロのまま。

  「c + 0」とか・・・(awkでは+0で変数が数値になる)
  「int(c)」とかを試しましたがダメ。

たしか「昔に同じことをしたよな~」っと思い出して
古いプログラムを探しますと、この解決方法が出てきました。

ちょっと面倒ですが、まず0~255の値に対する配列を作ります。
その配列番号として使うのはsprintf("%c",i)で作った8bit文字
その中に0~255の数値を入れます。

以後、このテーブルを使って8bit文字の数値を得ます。
すると、XOR演算や16進での出力ができるという仕掛け。

こんなテストプログラム。

# 文字コードをXORしたい
BEGIN{
a = "ABCDEF"; # チェック文字
# 0~255の数字テーブルを作成
for(i = 0; i < 256; i++){ # 0~255
t = sprintf("%c", i); # 配列番号を文字で
tbl[t] = i; # 値をテーブルに入れる
}
# 実行
n = length(a); # 文字数
sum = 0; # XOR結果
for(i = 1; i <= n; i++){ # 先頭=1から最後まで
c = substr(a, i , 1); # 1文字取り出し
printf("%c", c); # ★1 確認で出力
printf("(%02X)", tbl[c]); # ★2 HEXで出力
sum = xor(sum, tbl[c]); # ★3 XOR演算
sum = and(sum, 255); # 00~FFでマスク
}
printf(" : %02X\n", sum); # 結果出力 sum
}

結果、ちゃんと16進値が出るようになりました。

  A(41)B(42)C(43)D(44)E(45)F(46) : 07

めでたし、めでたし。


| | コメント (0)

2020年10月15日 (木)

LM2776:チャージポンプ型電圧コンバータ 起動失敗

反転型チャージ・ポンプIC:LM2776 の記事にコメント
しましたが、LM2776を使おう(試作回路への組み込み)
としたところ、うまく起動しないという事態が発生。

目的は電源電圧の+5Vから-5Vを生成。
まっとうなチャージポンプ型降圧回路の使い方です。

11_20201015103201

サンプル回路。
B10
EN入力はVinと接続して、電源供給で即起動するように。

症状は・・・
  Vinが3.0Vなら正常起動。
  3.3Vだとやっとこさ。
  3.5V以上だと起動に失敗。 5.0Vもアウト。。
  Vinの立ち上がりをゆっくりにすると5.0Vでも正常起動。
こんな状態に出くわしたのです。

以前の性能実験ではうまいこと動いていたのです。
  ※以来、このチップは使ってませんでした。
「在庫あるな。よし、使ったろ。」という次第。
そしたら、今回の試作回路ではアウト。

電圧を変えながら様子を見てみました。
   負荷抵抗は軽く22kΩ。
   ch1 Vin入力電圧
   ch2 Vout出力電圧 -Vinが出ます
   ch3 C-端子 負電圧発生元

3.0Vならちゃんと起動。
D76

3.3Vだと、ちょっと遅れながらも起動はします。
D77

ところがこれ以上のVinはダメ。
3.5Vでは正常なマイナス電圧が出てきません。
D75
「C-」信号を見ると、いっぱいパルスを出しているんで
起動しようと頑張っているようですが・・・

ところが、入力電圧の立ち上がりを「ゆっくり」に
すると5.0Vでもこんな具合にOK。
D79

あれこれTIのサイトを探していましたら、こんなアプリケーション
を発見。
 TI Designs
 High Accuracy AC Current Measurement Reference
 Design Using PCB Rogowski Coil Sensor

この回路のマイナス電圧発生にLM2776が使われてました。
EN端子(Hで起動)に遅延回路が入れられています。

B11_20201015104001
電源部にLM2776が使われています。
その詳細。
B12_20201015104101
Vin(ここでは3.3V)をR14とC21で遅延させてEN入力につない
でいます。
遅延時間、ざっと10mS。

期待して、これ、試してみましたが・・・
Vin=5.0Vではやはり起動に失敗。
遅延をもっと大きくしてもうまく行きません。
Vinが上がりきったところでENを徐々に上げても
スロースタートはしないということなんでしょう。

「いきなり電源オン」の回路では解決策無しということかと
LM2776を使う時はどうぞご注意を。

※解決しました。
コメントをご覧ください。
コンデンサの実装場所に注意!っということで。

| | コメント (4)

2020年10月 1日 (木)

先が細すぎた・・・ピンセット

「もうちょい先の細いのはどうや?!」っと買ってみたピンセットが
「ホーザンのP-655」

D10

D11

D12

120mm長で重さ14g、耐磁性。
そして先端幅が0.2mm

快適な場合もあるんですが、これが細かった・・・

チップ部品の集合抵抗をはさむと・・・
先端が凹部にはまり込んでしまうことがあり、
 「斜めに持ってハンダ付け位置まで移動」
がやりにくいんです。

D13
   ↑先端が凹部に引っかかってしまい、
   部品をつかむ角度が自由にならない。

工具は使ってみないと分からない・・・

※関連
2010年02月13日:ピンセット
   ここ↑に出てくるれスイス製のが快適。
くっついたらイヤっ! 着磁した安物ピンセット
百均ピンセット4種類
99円ピンセット
工具の消磁

※検索
Udauda Blog3/2019-10-26/チタン・ピンセット購入


| | コメント (0)

2020年9月17日 (木)

CR2032バックアップ用リチウム電池・・・0V

先日来、ガレージのPCの調子が良くなかったんで、
昨晩、フタを開けて清掃。
  立ち上がりをミスったり、
  動画を見てたら落ちたりっと。
PCはガレージの主テーブル(食事を作るんで油も煙もひどい)の
そば。
電源を抜いてから、ケースの吸気口やファンの汚れ(コテコテだぁ)
を清掃。

11_20200917082701

ところが・・・掃除を終えてからの電源投入。
いきなりBIOS設定画面が出てきちゃいました。
いろんな設定だけでなく、日付も忘れています。
あれまっ。

文鎮 の佐藤テック君のアドバイス。
  「電池とちゃうか?!」

12_20200917083001

アタリ!でした。
電池を外してテスターで電圧を測ったら「0V」。
放電しきってます。
「まぁよぅ動いてたな」ってことで新品電池に交換にして解決。

電源コードを外して小一時間ほど掃除でごそごそしてたせいで、
完全に電源が抜け落ちてしまったのでしょう。
それでもまぁ「0V」とは・・・

| | コメント (0)

2020年9月15日 (火)

操作スイッチ接触不良 →大阪魂の出番に

ずいぶん昔に使ったとある装置のテストジグ。(30年以上前だわ!)
ひさしぶりに引っ張り出してきて使おうとしたら、操作スイッチが接触不良に。

ミヤマ電器 DS-193 という小型のプッシュスイッチ。
ずっと押してれば、ちゃんと接点は接触はしてくれます。
しかし、「ちょん・ちょん」と寸動するとダメ。
ツン・ツン」と動くはずが「バ・バ・バ・バ・バ」っと振動して
しまうのです。
回路的にはハードウェアーで10mS程度のチャタリング除去はしてい
ますんで、たいていは大丈夫なはずなんですが・・・

とりあえずオシロで接点の状態を見たら、チャタリングなんてもんじゃ
ありませんでした。
「チョン」押しで100mSほどオンしたら、その間、明確なオン・オフ
の断続が2~3回。
接点のチャタリングじゃなく、接触不良状態というか、素早く手で
オン・オフしたような信号、正規の信号のようになってます。
これじゃチャタリング除去回路では吸収できません。
同じような不良のスイッチが2つ。

とりあえず手持ちの新品押しボタンスイッチに交換。
小型のスイッチだったんで、元の穴が大きすぎたんでワッシャ
をかまして無理やり取り付け。

取り外したDS-193↓
11_20200915114001

ジグを使い終わってから、アウトになったスイッチをバラしてみました。
接点部が取り付け金具部にねじ込まれています。
これを緩めると、接点金具と小さなバネが出てきます。

12_20200915114201

接点部の奥に、ハンダ付けする接触が見えてます。
   (リングライトを出すのが面倒だったんで
    懐中電灯で照明)
13_20200915114201

接点も接点金具もキレいです。
これで接触不良?というのがちょい不思議。
  ※過去、ひどい接触不良を見てますんで

さてここからが「ものは試し」。 使うのは「大阪魂 」。
接点と接触片の両方をプシューしてから組み直します。
すると・・・
あらま、ちゃんと回復しちゃいました。
単純な構造の接点ですんでチャタリングは発生します。
しかし、「バ・バ・バ・バ」というむちゃな接触不良は無くなりました。
導通チェック しても大丈夫。
  ※抵抗値の変動があれば音ですぐに分かるんで。

まぁ、一度トラブったスイッチです。
とりあえず非常用の予備品に。

しかしまぁ「大阪魂」。こいつはなかなかやってくれます。

※関連
2018年8月27日:モノタロウのパーツクリーナ
2018年8月24日:はじめてのArduino MICRO
2018年2月22日:ローランド ミキシングアンプ「VX-55」修理!
2018年10月22日:タクトスイッチ接触不良
2011年01月27日:電源スイッチ接触不良 
2013年06月12日:タクトスイッチ接触不良
2013年04月26日:照光式タクトスイッチ…接点が死んでました

| | コメント (0)

2020年9月14日 (月)

コテペンの柄、割れてきた・・・

大事に使ってきたコテペン40(もう作っていないんでパーツも含めて入手不可)。
今朝のこと、ハンダ付け作業をしてましたら・・・
コテを手に持った時に突然の違和感。
「くにゃっ」とした感触。
コテの柄を見たら、ひび割れがぁぁ。

もう2本同じものをストックしてあるんですが、お気に入りの
ツールです。
ひび割れに瞬着を流し込んで(百均のじゃなくちょいとエエやつで)
から、「アクリルレジン」で固めちゃいました。

A11_20200914175901

以前にも、
2013年03月05日:コテペン落下→折損→応急修理
てなことがありました。
  ↑これ、まだ生きてます。
  おもちゃ病院で使ってます。
今回は落としはしていません。
使っていたら、ある時「んんん? なに?」でした。
ほんと、手になじむハンダゴテを探しとかなあかんです。

2014年12月06日:半田ごて落下→ヒータ折損

| | コメント (0)

2020年8月27日 (木)

オペアンプとMOS FETを使った定電流回路・・・電子負荷回路・・・

オペアンプとNch MOS FETを組み合わせた吸い込み型の定電流回路は
「電子負荷」などで使われます。
基本はこんな回路。

31_20200827091501

電流検出抵抗Rs両端の電圧が電流設定制御電圧Vp
と等しくなって、「Vp÷Rs」の一定電流が流れる
という仕掛けです。

基本はこれなんですが、実際の回路だとFETの
ゲート入力容量や制御の遅れで、オペアンプが
発振しちゃいます。

その対策、ざっとこんな具合。
32_20200827092001
・R1でFETのゲート容量とオペアンプ出力と分離。
・発振止めコンデンサC1が効くようにR2を追加。

R2には電流は流れませんのでVm=Vsで、Isの計算式
は一番上の図と同じ。

ところが、こんな回路↓を見かけるのです。
  ※発端は昔からの仲間でやってるメーリングリスト

33_20200827092301
R3とR4が追加されています。

まずFETのゲートとGND間に入れるR4から。
制御的には、R4があっても「Vo>Vg」となるだけで、
出力電流の値には影響しません。

これが必要かな?っと考えられること。
(1)オペアンプの電源が0~30Vなどの高電圧で動いて
  いる時、FETのゲート電圧が過大にならないように
  するための分圧回路。
(2)電源オフ時にFETのGを安定(抵抗でGNDにつながる
  ので)させて勝手にオンしないように。

(1)に関して、オペアンプの電源が0~5V、あるいは0~12Vで
動かしているような回路だとまず心配ないですよね。
たいていのパワーMOS FET、Vgsの最大定格は±20Vとか±30V。

問題は(2)。
C-MOSオペアンプだと、電源断で出力段の寄生ダイオード
を通ってGNDレベルになったVddにつながるということで、
ゲートのレベルが安定しそうです。
でも、LM324などのバイポーラオペアンプだとどうでしょか。
ちょっと調べてみる必要があるかな。


次が抵抗R3
オペアンプの出力と非反転入力に入れてあります。
なぜこれを入れるの?』っというのが今回の主題。
   ※結論は入れるな!でっす。
オペアンプを使った増幅回路、よく目にする回路だと(今回の
定電流回路じゃなく)R2とR3でアンプのゲインが決まります。
想像です。
R3が無いと、ゲイン無限大で「コンパレータになってしまうんじゃ」
っと思うのでしょうか?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※豆知識
どんなオペアンプでもちゃんと制御されている時の基本は「Vp=Vm」。
オペアンプ応用回路が生きているか死んでいるかの判断がこれ。
非反転入力と反転入力間の電圧をテスターで計れば一目瞭然。
  (ただし、飽和してない時、交流信号が入ってない時に)
しかし、実際の修理となれば・・・
Vp≠Vmの時の判断・・・
 ・オペアンプが死んでるのか。 ・周辺回路の部品がおかしいのか。
そりゃあ、悩みますぜ。
 ・フィードバック系に入った抵抗1本でアウト
 ・これはダイオード1本で  OP-AMP回路が動きません
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

このR3、むちゃ悪さをします
  ※影響度はR2との比率になるんですが・・・

※基本の考え方。 (R4は無しとしてVo=Vgで)
  VgはFETがオンしなくちゃならないのでVg>Vs。
  その差はざっと2~4Vくらい。 (FETの特性によります!)
  Idが大きくなるとVsも上昇、Vgはそれより上昇。

R3があると、オペアンプの出力から反転入力間の電圧差÷R3だけ
電流がR3とR2に流れます。  電流値は(Vo-Vm)/R3です。
この電流、R2とRsを通してGNDに流れます。
Vm=VsとしてRsに流れる電流を想定しているのに、Vm>Vsでは
Vpで設定した流れて欲しい電流より小さな電流になってしまいます。

さらにたちの悪いことがあります。
R3が無い本来の制御ループは、FETのVgs電圧に関係なく一定の電流値に
なるようになっています。
しかし、Vgsはデバイス依存。
温度が変わればこの電圧も変化します。
R3を入れたことで、Vgsの変化がR3、R2の電流値変化につながり
それがIs、Idに影響するのです。

例えば、
「ちゃんと1.000Aに設定したのにしばらくしたら
 (発熱してきたら)電流値が変わってしまった」
「VpとIdの関係が日によって変わる」
なんてことも発生します。

もう一つ。
Vpを0Vから徐々に大きくした時の0Vに近い電圧での挙動。
R3が入ったせいで、FETのゲートをオンする前のVo電圧でも
R3・R2・Rsに電流が流れます。
これでもVp=Vmが成り立つので制御はOK。
しかし実際には、FETは駆動されておらず、Idは流れない。
こんな不感帯がVpが0V付近で発生します。

結論:R3は外せ!
です。

でもおそらく・・・
34_20200827105701
こんな使い方をしてたらR3が有ろうが無かろうが、
ちょっと値が変わろうが関係ないんだろうな・・・
っと。

※参考
定電流回路の電流検出抵抗を試す
定電流回路の電流検出抵抗


こんなのを真似してるのかなぁ?
Diy キット 150 ワット 10A バッテリー容量テスター調整可能な定電流電子負荷放電試験


これもちょっとへん。
小電流電源の試験に適した定電流負荷
    R13、R14いらんやろ。
    発振止めコンデンサ無しで大丈夫か?
    TL431並列の0.1uF、これも大丈夫か?
       値によっては発振するでぇ。

| | コメント (1)

2020年8月11日 (火)

14pinのAVRマイコン、ATtiny24が動かん!

しょうもないミスをしてしまって、解決まで悩みまくった・・・

試作回路のテスト用ジグの製作。
周波数1kHzで、デューティ0%~99%のパルス波が欲しい
という要求仕様。
設定はロータリーDIP SWが2桁。
使ったのは14ピンのATtiny24で、こんな回路に。

11_20200811093001
6.4MHzの水晶をクロックを1/64して100kHzを得、
これを1/100して1kHz。
AVRマイコンのタイマー0をFAST PWMモードにして
DSWでの設定00で全区間L~99%のH/L波形を出します。

※ISPのライン、PA4、5、6に入れてある抵抗は
 DSWオン時(GNDにつながる)でもISPできるように。

こんな基板に。
とりあえず、プラケースに入るようにして行方不明に
なりにくく。
この手のテストジグ、裸の基板だと消息不明が多発・・・

12_20200811093001

ところがです。
・・・プログラムが動いてくれない。
イニシャルはしてくれるのですが、main()の
永久ループに入らない。 なぜ?

AVRマイコン、「C」で書く時はこんなスタイルです。
  ※Arduinoならsetup()とloop()に分かれますが。

// 初期化ルーチン
void ioinit(void)
{
  あれこれ
}

// main処理
int main(void)
{
 ioinit();  // 初期化処理を呼び出して
 while(1){    // 永久ループ
   あれこれ  // メインでの処理★
 }
}

初期化処理までは動くんだけど、★のメイン処理が
動かないという現象が起こったんです。

さらに・・・
テストルーチンをioinit()内に入れこんで、ioinit()
から抜け出ないようにしたら、ちゃんと動くんです。
なぜにwhile(1)で永久ループしない?

この追求に手間取りました。
でも、原因は単純な話。

通常、AVRマイコンの「C」の処理は、
・ステータスレジスタのクリアとスタックポインタの初期化
・内部データの生成
・BSSエリアのクリア
これを自動(ユーザーは意識しなくて良い)で行った後、
main()をサブルーチンコールします。

そして↑の私の書き方だと、main()の中から
ioinit()をサブルーチンコールして、その後に
while(1)の永久ループが回ります。

さて、トラブった原因・・・

この時、コンパイルはATtiny44を想定して行っていました。
ところが・・・
ターゲットの回路に入っていた実際のチップはATtiny24

同じ14ピンなもんで、チップのマークをちゃんと読まないと
判断できません。

そして、I/Oレジスタまわりの構成は同じです。
だからioinit()は動いて、それなりの動作をし始めた
のです。 (だからややこしかった)

何が問題になったのか・・・
RAMのサイズでした。

小さいプログラムですんで、ROMは小さくても大丈夫。
RAMもほとんど使っていないんで余裕のはずなんですが、
Cコンパイラが設定するスタックポインタがtiny24と
tiny44では異なります。
  (RAMの最終アドレスを設定する)

コンパイラがtiny44のつもりで設定した場所、tiny24の
ここにはRAMがありません。
だもんで、ioinit()を呼んだ戻り先が喪失してしまい、
プログラムが暴走。
いつまで経ってもwhile(1)のループにたどりつけません。

こんなスカタンな話、生半可にI/O回りが動き始めてたんで、
解決に手間取りました。


※豆知識
AVRマイコンのデータシートを見てもらえれば、ステータスレジスタと
スタックポインタへの処理が、Cコンパイラの「大きなお世話」で
あることが分かるかと。

AVRマイコン、リセット起動で
 ・ステータスレジスタはゼロに初期化。
 ・スタックポインタはRAMENDに初期化。
されます。

それをCコンパイラで書かれたプログラムがなぞるわけです。
スタックポインタはチップに乗ったRAMサイズに合わせて
自動的にセットされるので、チップのRAMサイズが変わっ
ても(小さくなるチップを使っても)今回のようなサブルーチンの
リターンアドレスが喪失するような事態は発生しません。

アセンブラでプログラムを書くなら、この初期化処理はしません。
リセットによる初期化を信じます。


※制御プログラム:ダウンロード - 1khz_duty.zip

 

| | コメント (3)

より以前の記事一覧