重箱の隅

2023年11月 1日 (水)

C-MOS ICの入力ピンをオープンにすると


MMさんからのコメントで未使用「74HC74」の端子処理

の話が出てました。

ブレッドボードを使ってゴソゴソしていたところだったので、
74HC74を捜索。
モトローラのと東芝のが見つかりました。

7_12

HC74にはフリップフロップが2つ入っていて、
入力が CLK D /SET(/PR) /CLR(/CL) の4本。

/SET(/PR)をHに、/CLR(/CL)をLにして、CLKとD入力に対し
0~5Vのノコギリ波を加えてみました。 
チップの電源は5V。

道具はこれ↓
2023年9月27日:6年ぶりの改造:0Vから出力電圧が直線的に上昇するノコギリ波発生回路

  ※オシロ波形のメモ、「三角波」と記してしまいましたが
   正しくは「ノコギリ波」。

電流の測定ツールはこれ↓
2022年12月14日:Arduino UNOを使ったUSB電流計 4桁表示も

電流検出抵抗が75mΩ。
電流検出アンプが100倍。
出力電圧を100で割って実ドロップ値を求めて、
それを電流検出抵抗値の75mΩで割ったら電流が
計算できます。

Hc74

まず、東芝の74HC74。 (クリックで拡大↓)
Hc74_004
Hc74_005
Hc74_003

続いてモトローラの74HC74
Hc74_001
Hc74_000
Hc74_002

電源電圧の中央付近で電流が増えてます。
いわゆる貫通電流。
入力部のバッファに電流が流れるのでしょう。

/CLR=Lで出力を固定できる条件ですが、やはり入力端子の
放置はマズイです。
ハイインピーダンスなので、放置入力の電位がどうなるかは
周囲の環境次第。
近所にパルス信号が走っていたら、その誘導を受けてしま
います。
74の出力(Qと/Q)は変化しませんが、電源電流がうろうろと
挙動不審に。
面倒でも、ちゃんとしておかないといけません。

※関連
2020年04月25日:Arduino やっぱり気になる放置ポート
2020年05月02日:Arduino 放置したポートが及ぼす電源電流変化 
2020年05月02日:Arduino ポートの初期化と通信設定

※参考
(続)その未使用ピンをどうにかしなさい! アナログデバイセズ


| | コメント (0)

2023年10月31日 (火)

トラ技の作図能力が落ちている・・・かもの続き

2023年10月27日:トラ技の作図能力が落ちている・・・かも
トランジスタ技術2023年11月号
  「メカ式7セグを使ったラジオ周波数表示回路」

しつこいですが、この続き。
  磁気反転式表示器が出てきたので、
  興味深く読んでいたら、アラが気に
  なり出したという次第。
掲載回路図で気になるところが、さらに出てきました。

p.73の「・」抜けのすぐ上。
AM帯とFM帯の周波数入力切り替えにHC157が使われています。
Ca1
その未使用入力端子がオープン。
C-MOS IC使用法の基本に反しています。
TTLならほったらかしでエエんですが、C-MOSは
HかLにレベルを安定させとかなくちゃなりません。

よく見ると、ディケードカウンタ HC390のBクロック入力も、
C結合だけ。
常にクロックが入る場所ですが、これも×。

その下のU21インバータは1M抵抗で帰還してアナログ的動作を
期待。

さらに、p.72のHC373も未使用入力がオープン。
Ca2

「×」マークがプルアップ抵抗接続なりを意味する注記が
あるのかと探したのですが不明。
未使用出力端子にも「×」が付いてますし。

そして、p.76のC14。
「なんだぁ この描き方は」という表記。
Ca3

貫通コンデンサ」かと思いましたよ。

筆者さんの手抜きなのか、編集側での作図ミスなのか・・・
「ちょっとなぁ」です。

| | コメント (5)

2023年10月27日 (金)

トラ技の作図能力が落ちている・・・かも

トランジスタ技術2023年11月号、特集が『新・ラジオの製作』。
なかなか面白い。
  ※ラジオじゃないけど私の製作記事も
   載せてもらってます

パラパラめくりしていて、
 「メカ式7セグを使ったラジオ周波数表示回路」
に、磁気反転式表示器が出てきたので興味深く読ませて
もらいました。

ところが・・・作画担当や編集担当の手抜きなのか、
筆者さんの校正抜けなのか・・・
p.72,73の図4がいけません。

123a

黄色線、電源につながるはずなのですが浮いてます。
ピンクの線が電源ですんで黄色とピンクが交わる
十字部に入れるはずの「・」が抜けたのでしょう。

また、R7、R8の抵抗値が「100Ω」になっていて、
74HC123のタイミング抵抗としては小さすぎます。

そして、筆者さんの作画ポリシーなんでしょう、
「▽」のGND記号は使われてますが、電源記号を
使われてません。
上の絵の黄線とピンク線も電源記号を使ってバラけ
させていたらこんなミスは無かったんじゃないかと・・・。

※関連
2017年7月10日:「十字接続は避ける」
2022年10月26日:「十字接続は避ける」、再び

※他にも「・」抜けか、というところが。HC00のU3b出力。
 ここも十字接続するポイント。

「十字接続は避ける」が仇となってしまったか。

※さらに、U20のHC157の未使用入力ピンが浮いてます。

※校正原稿の上がりが遅いと、できあがってきた回路図を
 隅々までチェックできません。

| | コメント (0)

2023年6月 7日 (水)

不安な接続記号「●」

回路図の配線、電線や部品をつなぐ記号は「●」。
  ※「T」字でつなぐ場合だと省略の
   可能性があります。

過去、「十字接続はやめよう」を唱えたことがあります。
 ・2014年11月15日:回路図での交差信号の描き方
 ・2016年07月01日:回路図、配線の交差と接続
 ・2017年7月10日:「十字接続は避ける」

図書館にリクエストした
  ・富田 豊 著 『すぐに使える!オペアンプ回路図100

C51_20230607140001

この本を眺めていたら・・・
  ちょいと不安な「●」が出てきました。

・2-39 対数変換回路 (p.53)

Cc20
←★ のところの「●」。
 「何か部品につながるんとちゃうか?」
 「配線のつなぎを忘れてへん?」
っという不安を感じます。

さらに、2つあるトランジスタの型番も「なんだこれ?」
  2SK2920は東芝の200V・5AというSW用MOS FET 。
  2SC2920だと富士通の400V・15A。パッケージはTO-3。
何を誤植したんでしょ。

もう一つ。第2章 オペアンプ回路解説の最初。
・2-1 反転増幅回路 (p.12)
Cc23_20230607140401

拡大
Cc24_20230607140401

鉛筆書きで訂正されていました。

※正誤表を発見!
https://www.maruzen-publishing.co.jp/fixed/files/pdf/293331/errata_pdf_293331.pdf
  対数変換回路のはありませんでした。


※追記

ARO さんから指摘のあったログアンプ回路の図、
記事内に残しておきます。

ICL8048のブロック図
L10
私の製作物ではこんな回路を使っていました。
  ・「大声トライアル」の大声レベル測定用のログアンプ
L11_20230612090801

詳細は→ http://www.vector.co.jp/soft/dos/hardware/se298245.html
測定値は「0~255」の範囲で、単位は「なん点」。
校正用機材が無いので「dB」ではありません。

手持ちの本にはこんな回路が出ています。

  ・稲葉保著「精選アナログ実用回路集

L12_20230612090801


  ・玉村俊雄著「OPアンプIC活用ノウハウ

L13_20230612090901
L14_20230612090901

AROさんの指摘が正しいかと。

※さらに追記
正体不明の2つのトランジスタ「2K2920」。
これ、2N2920  の誤植と推測 。

6本足パッケージの
「デュアル NPN トランジスタ」
  60V 30mA 350mW

220

2n

| | コメント (3)

2023年4月12日 (水)

トラ技Jr. 2023年春号

「学生&新人エンジニアのための」ということで、
学校や25歳以下の新人エンジニアさんに無料で
配布されている冊子です。
  ※巻末には配布先の学校名が記されています。

J11_20230412154301

で、この号に「ほどよし高精度アンプAD620」という
タイトルで私の記事(私の部品箱:2021年11月号)が
再掲されました。
   ※再掲、ありがたや、ありがたや。
    AD620より60Hzノッチフィルタの効きの
    ほうに目が行くかもの記事です。

他の筆者さんの記事を見てますと・・・
ちょっと気になるぞ! というのがこれ。
屈伸体操の号令をかけるホイッスル装置の製作
というタイトルで、トラ技本誌2023年3月号の記事が
元になっています。
まず、3月号の回路図。

J12_20230412154501
それが、トラ技Jr.ではこのように。
J13_20230412154501

「リレーのサージ吸収ダイオードを入れて
 おいたほうが良い」と追記。

しかしまだ気になる点が・・・

(a) このダイオードは要るの?
  無いとどうなる?
  入れると余計ややこしい。
    オフ時(555の出力がL)にベースが浮く?
    誘導を拾っちゃうかも?

(b) LED点滅処理IC OS1CDY3A010を調べると
  電源電圧の最大が5V。
    秋月:LED点滅駆動IC
  回路の電源は電池4本で最大6V。
  ちょっとぉう。

(c) 「BZ」と記号はあるけれど、これは何?
  本文には「電子ブザーの断続に使う」っと記されてますが、
  ブザーの型番が不明。
   ・圧電発音体
   ・マグネチック発音体
   ・発振回路内蔵電子ブザー
  手持ちが無いなら、どれを買えば?

  OS1CDY3A010のデータを見ると、
    Working Current:IF=20mA
    Duty Cycle 20%
  という数字が出ていて、どうやらLEDを高速点滅させて
  電流制御しているような気配。
    点滅周期は型番で1Hz~6.8Hzを選択。
  これで電子ブザー(どのタイプ?)を鳴らすというのは
  正常な使い方なの?
  OS1CDY3A010は持っていないので、追試できずです。



| | コメント (6)

2023年3月23日 (木)

Arduino サーミスタを使った温度測定で 【ゼロ除算問題】

2023年3月21日:A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?
この続き。 ゼロ除算問題が見えてきました。

あれこれ検索。

★電源側にサーミスタ

VasteeLab:Arduinoで火災報知機をつくってみた
 int val = analogRead(PinTemp);     // get analog value
 resistance=(float)(1023-val)*10000/val; // get resistance
   val値が0ならゼロ除算。

★サーミスタをGND側に持ってきた例

今日から始める電子工作 【初めてのArduino】6.サーミスタ|ハンズオンで学ぶ初心者向け入門コース
 サーミスタはGND側。
 しかし、Vref値を1023としているため、抵抗値算出の時、
 A/D値がフルスケールの1023ならゼロ除算エラー発生。
 正しくは「/ (1024 - readValue)」。
  //アナログ値を読む
   float readValue = analogRead(analogPin);
  //Rtを計算する
   float Rt = Rd * readValue / (1023 - readValue);

  ※1023が出るのはサーミスタが外れた時。
   0が短絡なんで、回路の異常報知案件。

みのや電子工作所:なんちゃって自作体温計の製作
  電圧計算に1023を使っているので、A/Dの
  フルスケール値を読み出したときはV0が5.0Vと
  なり、抵抗値算出の/(5.0-V0)でゼロ除算エラー。
  val*5.0/1024.0にしておくのが正しい計算で、
  これで、ゼロ除算エラーを回避できる。
   val = analogRead(AN0); //アナログ値読込み
   V0 = val*5.0/1023.0; //アナログ値から電圧換算
   THR = 10000.0*V0/(5.0-V0); //電圧値からサーミスタ抵抗値換算

adafruit.com:Using a Thermistor
  な、なんなんだ、この式は!
  A/D値が0でも1023でもアウト。
   float reading;
   reading = analogRead(THERMISTORPIN);
   reading = (1023 / reading) - 1; // (1023/ADC - 1)
   reading = SERIESRESISTOR / reading; // 10K / (1023/ADC - 1)


◆正しく計算 (コメントしたところも)

アイデアノート:Arduinoとサーミスタで温度測定

jh4vaj:Arduinoでサーミスタを使って温度計を作るのに、電圧を求める必要はない

プチモンテ:サーミスタ(NTC)の使い方 [Arduino]

arduino.stackexchange.com:How to include Vref in thermistor temperature calculation?
  あれこれ議論。


◆基準電圧で誤差が出るかも

ラジオペンチ:Arduiono を使ってサーミスタで温度を測る
   (電圧算出に1/1023を使っているのも気になる←修正済)

◆イイこと書いてある

Qiita @c_in_g:analogReadの値の変換を誤解していた話(1023、1024問題)
 引用させて頂きます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  長々と書いたが、ぶっちゃけ、255/1023と256/1024の
  違いなんて微々たる差(1%にも満たない)で考慮する必要ない
  だろと思う。  こういうことは言ってはいけない
   :
  初心者はこんなクソ細かいことを気にするより色々作ってみた
  ほうがいい。  こういうことも言ってはいけない
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

★エラいことにつながるかも
『1023 vs 1024 問題』が【ゼロ除算問題】にまで膨らんじゃ
いました。
1023 vs 1024は「ちょっとした誤差やん」で見逃せた
んですが、ゼロ除算は笑って済ませられないかもしれ
ません。

『ミサイル巡洋艦・ヨークタウン ゼロ除算』を検索すると、
ゼロ除算エラーでシステムがダウン。航行不能に」なんて
記事が見つかります。

コンピュータのトラブルで漂流したアメリカのイージス巡洋艦 の考察

◆ゼロ除算エラーの話
PLCが突然停止、原因は割り算の演算エラー
【中級編】GX Works3 除算演算エラー回避方法 0で割らない

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※追記

サーミスタでの温度計算とゼロ除算問題、式との相性が良い(!)
のかあれこれ見つかります。
「1023 vs 1024」と絡むのも面白いかと。

理系男子の電子工作:【PIC】ADCの使い方 サーミスタで温度測定
 サーミスタはGND側。
 エクセルでA/D値→温度テーブルを作っておくという
 手法です。
 このように↓言い切られています。
  『A = 0, 1023 の時にゼロ除算のエラーが
   発生しますが、測定値がそのような値を
   とることは考えられないので気にする
   必要はありません。』
 A/D値(A)からサーミスタ抵抗(R)の計算で
  「R = (r × A) ÷ (1023 - A)
 としているのを、1023→1024にするだけで
 フルスケールでのゼロ除算が回避できます。
 1024だと半値もちゃんと出るし。
   (log(0)エラーの問題は置いておいて)
 前もってデータテーブルを作るときのエラーですんで、
 実行時のエラーとは違う話になります。
 しかし、「いつも気にしておく」のが設計という
 ものです。

Digi-Key:正確なサーミスタベースの温度検出回路を迅速に作成
 デジキーの技術解説。
 サーミスタは電源側。
    Vadco A/D入力電圧
    Dout  A/Dデータ
    2^N  A/D分解能
    Rth  サーミスタ抵抗
    R25  GND側抵抗
  Vadco = Vref × (R25 ÷ (R25 + Rth))
  Dout = 2^N × (Vadco / Vref)
  Rth  = R25 × ((2^N ÷ Dout) - 1)
 
   (2^N ÷ Dout)でゼロ除算エラー発生(の可能性)。

 

| | コメント (2)

2023年3月21日 (火)

A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?

私の場合、サーミスタ読み取りのための接続は、
基準抵抗をVref側に持ってきます。
こんな具合。

A01_20230321164901
こうすると、サーミスタの片方をGNDにできるので
シールド線が使えます。
この場合、温度が上昇するとサーミスタの抵抗値が
下がり、それに連れてA/D値も下がってしまいます。

温度が上がるとA/D値が下がってしまうので、直感的に
これを嫌う方が居られるのでしょうか、こんな具合に
基準抵抗をGND側につないでいる回路例を見かけます。

A02_20230321164901
こうすると、
 温度が上がる
   ↓
 サーミスタの抵抗値が下がる
   ↓
 A/D値が上がる
と、温度上昇でA/D値が上昇と、まぁ見た目の感覚に
合うような気がします。
しかしちょいと問題が・・・

RaあるいはRbの値を固定して、その時のA/D値から
反対側の抵抗値を計算する方法を見てみましょう。

VrefとVin、そしてRaとRbの関係式です。
A2_20230321165001
VrefとVinは何ボルトという実値でなくてもかまいません。

Vinは「ゼロ~フルスケール」。
8bitのADCなら「0~255」、10bitなら「0~1023」と
いう範囲の値になります。
そして、Vrefは「フルスケール値 + 1」

まず、サーミスタをGND側につないだ時
Raが基準抵抗。 Rbがサーミスタ。
VinからRb値を計算します。
A4_20230321165201

分母の「Vref - Vin」に注目。
サーミスタがGNDに短絡して0ΩになってVin=0になると
分子がゼロでRb=0が出てきます。
そして、分母はVrefそのもので計算可能。

サーミスタ入力がオープンになってVinがフルスケールに
なっても、分母の「Vref - Vin」は「1」になって計算可能
です。
  ※Vref=フルスケール値 + 1 が重要!

問題がサーミスタを電源側につないだ時の計算。
基準抵抗がGND側。
Raがサーミスタ。 Rbが基準抵抗。 
A3_20230321165401
サーミスタ入力がオープンになるとVinは
RbでGNDに落ちて、Vinはゼロ
この時、「Vref ÷ Vin」の分母がゼロになってしまって
ゼロ除算エラーが発生して、正しく計算できません。

このようなつなぎ方の時、A/D値「Vin = 0」をチェック
して、ゼロ除算エラーを回避する処置が必要です。
例えば、「0なら1に」するような。

Arduino UNOだとint値をゼロで割っても答えを「0xFFFF」
(intだと-1)にしているようですし、floatだと「inf」
無限大を出して、「ゼロで割ったから停止!」とはして
いません。

ネットに上がっているいろんなサンプル、ゼロ除算エラー
を無視しているのが多いようです。
マイコンを使っての計算でこれは「ちょっとなぁ」です。

~~~~~~~~~~~~~~~~~~~~~~~~~~~
※追記
サーミスタによる温度計測で、ゼロ除算エラーが
発生する可能性のある回路やスケッチの例。
  ※ネットを検索

Arduino 入門 Lesson 18 【サーミスタ編】:おもろ家
 サーミスタは電源側。
 「Rth = ((Vin/Vout) - 1) × R1」として
 サーミスタ抵抗値Rthを計算。
 VoutがA/D入力値で、「0」だとアウト。

https://asukiaaa.blogspot.com/2021試行錯誤な日々:Arduino(ESP32)でサーミスタを使い温度を取得
 サーミスタは電源側。
 「(double)(analogMax - analog) / analog * resistorPullDown;」
 でサーミスタ抵抗値を算出。
 analogがA/D値。 「0」だとアウト。
 12bit ADCだが、「#define ANALOG_MAX 4095」として
 「フルスケール+1」を使っていない。
 考え方として、これもダメ。

NOBのArduino日記!サーミスタの使い方! その2( 実測編!)(103JT-050)
 サーミスタは電源側。
 「R1 = ((Vcc × R2) / Vout) - R2 」で
 サーミスタ抵抗値R1を算出。
 VoutがA/D入力値で、やはり「0」だとアウト。

初めてのロボット組立:Arduinoにサーミスタを接続して温度を測定する
 サーミスタは電源側。
 「10000.0 * ((1024.0 / tempReading - 1))」でサーミスタの
 抵抗値を算出。
 tempReadingがA/D入力値で「0」だとアウト。

   ※LCDのコントラスト調整の半固定抵抗記号に
      んっ? ボリュームの記号が!
    で紹介した表記が使われている。
      電子回路エンジニアの皆さん、
      ほんとにこれ、どうにかして!

まったりYO$HI日記 気の向くまま(・∀・)【Arduino】サーミスタで温度測定
 サーミスタは電源側。
 「R = R1 × ((V / Vt) - 1)」でサーミスタの
 抵抗値Rを計算。 R1はGND側の抵抗100kΩ。
 VtがA-D入力値。 これが0ならアウト。

基礎からの IoT 入門Arduino IoT とは? 温度を測る ~ サーミスタの利用
 サーミスタは電源側。
 「R = ((Vin / Vout) - 1) × R1」で計算。
 VoutがA/D値。 0ならアウト。

~~~~~~~~~~~~~~~~~~~~~~~~~~~
Arduino UNOのような単純な8bitマイコンだと
機械語として割り算命令は持っていませんので
ゼロ除算によるトラップ(例外処理)は考慮しなくて
かまいません。(勝手には止まらない)
しかし、高機能なマイコンだとトラップに引っかかり
制御がそこで止まってしまうかもしれません。
  (そんな仕掛けをしていたら)

int値のゼロ除算なら結果はおそらく「-1」。
  (符号無しなら最大値に)
ゼロ除算を無視するのなら、この「-1」がその後の
計算にどんな影響を与えるのかを考えておかなくて
はなりません。

単純な表示でも、想定する桁数を越えちゃうと、表示
が「グチャ」っとなるかもしれません。
何かの制御に使っていたら・・・ちょっと怖い。

浮動小数点なら「NaN:Not a Number」や
inf:infinity」てなところでしょうか。

今回はサーミスタの抵抗値計算での話ですんで、
「マイナスの抵抗値」が出現てなことに
なっちゃうかも、です。

やはり、どこかで数値のエラーチェックが必要でしょう。
0での割り算をしちゃう大もとの、A/D値のゼロを
排除というのが簡単かと。

  これ、あれこれ書いてきましたが、
  サーミスタをGND側につないだ時は
  大丈夫なんですよ。
  10bitのADCなら0~1023の範囲で
  ちゃんと答えが得られます。

うだうだ言ってますが、結局はサーミスタの接続が
外れなければ大丈夫。
しかし・・・
  ・接触不良がおきたら?
  ・コネクタやプラグを使って抜き差しできる
   構造なら、抜いた時は?
  ・サーミスタへの配線が切れたら?
と、Vinが0Vになる可能性があるのなら、
ゼロ除算エラーが生じる可能性もあるわけです。
このつなぎ方をするのなら、ソフト的な対策は必要か
と思うのです。


★続き
 ↓
Arduino サーミスタを使った温度測定で 【ゼロ除算問題】

  サーミスタを使って温度計測の手順から、
  【1023 vs 1024 問題】だけじゃなく【ゼロ除算問題】が
  見えてきました。

| | コメント (0)

2023年3月 8日 (水)

こんなところに「256-1」が

トランジスタ技術2012年1月号
特集が「エレクトロニクス格言集」
その中の第3章 アナログ2:計測&センサ

・3-6 抵抗分圧比をA-D変換するときの
    基準電圧ICは無駄使い

Ad12

サーミスタの抵抗値を直列に入れたRpの値から
求めようという手法の解説です。
抵抗の算出式から基準電圧値は不要で、
ADCの分解能が分かれば良いと。

この「?」と記したところに「2^N - 1」が出現!
8ビットA-Dなら255に、10ビットなら1023にという
ことなんですが・・・これは間違い。
フルスケール値 + 1、つまり分解能で計算しなくては
なりません。

これだとA-D値が1/2(半値)になるとき、「Rx = Rp」
となりません。

で、仮にADCが8ビットとすると
  Nx = 255 * Rx/(Rx+Rp) これを変形していくと
  Rx = Rp * (Nx / (255 - Nx))

Rx 未接続のとき、つまり∞の時。
この時のA-D値はフルスケールになってNx=255
すると、分母の (255 - Nx) がゼロになってしまい、
DIV0エラーに!

255じゃなく、256だと 256 - 255 = 1で
 Rx = Rp * 255。
Rp値の255倍以上の時(無限もOK)に
A-D値255が出てきます。

ということで 「2^N - 1」は大間違い。

半値や1/4値、3/4値で確かめれば「なんかおかしい」
っと思うはずなんですが・・・。

| | コメント (0)

2023年2月14日 (火)

ありゃま。ラズピコがおかしくなった。 PWMを調べたかったのに

ラジオペンチさんからのコメント(2023年2月12日13時09分)
件の記事(2023年3月号p.155)を読んで、図8の
ラズパイpicoの疑似DAC特性」が気になったので
ごそごそしていました。

で、昨夕は手持ちのラズピコにちゃんとスケッチを書き込
めたんですが(Arduino IDE環境)、今朝、ゴソゴソしたら
エラーが出てしまって書き込めません。
昨夕、最後に書いた、シリアル入力値でPWMを設定するという
スケッチは動いていてUSBを通してのシリアル送受はできてい
るのです。
ところが、スケッチのアップロードは失敗。
BOOT SWを押しながらUSBコネクタを挿しても、普通なら現れる
はずのドライブが出てきません。
どこか何かがおかしくなったようです。

Arduino UNOのPWMは、
Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMを使おう
で記してますように、「途中で1/256狂って」います。

で、ピコのPWMにも違和感。
記事には最大1.4mV未満と測定結果が記されますが、
PWMによるDAC、少々リップルが乗ってもこんな
誤差は生じないはずです。
Bb10_20230214160301

3.3V/255で1bit変化で12.9mV。 (あえて1/255で表記)
10%ほどがプラスに積み重なって、128あたりで最大に
なってます。
8bitのPWMそのものに何かがあるんじゃないかと感じました。

2020年11月12日:Arduino UNOでデューティー比測定回路 ケースに入れて完成

Bb11_20230214160301
    PWM=128にした時のデューティ、周波数と
   H区間クロック数、L区間、計測クロック(MHz)

これで、ピコが出すPWM波のディーティを調べてみようとした
のです。
とりあえず手入力した0~255の値でPWMを設定という
スケッチ、これは昨夕にピコに書けたのですが、
今朝になってこれを更新しようとしたらアウトっとい
う状態になってしまったのです。

で、1~254の値を手入力してちょっと調べてみました。
ピコもUNOと同じように、設定値0で出力L固定、255でH固定
となっています。

ピコでの1~4までのH区間とL区間を見てみます。
デューティチェッカーのクロックは16MHz。
PWM H  L
 1  96 31937
 2 224 31809
 3 352 31681
 4 480 31553

1と2、2と3、3と4の差は128クロック。
つまり125kHz=8μs。
しかし、1のH区間が96で6μsしかありません。
  オシロでも確認したんで、デューティ比チェッカの
  ミスじゃありません。

L区間がちょこっと出る253と254はこんな値。
PWM  H   L
 253 31777 256
 254 31905 128

これで、1~254の端っこを見たわけですが、1の時の
96を考慮したら、253の時のはH区間は「32352」に
なって欲しいところ。
  252 * 128 + 96=32352
ところが31777。 なんか小さい。
254も「32480」が妥当じゃないのかと。

  ※ピコのスケッチを、手入力じゃなく自動で順にPWM値を
   変化させて、デューティ比をチェックできればと
   考えたのですが、アップロードできなくなってし
   まったのです。

どこかでおかしくなっているようなのですが、手での
入力と目で見ての確認はちょっとつらい。
気を取り直して、まず1に近いところから順におかしく
なっている場所を探してみました。

すると12~16でこんな変化が。
PWM 期待値 実値H 実値L
 12 1504 1504  30529
 13 1632 1632  30400
 14 1760 1728  30305
 15 1888 1856  30177

実値Hの13と14の間が「96」になってます。
そして、14と15の間は「128」に復帰。

ピコのPWM、何かが潜んでいそうですぞ。
   ※単調性がどこかで狂ってる?

しかし、ピコへのスケッチ書き込み失敗、困りました。
なんとかしなくちゃ。

デューティ比チェッカ、自動記録用にシリアル出力が
いりますなぁ。

| | コメント (3)

2023年2月10日 (金)

トラ技記事 オペアンプの出力段保護回路で

昔のトラ技をパラパラめくりしていたら・・・
2015年5月号。
特集 第1部 「百戦錬磨の回路図」。
Tt2_20230210084201

p.54に「OPアンプを破壊や誤動作から守る回路」として、
ダイオードを使った出力段の保護回路が載っています。
【図5】の下側回路(b)に違和感!
Tt1_20230210084401

上側の(a)は2倍の非反転アンプ。

問題は下側の(b)。
「ゲイン1倍」と記されているので、バッファアンプ
かと思いきや・・・
「R2」が反転入力と非反転入力間に入ってます。
  なんじゃこりゃ~?!
「ゲイン-1倍」の反転アンプを書き間違えたの
でしょうか?

R2があるとどんな動作に?
アンプがアンプとして働いている間は、2ピン・3ピン
間は同電位。
だとするとR2には電流が流れない。
ということは、直流的にはつながっていないのと同じ?
  アレレ?!

※追記
(b)の回路、こう描きたかったんじゃないかと推測。
Aa1_20230212101501
アナログデバイセズ AN-257 の【図8】、これは
ゲイン1はダメよの帯域幅80MHzの高速アンプが
対象で「話が違う」ようです。
しかし、「類似の回路がある」ということで、情報、
ありがとうございました。

「ゲイン1あかん」のオペアンプ、確か手持ち品であった
はずと探しましたら、 LT6014 を入れた袋に
G>=5で使え」っと赤書きしてありました。
これはGBW=1.4MHzと遅いけどローノイズ、低オフセット品。

LT6014のデータシートには、これはダメの1倍アンプ例。
Lt11
そして、1倍で使う時はこうしなさいと。
Lt12


| | コメント (5)

より以前の記事一覧