Pico三昧(44) ラズパイPico2:RP2350、Pico:RP2040、ADC比較

Joseph Halfmoon

今回はADC(アナログ・デジタル・コンバータ)です。今回はRP2040とRP2350の仕様の比較というより「ADC設計の苦闘」の様子を垣間見るの回。よくよく見てみるとPicoのRP2040でもPico2のRP2350でもADCには手こずっている雰囲気が漏れ伝わってまいります。アナログ素人老人は詳しいことは分からんけど。

※Pico関係投稿一覧は こちら 『Pico三昧』は一覧の末尾付近にひっそりと。

※Raspberry Pi Pico、Raspberry Pi Pico2のデータシートは、以下からダウンロードできます。

Pico-series Microcontrollers

12ビットSAR型ADC

PicoのRP2040もPico2のRP2350も搭載しているのは12ビットのADコンバータ。SAR(逐次比較)型です。前回までのシリアルどもは、Arm社やSynopsys社のIPが使用されていましたが、このSAR型ADコンバータについては特段の記載もないので、自ら開発(自ら費用を負担して下請けに出している可能性もあるが)しているみたいです。

RP2040とRP2350の機能上の「大きな」差としては、RP2350にはRP2350Bという80ピン版があるために、その増加した端子にもAD入力を振り分けたいということか、RP2350BではAD入力に使用できる端子が4本増えているということのみです。Pico、Pico2(RP2350A搭載)ともにGPIO本数は同一、AD入力に使える端子は4本づつです。他に内蔵の温度センサを両者とも搭載しているので、ADのチャネル数としては4+1で5本ということになります(RP2350Bは8+1で9本。)

それらチャネルに接続している実際のADコンバータ回路は1個で、ざっくりしたスペックは48MHzの独立クロックで動作する 500kspsの12ビット逐次比較型のADです。これはRP2040、RP2350共通です。

RP2040とRP2350のAD回路の「差」

この2つのチップのADCの差というのは、前世代のRP2040において問題のあった特性をRP2350では改善した、という1点だと思います。その問題についてRP2350のデータシートから1文引用すると以下です。

Removed spikes in differential nonlinearity at codes 0x200, 0x600, 0xa00 and 0xe00, as documented by erratum RP2040-E11, improving the ADC’s precision by around 0.5 ENOB.

上記の記述にちょっと驚いて(以前はちゃんと読んでなかった)、RP2040のデータシートの以下のグラフを眺めてみました。

Figure 117. ATE machine results for DNL (RP2040).

なんと!確かに、0x200、0x600、0xA00、0xE00の「切りのいい」コードのところに、7~8ビットものDNLがピコンとピークを示してます。ダメじゃん。こんなに誤差あると、12ビットどころか10ビットだとか、いや8ビット相当だとか悪口言われそうだよ。。。まあ言わんけど。

こういうグラフを掲げざるを得なかったADCの設計者の忸怩たる思い?が伝わってきそうなグラフです。知らんけど。普通のマイコンメーカだったら、こんな特性だと製品リリースしないかも、と思いました。いろいろ大人の事情もあったような、そうでもなかったのか。

なお、RP2350については、以下のバージョンのデータシートを参照させていただいとります。

build-date: 2024-08-21

このデータシートの”12.4.5 INL and DNL”では、

Details to follow.

と素気ないです。Pico2発売時点のRP2350でもまだ苦闘が続いているようにも見受けられます。まあ、0.5bitくらい「よくなってはいる」のね。。。

INL、DNL、ENOB

念のため書き添えますと

    1. INL: Integral Non-Linearity
    2. DNL: differential nonlinearity
    3. ENOB: effective number of bits

であります。アナログ素人老人が勝手なことを書いてしまうと、INLは0からフルスケールまで一直線となる理想特性に対して「一番ずれとるところ」のズレ幅です。一方、今回のDNLは、量子化で隣り合う値は1ビット異なるというのがあるべき姿なのに対して、突然何ビットも異なる値が出てきたり、本来変わらなければならない電位差なのに差がないとかのズレです。なお、ENOBは、そんなこんなをいろいろ盛り込んだ実効的なビット数らしいです。

ついては、アナログの権化、アナデバ様の下記の記事

アナログ-デジタルコンバータのノイズ、ENOBおよび有効分解能を理解する

ADCの動的性能を把握するために、ENOBの値を算出する方法

あるいは、EDN Japan誌のベーカー女史の名物コラム

Baker’s Best 有効ビット数の求め方

などをご覧くだされ。比較のため、Armマイコン搭載の12ビットADCの他社スペックを一つ引用しておきます。ST microelectronics社の STM32F072RB です。STM32マイコンでは、多分一番お求めやすいクラスのチップではないかと。マイコンの動作速度は48MHzで、ADCのクロックは14MHz、@3.3V 25℃のときの値を以下引用させていただきました。

STM32F072RB Typical Max
INL ±0.8 ±1.5
DNL ±0.7 ±1.0

まあ普通はこんなんだよな。でも昔の感覚から言えば、何気に12ビット搭載は高級マイコンだぜ。

RP2350のADCの担当者の苦闘は続いているのか?どうなんだ?

Pico三昧(43) ラズパイPico2:RP2350、Pico:RP2040、SPI比較 へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です