AN1007

AN1007
MCP3551 デルタシグマ ADC の応用設計法
Author:
DataView ソフトウェアは、ここで論ずる多くの問
題に適切なヒストグラムや領域描画グラフにより、リ
アルタイムでシステムノイズ特性を視覚化して評価で
きるようにするものです。
Craig L. King
Microchip Technology Inc.
まえがき
アンチエイリアスフィルタの設計と入力セトリング
時間の問題の項も含まれています。PICmicro マイクロ
コントローラ用のソフトウェアとハードウェア SPI™
用のシリアル通信ファームウェアが、C とアセンブラ
で記述されて提供されています。C 言語で書かれたソ
フトウェア SPI™ のコードは、MCP3551 22-Bit DeltaSigma ADC PICtail™ Demo Board の実行コードとし
ても提供されています。
MCP3551 デルタ−シグマ ADC は高分解能のコン
バータです。このアプリケーションノートでは、この
デバイスを使うときの、いろいろな設計テクニックに
ついて論じています。まず典型的な応用回路について
論じ、ノイズ解析の項が続きます。このデバイスは、
他の高分解能の ADC と同じように、ノイズ電圧より
小さな LSB サイズとなっています。このため、デバイ
スの(そしてシステムの)性能は、単にバイナリ出力
列を見ているだけでは解析できません。データを集め、
視覚的に結果を解析することが必要です。そのために
は、回路設計をする時には、PC にデータを取り出す
方法を用意しておくことが重要です。本アプリケー
ションノートでは、センサーやシステム性能評価を素
早くするために、MCP3551 22-Bit Delta-Sigma ADC
PICtail™ Demo Board の回路と DataView® ソフトウェ
アの使い方を説明し、同様に、デバイスを PICmicro®
マイクロコントローラにインターフェースする方法を
説明します。
標準的な接続
システムノイズ解析とデバッグ用として、MCP3551
22-Bit Delta-Sigma ADC PICtail™ Demo Board にセン
サーを接続した MCP3551 デバイスの標準的な応用を
図 1 に示します。
0.1 µF
1.0 µF To VREF
8
0.1 µF To VDD
~0.1-2 kΩ
1
2
VIN+ VREF
MCP3551
3
VIN-
VSS
VDD
SPI™ Bus
SCK
SDO
CS 5,6,7
3
3
PICmicro®
MCU
8
4
MCP3551 22-Bit ΔΣ
ADC PICtail™ Demo Board
PIC18F4550
5
USB
2x16 LCD
( または同等品 )
PC 上で実行
DataView®
ソフトウェア
USB インターフェースで DataView ソフトウェアへ
PC 上でノイズ解析
図 1:
システムノイズとデバッグ用の典型的なブリッジセンサーの接続図
© 2006 Microchip Technology Inc.
DS01007A_JP-page 1
AN1007
温度、圧力、重量などの物理的状態のセンサーは、
その多くが図 1のようなホイートストーンブリッジで
構成されています。ブリッジは、1から4の要素のど
れでも物理的状態に感応するものにでき、できれば放
射状の構成として、センサーと ADC リファレンス電
圧の両方をシステムリファレンスでドライブするよう
にし ま す。ひ と つ の 例 は General
Electric 社の
NovaSensor® という絶対圧力センサー (NPP-301) で、
図 2 のように4要素の可変ブリッジとなっています。
NPP-301 デバイスは、3V の電池で使ったとき、標
準で 60 mV のフルスケール出力となっています。この
デバイスの圧力範囲は 100 kPa となっています。
MCP3551 の出力ノイズ規格は 2.5 µVRMS です。
下記式は圧力 (P、単位:パスカル ) と高度 (h、単
位:メートル ) の関係の一次近似式です。
h log ( P ) ≈ 5 – -------------15500
MCP3551 ADC で設計するときには、まず最初のス
テップは、センサー性能の評価をして、システム全体
分解能を上げるためにはどのようなステップにするか
(も し あ れ ば)を 決 定 す る こ と で す。多 く の 場 合、
MCP3551 デバイスで直接センサー出力をディジタル
化する使い方ができ、他の外付けの信号補正回路を必
要としません。
フルスケールレンジが 60 mV で解像度が 2.5 µV で
使うと、直接ディジタル化(メートルで)したときの
結果の解像度は 0.64 メートルとなり、およそ 2 フィー
トとなります。
この使い方は議論の例題として使っただけであるこ
とに注意して下さい。すなわち、最終的なシステム設
計のときは、温度効果や一次近似による誤差を含めな
ければなりません。
0.1 µF 1.0 µF
To VDD
1
2
VREF
VIN+
3
6
2
VIN3
NPP-301
8
VDD
MCP3551
VSS
4
5
SCK
To SPI™
SDO
CS 5,6,7
VBAT
+
-
高度計
図 2:
直接ディジタル化の例題。これは低電力の絶対圧力センサーモジュールで、GE 社の NovaSensor
(NPP-301) シリーズで使われている低価格の表面実装の圧力センサーです。
MCP3551 のような高分解能 ADC は、低分解能 ADC
と増幅段を含めた置き換えに使うことができます。
図 3 のシステムブロック図は、典型的な信号処理回路
です。この例では、要求精度は 12 ビットです。12 ビッ
ト ADC が選択され、変換前に信号増幅のため増幅段
が必要となっていました。12 ビット精度を達成するた
め、ADC の全入力範囲を使わなければなりません。こ
の例では、信号のコモンモードが変化するため、何ら
かのオフセット補正が必要で、加算アンプが必要にな
ります。
(つまり、信号は増幅前にセンター配置されな
ければなりません。)
OSC
入力
信号
+
加算
アンプ
+
PGA
VREF
低分解能
ADC
MCU/CPU
補正用
DAC
図 3: 低分解能 ADC と信号処理回路を使った
応用例
DS01007A_JP-page 2
© 2006 Microchip Technology Inc.
AN1007
この場合には、高分解能のMCP3551デバイスを使っ
て信号処理回路全部を省略することができます。
VREF
PICmicro®
マイクロコントローラ
入力
信号
MCP3551
図 4:
高分解能 ADC を使って信号処理回路
を省略する
高分解能 ADC の広いダイナミックレンジ(つまり
MCP3551 の場合は 22 ビット)により増幅システムを
省略することができます。上記の例では、12 ビット精
度が要求でした。22 ビットのダイナミックレンジで
は、ADC の入力レンジ内のどこにでも 12 ビット精度
の範囲を置くことができます。図 5 は、VREF = 2.5V (
注 : スケールは合わせてはいない ) でのこの比較を示
しています。
2.5V
注意すべきは、式 1 による ENOB(または有効分解
能)の式は、純粋な DC 信号を前提としていることで
す。正弦波信号は、同じピークレベルに単調に広がっ
たランダム信号より、AC 電力が 1.76 dB だけ高くな
ります。もし応用が AC 信号を扱うなら、ADC 性能は
AC FFT を使って周波数領域でみることになります。
これらの描画は、信号対ノイズ比 (SNR) または、信号
対 ( ノイズ+歪)比 (SINAD) を表します。しかし、こ
れらは低バンド幅のデルタシグマのデータシートには
通常ありません。
ENOB は本来、高 AC 入力のときに比べ、高 DC 入
力の方が優れています。なぜなら AC 入力のときは、
信号に不確定に加わる信号の位相が 90° に近くなると
値が 0 に近くなってしまうからです。
標準 SNR (dB)_=_6.02n+1.76 (VRMS_=_VPEAK/
2√(2) から求めるか、信号を純粋な正弦波とする ) を
使って ENOB を計算するには、式 2 を使います。計
算結果の ENOB は、1.76 dB または 0.292 ビットだけ
小さな ENOB となります。
式 2:
FSR
20 • log ⎛ --------------------------⎞
⎝ RMS Noise⎠
ER in bits rms = ----------------------------------------------------6.02
2,097,152
20 ビット
8192
4096
0V
12 ビット
0
図 5: MCP3551/3 の広いダイナミックレンジと
12-bit ADC との比較 MCP3551/3
ビットとノイズの解析
高分解能のコンバータでは、LSB の大きさはデバイ
スノイズより小さくなっています。
(つまりデバイスか
らの出力コードには常にばらつきがあるということで
す。)この出力ノイズ規格は、出力コードの分布から計
算で測定できます。出力コードの分布は、デバイスの
有効解像度または等価ビット数 (ENOB) を定義しま
す。出力コードの分布は、ある標準偏差を持っていま
す。この標準偏差はデバイスの RMS ノイズ (σ) です。
RMS ノイズ(測定可能な最小の信号)とデバイスのフ
ルスケール入力レンジ(測定できる最大信号)の比が、
ADC の有効分解能となります。これを式 1 の定義で、
2 進数の ENOB に変換します:
式 1:
ln ( FSR ⁄ RMS Noise )ENOB = --------------------------------------------------ln ( 2 )
© 2006 Microchip Technology Inc.
100 mVフルスケール出力のセンサーを使ったとき、
MCP3551 分解能ベースの ENOB は次の式で計算でき
ます:
式 3:
ln ( ( 100mV ) ⁄ ( 2.5μV ) )ENOB = -------------------------------------------------------ln ( 2 )
ここで :
ENOB = 15.3 bits
MCP3551
の出力ノイズまたは有効分解能は、
VREF = 5V で 21.9 ビット RMS という規格です。予測さ
れるピークノイズビット数(ふらつかないビット数)
は統計的解析で求められますが、これは次項で論じま
す。
注意すべきは、ADC の VREF 電圧を低くしても、デ
バイスの出力ノイズあるいは有効分解能は改善されな
いということです。これはノイズが入力構成品の熱雑
音で占められているからです。
応用によっては、必要なシステム分解能を達成する
ためには信号増幅が必要になることもあります。本ア
プリケーションノートには、このような使い方で必要
な信号処理回路の解析は含まれていません。
センサーそして最終的にはシステムの分解能を決定
するには、全ての誤差を考慮しなければなりません。
大部分の誤差の補正は使い方に依存しています。例え
ば、誤差規格が 0.01% の電池を考えてみて下さい。
DS01007A_JP-page 3
AN1007
補正をしないと、100 mV フルスケール出力のセン
サーに対して MCP3551 の分解能が大変細かいのにも
かかわらず、センサーがシステム全体の分解能を 13.2
ビットに抑えてしまいます。
定義によれば、ノイズは波形や姿形がない非周期性
の信号です。このランダム性は、ガウス分布(正規分
布)の RMS 測定のような統計的特性を扱うには最適
です。システムを設計していて性能を計測したいとき
には、RMS ノイズの方がピークピークノイズより再現
性が高くなります。図 6 は、2つの異なる ADC 出力
の分布を RMS と PEAK という異なる値で表したもの
です。
will supply new figure
図 8:
示
DataView ソフトウェアの領域描画表
デバッグポーリングとデータログ
2σ
σ
図 6:
2つの出力の正規(ガウス)分布
DataView® ソフトウェアツールは、MCP3551 を使っ
て、リアルタイムのヒストグラムを表示する視覚化
ツールです。ソフトウェアは、その時の分布の RMS
ノイズを計算します。さらに、分布に含まれるサンプ
ル数を、平均の経験則として知られている方法で数値
化し表示します。
®
図 7:
DataView ソフトウェアは、システム
性能をヒストグラム形式で表示する
DataView ソフトウェアは、USB のポーリング間隔
をミリセカンドから時間という広い範囲で変えられる
という柔軟性があります。長期間のデータ解析を必要
とする応用では、長期間の性能を見ることができるよ
うにシステムキャッシュを設定できます。DataView ソ
フトウェアの USB ポーリング間隔を変えることで、設
計者は、高分解能システムに典型的な、長期変動とい
うシステム問題を簡単に調べることができます。(
図 9 参照 ) この特徴のさらなる情報については
MCP3551 22-Bit Delta-Sigma ADC PICtail™ Demo
Board User’s Guide (DS51579) を参照して下さい。
図 9:
システム変動解析用の USB ポーリング
間隔制御
前述の例では、RMS ノイズは 0.8 ppm でリファレ
ンス電圧は 2.5V. でした。このシステムでは、式 1 を
使って ENOB は 21.6 となりました。
ソフトウェアはまた、領域描画ウィンドウを使って
時間ベースのシステム解析を行うこともできます。こ
の視覚化解析ツールにより、システムドリフトなどの
時間ベースの誤差を解析することができます。
DS01007A_JP-page 4
© 2006 Microchip Technology Inc.
AN1007
ピークノイズ予測と無雑音ビット
ピークピークノイズを計測したり予測することは、
RMS ノイズを計測することよりかなり難しいことで
す。また、このピークピークノイズは、無雑音ビット
またはふらつきなしビットともいわれます。ここで、
分布の中で発生する出力コードの可能性を予想してみ
ましょう。分布が正規分布あるいはガウス分布(ノイ
ズは完全にランダムと仮定)に従うという事実に基づ
いて、標準統計表を用いて表 1 が作成できます。最初
の欄の乗数は、ピーク -RMS の比となります。この乗
数(または比)は、信号の電力成分を解析するときの
信号の 波高因子 としても知られています。しかし、ノ
イズを解析するときには、この乗数は、各用途の要求
に基づいて選択すべきです。
システムのデバッグ中は、正しいピークピークウィ
ンドウを求めるのに、統計学の経験則が一般的規則と
して適用できます。経験則によれば、正規分布に従う
データの 68% が平均の 1 標準偏差以内に収まり、95%
が 2 標準偏差内に、99.7% が 3 標準偏差内に収まると
されています。ディジタルシステム設計では、もっと
も一般的な選択は平均の 3.3 標準偏差で 99.9% の確率
です。この厳密さより厳しくするかゆるくしたシステ
ム設計は、表 1 の他の RMS- ピーク比か波高因子を参
照して下さい。
σ
2σ
図 10:
平均からの n σ ( 標準偏差 )、表 1
に基づく
例として、やや高信頼の無雑音ビットを要する応用
を選択したとします。
(例えば心不全用の電子式心臓細
動除去器のフィードバックループなど)
© 2006 Microchip Technology Inc.
DataView ソフトウェアを使って求めたシステムノ
イズは 0.5 ppm, RMS となります。
e N ( RMS ) = 0.5ppm
e N ( p – p ) = e N ( RMS ) • K
= ( 0.5ppm ) • ( 10 )
= 5.0ppm
N
22
codes = -------------------2
1ppm = 2--------------------1000000
1000000
= 4.194 codes
e N ( p – p ) = 5ppm = 20.97 codes
= 21 codes
ここで、乗数は 5 を選択してやや控えめとし、結果
ウィンドウは、21 個の出力コード幅をもっています。
表 1:
無雑音ビット予測用の信頼表 平均周辺の分布ウィンドウ
( ピークピークウィンドウ )
ウィンドウ ウィンドウ内
内に入る出 に入らない出
力コードの 力コードの確
率
確率
2.0 x RMS または 1 σ
68%
3.0 x RMS または 1.5 σ
87%
13%
4.0 x RMS または 2σ
95.4%
4.6%
32%
5.0 x RMS または 2.5 σ
98.8%
1.2%
6.0 x RMS または 3 σ
99.73%
0.27%
6.6 x RMS または 3.3 σ
99.9%
0.10%
8.0 x RMS または 4 σ
99.954%
0.046%
10.0 x RMS または 5 σ
99.994%
0.006%
アナログフロントエンド (AFE) の設計
アンチエイリアシングとセトリング時間の問題を見
る前に、入力構成とデバイスの動作をまず評価しなけ
ればなりません。MCP3551 デバイスの入力ピンは、ス
イッチキャパシタタイプの入力です。入力ピンは直接
デルタシグマ変調器に接続されています。ここでは内
部発振器を 4 で割った周波数 (fINT/4) で、入力をオー
バーサンプリングしています。結果はリファレンスと
入力間で4相サンプリング方式となります。サンプリ
ング時間 tCONV の間に、ADC は常時差動入力電圧とリ
ファレンス電圧を比較し、この電荷を入力コンデンサ
に転送します。図 11 は MCP3551 デバイスを使った
ときの、このタイミングの説明図です。
DS01007A_JP-page 5
AN1007
112.64 kHz
入力サンプル
112.64 kHz
電荷転送
112.64 kHz
リファレンスサンプリング
112.64 kHz
電荷転送
28.16 kHz
X 512
1次フィルタ
X 512
X 512
2次フィルタ
3次フィルタ
X 512
4次フィルタ
tDATA = 72.72 ms
図 11:
MCP3551 デバイスの内部タイミング。セトリング時間問題には電荷転送周波数の注視が必
要。エイリアス問題には、28.16 kHz というオーバーサンプリング周波数に注視が必要。
アンチエイリアスフィルタの設計
ADC のアーキテクチャにかかわらず、アンチエイリ
アスフィルタがしばしば必要とされます。デルタシグ
マ ADC も例外ではありません。図 12 の SINC フィル
タ応答に基づけば、簡単で安価な RC フィルタだけで、
オーバーサンプリング周波数付近の不必要な信号を取
り除くには十分です。
MCP3551 デバイスは 28.16 kHz のオーバーサンプ
リング周波数となっています。MCP3553 デバイスは
30.72 kHz というオーバーサンプリング周波数となっ
ていて、より高いデータレートまたはナイキスト周波
数とするため、低いオーバーサンプリング比 (OSR) と
なっています。MCP3551 と MCP3553 デバイスのナ
イ キ ス ト あ る い は 出 力 デ ータ レ ー ト は、それ ぞ れ
13.75 Hz と 60 Hz です。
ています。
(エイリアス部では -20 dB です)従って、
アンチエイリアシングフィルタでさらに 20 dB を加え
れば 100 dB を得られます。
マイクロチップのフリーの FilterLab® フィルタ設計
ツールを使えば、簡単に単極の指定フィルタカットオ
フ周波数の RC 減衰器を評価でき、またエイリアスさ
れた信号周波数成分の評価もできます。図 13 は、カッ
トオフ周波数 1 kHz で、サンプリング周波数 30.72 kHz
において 30 dB 以上として設計された RC を示してい
ます。
注意すべきは、サンプリング周波数の整数倍で、
SINC フィルタの応答が繰り返され、そこでは SINC
フィルタ応答はゼロになることです。
減衰 (dB)
MCP3551 の SINC フィルタ応答は、図 12 のように
周波数が上がると減衰が大きくなるこぶを持っていま
す。アンチエイリアスフィルタへの要求は、SINC フィ
ルタの減衰特性を意識して選択するべきです。
0
-10
-20
-30
-40
-50
-60
-70
-80
-90
-100
-110
-120
図 13:
FilterLab® フィルタ設計ツールで RC 応
答を表示
入力インピーダンス
0
10 20 30 40 50 60 70 80 90 100 110
周波数(Hz)
図 12:
MCP3551 の改変型 SINC フィルタ
注意すべきは、不適切な部品を使うとフルスケール
にならず、普通はより小さな振幅となることです。
図 12 から、最大の SINC こぶはおよそ 60 dB 下がっ
図 11 に示したようにデバイスの入力におけるス
イッチング周波数は、内部発振器の周波数にすべての
フェーズで等しくなっています。入力ピンの抵抗は、
スイッチング周波数に容量と等価容量 (CEQ) を乗じる
ことで計算できます。結果の RC は、デバイスへ入力
するときに必要とされるセトリング時間を決定しま
す。
入力に何らかの RC が追加されると、デバイスの内
部オーバーサンプリング内に入力信号が完全にセトリ
ングされなくなる原因となります。ここで重要なこと
は、デルタシグマ構成で実行されるオーバーサンプリ
DS01007A_JP-page 6
© 2006 Microchip Technology Inc.
AN1007
絶対計測精度を得るためには、必要な内部電荷が定
着されなければなりません。
(これは、オフセットやゲ
イン調整をしていないシステムでは、最終電荷の割合
として定義されます。)例えば、目標絶対精度が 1 ppm
とすると、以下のセットリングタイムがなければなり
ません。それはRC時定数(T)の倍数として表されます。
オフセット・ゲインの影響の解析をしたいときには、
内部 RC のセトリングタイム曲線を、希望するシステ
ム精度と比べながら解析すればできます。図 14 は内
部抵抗と容量 (RSW と CEQ) だけの RC 充電カーブを
示しています。
式 4:
電圧 (V)
ングと平均化によって、ここに追加された追加 RC は
毎回のオーバーサンプルされる電荷にかかわることで
す。結果のデバイス出力への影響は、変換オフセット
とゲインのエラーになります。デバイスの直線性は 悪
くはなりません。出力ノイズ特性も、入力抵抗によっ
て追加される熱雑音が出力ノイズ規格を超えないと仮
定すれば、悪くはなりません。
–t
----⎞
⎛
τ
VC = VF ⎜ 1 – e ⎟
⎝
⎠
t = nτ
VC
V e = 1 – -----VF
1.0
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0.0
–n
VC = VF ( 1 – e )
e
–n
VC
= 1 – ------ = Ve
VF
n = – ln ( V e )
= -ln ( 1ppm )
0
0.005
0.01
0.015
= 13.8
時間 (t)
図 14:
標準 RC 曲線。入力信号が x ppm 以
内にセットされるのに必要な時間を考慮しなけ
ればなりません。
© 2006 Microchip Technology Inc.
この例では、1 ppm の絶対精度を得るためには、時
定数の14倍の時間が定着を完全にするために必要とさ
れます。式 4 を使うと、他の精度要求に対しても同じ
計算が使えます。繰り返すと、補正されてオフセット
やゲインエラーが無いシステムでは、セトリングタイ
ムの解析は必須ではありません。なぜなら、各サンプ
リングごとにデルタシグマでオーバーサンプリングし
平均化しているからです。
DS01007A_JP-page 7
AN1007
通信ファームウェア
MCP3551 ADC はシリアル SPI™ デバイスです。本
アプリケーションノートには、C とアセンブラ言語の
両方で書かれたコードを含んでいます。MCP3551 22Bit Delta-Sigma ADC PICtail™ Demo Board は、DataView ソ フ ト ウ ェア と USB 経 由 で 接 続 さ れた
PIC18F4550 を通して接続されます。またマイクロ
チップのC18コンパイラで書かれたコードが提供され
ています。使用している SPI 通信プロトコルの概要を
下記に示します:
void Read3551(char *data)
{
unsigned char n;
data[2] = ReadSPI();
data[1] = ReadSPI();
data[0] = ReadSPI();
}
//MCU checks every 10 ms if conversion is
finished
if(AquireData & gSampleFlag)
{
CS_PTBoard_LOW();
//
for(n=0;n<5;n++);
if (SDIpin == 0)
Read3551(outbuffer);
CS_PTBoard_HIGH();
//
gSampleFlag = 0;
//clear
timeout indicator
if(!mHIDTxIsBusy())
HIDTxReport(outbuffer,3);
}
シス テ ム が
DataView
ソ フ ト ウ ェ ア から
(PIC18F4550 に USB 経由で ASCII “S” を送ることで)
Acquire Dataモードに設定されている間は、AcquireData
フ ラ グ が セ ッ ト さ れ て い ま す。こ の 間 は、
MCP3551は常時変換を続けていて、読み出しデータは
USB 経由で PC に送られ保存されます。
PIC18F4550 上で実行されるコードは、10 ms ごと
に MCP3551 に対し CS の Low パルスを送ります。
Timer1 のフラグとTimerCounter変数がこの時間の
セットに使われます。このこの Low パルスは、立上が
りエッジが変換時間より短いときは、デバイスを単発
変換モードに設定します。CS パルスが Low の間に、変
換が終了したかどうか判定するために SDO 状態がテ
ストされます。ピンが Low であれば、ファームウェア
はそのデータを Read3551 サブルーチンを使って取り
出します。Read3551() ルーチンは、3 回に分けて
ReadSPI ルーチンを呼び出し、22 ビットワードと 2
ビットのオーバーフローで含んだ 3 バイトを取り出し
ます。3 バイトデータが戻されると Sample フラグが
リセットされプロセスが完了します。
DS01007A_JP-page 8
© 2006 Microchip Technology Inc.
AN1007
スタート
USB
から
RX あり ?
Yes
No
‘AquireData’
フラグを
セット
S
ASCII
文字か ?
P
‘AquireData’
フラグを
クリア
C
Timer0
フラグ
セットか
(TMR0IF)
?
Yes
‘TimerCounter’
を増分
TimerCounter
ロールオーバーか?
No
Yes
No
‘gSampleFlag’ セット
TimerCounter =
FEh
TMR0IF をクリア
‘AquireData’
と
gSampleFlag
セットか?
Yes
データラインをサンプル
変換完了を
チェックする
No
変換完了か?
Yes
MCP3551 をリード
データを USB TX
バッファにセット
No
終わり
図 15:
PIC18F4550 フローチャート。視覚による解析に供するため、USB TX バッファを DataView ィ ソ
フトウェアに送信する。
© 2006 Microchip Technology Inc.
DS01007A_JP-page 9
AN1007
参考文献
付録 A:
[1] “Delta-Sigma Data Converters Theory, Design
and Simulation”, Steven R. Norsworthy, Richard
Schreier, Gabor C. Temes, IEEE Press, 1997,
pp. 4-9.
デルタシグマ ADC は何倍かのオーバーサンプリン
グデバイスです。高分解能、優れた電源周波数除去、
わずかの外付け部品、低電力がこれによるメリットの
一例です。高分解能のメリットは、よく混乱がありま
すが、単純なオーバーサンプリングだけの産物ではあ
りません。
[2] AN9504, “A Brief Introduction to Sigma Delta
Conversion”, David Jarman, Intersil®, 1995.
[3] “Modern Business Statistics”, Ronald L. Iman,
W.J. Conover, Second Edition, John Wiley &
Sons, Inc., 1989.
オーバーサンプリング解析
なぜ PICmicro® MCU の SAR ADC はオーバー
サンプリングではないのか?
答えは簡単:ノイズの姿形です。高速逐次変換方式
(SAR) ADC の単純なオーバーサンプリングと結果の
平均化だけでは、デルタシグマ ADC の高解像度性能
は達成できません。オーバーサンプリングと平均化で
は、サンプル周波数を倍にするごとに 1/2 ビットの精
度改善になるだけです。両アプローチのノイズ電力を
比較することで、この比較の根拠となる理論をここに
示します。
単純なオーバーサンプリング
一般的な量子化単位(または LSB) では、この量子
内のノイズは完全にランダムと仮定するか、ホワイト
ノイズと仮定されます。従って、ディジタルまたは量
子化された出力 (ADC) の量子化ノイズ電力と RMS 量
子化電圧は、下記式で求められます:
式 5:
q
---
e 2 rms
2
q 2= 1--- ∫– q e 2 de = ----12
q ------
(V2)
2
qrms = --------(V)
12
e
例えば、VREF が 5V の 16 ビットコンバータでは、
RMS 量子化ノイズは 22 µV となります。
ナイキストの定理により、このノイズは 0 から fs/2
の周波数帯域に一様に存在することになり、またノイ
ズのスペクトラム密度(V/√(Hz))を求めることもでき
ます。:
式 6:
e
V
E ( f ) = ( rms ) --2- ⎛ -----------⎞
f s ⎝ Hz⎠
測定対象となる周波数帯域 (fo) でのノイズ電力を決
めるには、この必要な帯域に渡ってノイズを二乗し、
積分しなければなりません。
DS01007A_JP-page 10
© 2006 Microchip Technology Inc.
AN1007
ノイズ姿形の性能を改善することは、高次のデルタ
シグマ変調器設計を使うことで実現できます。高次の
変調器のノイズ電力は下記式で要約できます:
式 7:
n o2
( V2 )
= ( e( f))
2f o
n o = ( e rms ) ⎛ -------⎞
⎝ fs ⎠
1/2
式 10:
(V)
M
2f o
π
n o = e RMS --------------------- ⎛ -------⎞
⎝
2M + 1 f s ⎠
ここで :
fo < fs/2
デルタシグマ変調器は図 17 のように低周波ノイズ
を高周波に押しやることで、オーバーサンプリングの
性能を向上させています。このデルタシグマ変調器の
メリットは、ノイズの姿形にあります。一次のデルタ
シグマ変調器では、OSR を倍にするごとに、9 dB の
精度改善つまり 1.5 ビット分解能改善となります。
蓄積器の出力は、入力信号に量子化により発生する
誤差、つまり下記の図と式で表される量子化信号と同
じものを加えたものになります:
これによれば、M 次の変調器ではサンプリング周波
数を倍にするごとに、ノイズは 3 (2M - 1) dB だけ減少
します。例えば、M = 3 (MCP3551/3 デバイスは3次
の変調器です ) であれば、サンプリング周波数を倍に
するごとに、分解能を 2.5 ビット改善できます。この
アーキテクチャにより MCP3551/3 のようなデバイス
を使えば、ノイズ性能を < 3 µV とすることができま
す。図 17 に周波数領域のノイズ姿形を示します。ノ
イズは、オーバーサンプリング周波数 (fs) 付近の高い
周波数に押しやられています。さらに注意すべきは、
熱雑音もOSRを倍にする都度、標準平均化規則の3 dB
(1/2 ビット ) 改善に従い、信号の一部として処理される
ことです。
ディジタル
フィルタ
大きさ
fs/2fo が OSR(OSR:オーバーサンプリング比)で
あることを思い出せば、OSR を大きくすればノイズが
OSR の平方根で減少するということが分かります。[1]
従って、サンプリング周波数を倍にするとわずか
3 dBしか性能改善されず、これは0.5ビット分解能増に
しかなりません。
1
M + --2
STF
量子化
蓄積
xi
yi
-
+
+
遅延
ei
図 16:
一次デルタシグマ変調器のサンプル
データからみた等価図 [1]
式 8:
yi = xi – 1 + ( ei – ei – 1 )
0
f0
2f0
ナイキスト
周波数
fs
オーバーサンプリング
図 17:
必要な帯域で低ノイズレベルを達成
したデルタシグマ変調器のノイズ姿形。これは
高速 SAR ADC の単純オーバーサンプリングと平
均化だけでは不可能。
(注:STF は Signal Transfer Function の略、すなわ
ち信号伝達関数)
ノイズ密度 (ei-ei-1) を求め、それを二乗し、最終的
に使う帯域に渡って積分することで、再度ノイズ電力
に変換します:
式 9:
3---
π 2f o 2
n o = e RMS ------- ⎛⎝ -------⎞⎠
3 fs
デルタシグマ変調器は OSR を倍にするごとに 9 dB
( または 1.5 ビット ) 帯域ノイズが減少します。単純な
オーバーサンプリングより3倍よくなります。
© 2006 Microchip Technology Inc.
DS01007A_JP-page 11
AN1007
付録 B:
ソフトウェア - SPI™ 通信のアセンブラプログラム
表 B-1:
SPI _ PIC18F252.ASM
;=============================================================================
; Software License Agreement
;
; The software supplied herewith by Microchip Technology Incorporated
; (the “Company”) for its PICmicro(r) microcontroller is intended and
; supplied to you, the Company’s customer, for use solely and
; exclusively on Microchip PICmicro Microcontroller products. The
; software is owned by the Company and/or its supplier, and is
; protected under applicable copyright laws. All rights are reserved.
; Any use in violation of the foregoing restrictions may subject the
; user to criminal sanctions under applicable laws, as well as to
; civil liability for the breach of the terms and conditions of this
; license.
;
; THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
; WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
; TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
; PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
; IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
; CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
;
;=============================================================================
;
Filename:
840DSM.asm
;=============================================================================
;
Author:
Craig L. King
;
Company:
Microchip Technology Inc.
;
Revision:
1.00
;
Date:
July 21, 2004
;
Assembled using MPASM(tm) WIN compiler
;=============================================================================
;
Include Files:
p18f252.inc
V1.3
;=============================================================================
;
;=============================================================================
list p=18f252;list directive to define processor
#include <p18f252.inc>;processor specific definitions
; Change the following lines to suit your application.
__CONFIG
__CONFIG
__CONFIG
__CONFIG
__CONFIG
__CONFIG
__CONFIG
__CONFIG
__CONFIG
__CONFIG
__CONFIG
_CONFIG1H,
_CONFIG2L,
_CONFIG2H,
_CONFIG3H,
_CONFIG4L,
_CONFIG5L,
_CONFIG5H,
_CONFIG6L,
_CONFIG6H,
_CONFIG7L,
_CONFIG7H,
_OSCS_OFF_1H & _HS_OSC_1H
_BOR_ON_2L & _PWRT_OFF_2L
_WDT_OFF_2H
_CCP2MX_OFF_3H
_STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
_CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
_CPB_OFF_5H & _CPD_OFF_5H
_WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
_WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
_EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
_EBTRB_OFF_7H
;---------------------------------------------------------------------------;Constants
SPBRG_VAL
EQU
.64
;set baud rate 19.2 for 20Mhz clock
;----------------------------------------------------------------------------
DS01007A_JP-page 12
© 2006 Microchip Technology Inc.
AN1007
表 B-1:
SPI _ PIC18F252.ASM (CONTINUED)
;Bit Definitions
GotNewData
#define
#define
#define
#define
#define
#define
EQU
0
do
0
di
1
CLK
PORTC,2
ADCS
PORTC,3
DIN
PORTC, 4
BITCOUNT 0x08
;bit indicates new data received
;transmit bit
;transmit bit
;clock
;chip select
;data in / READY
;---------------------------------------------------------------------------;Variables
CBLOCK
0x000
Flags
;byte
RxData
;data
TxData
;data
ParityByte
;byte
ParityBit
;byte
to store indicator flags
received
to transmit
used for parity calculation
to store received parity bit
COUNT
COUNT2
COUNT3
DLYCNT
DLYCNT1
DLYCNT2
byte2
byte1
byte0
ENDC
;---------------------------------------------------------------------------;This code executes when a reset occurs.
ResetCode:
ORG
0x0000 ;place code at reset vector
bra
Main
;go to beginning of program
;---------------------------------------------------------------------------;This code executes when a high priority interrupt occurs.
ORG 0x0008
HighIntCode:
;place code at interrupt vector
;do interrupts here
reset
;error if no valid interrupt so reset
;---------------------------------------------------------------------------;This code executes when a low priority interrupt occurs.
ORG
LowIntCode:
0x0018 ;place code at interrupt vector
;do interrupts here
reset
;error if no valid interrupt so reset
;
© 2006 Microchip Technology Inc.
DS01007A_JP-page 13
AN1007
表 B-1:
SPI _ PIC18F252.ASM (CONTINUED)
;
MAIN ROUTINE
;---------------------------------------------------------------------------;Main routine calls the receive polling routines and checks for a byte
;received. It then calls a routine to transmit the data back.
;
;
;This routine sets up the USART and then samples the MCP3551, and sends the 3 bytes out
;on the USART, THEN REPEAT
;
;------------------------------------------------------------------------------
Main:
rcall
SetupSerial
;set up serial port
;do other initialization here
movlw
b’11010000’
movwf
TRISC
MainLoop:
;go get the 3551 data
rcall
Sample3551
movff
byte2,TxData
bsf
rcall
TXSTA,TX9D
TransmitSerial ;go transmit the data
movff
byte1,TxData
bcf
rcall
TXSTA,TX9D
TransmitSerial ;go transmit the data
movff
byte0,TxData
bcf
rcall
TXSTA,TX9D
TransmitSerial ;go transmit the data
DoOtherStuff:;do other stuff here
bra
MainLoop
;go do main loop again
;----------------------------------------------------------------------------
DS01007A_JP-page 14
© 2006 Microchip Technology Inc.
AN1007
表 B-1:
SPI _ PIC18F252.ASM (CONTINUED)
;Check if data received and if so, place in a register and check parity.
ReceiveSerial: btfss
PIR1,RCIF
return
;check if data received
;return if no data
btfsc
bra
btfsc
bra
RCSTA,OERR
ErrSerialOverr
RCSTA,FERR
ErrSerialFrame
;if overrun error occurred
;then go handle error
;if framing error occurred
;then go handle error
movf
movwf
movf
movwf
RCSTA,W
ParityBit
RCREG,W
RxData
;get
;and
;get
;and
rcall
movf
xorwf
btfsc
bra
bsf
return
CalcParity
;calculate parity
ParityBit,W
;get received parity bit
ParityByte,F
;compare with calculated parity bit
ParityByte,0
;check result of comparison
ErrSerlParity ;if parity is different, then error
Flags,GotNewData ;else indicate new data received
received parity bit
save
received data
save
;error because OERR overrun error bit is set
;can do special error handling here - this code simply clears and continues
ErrSerialOverr:bcf
RCSTA,CREN
bsf
RCSTA,CREN
return
;reset the receiver logic
;enable reception again
;error because FERR framing error bit is set
;can do special error handling here - this code simply clears and continues
ErrSerialFrame:movf
RCREG,W
return
;discard received data that has error
;error because parity bit is not correct
;can do special error handling here - this code simply clears and continues
ErrSerlParity: return
;return without indicating new data
;---------------------------------------------------------------------------;Transmit data in WREG with parity when the transmit register is empty.
TransmitSerial:btfss
bra
movf
PIR1,TXIF
$-2
;check if transmitter busy
;wait until transmitter is not busy
TxData,W
;get data to be transmitted
movf
TxData,W
movwf
TXREG
return
;get data to transmit
;transmit the data
;----------------------------------------------------------------------------
© 2006 Microchip Technology Inc.
DS01007A_JP-page 15
AN1007
表 B-1:
SPI _ PIC18F252.ASM (CONTINUED)
;Calculate even parity bit.
;Data starts in working register, result is in LSB of ParityByte
CalcParity:
movwf
rrncf
xorwf
movwf
rrncf
rrncf
xorwf
swapf
xorwf
return
ParityByte
ParityByte,W
ParityByte,W
ParityByte
ParityByte,F
ParityByte,F
ParityByte,F
ParityByte,W
ParityByte,F
;get data for parity calculation
;rotate
;compare all bits against neighbor
;save
;rotate
;rotate
;compare every 2nd bit and save
;rotate 4
;compare every 4th bit and save
;---------------------------------------------------------------------------;Set up serial port.
SetupSerial:
movlw
iorwf
movlw
movwf
movlw
movwf
movlw
movwf
clrf
return
0xc0
TRISC,F
SPBRG_VAL
SPBRG
0x64
TXSTA
0xd0
RCSTA
Flags
;set tris bits for TX and RX
;set baud rate
;enable nine bit tx and high baud rate
;enable serial port and nine bit rx
;clear all flags
;*********************************************************
;*********************************************************
;------------------------------------------------------------------------------------;
;Sample3551
;
;This is where you sample the MCP3551 and put your 22-bit
;answer into the following bytes:
;
byte 2
-byte 1
-byte 0
;
MSB
LSB
;
; This routine returns the data
;-------------------------------------------------------------------------------------
DS01007A_JP-page 16
© 2006 Microchip Technology Inc.
AN1007
表 B-1:
SPI _ PIC18F252.ASM (CONTINUED)
Sample3551
clrf
clrf
clrf
byte2
byte1
byte0
; reset input buffer
; reset input buffer
; reset input buffer
bsf
bcf
CLK
ADCS
; clock idle high
;INITIATE THE CONVERSION
movlw
call
.6
VAR1000TcyDELAY
; delay 1ms
bsf
ADCS
;CS HIGH (Single Conversion mode)
movlw
call
call
call
.160
VAR1000TcyDELAY
VAR1000TcyDELAY
VAR1000TcyDELAY
;
;
;
;
bcf
ADCS
; GET THE CONVERSION DATA
BITCOUNT
COUNT
; FIRST BYTE
CLK
CLK
STATUS,C
DIN
STATUS,C
byte2, f
COUNT, f
FIRST_BYTE
;
;
;
;
;
;
;
;
movlw
movwf
FIRST_BYTE
bcf
bsf
bcf
btfsc
bsf
rlcf
decfsz
goto
movlw
BITCOUNT
movwf
COUNT
SECOND_BYTE
bcf
CLK
bsf
CLK
bcf
STATUS,C
btfsc
DIN
bsf
STATUS,C
rlcf
byte1, f
decfsz COUNT, f
goto
SECOND_BYTE
movlw
BITCOUNT
movwf
COUNT
THIRD_BYTE
bcf
CLK
bsf
CLK
bcf
STATUS,C
btfsc
DIN
bsf
STATUS,C
rlcf
byte0, f
decfsz COUNT, f
goto
THIRD_BYTE
bsf
CLK
© 2006 Microchip Technology Inc.
total
delay
delay
delay
delay 110ms (GREATER THAN TCONV, CAN BE REDUCED)
160k Tcy
250k Tcy
250k Tcy
drop clock for next bit
set clock to latch bit
pre-clear carry
check for high or low bit
set carry bit
roll the carry bit left into position
decrement bit counter
get next bit
; SECOND BYTE
;
;
;
;
;
;
;
;
drop clock for next bit
set clock to latch bit
pre-clear carry
check for high or low bit
set carry bit
roll the carry bit left into place
decrement bit counter
get next bit
; THIRD BYTE
; drop clock for next bit
; set clock to latch bit
; pre-clear carry
; check for high or low bit
; set carry bit
; roll the carry bit left into place
; decrement bit counter
; get next bit
;clock idles high
DS01007A_JP-page 17
AN1007
表 B-1:
SPI _ PIC18F252.ASM (CONTINUED)
bsf
retlw
ADCS
0
;deselect A/D converter
; We’re finished - Return!
;******************* VARIABLE DELAY SUBROUTINES *******************
;
DLYCNT1 = F9h = 249d
DLYCNT2 = W
;
DELAY = T((4 DLYCNT1 + 4) DLYCNT2 + 4)
;
;
ex. To create a 300ms delay when using a 4Mhz osc, 300-250 = 50
;
movlw
.50
;load .50 into WREG
;
call
VAR1000TcyDELAY
;call VAR1000TcyDELAY = 50ms delay w/4MHz Osc
;
call
VAR1000TcyDELAY
;call VAR1000TcyDELAY = 250ms delay w/4MHz Osc
;
;total = 300ms delay
;************
; The value in W at the time of the CALL = x. Delay = 1000Tcy*x
VAR1000TcyDELAY
movwf
DLYCNT2
;LOADS CONTROLLING DLY # INTO PRIMARY COUNTER
DLOOP2
movlw
.249
;MAXIMIZES THE SECONDARY DLY COUNTER
movwf
DLYCNT1
;
DLOOP1
clrwdt
;or NOP
decfsz DLYCNT1,f
; DECREMENT AND TEST SECONDARY LOOP FOR ZERO
goto
DLOOP1
; CONTINUE SECONDARY LOOP
decfsz DLYCNT2,f
; DECREMENT AND TEST PRIMARY DLY COUNTER
goto
DLOOP2
; CONTINUE PRIMARY LOOP
retlw
.250
; preload W for the next CALL VAR1000TcyDELAY
;************
; VARIABLE 5 Tcy DELAY UP TO 256*5Tcy+5Tcy
;
DLYCNT1 = W
;
DELAY = T(1 + 5 DLYCNT1 - 1) + CALL + RETLW
;
;
ex. To create a 250us delay, (250/5)-1 = 49
;
movlw
.49
;load .49 into WREG
;
call
VAR5TcyDELAY
; call VAR5TcyDELAY
;************
; The value in W at the time of the CALL = x. Delay = 5*Tcy + 5Tcy
VAR5TcyDELAY
movwf
DLYCNT1
; LOADS CONTROLLING DLY # INTO PRIMARY COUNTER
DLOOP3
clrwdt
;or NOP
nop
decfsz DLYCNT1,f
; DECREMENT AND TEST ZERO
goto
DLOOP3
; CONTINUE LOOP
retlw
.250
; preload W for the next CALL VAR5TcyDELAY
;******************************************************************************
H
END
DS01007A_JP-page 18
© 2006 Microchip Technology Inc.
AN1007
付録 C:
表 C-1:
ハードウェア - SPI™ 通信の C 言語プログラム
MCP3551.C
/*********************************************************************
*
*
Microchip USB C18 Firmware - MCP3551 PICtail(tm) Demo
*
*********************************************************************
* FileName:
MCP3551.c
* Dependencies:
See INCLUDES section below
* Processor:
PIC18
* Compiler:
C18 2.30.01+
* Company:
Microchip Technology Inc.
*
* Software License Agreement
*
* The software supplied herewith by Microchip Technology Incorporated
* (the Company) for its PICmicro(r) microcontroller is intended and
* supplied to you, the Company’s customer, for use solely and
* exclusively on Microchip PICmicro(r) microcontroller products. The
* software is owned by the Company and/or its supplier, and is
* protected under applicable copyright laws. All rights are reserved.
* Any use in violation of the foregoing restrictions may subject the
* user to criminal sanctions under applicable laws, as well as to
* civil liability for the breach of the terms and conditions of this
* license.
*
* THIS SOFTWARE IS PROVIDED IN AN ”AS IS” CONDITION. NO WARRANTIES,
* WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
* TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
* IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
*
* Author
Date
Comment
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Pat Richards
xx/xx/xx
Original.
********************************************************************/
/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include <usart.h>
#include <spi.h>
#include "system\typedefs.h"
#include "system\usb\usb.h"
#include "io_cfg.h"
#include "user\MCP3551.h"
// I/O pin mapping
/** V A R I A B L E S ********************************************************/
#pragma udata
//byte old_sw2,old_sw3;
BOOL emulate_mode;
rom signed char dir_table[]={-4,-4,-4, 0, 4, 4, 4, 0};
byte movement_length;
byte vector = 0;
byte AquireData = 1;
char buffer[3];
//0 = STOP; 1 = Aquire
char inbuffer[BUF_SIZE];
char outbuffer[BUF_SIZE];
byte TimerCounter = 0xF0;
static unsigned char gSampleFlag;
© 2006 Microchip Technology Inc.
// 8 byte input to USB device buffer
// 8 byte output to USB device buffer
DS01007A_JP-page 19
AN1007
表 C-1:
MCP3551.C (CONTINUED)
/** P R I V A T E P R O T O T Y P E S ***************************************/
void Read3551(char *data);
unsigned char ReadSPI( void );
void CheckBoardConnect(void);
/** D E C L A R A T I O N S **************************************************/
#pragma code
void UserInit(void)
{
byte i;
CS_PTBoard_HIGH();
//Drive high
tris_CS = 0; //Output
OpenSPI(SPI_FOSC_16, MODE_11, SMPMID);
TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 0;
//------------------------// initialize variables
//------------------------for (i=0; i<BUF_SIZE; i++)
{
inbuffer[i]=0;
outbuffer[i]=0;
}
//Timer 0
TMR0H = 0;
TMR0L = 0;
T0CONbits.PSA = 0;
T0CONbits.T0PS2 = 1;
T0CONbits.T0PS1 = 1;
T0CONbits.T0PS0 = 1;
T0CONbits.T0CS = 0;
}//end UserInit
//SDI
//SCK
// initialize input and output buffer to 0
//clear timer
//clear timer
//Assign prescaler to Timer 0
//Setup prescaler
//Will time out every 51 us based on
//20 MHz Fosc
//Increment on instuction cycle
/******************************************************************************
* Function:
void ProcessIO(void)
*
* PreCondition:
None
*
* Input:
None
*
* Output:
None
*
* Side-Effects:
None
*
* Overview:
This function is a place holder for other user routines.
*
It is a mixture of both USB and non-USB tasks.
*
* Note:
None
*****************************************************************************/
DS01007A_JP-page 20
© 2006 Microchip Technology Inc.
AN1007
表 C-1:
MCP3551.C (CONTINUED)
void ProcessIO(void)
{
char n;
// User Application USB tasks
if((usb_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return;
if (HIDRxReport(inbuffer, 1))
{
switch(inbuffer[0])
{
case START_ACQUISITION:
AquireData = 1;
CS_PTBoard_LOW();
TimerCounter = 0xFF;
break;
// USB receive buffer has data
// interpret command
// 'S' START aquisition of data
//Start conversion
case STOP_ACQUISITION:
AquireData = 0;
break;
// 'T' STOP aquisition of data
case CHANNEL_SELECTION:
break;
// 'C' A/D Channel Selection
default:
// unrecognized or null command
;
}// END switch(inbuffer[0])
}//END if (HIDRxReport(inbuffer, 1)
//Inst. cycle = 200 ns; TMR0IF sets every 51 us
if(INTCONbits.TMR0IF)
{
TimerCounter++;
if (!TimerCounter)
//if rolled over, set flag. User code will handle the rest.
{
TimerCounter = 0xFE;
gSampleFlag = 1;
}
INTCONbits.TMR0IF = 0;
}
//MCU checks every 10 ms if conversion is finished
if(AquireData & gSampleFlag)
{
CS_PTBoard_LOW();
//
for(n=0;n<5;n++);
if (SDIpin == 0)
Read3551(outbuffer);
CS_PTBoard_HIGH();
//
gSampleFlag = 0;
//clear timeout indicator
if(!mHIDTxIsBusy())
HIDTxReport(outbuffer,3);
}
}//end ProcessIO
© 2006 Microchip Technology Inc.
DS01007A_JP-page 21
AN1007
表 C-1:
MCP3551.C (CONTINUED)
/******************************************************************************
* Function:
void Read3551(char *data)
*
* PreCondition:
None
*
* Input:
Pointer to a string; must be three bytes min
*
* Output:
None
*
* Side-Effects:
None
*
* Overview:
*
* Note:
*****************************************************************************/
void Read3551(char *data)
{
unsigned char n;
data[2] = ReadSPI();
data[1] = ReadSPI();
data[0] = ReadSPI();
}
/******************************************************************************
* Function:
CheckBoardConnect(void)
*
* PreCondition:
None
*
* Input:
None
*
* Output:
None
*
* Overview:
Checks if the Stimulus Board is attached. Future expansion.
*
* Side-Effects:
None
/******************************************************************************/
void CheckBoardConnect(void)
{
}
/** EOF MCP3551.c********************************************************/
DS01007A_JP-page 22
© 2006 Microchip Technology Inc.
マイクロチップデバイスのコード保護機能に関する以下の点に留意ください。
•
マイクロチップの製品は各製品独自のマイクロチップデーターシートにある仕様を満たしています。
•
各製品ファミリーは、通常の状態で所定の方法で利用いただければ市場にある類似製品の中で最も安全なファミリーの一つと
マイクロチップは信じております。
•
不正かつ非合法な方法を使ったコード保護機能の侵害があります。弊社の理解ではこうした手法は、マイクロチップデーター
シートにある動作仕様書以外の方法でマイクロチップ製品を使用することになります。こうした手法を使用した人は、ほとん
どの場合、知的財産権の侵害となります。
•
マイクロチップはコードの統合性に関心をお持ちの顧客とは協働させていただきます。
•
マイクロチップまたは他のセミコンダクターメーカーがコードの安全性を保証したものではありません。コード保護は製品保
護が「破られない」ということを保証するものではありません。
コード保護は常に進化します。マイクロチップは、当社製品のコード保護機能を継続的に改善することをお約束いたします。マク
ロチップのコード保護機能を破ることは、デジタル・ミレニアム著作権法に違反します。こうした行為によるソフトウェアーや著
作権に関わる作品への不正アクセスがあった場合、同法に基づき賠償請求する権利があります。
本書の日本語版はユーザーの使用のために提供されます。
Microchip Technology Inc. とその子会社、関連会社、すべ
ての取締役、役員、職員、代理人は翻訳の間違いにより起こ
るいかなる責も負わないものとします。間違いが疑われる個
所については、Microchip Technology Inc. 発行のオリジナ
ル文書を参照いただくようお奨めします。
商標
本書の日本語版はユーザーの使用のために提供されます。
Microchip Technology Inc. とその子会社、関連会社、すべ
ての取締役、役員、職員、代理人は翻訳の間違いにより起こ
るいかなる責も負わないものとします。間違いが疑われる個
所については、Microchip Technology Inc. 発行のオリジナ
ル文書を参照いただくようお奨めします。
AmpLab、FilterLab、Migratable Memory、MXDEV、MXLAB、
PICMASTER、SEEVAL、SmartSensor、The Embedded
Control Solutions Company は、米国においてマイクロチッ
プテクノロジーインク の登録商標です。
本書に書かれているデバイスアプリケーション等に関する内
容は、参考情報に過ぎません。ご利用のアプリケーションが
仕様を満たしているかどうかについては、お客様の責任にお
いて確認をお願いします。これらの情報の正確さ、またはこ
れの情報の使用に関し、マイクロチップテクノロジーインク
はいかなる表明と保証を行うものではなく、また、一切の責
任を負うものではありません。マイクロチップの明示的な書
面による承認なしに、生命維持装置あるいは生命安全用途に
マイクロチップの製品を使用することはすべて購入者のリス
クとし、また購入者はこれによって起きたあらゆる損害、ク
レーム、訴訟、費用に関して、マイクロチップは擁護され、
免責され、損害をうけないことに同意するものとします。知
的財産権に基づくライセンスを暗示的に与えたものではあり
ません。
マイクロチップの名称とロゴ、マイクロチップのロゴ、
Accuron、dsPIC、KEELOQ、microID、MPLAB、PIC、
PICmicro、PICSTART、PRO MATE、PowerSmart、rfPIC、
SmartShunt は米国及び他の国々のにおいて、マイクロチッ
プテクノロジーインク の登録商標です。
Analog-for-the-Digital Age、Application Maestro、
dsPICDEM、dsPICDEM.net、dsPICworks、ECAN、
ECONOMONITOR、FanSense、FlexROM、fuzzyLAB、InCircuit Serial Programming、ICSP、ICEPIC、Linear Active
Thermistor、MPASM、MPLIB、MPLINK、MPSIM、PICkit、
PICDEM、PICDEM.net、PICLAB、PICtail、PowerCal、
Powerlnfo、PowerMate、PowerTool、rfLAB、rfPICDEM、
Select Mode、Smart Serial、SmartTel、Total Endurance、
UNI/O、WiperLock、及び Zena は、米国及び他の国々のにお
いて、マイクロチップテクノロジーインク の登録商標とで
す。
SQTP は米国においてマイクロチップテクノロジーインクの
サービスマークです。
本書に記載された上記以外の商標は、それぞれの会社の財産
です。
著作権。 © 2006 年マイクロチップテクノロジーインク、米
国で印刷。無断複写・転載を禁じます。
再生紙を使用。
マイクロチップは、1OS/TS-16949 を受けました。本社、アリゾナ
州チャンドラーとテンペとカリフォルニア州マウンテンビューにあ
るデザイン及びウエハー施設に対する 2003 年 10 月品質システム認
証です。弊社の品質システムプロセスと手続きは、PICmicro® 8-bit
MCUs、KEELOQ® コードホッピングデバイス、シリアル EEPROMs、
マイクロペリフェラル、非揮発性メモリーとアナログ製品を対象と
しています。更に、開発システムの設計及び製造に関するマイクロ
チップの品質システムは、2000 年に ISO9001 の認証を受けていま
す。
© 2006 Microchip Technology Inc.
DS01007A_JP-page 23
全世界の販売及びサービス拠点
AMERICAS
ASIA/PACIFIC
ASIA/PACIFIC
EUROPE
Corporate Office
2355 West Chandler Blvd.
Chandler, AZ 85224-6199
Tel: 480-792-7200
Fax: 480-792-7277
Technical Support:
http://support.microchip.com
Web Address:
www.microchip.com
Australia - Sydney
Tel: 61-2-9868-6733
Fax: 61-2-9868-6755
India - Bangalore
Tel: 91-80-4182-8400
Fax: 91-80-4182-8422
China - Beijing
Tel: 86-10-8528-2100
Fax: 86-10-8528-2104
India - New Delhi
Tel: 91-11-5160-8631
Fax: 91-11-5160-8632
Austria - Wels
Tel: 43-7242-2244-399
Fax: 43-7242-2244-393
Denmark - Copenhagen
Tel: 45-4450-2828
Fax: 45-4485-2829
China - Chengdu
Tel: 86-28-8676-6200
Fax: 86-28-8676-6599
India - Pune
Tel: 91-20-2566-1512
Fax: 91-20-2566-1513
France - Paris
Tel: 33-1-69-53-63-20
Fax: 33-1-69-30-90-79
China - Fuzhou
Tel: 86-591-8750-3506
Fax: 86-591-8750-3521
Japan - Yokohama
Tel: 81-45-471- 6166
Fax: 81-45-471-6122
Germany - Munich
Tel: 49-89-627-144-0
Fax: 49-89-627-144-44
China - Hong Kong SAR
Tel: 852-2401-1200
Fax: 852-2401-3431
Korea - Gumi
Tel: 82-54-473-4301
Fax: 82-54-473-4302
China - Qingdao
Tel: 86-532-8502-7355
Fax: 86-532-8502-7205
Korea - Seoul
Tel: 82-2-554-7200
Fax: 82-2-558-5932 or
82-2-558-5934
Atlanta
Alpharetta, GA
Tel: 770-640-0034
Fax: 770-640-0307
Boston
Westborough, MA
Tel: 774-760-0087
Fax: 774-760-0088
Chicago
Itasca, IL
Tel: 630-285-0071
Fax: 630-285-0075
Dallas
Addison, TX
Tel: 972-818-7423
Fax: 972-818-2924
Detroit
Farmington Hills, MI
Tel: 248-538-2250
Fax: 248-538-2260
Kokomo
Kokomo, IN
Tel: 765-864-8360
Fax: 765-864-8387
Los Angeles
Mission Viejo, CA
Tel: 949-462-9523
Fax: 949-462-9608
San Jose
Mountain View, CA
Tel: 650-215-1444
Fax: 650-961-0286
China - Shanghai
Tel: 86-21-5407-5533
Fax: 86-21-5407-5066
China - Shenyang
Tel: 86-24-2334-2829
Fax: 86-24-2334-2393
China - Shenzhen
Tel: 86-755-8203-2660
Fax: 86-755-8203-1760
China - Shunde
Tel: 86-757-2839-5507
Fax: 86-757-2839-5571
China - Wuhan
Tel: 86-27-5980-5300
Fax: 86-27-5980-5118
China - Xian
Tel: 86-29-8833-7250
Fax: 86-29-8833-7256
Malaysia - Penang
Tel: 60-4-646-8870
Fax: 60-4-646-5086
Philippines - Manila
Tel: 63-2-634-9065
Fax: 63-2-634-9069
Italy - Milan
Tel: 39-0331-742611
Fax: 39-0331-466781
Netherlands - Drunen
Tel: 31-416-690399
Fax: 31-416-690340
Spain - Madrid
Tel: 34-91-708-08-90
Fax: 34-91-708-08-91
UK - Wokingham
Tel: 44-118-921-5869
Fax: 44-118-921-5820
Singapore
Tel: 65-6334-8870
Fax: 65-6334-8850
Taiwan - Hsin Chu
Tel: 886-3-572-9526
Fax: 886-3-572-6459
Taiwan - Kaohsiung
Tel: 886-7-536-4818
Fax: 886-7-536-4803
Taiwan - Taipei
Tel: 886-2-2500-6610
Fax: 886-2-2508-0102
Thailand - Bangkok
Tel: 66-2-694-1351
Fax: 66-2-694-1350
Toronto
Mississauga, Ontario,
Canada
Tel: 905-673-0699
Fax: 905-673-6509
DS01007A_JP-page 24
© 2006 Microchip Technology Inc.