重箱の隅

2025年3月10日 (月)

1/1023監視団 活動中!

CQ出版 トランジスタ技術2025年4月号 (最新号)。
特集の
  フレッシャーズに贈る部品・回路設計・測定の基礎
   オームの法則の現実から!電子回路入門&検定
「エンジャー」さんが記事を書かれています。
その第2部・第3章
  現実を「計る」からはじまる!
   センサ測定回路
128頁の【図12】【リスト1】に、
Arduino UNO R3でのanalogReadが出ていて
やってます。
  voltage = ad * 5.0 / 1023

10131

「電圧を計る」のじゃないのなら、なんでも
良いのですが、得るのが電圧ですんで「1/1023」は
間違い。

ここの他、129頁、131頁、133頁、139頁に
1/1023が出現。

131頁の【図17】の説明では、
 「referenceVolatgeの値を修正したら
  マルチメータとほぼ一致」
とありますので、
  「5.0V決め打ちはダメよ」
の解説はちゃんとされています。

また、152頁には
  「map(ad, 0, 1023, 0, 3)」
とmap命令が使われてますが、これは
  「10bit→8bit変換」
のような使われ方じゃないのでOKでしょう。

トランジスタ技術2024年3月号のトラ技Jr.コーナ
  『実はワナだらけ…確実に動かすArduino Uno R3
を読んでおいてもらいたいでっす。


| | コメント (0)

2025年3月 7日 (金)

DIPのLMC6482えらい高くなった

秋月電子通商が取り扱いを止めたLMC6482、
 「今はいくら?」
っと調べてみたら・・・
  ・LMC6482:DigiKey
DIP品は700円超えでした。

で、LMC6482を検索していたらこんなページが見つかりました。
 ・おすすめのオペアンプIC レール ツー レール オペアンプ LMC6482

このシミュレーション、電源電圧が±15V
おっと・・・LMC6482の最大定格、電圧は「16V」。
±電源だと±8Vが最大。

シミュレーションでは「壊れるぞ!」は言ってくれないの
でしょうな。


※昔の値段
秋月電子で2015年に買ったLMC6482とNJU7062
  LMC6482は120円。

| | コメント (0)

2025年2月17日 (月)

因縁のボリューム記号 トランジスタ技術2025年3月号

2025年2月10日:ボリューム記号のボヤキ、トラ技2025年3月号の別冊付録に再掲載
でボリューム記号の話をしたところですが、
3月号の掲載記事を眺めていて
 『ありゃ。またこんなのが』
というボリューム記号を見つけました。

「私の秋月部品箱」の中、
「お手軽可変電源TPS61088」の紹介記事です。

Tt11_20250217085901

p208の【図1】に紛れていました。
Tt12_20250217085901
   拡大
Tt13_20250217085901

可変抵抗器、2端子接続の記号と3端子接続の
記号がミックスされちゃってます。

トラ技編集部へ送った原稿、回路図などは編集部で
リライトされて著者校正として戻ってきます。
それをチェックするとき、
 「間違いは無いだろうと」
信じちゃうわけですが、それがイカんのです。
ほんとにちょっとしたところにミスが潜んでる
のです。
  恥ずかしながら、何度もチェックを
  すり抜けさせてしまってスカタンし
  とります。

今回のボリューム記号、著者さんがどんな「絵」を
原稿に使っておられたのかが気になります。


※関連
2023年10月27日:トラ技の作図能力が落ちている・・・かも

※参考
Tt14_20250217094301

※追記
JIS/IECの右下の記号「半固定・3端子」
これが怪しい雰囲気を持ってます。
Vr21

| | コメント (0)

2025年2月10日 (月)

ボリューム記号のボヤキ、トラ技2025年3月号の別冊付録に再掲載

トランジスタ技術2022年11月号に掲載してもらった
  「コラム・その部品ライブラリ,正しいですか?
これを2025年3月号の別冊付録
   フレッシャーズ企画
  いまさら聞けない回路の描き方の作法
に再掲載してもらいました。

Kk11_20250210085401

80頁の小冊子。
そのp.66に載せてもらっています。

Kk33

元のブログ記事がこれ↓
 ・2022年9月6日:んっ? ボリュームの記号が!

※続き
 ・2025年2月17日:因縁のボリューム記号 トランジスタ技術2025年3月号
怪しい記号を発見。

| | コメント (2)

2025年1月31日 (金)

NECは3段タイプの発振回路をすすめてる

CMOS ICのノンバッファ(アンバッファ)タイプ、ほんとに
少なくなっちゃいました。
74HCで残っているのはHCU04のインバータだけ。
  シングルゲートでは7SU04が現役

4000番シリーズではかろうじて
インバータが4069UBと4049UB、そして
NANDゲートの4011UBが手に入るようです。

古いファイルやデータブックを整理(いらないのを捨てよう)
していたら1984年のNEC CMOS標準ロジックデータブック
出てきました。
CMOSインバータを使った無安定マルチバイブレータ発振回路が
説明してあります。
要は、
 ・アンバッファタイプを使え
 ・2段タイプより3段タイプがおすすめ
   2段だと発振しないかも
 ・バッファタイプだと異常発振

※pdfをアップしておきますのでご一読を。
  ダウンロード - CMOS発振回路.pdf


HS-CMOSを使うと、異常に遭遇する可能性が高くなります。

2段タイプの発振回路例
G11_20250131155001

3段になっても原理は同じです。
G12_20250131155101
1ゲートでon/offするならシュミット入力NANDゲート
がおすすめですが、安定度はもうひとつ。
G13_20250131155101
確実に異常に遭遇するのが74HC4060を使った場合。
A11_20250201083301  
Cpコンデンサを入れておかないと、カウントをミスして
欲しい周波数のパルスが出てきません。

発振部の出力にグリッチが乗ってしまい、カウントが
好き勝手に進むのです。
  高周波のグリッチをカウントしてしまうので
Cpでそれが避けられます。

でも、MC14060B(4000番CMOSの仲間)だとCp無しでも
正しくカウントしてくれます。
  「昔は大丈夫だったのに」に出会えます。

モトローラのMC14060Bのデータシート。
その発振段の説明はこんな図になっています。

G14
リセット入力で初段ゲートを殺して発振を止めるように
なっているのですが、G1の絵では
  出力をフローティングに
というふうな感じに受け取れます。
G1出力が浮いたらG2入力も浮いてしまい、
  ちょっとヤバいんじゃ
と思ってしまいます。
  ※CMOSの入力は浮かしたらアカン

昔々、これを確かめたことがありました。
G1はゲートで、フローティングにはなりません。

74HC4060では、このように描かれています。
G15
上が東芝ので下がTIの。
MC14060Bでもこれと同じでした。
G2入力は浮きません。

4060、スピードやドライブ能力、電圧下限を許すなら
MC14060Bのほうが安定して使えます。

CR発振をon/offしたいとき、アンバッファ型の
ゲートが無いので、しかたなしにHC00を使います。
  ※4011UBの出番なんですが
例えば、こんなブザー駆動回路です。
G16
Cpを入れないと出力波形にグリッチが出ます。
しかし、Cpを入れると、電源電圧が影響して
発振しないとか異常な周波数で発振とか、
おかしなトラブルがおこるのです。
この回路が出すのは単純な音。
ブザー駆動波形のエッジにグリッチが出ていても
「気にしない」ということで、Cpは入れません。


※関連
2017年9月16日:枯れた技術の伝承が・・・
2017年9月17日:枯れた技術… んっ! 枯れ過ぎた?

リップルカウンターICをアナログで使う:Hanako's Papa
インバータを使った矩形波発振回路:meyon's STUDY
デジタル時計をつくる (7) / 32.768KHz 発振回路:meyon's STUDY



| | コメント (0)

2024年10月29日 (火)

ステッピングモータ駆動回路を24Vだけで

「出窓」で使っているステッピングモータ駆動回路。
 ・2023年5月4日:出窓:鯉のぼりを振る
 ・2022年5月17日:「壊れたオルゴールの人形」を回せ!
 ・2022年5月8日:「ダイソーの観覧車」を回せ! 回路図
これらは
 ・POLOLU A4988 Stepper Motor Driver Carrier
を使ってステッピングモータを駆動しています。

モータの電源は24V。
出窓前の人感センサ検出オンで、DC24Vが供給されるのです。
その電源を使って回路を起動します。
  常時回しているともったいない。
  振動(音)が出るのはうるさい。

そして、これらの回路では
「回すためのクロック発生回路にDC5Vが必要」
ということで、DC24V入力DC5V出力の非絶縁型ですが、
DC-DCコンバータを回路に乗せてます。
これがちょいともったいない。 ・・・気がする
   秋月で買える安価なものなのですが、
   う~む。

昔々・・・
  24Vを5Vに落とすのにTO92の78L05(100mA)
  三端子レギュレータを使ったら、ちょいとばかし
  発熱がぁ・・・
  自分のバイアス電流だけでも熱くなってしま
  ったのです。
  それでTO-220形状のレギュレータに変えたこ
  とがあります。 ※イヤな記憶
    例えば、ドロップ電圧が19V。
    バイアス電流も含めて20mA消費だと
    それだけで380mW。 1/2.6W。
    定格電力の半分まで行っちゃいます。
今のレギュレータだとバイアス電流も小さく
なっているでしょうから、こんなことはないの
でしょうなぁ。
  ちょっと調べたら、HTC製のが、78L05という名な
  のに「5V出力タイプの供給電圧は20Vまでにしておけ」
  なんて記述が。
そんなこんなで、24V→5VではDCコンを使うように
なりました。

ステップ・モータ・ドライバの駆動用クロックの
発振回路、電源オン時にモータをスロースタート
するのにVCO IC(4046)を使っています。
  最初は低い周波数で起動。
  時間とともにクロック周波数を上げて定速状態に。
というのをこのIC一つでしているのです。
この回路にDC5Vが必要なのです。

これをDC24Vだけでできればええなぁっというのが
今回の実験。

  ※ドライバモジュールにも課題が。
   POLOLU A4988にはモータ電源の他に
   ロジック回路用電源VDDが必要なんです。
   ですから、24V単一で動かそうとすると、
   このモジュールは使えません。
   そこで、モータ電源から内部動作用電源を
   作ってくれる DRV8825 を使おうとしてい
   るのですが、このモジュールにも悩みどころ
   があるのです。
     (追って解説)

まずは、24Vで動くVCO回路を作るのが目標です。
オペアンプを使ったVCO回路は、LM324やLM358の
アプリケーションノートで解説されています。
  ※昔話
   ナショセミのデータシートに回路が掲載され
   ているのですが、古いのだと一段目と二段目
   の出力がつないで書かれていたりして
   初心者イジメの回路になっていました。

A1n
  ICメーカーが提示するサンプル回路、
  信じちゃいますよね。

今どきはこの解説↓でしょうか。
 ・CQ出版 オンライン・サポート・サイト
    CQ connect:電圧制御発振回路の制御電圧と発振周波数
     ※回路をリライト
C1_20241029160201
しかし、これにもイケズがあるのです。
この解説では
  理想的な入出力レール・ツー・レールOPアンプ
を使うと但し書き。
この約束事を破って、上に示した単電源汎用のLM358
やLM324で試すと・・・ありゃ。動かないゾ
っということになっちゃうのです。

関係するのは電源電圧。
電圧がオペアンプが動作し始める最低電圧
2.5V~3.5Vくらいなら発振するのですが、
4Vくらいまで上げると方形波出力がLに張り
付いて発振が止まってしまうのです。

発振中はVaを中心電圧とした三角波が出ます。
しかし、電源電圧を徐々に上げると、デューティが
狂ってきて最終的にVbがLになって止まってしまう
という現象がおこります。

このときの「Lのレベル」。
これが問題で、発振が止まるときはNPN
トランジスタQ1のベースをオンできる
くらいの電圧(GNDに張り付かない)になって
いるのです。

Lを出しているのにQ1がオン。
Vbが0Vから浮いておよそ0.6Vくらいになっちゃう
のが原因です。
電源電圧上がるとコンパレータとして使った
オペアンプの出力電圧が下がりきらないのです。

で、対策。
その1。
  VbがLになる状態でオペアンプが引き込む
  電流を減らせば出力電圧が下がります。
  現在10KのR1をもっと大きくすると
  (ヒステリシス幅が変わる)とちょいましに
  なりますが、24Vでは動きません。
  電圧を上げると、やはり発振停止。

その2。
  Q1のB-E間にRBを入れてVbを分圧。
C2_20241029160701
こうすると、Q1のベースがオンする電圧に
余裕が出て、電圧24VでもQ1がオフできる
ようになって発振してくれます。

ナショセミのコンパレータLM339のアプリケーション
では、こんな回路が示されています。
これだと、トランジスタのオン電圧は関係なくなります。

C3

コンパレータは低速ならオペアンプとしても
使えるぞっというサンプルになるかと。

でも・・・
コンパレータ方式のVCO、昔のデータブックには
こんな初心者イジメの回路例も!

A1m

一段目と二段目の出力が衝突。
このコンパレータの場合、出力がオープンコレクタ
なので、信号が短絡しても過大電流は流れませんが、
正しい動作はしません。

※関連
  ・2017年7月10日:「十字接続は避ける」
  ・2023年6月7日:不安な接続記号「●」
  ・2016年07月01日:回路図、配線の交差と接続
  ・2014年11月15日:回路図での交差信号の描き方

さて・・・
電源電圧を24Vにして発振できたとしても、
モータドライバへの駆動パルスの最大電圧は
5Vで24Vのパルスを5Vに制限する方法を
考えなくてはなりません。

簡単にすますなら、ツェナーダイオードで
クリップかなぁ。

※電源電圧
オペアンプLM358もコンパレータLM393も片電源なら
24Vで使えますが、最大電圧に注意がいります。
サフィックスにより微妙に異なるのです。
メーカでも違います。
データシートのバージョンにより書いてあることが
異なることもあります。
TI製だと、
  LM358、LM393ならmax30V。
  LM358B、LM393Bならmax36V。
   「B」付でオフセット電圧などが改善。
さらに、
  LM393Lとなると、CMOSになって電源電圧
  範囲が1.65~5.5Vに。


※続き
  ・2024年10月31日:ステッピングモータ駆動回路を24Vだけで #2


| | コメント (0)

2024年10月 6日 (日)

おっと。map関数の計算桁に注意

Arduinoのmap関数に関して恨みを持っている
がごとくウダウダ言っております。
 ・2020年5月17日:Arduino なんとかして誤用を正したい:A/Dの1/1023とmap関数

トラ技にも載りました。
 ・トランジスタ技術2024年3月号『実はワナだらけ…確実に動かすArduino Uno R3

で、今回の
 ・2024年10月5日:DDS方式の2相パルス発生回路、周波数スキャン機能を付ける

ここで、「おっと危ない」だったのが「map」関数の数値範囲。

周波数sweepでは、
  周波数の値は0.01Hz単位で9999.99Hzが最大。
  BCDで8桁。999999=0xF423F 20bit

  経過時間が10ms単位で600.00秒が最大。
  BCDで5桁。60000=0xEA60 16bit

sweep処理では、こんな値を使います。
  Lo側周波数 1~9999Hz   f1
  Hi側周波数 1~9999Hz   f2
  Rise,fall時間 0.0~600.0秒 t1

sweep周波数の設定は1Hz単位ですが、内部では0.01Hz
単位に直します。
sweep時間も0.1秒を0.01秒にして60000が最大。

そして、「map関数」はこのように定義されています。

long map(long x,         入力
  long in_min, long in_max,  X1,X2 変換元
  long out_min, long out_max) Y1,Y2 変換先
{
 return (x - in_min) * (out_max - out_min) ★1
   /  (in_max - in_min)
   + out_min;
}

sweep処理で経過時間tmからsweep周波数fmを計算するとき、
map関数をこのように使いました。

  fm = map (tm , 0, t1, f1, f2);

このとき、周波数と経過時間が設定の最大値に近づくと、
★1の乗算に失敗するのです。

周波数(20bit)と時間(16bit)を掛け算すると、
値によっては「36bit」の数字が出てきます。

map関数の入力と出力、単独で見るとそれぞれは
32bitの数値範囲に入っていますが、内部計算を考えると
32bitではアウトなのです。

内部は「int64_t」で計算しなくちゃなりません。

 return ((int64_t)(x - in_min) *
     (int64_t)(out_max - out_min))
     / ((int64_t)(in_max - in_min))
     + out_min;

乗算部、除算部をint64_tにキャストして64bitで
計算するようにしました。

LOG sweepではfloatにしたmapも使っています。

float mapf(float x,
  float in_min, float in_max,
  float out_min, float out_max)

2022年11月6日:Arduino map関数をfloatに

もうひとつ。
t1がゼロだとゼロ除算してしまうので、mapに
食わす前に判定して除外しておかなくちゃなりません。
t1がゼロなら fm=f1でリターンてな処理です。

| | コメント (0)

2024年5月31日 (金)

リターンパスの無いオペアンプ入力回路

非反転アンプ 3kΩと27kΩの抵抗
この記事↑では、ゲイン選択ジャンパを外したらどう
なるの?をコメントしましたが、オペアンプの入力
バイアス電流の戻り場所はむちゃ重要です。
  解説記事などでこれを忘れている回路を
  見かけるのです。

ADI Analog Dialogue:アンプ回路設計時の問題を回避するには
ここで↑、詳しく述べられています。

最近だと、コテ先温度を読みたいゾ う~む
熱電対についての記事(昔のトラ技)を調べて
いて、こんな回路を見つけました。

  トランジスタ技術2006年10月号p.244~
   白金測温抵抗体と熱電対の正しい使いかた(後編)
   正確な温度計測のために 【田澤 勇夫】
     (p.249 図18)
Tc11

  ※FET入力OP-AMPなんで、どこかからの
   リークでバイアス電流が流れそうで
   すが・・・ダメです

冷接点補償用の白金測温体のところはちゃんと
してあるのに、ちょっと不思議。
簡単には熱電対の片っぽをGNDつなぎでエエやんと。

※参
トランジスタ技術2012年1月号:計装アンプにもバイアス電流のリターンパスを設けるべし

・AD8253データーシート
Tc12


電子工作実験室 :電位差測定器(電気化学)
  リターンパスについての議論


| | コメント (0)

2024年5月13日 (月)

サーミスタでの温度測定、「inf」の出現に耐えられるか?

2023年3月21日:A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?
で問題にしましたが、A/D入力するサーミスタをつなぐ位置が重要です。
A02_20230321164901
サーミスタを電源側につなぐと、
  温度の上昇でサーミスタの抵抗値が減少
  それに連れてA/D値が上昇
となり、温度が上がるとA/D値も上がり、感覚的に
合うのでしょう。

・A/D値からサーミスタの抵抗値の計算式
A3_20230321165401

このサンプルとして
  ・おもろ家さんのArduino 入門 Lesson 18 【サーミスタ編】
のスケッチ使わせてもらいます。
おもろ家さんの「つなぎ」でもサーミスタは電源側。
基準抵抗がGND側です。

この時の問題点をお復習い。
  (a)サーミスタの接続線が短絡したら
  (b)サーミスタが外れてオープンになったら

まず(a)。
A/D値はフルスケールの「1023」に。
その結果、サーミスタの抵抗値は
  (1024÷1023 - 1) ×10kΩ
となり、約9.8Ω
B定数による温度計算に進むと352℃という
値が出てきます。

次に(b)
A/D値は「ゼロ」になり、サーミスタの抵抗値計算で
ゼロ除算」が生じます。
その結果、抵抗値は「無限大」。
続く、温度計算では「ケルビン温度」の「-273.15℃」が
出てきます。
  ※Arduino UNOの環境ではゼロ除算では
   止まらず、とりあえず計算は進みます。

実際の液晶表示を見てみましょう。

(a)のサーミスタ短絡
T10_20240513111101

(b)のサーミスタ断線
T11_20240513111201

抵抗値の箇所に「inf」という見慣れない「値」が出現します。
  ※inf=無限大
   print()やdtostrf()に食わせると「inf」
   という「文字」が出てきます。
   lround()で整数変換すると0x80000000
   (long値のマイナス目一杯)になって
   しまいます。

サーミスタで温度制御していたら、
  (1)いつまでたってもオンしない (a)のとき
  (2)いつまでたってもオフしない (b)のとき
状態が出現します。

(1)は、放っておいてもとりあえず周囲温度に馴染む
でしょうが(2)の状態が加熱しっぱなしとなり危険です。

何らかの警報的処置(表示だけでも)が必要に
なるのがわかっていただけるかと。

トランジスタ技術2024年6月号トラ技Jr.コーナ
掲載してもらった4チャンネル温度計の製作 では、
温度・抵抗値テーブルから最高値(温度低)と最低値
(温度高)を拾ってきて、値として規制するように
しました。
  ※プログラムエリアがあんましないので
   手抜き。
オープンだと「-20.0℃」、短絡だと「120.0℃」を
出力します。

| | コメント (0)

2024年4月12日 (金)

I2C液晶のアクセス、割り込みで処理しないようにすると

I2C液晶のアクセス、割り込み処理で遅れる原因らしきもの

I2C液晶の処理と高レートのタイマー割り込みとの競合、
その原因がI2C液晶アクセスでの割り込み処理だという
ことがわかりました。

I2Cアクセスでの最後、I2Cバスを待機状態に戻す
「ストップコンディション」の処理に時間待ちが
入れられていました。
  割り込み処理の中での時間待ちはちょっとなぁ。
そのせいで、こんな具合に抜けや遅れが出たのです。
Aa004

Aa000_20240408135301

そこで、I2C液晶の表示ルーチンを割り込みを使わない方法で
書いてみました。
   詳細(スケッチ例)は、また報告します。

普通は液晶アクセスでの遅れなんて問題にしないでしょうが、
特殊な場合はアカンでぇ!ということで、その解決方法の
一例と見てください。

10μ秒割り込みルーチンの抜けや遅れが無くなりました。
Ff000
Ff001
Ff002

割り込みを使うことで処理が早くなったり便利(次の処理に
早く移れる)になるんなら良いのですが、現状の液晶表示
手順の場合は、割り込み処理にするメリットがありません。

I2Cでの割り込み処理、I2Cアクセスでのエラーが生じた時に
対応しやすいという面は否定しません。
でも、液晶表示の場合はエラーが生じても、一連の表示ルーチン
さえ抜ければ次に進めるという処理でかまわないでしょう。
  ロックせずに「STOP」まで進めれば、なんとかなるかと。

I2Cでのエラー解除、本来はSDA=Hの状態(マスター側がHにする
つもりで)でダミークロックを流し込むという手法を使います。
  ※昔のI2C解説本ではよく見たけれど
現状、そういった処理はしていませんので、せっかくの割り込みが
生かされていません。

I2C簡単そうだけどトラブったときの対策、けっこうやっかいです。
  ノイズが多い環境でスカタンしたら
  そのリカバリーがたいへんなんです。
昔々、マイコンに搭載されたI2C機能を使うのが面倒くさくって、
H/Lパルスを自分で出してI2Cを制御したこともありました。
エラー発生時の手順が自由になりますので。

※参考
ROHMのBR24Lxxx EEPROMデータシートより
https://fscdn.rohm.com/jp/products/databook/datasheet/ic/memory/eeprom/br24lxxx-w-j.pdf

・基本のタイミング
Ep11
・リセット方法
Ep12
・コマンドのキャンセル
   SCLをHにしてSDAをL・H
Ep13

※テストプログラムをアップしておきます。
  ・ダウンロード - test_i2c_lcd_acm0802_2b.zip

ちなみに、超低速2相パルス発生回路 のI2C液晶表示を
wireライブラリを使わないようにしたら(wireの中からtwi
を呼んでいる)、プログラムのサイズが1.8kバイトほど減少。
RAMエリアも200バイトほど減りました。
単一の液晶表示のように、単純に「書くだけ」だとずいぶん
処理が簡単になるというのが理由かと。



| | コメント (0)

より以前の記事一覧