標(biāo)題: Arduino電容測量計(jì)設(shè)計(jì) [打印本頁]

作者: 51zx筆記    時(shí)間: 2022-3-4 20:32
標(biāo)題: Arduino電容測量計(jì)設(shè)計(jì)
電容被定義為身體存儲電荷的能力。電容的單位是法拉(符號:F),以英國物理學(xué)家邁克爾·法拉第的名字命名。1 法拉電容器在充電時(shí)具有 1 庫侖的電荷,其板之間的電位差為 1 伏。
電容測量
每個(gè)Arduino電容計(jì)都依賴于電容器的相同基本特性 - 時(shí)間常數(shù)。電容器的時(shí)間常數(shù)定義為電容器兩端的電壓在充滿電時(shí)達(dá)到其電壓的63.2%所需的時(shí)間。較大的電容器需要更長的時(shí)間來充電,因此具有較大的時(shí)間常數(shù)。Arduino可以測量電容,因?yàn)殡娙萜鞒潆娝璧臅r(shí)間與其電容直接相關(guān):
TC = R * C

電容測量代碼算法
電容測量電路

電容測量電路

用于電容測量的 Arduino 代碼

/*電容測量
一個(gè)電容器通過一個(gè)電阻,在一個(gè)時(shí)間常數(shù)內(nèi)充電,定義為T秒,其中
* c = r * c
* TC =以秒為單位的時(shí)間常數(shù)周期
* R =電阻(歐姆)
* C =電容,單位為法拉(1微法拉(ufd) = .0000001法拉= 10^-6法拉)

*電容器在一個(gè)時(shí)間常數(shù)的電壓定義為充電電壓的63.2%。
*/

#define analogPin      0          // analog pin for measuring capacitor voltage
#define chargePin      13         //為電容器充電的引腳-連接到充電電阻的一端
#define dischargePin   11         // 引腳放電電容器
#define resistorValue  10000.0F   // 10K將此更改為您正在使用的任何電阻值
                                  // F formatter tells compiler it's a floating point value F格式化器告訴編譯器它是一個(gè)浮點(diǎn)值

unsigned long startTime;
unsigned long elapsedTime;//決定了給電容器充電的時(shí)間

// 電容變量進(jìn)行初始化
float microFarads;                // floating point variable to preserve precision, make calculations浮點(diǎn)變量保持精度,進(jìn)行計(jì)算
float nanoFarads;

void setup(){
  pinMode(chargePin, OUTPUT);     // set chargePin to output
  digitalWrite(chargePin, LOW);  

  Serial.begin(9600);             // initialize serial transmission for debugging
}

void loop(){
  digitalWrite(chargePin, HIGH);  // set chargePin HIGH and capacitor charging
  startTime = millis();//開始計(jì)時(shí)器

  while(analogRead(analogPin) < 648){   // 647是1023的63.2%,相當(dāng)于滿量程電壓,直到電容達(dá)到總電壓的63.2%才退出
  }

  elapsedTime= millis() - startTime;//決定了給電容器充電的時(shí)間
// convert milliseconds to seconds ( 10^-3 ) and Farads to microFarads ( 10^6 ),  net 10^3 (1000)  將毫秒換算成秒(10 ^-3),將法拉換算成微法拉(10 ^6),比完凈10^3 (1000)
  microFarads = ((float)elapsedTime / resistorValue) * 1000;   
  Serial.print(elapsedTime);       // 將值打印到串口
  Serial.print(" mS    ");         //打印單位和回車


  if (microFarads > 1){//確定單元應(yīng)該是uf的還是nf的,并相應(yīng)打印
    Serial.print((long)microFarads);       // print the value to serial port
    Serial.println(" microFarads");         // print units and carriage return
  }
  else
  {
    // if value is smaller than one microFarad, convert to nanoFarads (10^-9 Farad).
    // This is a workaround because Serial.print will not print floats
    //如果value小于1 microFarad,則轉(zhuǎn)換為nanoFarads (10^-9 Farad)。
              //這是一個(gè)解決方案,因?yàn)榇。Print將不會打印浮點(diǎn)數(shù)

    nanoFarads = microFarads * 1000.0;      // multiply by 1000 to convert to nanoFarads (10^-9 Farads)//乘以1000轉(zhuǎn)換為nanoFarads
    Serial.print((long)nanoFarads);         // print the value to serial port
    Serial.println(" nanoFarads");          // print units and carriage return
  }

  /* dicharge the capacitor  */
    /*給電容器放電*/
  digitalWrite(chargePin, LOW);             // set charge pin to  LOW 停止充電電容器
  pinMode(dischargePin, OUTPUT);            // set discharge pin to output 允許電容器放電
  digitalWrite(dischargePin, LOW);          // set discharge pin LOW
  while(analogRead(analogPin) > 0){         // wait until capacitor is completely discharged//等待直到電容器完全放電
  }

  pinMode(dischargePin, INPUT);            // set discharge pin back to input//防止電容器放電
}
電容測量結(jié)果
注:此傳感器對于 1 μF 至 3500 μF 之間的電容值最為精確。
電容測量結(jié)果

無電容


作者: ziba108    時(shí)間: 2023-7-29 18:43
不錯(cuò)的程序,有研究意義
作者: q202cs    時(shí)間: 2023-9-18 16:20
不錯(cuò)的程序,有研究意義,不過串口打印只能打印一次,換個(gè)電容就需要重啟了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1