24bitのADC


ブリッジ回路
ブリッジ回路の微小な電位差を読んでマイコンに取り込みたいと思い,いろいろといじっていたが,なかなかうまく行かなかった.voltageフォロワーとしてオペアンプを使って,それをattiny261で直接読んでみたが,微小な電圧が揺らいでしまってうまく読めない.261では32倍に増幅しても,読んでいるのだが.オペアンプの種類を変えたら,若干改善したものの,必要な桁は得られないと判断して,別の方法を考えてみた. オペアンプを介して,桁の大きなADCで読んだらどうかと思って,手持ちのICを漁っていたら,TM7711というADCを見つけた.これは24bitなのだが,datasheetが中国語のものしか無くて,細かい仕様が分からなかったが,うまく使うことができたので,その概略を書いておこうと思う. 電源電圧を参照電圧として与えたのだが,このICは差動の電圧を128倍に増幅して,それぞ基準電圧の2^24分の一を単位として読み取る.読み取り方も比較的単純で,クロックを25回から27回High/Lowを繰り返したときの,dataから読み取るというものである.このとき,最初の24回にはdataがあり,25または27回にすると,それぞれ10Hz,40Hzで,26回にすると温度を読み取るモードとなるようである.arduinoで読み出すプログラムを書いてみたので,以下に示す.

void setup() {
  // put your setup code here, to run once:
  digitalWrite(A0,LOW);
  pinMode(A0,OUTPUT);
  pinMode(A1,INPUT);
  Serial.begin(9600);
}
void loop() {
  // put your main code here, to run repeatedly:
  signed long v=0;
  while(digitalRead(A1)>0);
  for(char i=0;i<24;i++){
    digitalWrite(A0,HIGH);
    delayMicroseconds(5);
    v<<=1;
    if(digitalRead(A1)>0)v++;
    digitalWrite(A0,LOW);
    delayMicroseconds(5);
    }
    digitalWrite(A0,HIGH);
    delayMicroseconds(5);
    digitalWrite(A0,LOW);
    delayMicroseconds(5);
  if(v>=1<<24)v|=0xff000000;
  Serial.println(v);
  delay(1000);
}