« Arduino IDEでRaspberry Pi Pico:Win7でのUSB問題解決です | トップページ | Arduino IDEでRaspberry Pi Pico:32bitマイコンがバグを生む »

2022年4月14日 (木)

Arduino IDEでRaspberry Pi Pico:PWMでD/A出力してA/D入力を試す

Raspberry Pi Picoの実力試験、まずはA/Dコンバータをば。
RP2040に乗ってるA/Dコンバータの分解能は12bit。
データシートを見ますと、その実力値を示す「ENOB」
(Effective Number of Bits)は「9bit」と記されています。
12bitだとVrefに2.5Vを使うと1bitあたり0.61mVとなります。

A/Dの入力電圧を可変するために、使ったのがPWM出力。
これも12bitに設定できるので、同一のVrefを使うと同じ
スケールにできます。

こんな回路で試しました。
Pwm_ad31
35pinのVrefにシャントレギュレータ「LM4050-2.5」
つないで安定化。
Picoの内部にはシャント抵抗(R7:200Ω)が入っていますので、
図のような接続で安定化できます。

そのVref をPWM周期で駆動するマルチプレクサを通して、
VrefとAGND電圧を切り替えます。
そして、LPFを通して0V~Vrefの直流に。
オペアンプでバッファしてPicoのA/D入力につなぎます。

PWM→LPF→DC電圧という流れのD/A、誤差要因は
オペアンプの特性。
使ったMCP6072、RR-in/RR-outの低オフセット電圧品。
ただ0V付近は1.0~1.5mVほどの不感帯が生じます。

PWM値と読み出したA/D値の差をグラフにしてみました。
PWM値0~4095を32ステップで可変しています。
  ※PWM値を0,32,64,92・・・と増加

まずはA/Dの平均値処理やA/D入力にCRフィルタを付けない
素の状態。(赤色線)
それと、回路図内黄色枠のように、A/D入力にCRフィルタを
装着して試してみます。(緑色線)
Cap082
「CRフィルタ」(1k+0.1uF)を入れた方は、
入力電圧が上がるとA/D値が減少する傾向が見えます。

RP2040のデータシートを見ますと、
ADC  Input Impedance」が「100kΩ」と
出ています。
どうやらこの抵抗で「分圧」されてしまっている
ようです。
ノイズを防ぐために抵抗+コンデンサをいれちゃダメ
というところでしょうか。

次はCRフィルタ無しでA/D値を平均処理してみます。
単純な加算平均です。 16回と64回を試します。
stepは同じで32。
Cap081_20220414152601
さらに。 A/Dの平均回数を64回にして、stepを4に
してみました。
Cap083
数値512,1536,2560,3584の4カ所で「」が
出現しました。

この4カ所の「段」、前後をstep1にして見たのがこれ。
  (平均回数は64回)
Cap084
「差」だと段に見えますが、値の変化で見るとこのように
「上昇が緩やかに」なっているのがわかります。
Cap085
16stepくらいの間、変化が止まっているように
見えます。
A/D変換直線性の性能ということでしょう。

とりあえずラズパイ・ピコのA/Dの実力ということで。

※テストに使ったスケッチ (.inoではなく.txtにしています)
   ・ダウンロード - pwm_ad3.txt

※パラメータ入力
PWMを出力するためのパラメータ設定入力、
手抜きしてますので注意を。
・起動時はEnter入力するとタイトルを出して始まる。
   電源オン、あるいはリセットとUSB通信開始の具合。
   USBがいつつながるのか?
   USB接続でPicoはリセット起動しないのか?
   このあたりがよくわかりません。
・5つのパラメータ入力、「#Start End Step Avr Wait >」
 「strtok」で文字のかたまりを分離して「atoi」で
 文字を数値に変えているだけで、数値範囲のチェックは
 していません。

※追記
実験の様子。 ブレッドボードを使ってます。
P11_20220415094801

※PWMによる12bit D/Aコンバータ、その精度を確か
めてみました。
0.1mVの計測、自動ではできないので手でメモしてます。

「段」の出現、D/A出力をミスっていたらということで、
0V付近、フルスケール付近、そして「512」付近の値を
調べてみました。
Pwm2

PicoのPWM出力、「0V付近を除いて」ほぼ計算どうり
の値が出ています。
  ※0V付近はオペアンプの性能。
フルスーケール値「Vref * 4095 / 4096」もちゃんと
出ています。
Arduino UNOのPWMのように「0は0で合っている」けど
「255で256/256」と、おかしなフルスケールにはなってい
ません。
ちゃんとPWMしています。
これぞ正真正銘の「analogWrite」。
  ※Arduino UNOのは似非のanalogWriteっす。

※参
Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMを使おう


※次記事:オペアンプ出力とアナログ入力間に入れた
 CRフィルタについて。
Arduino IDEでRaspberry Pi Pico:A/D入力が…あれっ?

※検索
macOSからPi Picoを使う - その11 [Pi Pico]
   似たようなデータが出現しています。


|

« Arduino IDEでRaspberry Pi Pico:Win7でのUSB問題解決です | トップページ | Arduino IDEでRaspberry Pi Pico:32bitマイコンがバグを生む »

ラズパイ・ピコ」カテゴリの記事

コメント

コメントを書く



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




« Arduino IDEでRaspberry Pi Pico:Win7でのUSB問題解決です | トップページ | Arduino IDEでRaspberry Pi Pico:32bitマイコンがバグを生む »