Docs/E2J/AN008
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
&size(20){&color(,#FFE9C8){''Sigma-Delta A/D変換''};};
//邦題タイトル
&size(15){''原題:AN008 Sigma-delta Analog to Digital Con...
//洋題タイトル
-----
状態:''この文書は現在翻訳中です''
//もしくは''この文書の翻訳作業は完了しています''
原文:
//原文へのリンクなど
翻訳者:caskaz
//翻訳協力者のTwitterID,ハンドル名 例:@ksksue
対象読者:A/D変換したい人
//誰向けの文書か簡単に。例:アセンブラ超初心者
#contents
//自動的に目次が生成されます
//最初のページ製作者は以下目次のタイトルを先に翻訳してお...
*抜粋 [#u1b828f5]
P8X32Aの任意のCogで2本のI/Oピンと安価な受動素子を使ってS...
この簡単な技術は校正はもちろん、マルチ・アナログ入力、マ...
*前文 [#u1b828f5]
Propellerの8個のCogはそれぞれが2つの多機能カウンターモ...
これは
*原理 [#u1b828f5]
アナログ回路を設計する人なら図1のような反転オペアンプを...
図1に於いてオペアンプの出力はマイナス入力ピンとプラス入...
アナログ入力電圧がゼロの場合、Vdd/2が印加されたプラス入力...
仮にアナログ入力がVddならオペアンプ出力はバランスを維持す...
さてオペアンプの代わりにCMOSのDフリップフロップに高い周波...
オペアンプのようにフリップフロップの負帰還(コンデンサに...
アナログ入力がゼロの時、/Q出力はVdd(論理値:1)を維持し...
逆に、アナログ入力がVddの時は/Q出力はVss(論理値:0)を維...
中間点では/Q出力はD入力がVdd/2で平衡するのに必要な補正量...
例えばアナログ入力がVdd/4なら、/QはD入力がVdd/2を保持する...
アナログ入力電圧値を測定するには補正する/Q出力のduty cycl...
そしてQ出力はクロック数と同義なのでこのduty cycleはフリッ...
これがSigma-Delta A/D変換の根本的要素です。
*PropellerのSigma-deltaアプリケーション [#u1b828f5]
**カウンターレジスタ [#p892ba0d]
PropellerはSigma-Delta A/D変換を簡単に実現するためのハー...
system conter registerは内部クロックによって1ずつ増加し...
80MHz内部クロックの場合、CNTの1周期は大体53秒です。
各々のCogは2つのカウンタを持ち、特殊機能レジスタCTRx,FRQ...
CTRxレジスタはカウンタモードを決定し、カウンタが使う外部...
Signa-delta動作ではカウンタモードは"positive and feedback...
これはカウンタがその入力の論理レベルが"high"の間にクロッ...
図3はSigma-delta動作で使用するCTRxレジスタのビット配置図...
PHSxレジスタは入力ピンのレベルがHiの間FRQxレジスタの値が...
大抵、Signa-delta動作ではFRQxレジスタには1がセットされま...
この書式で設定するとカウンタは図2のDフリップフロップの様...
**ハードウェア [#p892ba0d]
**配置 [#p892ba0d]
**ソフトウェア手順 [#p892ba0d]
カウンターをSigna-delta動作させるために以下の手順でセット...
1. FEQxレジスタに1をセット
2. CTRxを図3のようにセット
3. feedback pinが出力設定となるように相当するビットを1...
A/D変換の為に以下をPASMで書く
1. CNTを変数timeにコピーして16を加算する
2. intervalをtimeに加算する(WAITCNT time, interval )
3. PHSxを負数にしてaccに記録
4. 2.でセットした時間まで待つ(WAITCNT time, interval )
5. PHSxの値をaccに加算する
intervalのクロック数の間にPHSxの値が増加する。この増加分...
以下のPASM(Propeller Assembly)が上記のコーディング例です。
説明の為にコメント欄を日本語にしています。
CON
INP_PIN = 8
FB_PIN = 9
ADC_INTERVAL = 512 'サンプリング時間=5...
DAT
org 0
adc_cog mov frqa,#1 'frqaに1をセット
movi ctra,#%0_01001_000 'ctraモードをpositiv...
movd ctra,#FB_PIN 'ディストネーション...
movs ctra,#INP_PIN 'ソースフィールドに...
mov dira,fb_mask 'feedback pinを出力...
mov result_addr,par '@valueをresult_addr...
'spinコードで@value(...
main_loop call #adc 'A/D変換スタート
wrlong acc,result_addr '変換結果をHubRAMに...
jmp #main_loop '次のA/D変換
adc move time,cnt '現在のcntをtimeにコ...
add time,#16 '少し先の時間(16...
waitcnt time,interval 'timeまで待機してtim...
neg acc,phsa '現在のphsaの負数を...
waitcnt time,#0 'timeまで待機
add acc,phsa '現在のphsaにacc(A/D...
adc_ret ret
fb_mask long 1 << FB_PIN 'feedback pinをマスク
result_addr long 0-0
interval long ADC_INTERVAL
acc res 1 'General-purpose acc...
time res 1 'Time variable use f...
セットアップが完了したらmain_loopはadcをくり返しコールし...
cognew(@adc_cog, @value)
offsetの大きさと結果に対するスケールはintervalで使われる...
言い換えるとPHSxレジスタは
**校正 [#p892ba0d]
*応用例 [#u1b828f5]
**多入力 [#p892ba0d]
**交流信号の変換 [#p892ba0d]
終了行:
&size(20){&color(,#FFE9C8){''Sigma-Delta A/D変換''};};
//邦題タイトル
&size(15){''原題:AN008 Sigma-delta Analog to Digital Con...
//洋題タイトル
-----
状態:''この文書は現在翻訳中です''
//もしくは''この文書の翻訳作業は完了しています''
原文:
//原文へのリンクなど
翻訳者:caskaz
//翻訳協力者のTwitterID,ハンドル名 例:@ksksue
対象読者:A/D変換したい人
//誰向けの文書か簡単に。例:アセンブラ超初心者
#contents
//自動的に目次が生成されます
//最初のページ製作者は以下目次のタイトルを先に翻訳してお...
*抜粋 [#u1b828f5]
P8X32Aの任意のCogで2本のI/Oピンと安価な受動素子を使ってS...
この簡単な技術は校正はもちろん、マルチ・アナログ入力、マ...
*前文 [#u1b828f5]
Propellerの8個のCogはそれぞれが2つの多機能カウンターモ...
これは
*原理 [#u1b828f5]
アナログ回路を設計する人なら図1のような反転オペアンプを...
図1に於いてオペアンプの出力はマイナス入力ピンとプラス入...
アナログ入力電圧がゼロの場合、Vdd/2が印加されたプラス入力...
仮にアナログ入力がVddならオペアンプ出力はバランスを維持す...
さてオペアンプの代わりにCMOSのDフリップフロップに高い周波...
オペアンプのようにフリップフロップの負帰還(コンデンサに...
アナログ入力がゼロの時、/Q出力はVdd(論理値:1)を維持し...
逆に、アナログ入力がVddの時は/Q出力はVss(論理値:0)を維...
中間点では/Q出力はD入力がVdd/2で平衡するのに必要な補正量...
例えばアナログ入力がVdd/4なら、/QはD入力がVdd/2を保持する...
アナログ入力電圧値を測定するには補正する/Q出力のduty cycl...
そしてQ出力はクロック数と同義なのでこのduty cycleはフリッ...
これがSigma-Delta A/D変換の根本的要素です。
*PropellerのSigma-deltaアプリケーション [#u1b828f5]
**カウンターレジスタ [#p892ba0d]
PropellerはSigma-Delta A/D変換を簡単に実現するためのハー...
system conter registerは内部クロックによって1ずつ増加し...
80MHz内部クロックの場合、CNTの1周期は大体53秒です。
各々のCogは2つのカウンタを持ち、特殊機能レジスタCTRx,FRQ...
CTRxレジスタはカウンタモードを決定し、カウンタが使う外部...
Signa-delta動作ではカウンタモードは"positive and feedback...
これはカウンタがその入力の論理レベルが"high"の間にクロッ...
図3はSigma-delta動作で使用するCTRxレジスタのビット配置図...
PHSxレジスタは入力ピンのレベルがHiの間FRQxレジスタの値が...
大抵、Signa-delta動作ではFRQxレジスタには1がセットされま...
この書式で設定するとカウンタは図2のDフリップフロップの様...
**ハードウェア [#p892ba0d]
**配置 [#p892ba0d]
**ソフトウェア手順 [#p892ba0d]
カウンターをSigna-delta動作させるために以下の手順でセット...
1. FEQxレジスタに1をセット
2. CTRxを図3のようにセット
3. feedback pinが出力設定となるように相当するビットを1...
A/D変換の為に以下をPASMで書く
1. CNTを変数timeにコピーして16を加算する
2. intervalをtimeに加算する(WAITCNT time, interval )
3. PHSxを負数にしてaccに記録
4. 2.でセットした時間まで待つ(WAITCNT time, interval )
5. PHSxの値をaccに加算する
intervalのクロック数の間にPHSxの値が増加する。この増加分...
以下のPASM(Propeller Assembly)が上記のコーディング例です。
説明の為にコメント欄を日本語にしています。
CON
INP_PIN = 8
FB_PIN = 9
ADC_INTERVAL = 512 'サンプリング時間=5...
DAT
org 0
adc_cog mov frqa,#1 'frqaに1をセット
movi ctra,#%0_01001_000 'ctraモードをpositiv...
movd ctra,#FB_PIN 'ディストネーション...
movs ctra,#INP_PIN 'ソースフィールドに...
mov dira,fb_mask 'feedback pinを出力...
mov result_addr,par '@valueをresult_addr...
'spinコードで@value(...
main_loop call #adc 'A/D変換スタート
wrlong acc,result_addr '変換結果をHubRAMに...
jmp #main_loop '次のA/D変換
adc move time,cnt '現在のcntをtimeにコ...
add time,#16 '少し先の時間(16...
waitcnt time,interval 'timeまで待機してtim...
neg acc,phsa '現在のphsaの負数を...
waitcnt time,#0 'timeまで待機
add acc,phsa '現在のphsaにacc(A/D...
adc_ret ret
fb_mask long 1 << FB_PIN 'feedback pinをマスク
result_addr long 0-0
interval long ADC_INTERVAL
acc res 1 'General-purpose acc...
time res 1 'Time variable use f...
セットアップが完了したらmain_loopはadcをくり返しコールし...
cognew(@adc_cog, @value)
offsetの大きさと結果に対するスケールはintervalで使われる...
言い換えるとPHSxレジスタは
**校正 [#p892ba0d]
*応用例 [#u1b828f5]
**多入力 [#p892ba0d]
**交流信号の変換 [#p892ba0d]
ページ名: