PIC A/D Converter,Vref Accuracy











 雑誌等のプログラムやメーカーのアプリケーションノートのコードを をコピーして、出来た出来たと喜んでいる者たちには、Accuracy と言っても  "Accuracy って何 ?、どこの世界の話 ?" でしょうね。



 リモコン受信機を作るために PICを始めたようなもので、他にこれといって PICで作りたい ものもないのですが、将来何か作る必要が生じた時に PICが使えるかどうか判断するために、 PICの基本性能は把握しておかねばなりません。

 PIC を使えば簡単に "A/D コンバーターのようなもの" が構成できますが、A/D コンバーター のオモチャであるか、実用にも使えるかは PIC の A/D コンバーターの性能によります。 誤差が ±0.1% 程度であれば十分実用機器として使うことが出来ますが、±0.5% 以上もあったら とてもじゃないが実用機器として使うことは出来ないと考えます。従って発表したり販売したりする 場合はその性能も発表しなければなりません。もし実用に耐えない場合には、"これは PIC を 使ってこのようなものが出来るという EXAMPLE であり、実用を目的としたものではありません。 実用を目的とする場合は、通常の A/D コンバーター をご使用ください。" のような説明を 加えなければなりません。このような説明なしで販売したり発表することは悪質と言わざるを 得ません。中には使えるものとして購入したり、コピーする人がいるからです。




絶対誤差

 PIC 10bit A/D Converter 内蔵 16F874A
 電源電圧 安定化 5.00V
 クロック 4MHz X'tal
 Acquisition time 20μS
 基準電圧 Vref 安定化 2.048V
 測定電圧 Vex 安定化直流電圧 2.000V
 Digital 変換出力 1008 (2.016V)

 なぜ絶対誤差かと言えば、通常の電圧計で同じ測定レンジの場合、測定電圧が近ければ相対的な 誤差はほとんど無いからです。当方は 4 1/2 桁のものを使用しておりますが、これは安価な テスターでも言えることです。即ち基準電圧を 2.048V に合わせ、同じ電圧計の同じ測定レンジで 測定電圧を 2.000V に合わせれば相対的な誤差はほとんど生じないということです。しかし新品で 数百円などというオモチャのようなテスターについては知りません。

 また A/D 変換の観点から見れば、基準電圧と測定電圧が同じ場合、基準電圧の誤差は A/D 変換 出力に表れません。これは常識的に分かりますね。基準電圧と測定電圧が同じ時、A/D Converter に 変換誤差がなければ同じ変換出力が得られるということです。従って基準電圧と測定電圧が同じであれば 最も良いのですが、A/D Converter の変換誤差が+側にある場合、正しく表示されません。 そこできりの良いところで測定電圧 2.000V としています。

 変換出力は 1008 でなんと+0.8% もの誤差があります。これだけ誤差が大きいと、このままでは 実用機器の A/D Converter としては使えません。

 データシートのどこにも記述はないのに、PIC の A/D Converter の誤差は±1LSB 以下などと 思い込んでいる者もいるようですが、一度測定してみることを勧めます。思い込みは自由ですが、 思い込みを活字にしてはなりません。
 また 10bit の A/D Converter で下位 2bit は安定しない、などというおかしなことを言う人も いますが、当方ではそのようなことはありません。安定しています。10bit 位で安定していなかったら どうするんだということですね。

直線性



 誤差は段階的になります(Digital だから当然ですね)。
 誤差が入力電圧の上昇と共に大きくなっています。
 これについては、Microchip のデータシートの以下の図にあるように、



 ILEAKAGE (leakage current at the pin due to various junctions) を 0.5μA などという大きな 値で見込んでいるところに原因があると思われます。PIC 内部のパターンの抵抗値は分かりませんが、 実際の ILEAKAGE はもっと小さいのではないでしょうか。

 解決方法として入力・アース間に336KΩを付けたのが青カーブです (Rs は 2.4kΩ = Maximum recomended impedance for analog sources is 2.5kΩ)。ほぼベストな特性となっていますが、 抵抗値は前段の出力インピーダンスや PIC、基板の作り方により異なってきますので単純に真似は できません。(^^♪

 デジタルもアナログを理解していなければまともなものは出来ないのです。




内蔵 Vref accuracy

 計算値より実測値が少し小さいのは、Vref 回路の電流をオン・オフする TR の飽和電圧 Vsat の ためです。まあ理由はあるにせよ、これだけ誤差が大きいと実用には使えません。お子様のオモチャ には十分使えます。また、Range 1 の VR3-VR0 が 0 と 1 で計算値より実測値の方が少し大きいのは、 Range 0 と Range 1 を切り換える TR の内部抵抗のためです。電源電圧 安定化 5.000V。



VR3-VR0Range 0
計算値[V]
Range 0
実測値[V]
Range 1
計算値[V]
Range 1
実測値[V]
00001.2501.2220.0000.016
00011.4061.3780.2080.215
00101.5631.5320.4170.414
00111.7191.6880.6250.616
01001.8751.8440.8330.818
01012.0311.9991.0421.020
01102.1882.1521.2501.220
01112.3442.3081.4581.423
10002.5002.4651.6671.630
10012.6562.6231.8751.836
10102.8132.7792.0832.043
10112.9692.9372.2922.251
11003.1253.0982.5002.464
11013.2813.2592.7082.676
11103.4383.4132.9172.881
11113.5943.5703.1253.090




INTOSC accuracy

 いくつか OSCCAL値を変えて測定してみましたが、INTOSCの発振周波数は OSCCAL値で最も誤差が 小さくなるように設定されています。従って OSCCAL値を変えても工場出荷時の値より誤差が小さくなる ことはありません。このため正確な周波数カウンタを持たない者は OSCCAL値を削除してはなりません。 合わせる方法がなくなります。
 CR発振ですので周波数安定度は良くありませんが、それでもディスクリートで組んだ CR発振回路より 良いように思えます。素子がモールドされているためでしょう。測定の用途には無理ですが、通常の用途 には十分使えます。

16F887 INTOSC accuracy

 16F887は INTOSCの accuracyが 1%ということですので測定してみました。CR発振で 1%まで持っていく のは大変なことです。OSC2 から出力されるクロックを測定していますので、原発振周波数は 4倍しなければ なりません。周波数安定度は OSCを内蔵した他の PICと同程度と思われます。

OSCTUNE値クロック周波数[KHz]Comment
011112,224.6Maximum frequency
011102,210.5 
  
  
  
000012,022.7One step high from default
000002,008.7Factory calibrated frequency
111111,995.8One step low from default
  
  
  
100001,781.6Minimum frequency

 








作品の部屋に戻る