電流互感器是一種專門設計用于在其次級繞組中變換交流電的互感器,其產生的電流量與初級繞組中的電流成正比。這種類型的電流互感器旨在以不可見的方式測量來自高壓子系統或大量電流流經系統的電流。電流互感器的工作是將大量電流轉換為可通過微控制器或模擬儀表輕松測量的較低電流量。在這里,我們將詳細學習這種電流傳感技術,并在Arduino的幫助下連接一個電流互感器來測量交流電流。
電流互感器
正如我之前提到的,電流互感器是一種用于測量電流的變壓器。上面顯示的我目前擁有的兩個變壓器稱為窗式電流互感器或俗稱的鐵心平衡變壓器r。
電流互感器如何工作?
電流互感器的基本原理與電壓互感器相同,與電壓互感器一樣,電流互感器也由初級繞組和次級繞組組成。當交流電流通過變壓器的初級繞組時,會產生交變磁通量,此時會在次級繞組中感應出交流電,如果您認為這就是區別,您可以說它與電壓互感器幾乎相同。
通常,電流互感器在負載電阻的幫助下始終處于短路狀態, 而且流過次級繞組的電流僅取決于流過導體的初級電流。
電流互感器結構
為了讓您更好地理解,我已經拆除了我的一個電流互感器,您可以在上圖中看到。
從圖中可以看出,一根很細的電線纏繞在一個環形鐵芯材料上,一組電線從變壓器中出來。初級繞組只是與負載串聯連接并承載流過負載的大電流的單根導線。
電流互感器比率
通過在電流互感器的窗口內放置一根導線,我們可以形成一個單回路,匝數比變為 1:N。
與任何其他變壓器一樣,電流互感器必須滿足如下所示的安匝比方程。
TR = Np / Ns = Is / Ip
在哪里,
TR =傳輸比率
Np = 初級匝數
Ns = 次級匝數
Ip = 初級繞組中的電流
Is = 次級繞組中的電流
要找到次級電流,請將等式重新排列為
是 = Ip x (Np/NS)
如上圖所示,變壓器的初級繞組由一個繞組組成,變壓器的次級繞組由數千個繞組組成。如果我們假設100A的電流流過初級繞組,則次級電流將為5A 。 因此,初級與次級之間的比率變為 100A 到 5A 或 20:1。因此,可以說初級電流是次級電流的20倍。
筆記!請注意,電流比與匝數比不同。
現在所有的基本理論都結束了,我們可以將注意力轉移到計算手頭電流互感器的匝數比上。
電流互感器錯誤
每個電路都有一些錯誤。電流互感器也不例外。電流互感器存在各種錯誤。其中一些描述如下
電流互感器的比率誤差
電流互感器的初級電流并不完全等于次級電流乘以匝數比。一部分電流被變壓器的鐵芯消耗以使其進入勵磁狀態。
電流互感器的相角誤差
對于理想的 CT,初級和次級電流矢量為零。但在實際的電流互感器中,總會存在差異,因為初級必須向磁芯提供勵磁電流,并且會有很小的相位差。
如何減少電流互感器的誤差?
始終有必要減少系統中的錯誤以實現更好的性能。因此,通過以下步驟,可以實現
使用具有高磁導率的磁芯和低磁滯磁性材料。
負載電阻值必須非常接近計算值。
可以降低次級的內部阻抗。
反向計算電流互感器的匝數比?
上圖顯示了測試設置,我用它來計算匝數比。
正如我之前提到的,我擁有的電流互感器 (CT) 沒有任何規格或部件號,只是因為我是從損壞的家用電表中搶救出來的。所以,此時,我們需要知道匝數比才能正確設置Burden Resistor的值,否則系統會引入各種問題,我將在本文后面詳細討論。
在歐姆定律的幫助下,匝數比可以很容易地計算出來,但在此之前,我需要測量作為電路負載的 10W、1K 大電阻,我還需要得到一個任意的負載電阻找出匝數比。
負載電阻
負擔電阻
測試期間所有組件值的匯總
輸入電壓Vin = 31.78 V
負載電阻RL = 1.0313 KΩ
負載電阻RB = 678.4 Ω
輸出電壓Vout = 8.249 mV 或 0.008249 V
流過負載電阻的電流為
I = Vin / RL
I = 31.78 / 1.0313 = 0.03080A 或 30.80 mA
所以現在我們知道輸入電流,即0.03080A 或 30.80 mA
讓我們找出輸出電流
I = Vout / RB
I = 0.008249 / 678.4 = 0.00001215949A 或 12.1594 uA
現在,要計算匝數比,我們需要將初級電流除以次級電流。
匝數比 n = 初級電流 / 次級電流
n = 0.03080 / 0.0000121594 = 2,533.1972
所以電流互感器由2500 匝組成(四舍五入值)
筆記!請注意,錯誤主要是由于我不斷變化的輸入電壓和萬用表容差造成的。
計算合適的負載電阻器尺寸
此處使用的 CT 為電流輸出型。所以要測量電流,需要轉換成電壓類型。這篇文章,在openenergymonitor網站上,對我們如何做到這一點提供了一個很好的想法,所以我將關注這篇文章
負載電阻 (ohms) = (AREF * CT TURNS) / (2√2 * 最大初級電流)
在哪里,
AREF = ADS1115 模塊的模擬參考電壓,設置為 4.096V。
CT TURNS = 我們之前計算的次級匝數。
最大初級電流 = 將流過 CT 的最大初級電流。
筆記!每個 CT 的最大額定電流超過該額定值將導致磁芯飽和并最終導致線性誤差,從而導致測量誤差
筆記!家用電能表的最大額定電流是 30A,所以我選擇這個值。
負載電阻 (ohms) = (4.096 * 2500) / (2√2 * 30) = 120.6 Ω
120.6Ω 不是一個常見的值,這就是為什么我要使用三個串聯電阻來獲得 120Ω 的電阻值。將電阻連接到 CT 后,我做了一些測試來計算 CT 的最大輸出電壓。
測試后觀察到,如果1mA電流通過電流互感器的初級,輸出為0.0488mV RMS。有了這個,我們可以計算如果 30A 電流流過 CT,輸出電壓將為30000 * 0.0488 = 1.465V。
現在,計算完成后,我將ADC 增益設置為1x 增益,即+/- 4.096V,這為我們提供了 0.125mV 的滿量程分辨率。這樣,我們將能夠計算出可以使用此設置測量的最小電流。結果是3mA,因為 ADC 分辨率設置為 0.125mV。
所需組件
寫所有沒有表格的組件
電路原理圖
下面的示意圖顯示了使用電流互感器進行電流測量的連接指南
這就是電路在面包板上的外觀。
電流測量電路結構
在之前的教程中,我向您展示了如何借助 AD736 IC 準確測量真有效值電壓,以及如何配置開關電容電壓轉換器電路,該電路從輸入正電壓產生負電壓,在本教程中,我們使用這些教程中的兩個 IC。
在此演示中,電路在原理圖的幫助下構建在無焊面包板上;此外,直流電壓是在 16 位 ADC 的幫助下測量的,以獲得更好的精度。當我在面包板上演示電路以減少寄生時,我使用了盡可能多的跨接電纜。
用于電流測量的 Arduino 代碼
這里 Arduino 用于將測量值顯示到串行監視器窗口。但是只要對代碼稍加修改,就可以很容易地在 16x2 LCD 上顯示這些值。在此處了解16x2 LCD 與 Arduino 的接口。
電流互感器的完整代碼可在本節末尾找到。這里解釋了程序的重要部分。
我們首先包含所有必需的庫文件。Wire 庫用于 Arduino 和 ADS1115 模塊之間的通信,Adafruit_ADS1015庫幫助我們讀取數據并將指令寫入模塊。
?
#include#include
?
接下來,定義用于從 ADC 值計算當前值的MULTIPLICATION_FACTOR 。
?
#define MULTIPLICATION_FACTOR 0.002734 /* 計算實際電流值的因子 */ Adafruit_ADS1115 廣告;/* 將此用于 16 位版本的 ADS1115 */
?
16 位 ADC 輸出 16 位長整數,因此使用int16_t變量。使用了其他三個變量,一個用于存儲 ADC 的 RAW 值,一個用于顯示 ADC 引腳中的實際電壓,最后一個用于將該電壓值顯示為當前值。
?
int16_t adc1_raw_value; /* 存儲原始 ADC 值的變量*/ 浮動測量電壓;/* 存儲測量電壓的變量*/ 浮動電流;/* 存儲計算電流的變量*/
?
通過啟用 9600 波特的串行輸出來開始代碼的設置部分。然后打印設置的ADC的增益;這是因為超過定義值的電壓肯定會損壞設備。
現在使用ads.setGain(GAIN_ONE);設置 ADC 增益;?將 1 位分辨率設置為??0.125mV的方法
之后,調用 ADC開始方法,該方法設置硬件模塊中的所有內容并進行統計轉換。
?
無效設置(無效) { 序列號.開始(9600); Serial.println("從 AIN0..3 獲取單端讀數"); //一些調試信息 Serial.println("ADC 范圍:+/- 4.096V (1 bit = 2mV/ADS1015, 0.125mV/ADS1115)"); // ADC輸入范圍(或增益)可以通過以下方式改變 // 功能,但注意不要超過 VDD +0.3V 最大值,或 // 如果調整輸入范圍,則超出上限和下限! // 錯誤地設置這些值可能會破壞您的 ADC! // ADS1015 ADS1115 // ------- ------- // ads.setGain(GAIN_TWOTHIRDS); // 2/3x 增益 +/- 6.144V 1 位 = 3mV 0.1875mV(默認) ads.setGain(GAIN_ONE); // 1x 增益 +/- 4.096V 1 位 = 2mV 0.125mV //ads.setGain(GAIN_TWO); // 2x 增益 +/- 2.048V 1 位 = 1mV 0.0625mV // ads.setGain(GAIN_FOUR); // 4x 增益 +/- 1.024V 1 位 = 0.5mV 0.03125mV // ads.setGain(GAIN_EIGHT); // 8x 增益 +/- 0.512V 1 位 = 0.25mV 0.015625mV // ads.setGain(GAIN_SIXTEEN); // 16x 增益 +/- 0.256V 1 位 = 0.125mV 0.0078125mV ads.begin(); }
?
在循環部分,我讀取原始 ADC 值并將其存儲到前面提到的變量中以供以后使用。然后將原始 ADC 值轉換為電壓值進行測量并計算電流值并顯示到串行監視器窗口。
?
無效循環(無效) { adc1_raw_value = ads.readADC_SingleEnded(1); 測量電壓 = adc1_raw_value * (4.096 / 32768); 當前 = adc1_raw_value * MULTIPLICATION_FACTOR; Serial.print("ADC 值:"); Serial.println(adc1_raw_value); Serial.print("測量電壓:"); Serial.println(measured_voltae);Serial.println("V"); Serial.print("計算電流:"); 序列號.print(val,5); Serial.println("A"); 序列號.println(" "); 延遲(500); }
?
筆記!如果您沒有 ADS1115 模塊的庫,則需要在 Arduino IDE 中包含該庫,您可以在此GitHub 存儲庫中找到該庫。
完整的Arduino代碼如下:
?
#include#include #define MULTIPLICATION_FACTOR 0.002734 /* 計算實際電流值的因子 */ #define ADC_MAX_VALUE 32768 /* ADC 產生的最大值*/ #define ADC_GAIN 4.096 Adafruit_ADS1115 廣告;/* 將此用于 16 位版本的 ADS1115 */ int16_t adc1_raw_value; /* 存儲原始 ADC 值的變量*/ 浮動測量電壓;/* 存儲測量電壓的變量*/ 浮動電流;/* 存儲計算電流的變量*/ 無效設置(無效) { 序列號.開始(9600); Serial.println("從 AIN0..3 獲取單端讀數"); //一些調試信息 Serial.println("ADC 范圍:+/- 4.096V (1 bit = 2mV/ADS1015, 0.125mV/ADS1115)"); // ADC輸入范圍(或增益)可以通過以下方式改變 // 功能,但注意不要超過 VDD +0.3V 最大值,或 // 如果調整輸入范圍,則超出上限和下限! // 錯誤地設置這些值可能會破壞您的 ADC! // ADS1015 ADS1115 // ------- ------- // ads.setGain(GAIN_TWOTHIRDS); // 2/3x 增益 +/- 6.144V 1 位 = 3mV 0.1875mV(默認) ads.setGain(GAIN_ONE); // 1x 增益 +/- 4.096V 1 位 = 2mV 0.125mV //ads.setGain(GAIN_TWO); // 2x 增益 +/- 2.048V 1 位 = 1mV 0.0625mV // ads.setGain(GAIN_FOUR); // 4x 增益 +/- 1.024V 1 位 = 0.5mV 0.03125mV // ads.setGain(GAIN_EIGHT); // 8x 增益 +/- 0.512V 1 位 = 0.25mV 0.015625mV // ads.setGain(GAIN_SIXTEEN); // 16x 增益 +/- 0.256V 1 位 = 0.125mV 0.0078125mV ads.begin(); } 無效循環(無效) { adc1_raw_value = ads.readADC_SingleEnded(1); 測量電壓 = adc1_raw_value * (ADC_GAIN / ADC_MAX_VALUE); 當前 = adc1_raw_value * MULTIPLICATION_FACTOR; Serial.print("ADC 值:"); Serial.println(adc1_raw_value); Serial.print("測量電壓:"); Serial.print(measured_voltae);Serial.println("V"); Serial.print("計算電流:"); Serial.print(current,5); Serial.println("A"); 序列號.println(" "); 延遲(500); }
?
測試電路
用于測試電路的工具
2個60W白熾燈泡
Meco 450B+TRMS 萬用表
為了測試電路,使用了上述設置。電流從 CT 流向萬用表,然后返回主電源線。
如果您想知道 FTDI 板在此設置中的作用,讓我告訴您板載 USB 到串行轉換器不工作,所以我不得不使用 FTDI 轉換器作為 USB 到串行轉換器。
評論
查看更多