ちょっと Tea Time!? PICOの12BitADCの実力は? 2025.7.1
ちょっとしたマイコンが必要な時には、今まではPICを使うことが多かったが、最近ではPICO(RP2040)を使うようになった。
この理由はPICに比べてPICOの方が、大容量、高速なのに加えて、開発環境が良好であるという点にあります。
ソフト作成はRasPi上で行っているのですが、C言語ソースのエディタを起動すると、左端にマクロや関数、外部変数などの
一覧がでて、それらをクリックすると、その定義場所に編集ポイントが移動するので至極便利です。
PICの場合は、普通にテキストエディタでソースを書くので、そういったことがまったくできません。もちろん、
C言語用の開発観光(Visual Studio等)をインストールすればいいのだけれど、ちょっと面倒くさい。
そもそもも圧倒的な性能差の前にPICを使う理由が見あたらなくなってきた感じもします。
まあ、それでもPICの良いところは小型、低消費電力なのでちょっとした組み込みでは便利ですが、
実験などではPICOの方が断然使いやすいです。それに価格もPICとあまりかわりません。
さて、PICOをつかうときに内蔵のADCもよく使いますが、どうも癖があるような感じです。
具体的にはADCの入力電圧をゼロにしてもADC値はゼロにならないし、電源電圧(3.3V)をいれてもADC値が4095にならない。
まあ、完全なレールtoレールでないのはわかっているけれど、実力的にどんなものかを知るために、ちょっと調べてみました。
調べてみましょう!
調べた個体の3.3Vレギュレータ電圧は3.293Vです。1mV単位で電圧を可変してADCに入力して、PICOでの
1000回のADC値で評価です。
まあ、これはグラフにしてもあまり意味はないなあ〜。直線に見えて当たり前です。
0〜電源電圧(3.293V)でのADC値は17〜4077くらいでした。理想的には0〜4095となるのだけれど、
それに比べて1%ほど範囲が狭いです。これを考慮して使用する必要があります。
入力電圧がゼロのADC値は約14ほどあります。
電源電圧を加えた場合でも、4077程度です。
最後にエラー(INL)をみてみましたが、最大で±5LSB程度あります。問題は途中で値が急激に
かわります。その差は8LSBはあるので、ちょうど3Bit分です。ということは、単調増加性も低く
実質的には9Bitの精度とみたほうがよいようです。
ちょっと、寂しい結果だけど、CPU内蔵のADCですから、こんなものなんでしょう。
精度としては9Bit相当と思ったほうがよさそうです。
結論
PICO(RP2040)の12BitADCの精度は9Bit相当。
ゼロ電位、電源電圧電位ではそれぞれ0,4095にならないので注意が必要。
ところでPICはどうだろう?
PICOを調べましたが、PICはどうなんだろう?こちらも調べないと不公平な気がしてきました。
PICもPICO程度の性能かなあ〜?
対象としたのは12BitADCをもつPIC18F27Q43です。このPICは最近よく使っています。
64MHz動作(命令サイクルは16MHz)で128kBのプログラム容量がありますので、結構な仕事ができます。
とはいえ、PICOに比べて速度で約1/8倍、プログラム容量で1/16と圧倒的に差があります。
ついでに、内部の命令幅はPICは8bitに対してPICOは32bitですから、ここで決定的な速度の差がでてしまいます。
まあ、性能については分かっていることなので、ここではADCの性能比較です。
電源電圧は3.296VですのでPICOと同様に0〜3.296Vの電圧を1mV毎に与えて、ADC変換1000回の平均値を得ます。
PICからのADCの読み取りデータはシリアル変換して取り込んでいます。
PICのADCの性能も測定してみましょう!
PICOより断然性能がいい!
ADCの電圧入力値と出力の関係です。ほぼ綺麗に0〜4095で変換されているような感じです。
ゼロ付近ですこしリニアリティが落ちているようですが、5mV以上であればリニアな感じです。
こちらも、4095付近ですこしリニアリディが落ちていますが、「電源電圧 - 5mV」以下ではリニアな感じです。
誤差を見ると、ゼロ付近と電源電圧付近は急激にERRORがでていますが、全域でほぼ1LSB未満に
収まっています。単調増加性も保証されていそうです。12Bit相当のADCといってもいいでしょう。
結論(その2)
PIC(PIC18F27Q43)のADCの実力は12Bit相当です。
所感
同じマイコン内蔵のADCでもこれだけ差があるのはちょっとびっくり。PICをつくっているMicrochip社は
アナログICもつくっているくらいだから、レールtoレールの回路にもノウハウがいっぱいあるのでしょう。
追補
PICOのADCの精度については、HPをくぐったら色々とでてきました。RP2040のデータシートにも
記述がありました。どうやら、特定のビットでエラーが発生しているようです。
The RP2040 ADC has a DNL which is mostly flat, and below 1 LSB. However at four values 512, 1,536, 2,560, and 3,584 the ADC’s DNL error peaks, see Figure 117.
データシート564ページ。 横軸はADC値で縦軸はDNL(微分非直線性)。
12Bit程度なので、4096個の変換テーブルを無理やりつくって補正テーブルを作成するという手もあるけど、個体差があるとあまり意味ないなあ〜。
(おしまい)