hiro yamamoto works

ESP8266 Web logger
RaspberryPi HiRes Audio
Mini Solar power system
当ブログ掲載内容は無保証です。利用は自己責任でお願いいたします。

 

カレンダー

2020
December
Sun Mon Tue Wed Thu Fri Sat
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

QRコード

検索



このブログを検索

カウンター

本日のアクセス
昨日のアクセス
総アクセス数

ブログサービス

Powered by

teacup.ブログ
RSS

電圧ロガー4入力化

電圧ロガーを4入力化して評価とデバックをしています。

重要なお知らせ
 ・電圧、タイミング精度を検証していません。
 ・4入力測定はそれぞれの記録タイミングがずれています。

まとめ
・ADS1015 ADCモジュール未使用入力をフルに使う(4入力)
・同じ信号を入れて同じデータが取れるのか?
・データ差が少なくなるように工夫する。
・暫定設定で少し良くなる。3300 samples per second
 Wait for the conversion to complete 500μS。
1入力と4入力のデータ差を補正します。(別の記事)

A0~A3へ下写真の黄色波形を入力しています。
クリックすると元のサイズで表示します
赤波形がトリガ信号です。

4入力動作の説明
 トリガ信号ONから4入力を切り換えて測定し、5mS待つ
 サイクルを15回繰り返す。
 トリガ信号OFFから4入力を切り換えて測定し、5mS待つ
 サイクルを10回繰り返す。
 ※過渡領域の波形記録を目的にしているため、安定領域は
  記録していません。つまり波形全体は記録していません。


入力の違いを調べた結果
 入力A0,A1,A2,A3を比較してみると違いがあり、
 A0との差がA1,A2,A3の順に大きくなっていることが
 わかった。

下はA0とA3のグラフを比較
クリックすると元のサイズで表示します
クリックすると元のサイズで表示します
(赤はMAX値、青はMIN値)

 ADS1015は4入力化するとそれぞれの記録タイミングに
 ずれが生じる。


差が少なくなるように改善

 効果が期待出来そうな点をテストしてみます。

 @AD変換ループ内から電圧値変換を分離
for (int i = 0; i < 15 ; i++) {//15回繰り返し測定するため
for (int j = 0; j < 4 ; j++) {
cnv_adc[j][i] = map(ads.readADC_SingleEnded(j), 0, 2048, 0, 6144);
}

 AD変換と電圧値変換を一緒にやっています。
 (jはADCの入力、iは測定繰り返し回数)
 変換後2次元配列に入れています。
 ループ内の処理を減らすために、
 電圧値変換は後回しにします。
 
 スケッチを修正します。
 AD変換後2次元配列へ入れるだけにする。
 adc[j][i] = ads.readADC_SingleEnded(j);

 次に、すべてのAD変換終了後、別ループで
 電圧値へ変換する。
 cnv_adc[j][i] = map(adc[j][i], 0, 2048, 0, 6144);

 結果→ 効果なし

 Aサンプル/秒をUPする。
 Adafruit_ADS1015.cpp の中
uint16_t Adafruit_ADS1015::readADC_SingleEnded(uint8_t channel) {
if (channel > 3)
{
return 0;
}
// Start with default values
uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | //Disable the comparator (default val)
ADS1015_REG_CONFIG_CLAT_NONLAT | //Non-latching (default val)
ADS1015_REG_CONFIG_CPOL_ACTVLOW | //Alert/Rdy active low(default val)
ADS1015_REG_CONFIG_CMODE_TRAD | //Traditional comparator(default val)
ADS1015_REG_CONFIG_DR_1600SPS | //1600 samples per second (default)
ADS1015_REG_CONFIG_MODE_SINGLE; //Single-shot mode (default)

 samples per second→「サンプル/秒」
 1600の上は2400,3300が設定できます。

ADS1015_REG_CONFIG_DR_3300SPS | //1600 samples per second (default)
 
 結果→ 効果不明

 BAD変換のモード設定を変更する。
 Adafruit_ADS1015.cpp の中
 Single-shot modeの他に
 Continuous conversion mode(連続変換モード)が
 ありましたので試します。
ADS1015_REG_CONFIG_MODE_CONTIN; // Continuous conversion mode

 結果→ 効果不明

 CAD変換完了待ちdelayを減らす。
 Adafruit_ADS1015.cpp の中
// Wait for the conversion to complete
delay(m_conversionDelay);

 Wait for the conversion to complete
 (AD変換完了待ちと思う)
 m_conversionDelay(Adafruit_ADS1015.h)は1mSでした。

 1mS→500μSへ変更
//delay(m_conversionDelay);//無効化 コメント行として残す
delayMicroseconds(500);

 m_conversionDelayはそのままにしておく

 結果→ 効果あり 

 条件を組み合わせてテストした。
 1600sps Single-shot 500μS ☓
 3300sps Single-shot 500μS ○
 3300sps Continuous 500μS ○


 3300sps Single-shot(default) 500μSで差が少なくなりました。

クリックすると元のサイズで表示します
クリックすると元のサイズで表示します
クリックすると元のサイズで表示します
クリックすると元のサイズで表示します

これで良いかもう少し調べたいと思います。
・・・
現在の私の知識ではこれ以上は・・・
結論に達しました。
0
投稿者:田舎人
投稿者
メール

 
コメント
URL
コメントは新しいものから表示されます。
コメント本文中とURL欄にURLを記入すると、自動的にリンクされます。
AutoPage最新お知らせ