Darkside(https対応しました)

2014年08月09日の記事

2014年8月9日(土) 20:39

難しい方断念

 dsPIC30 の A/D 変換には、精度優先の12ビット品種と速度優先の10ビット品種がある。
 今回は速度優先だから10ビット品種を購入した。スペックでは毎秒1メガサンプリング可能とあったが、使用法を見る限りは毎秒500キロサンプリングの速度がギリギリである。だから、なるほどサンプルAとサンプルBを交互に使って倍速を出すのか・・・と思い込んでいた。ところが、どうやら交互に使うモードってのは本当に交互に使うだけで、処理がオーバーラップしないらしい。
 そりゃ、誰も使ってないわけだ。設定が複雑になるだけで意味ないだろ。

 という訳でやる気を無くし、昨日成功した単一チャンネルゆっくり変換だけで何とかすることにした。

LATEbits.LATE0 = 1; // 主電源ON

unsigned int ADcfg1 = ADC_MODULE_ON & ADC_IDLE_CONTINUE & ADC_FORMAT_INTG & ADC_CLK_AUTO & ADC_AUTO_SAMPLING_OFF & ADC_SAMPLE_SIMULTANEOUS & ADC_SAMP_OFF;
unsigned int ADcfg2 = ADC_VREF_AVDD_AVSS & ADC_SCAN_OFF & ADC_CONVERT_CH0 & ADC_SAMPLES_PER_INT_1 & ADC_ALT_BUF_OFF & ADC_ALT_INPUT_OFF;
unsigned int ADcfg3 = ADC_SAMPLE_TIME_10 & ADC_CONV_CLK_SYSTEM & ADC_CONV_CLK_32Tcy;
unsigned int ADport = ENABLE_AN1_ANA;
unsigned int ADscan = SCAN_NONE;
OpenADC10(ADcfg1, ADcfg2, ADcfg3, ADport, ADscan);
ConfigIntADC10(ADC_INT_DISABLE);

unsigned int R0;

SetChanADC10(ADC_CH0_POS_SAMPLEA_AN1 & ADC_CH0_NEG_SAMPLEA_NVREF);

while (1) {
  ADCON1bits.SAMP = 1; // Sampling start
  while(!ADCON1bits.DONE); //AD変換終了フラグが1になるまでまつ
  R0 = ADCBUF0;
  sprintf(buf, "%04X", R0);
  print(0, buf);
}

1)バッテリー電圧
2)PWMのDUTY
3)超音波スピーカーのVp-p

 目的は、定格70Vを超えない範囲内で可能な限り3)を大きくすることである。
 高速A/Dサンプリングにより3)を直読し制御するというのが第1案であり、それはたったいま断念した。そこで、第2案を採用する。まず、3)が1)と2)を変数とした関数である点に注目する。そのうえで、1)と2)を変化させた場合に3)がどうなるかを、実験により調査する。あとは、1)の測定だけから2)を決定してスピーカーを駆動させる。

written by higashino [高度測定装置] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL
Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4