第1步:獲取所需的硬件
要使所有這些正常工作,您當然需要一些硬件。由于我們正在使用Arduino來測量電流消耗并發送RF命令,因此我們需要一個Arduino來開始。
必需的硬件:
Arduino (Uno或Pro Mini)
非侵入式電流傳感器
要定義電阻
》
原型:
面包板
面包板電線
最終版本:
烙鐵
焊料
電線
當然,您可以選擇不將所有內容都焊接在整齊的包裝中。
步驟2:必需的軟件
這與原型過程本身有關,而與制作拋光產品無關。開始編程,只是普通的Arduino IDE。由于我們不使用任何庫,因此您無需再安裝任何東西。
所需的軟件:
Arduino IDE
第3步:查找電流傳感器值
為獲得最佳結果,我們將需要找到最適合電流傳感器(CT傳感器)的電阻。這是根據CT傳感器的規格通過一些計算完成的。
第一步是找到這些值。您通常可以通過在您喜歡的搜索引擎中輸入產品類型和品牌來找到它們。對于我來說,這將是我已經擁有的產品“ Talema AC1010”。
我們需要以下條件:
最大一次電流(RMS)
轉動 ratio
此外,我們需要知道Arduino的工作電壓。對于Arduino Uno,這將是5v。
總而言之,這就是我的值,對于參考非常有用:
最大一次電流: 60A
匝數比: 1000:1
Arduino電壓: 5
步驟4:計算理想負載電阻
如果CT傳感器是電流輸出類型,例如Talema AC1010,則需要轉換電流信號帶有負載電阻的電壓信號。如果是電壓輸出CT,則可以跳過此步驟,而忽略負載電阻,因為負載電阻已經內置在CT中。現在該開始記住高中的這些基礎數學課了。
選擇當前要測量的范圍。 Talema AC1010的電流范圍為0A至60A,因此在此示例中,我們選擇60A作為我們的最大電流。
乘以√2將最大RMS電流轉換為峰值電流:
Primary peak-current = RMS current × √(2) = 60A × 1.414 = 84.8A
將峰值電流除以CT的匝數即可得到次級線圈中的峰值電流。
Talema AC1010具有1000匝,因此次級峰值電流將是:
Secondary peak-current = Primary peak-current / no. of turns = 84.8A / 1000 = 0.0848A
為最大程度地提高測量分辨率,峰值電流時負載電阻上的電壓應為Arduino模擬參考電壓(AREF)除以2
使用的是在5V電壓下運行的Arduino:AREF/2將為5 V/2 = 2.5 V,因此理想的負載電阻為:
Ideal burden resistance = (AREF/2) / Secondary peak-current = 2.5V / 0.0848A = 29.5Ω
29Ω不是常見的電阻值可以選擇22Ω或33Ω。始終選擇下一個較小的值,否則最大負載電流將產生高于AREF的電壓。我建議使用33Ω±1%。在某些情況下,串聯使用2個電阻會更接近理想的負載值。該值離理想值越遠,精度將越低。在這種情況下,峰值電流將產生4.7V的模擬值(使用12位ADC進行模數轉換后為3822)。
步驟5:開始編碼,更多數學運算!
為使測量有效,我們需要計算代碼中的某些先前值。這將為我們提供一個校準值。為此,我們需要再次使用Arduino電壓,最大RMS,環路并使用負載電阻。確保用于計算的負擔是您實際使用的電阻值。
首先,我們需要再次開始計算:
double primaryPeak = sqrt(2) * amps; // Peak RMS value.
double secondaryPeak = primaryPeak / loops; // Minimum RMS value.
_sensorVoltage = voltage; // Voltage at which Arduino is running at.
_sensorCalibration = (primaryPeak / secondaryPeak) / burden; // Calculate calibration value.
首先,我們計算初級和次級峰值。和以前一樣我們保存電壓供以后計算使用,然后通過將一次峰值除以二次峰值來計算校準值。之后,我們將該結果除以負載電阻值。
因為我的電阻器已經焊接到我使用的板上,所以我的計算結果為:0,078。在先前計算的負載電阻器計算的情況下,結果將為30,03。此值需要稍后重用。
現在是實際零件。忍受我,因為這聽起來有點復雜,實際上相當容易。首先,我們需要定義采樣率,這是完成測量的次數。好的采樣率應該是1480。所有樣本都將添加到樣本中,然后除以樣本數量。這將給我們一個平均值。
for (int i = 0; i 《 samples; i++) {
_sensorValue = analogRead(_sensorPin); // Value of current sensor value, used for calculations.
_calculationOffset = (_calculationOffset + (_sensorValue - _calculationOffset) / 1024); // Calculated offet value from sensor.
_calculationFiltered = _sensorValue - _calculationOffset; // Calculated filtered value from sensor.
_calculationSquare = _calculationFiltered * _calculationFiltered; // Square value from sensor.
_calculationSum += _calculationSquare; // Sumary of all values since last sample reset.
}
_sensorAmperage = _sensorCalibration * (_sensorVoltage / 10) * sqrt(_calculationSum / samples); // Calculated amperage value from sensor.
_calculationSum = 0; // Reset summary so that new sample can be made.
這將給我們帶來穩定的安培功耗。您可以手動將此安培值轉換為瓦數值。一個簡單的方程式:
voltage * amps = wattage
當然,此電壓是所連接設備的輸入電壓,通常為230v或110v。
步驟6:完成
從現在開始,您可以使用此值執行任何操作。以我為例,我正在連接一個射頻發射器以發送“開”或“關”命令。
我可以理解,前面的代碼解釋有點短。為了讓您的生活更輕松,我制作了一個Arduino庫,制作了所有這些困難的方程式。您可以在我的GitHub上找到代碼,具有以下鏈接:
https://github.com/FricoRico/ArduinoEnergy
責任編輯:wv
-
監控器
+關注
關注
1文章
331瀏覽量
27617 -
Arduino
+關注
關注
190文章
6498瀏覽量
192214
發布評論請先 登錄
Texas Instruments TPS3842EVM 監控器評估模塊 (EVM)數據手冊

三相電機智能監控器設計
高性能電壓監控器詳解—-- 第一部分

比較電壓和處理器監控解決方案:分立式電壓監控器和看門狗ICs

將設計移植到LP3470A低lq電壓監控器,以改善電源監控

評論