« 謹賀新年 | トップページ | 20mm厚重量級文鎮×2、 トラ技700号をおまけで »

2023年1月 2日 (月)

PWMでD/A変換:アナログマルチプレクサの応用で

2020年8月13日:Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMを使おう
ということで、過去、PWMを使ったDAC(D/A変換回路)を
さまざまなツールで使っています。

例えば、
JIS C8708による充放電サイクル試験回路(トランジスタ技術2010年2月号)
2020年4月10日:JIS C8708:2019対応ニッケル水素電池充放電実験回路(回路図とプログラム)
2022年4月14日:Arduino IDEでRaspberry Pi Pico:PWMでD/A出力してA/D入力を試す
2022年4月15日:Arduino IDEでRaspberry Pi Pico:A/D入力が…あれっ?

これらでは、PWM波からDC電圧を作るのに、
基準電圧ICを使っています。
Vref値とGND間をPWM波でマルチプレックスし、
LPFを通すことで直流に。
デューティ比に比例したDC電圧を得ています。

この応用ということで、Arduino UNOのマイコン
ATmega328PのAREF電圧を取り出した使った実験も
しています。

例えば、この記事。
2022年10月5日:サーミスタ103JTで計った温度をシリアル出力

サーミスタの抵抗値を見るのに、AREF電圧を取り出して
A/D変換します。
  ※これはMPXとは関係なしの用例。

次のこの記事では、AREFをオペアンプでバッファして
PWMし、LPFを通してD/A変換しています。
2022年4月22日:Arduino UNOのA/D入力:PWMでD/A出力してA/D入力を試す

ここで問題に気が付きました。
「なんじゃこれは?」の信号が見えたのです。

こんな模式図を描いてみました。

M10

AREFをオペアンプでバッファして取り出します。
ATmega328Pに関してはこれでうまく基準電圧が
取り出せます。

そのオペアンプ出力を直にマルチプレクサの入力に
つないでいます。
外付け基準電圧ICを使った時のようにコンデンサを
入れたいところなのですが、発振の可能性があるので、
オペアンプの出力にコンデンサは入れられません。

たまたま、このPWM→D/A変換部の波形を見た所、
こんな信号になっていました。

M201m

AREF電圧を出力しているオペアンプ、そこにPWM波に
同期した負パルス(▼マーク位置)が出ているのです。
出力インピーダンスは低いはずなので、MPXの切換
ノイズが飛び込んでいるわけではありません。

そこで、こんな回路を使って実験してみました。
プラス側のIN1入力は1kΩで+5Vに。
マイナス側は1kΩでGNDに。

M12_20230102152301

すると・・・・
まず、1ゲートタイプのマルチプレクサ TC7W53
M302m

3回路入った74HC4053の場合。
M301m

MPXパルスが変化したエッジでIN0、IN1に瞬間的な
電流が流れている様子が見えています。

AREF電圧をバッファした通常速度のオペアンプでは、
この短いパルス(150nsくらい)を抑えきることができない
のでしょう。

なぜこんなことが起こるのか・・・
TC7W53の内部回路を見ると分かってきます。

M11_20230102152501
IN0とIN1の切換には、2直にしたインバータが
入っています。
IN1側がその後段につながっているので、IN0から
遅れて切換されます。
その一瞬、COM端子につながるOUT0とOUT1を通して
IN0とIN1が短絡するのです。
IN0はGNDにつながっていますので、オペアンプ出力を
つないでいるIN1が一瞬だけGNDに引っ張られることに
なってしまいます。
それがオペアンプ出力に現れた負パルスの原因です。

  ※観察のためIN0とIN1に1kΩの抵抗を入
   れましたが、IN0、IN1とGND間に0.01uF以上、
   0.1uF程度のコンデンサを入れると短絡パルス
   は見えなくなります。
   基準電圧ICを使った時のパスコンは有効という
   ことがわかります。

対策案
・ATmega328PのAREFをオペアンプでバッファして
 基準電圧を得るのはOKだが、それをPWM制御する
 マルチプレクサにつなぐのは×。
・PWMするマルチプレクサでD/A変換する時は、
 パスコンを付加できる基準電圧ICを使う。

こんなところでしょう。
  ※見えなくなるけど、それでも、短絡は発生してる。
   ノイズ発生の要因になるか。

※注1
基準電圧ICに付加するパスコン、こんなことも
ありますので。
2019年9月14日:良かれと思って付けたコンデンサが・・・
  ※AD680・・・発振!

※どうなんだろう
多チャンネル入力A/Dコンバータ、たいていの場合
マルチプレクサが入力。
チャンネル切換時に今回のようなことが起こる心配
は無いのか?
入力に入れたCRフィルタが役立つかも。

※ブレッドボードで実験
002_20230103102701
クロック源はATmega328Pを使ったパルスジェネレータ
拡大。
003_20230103102701


|

« 謹賀新年 | トップページ | 20mm厚重量級文鎮×2、 トラ技700号をおまけで »

トラブル遭遇」カテゴリの記事

Arduino」カテゴリの記事

AVRマイコン」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 謹賀新年 | トップページ | 20mm厚重量級文鎮×2、 トラ技700号をおまけで »