2016-09-26 52 views
0

我正在使用Adafruit INA219模塊來測量線性驅動器的電壓和電流,我有一個關於如何根據我的情況最好地校準模塊的問題。Adafruit INA219模塊,分流電壓值和校準

我有一個12V電源(類似於筆記本電腦的電源磚),最大額定電流爲10A。執行器的最大額定電壓爲12V @ 5A,傳遞35磅的力。我使用MegaMoto驅動程序屏蔽來驅動執行器,並使用Arduino Nano作爲控制器。

INA219模塊的默認校準似乎是針對32V @ 2A,並且通過函數調用here提供了其他一些設置,但是我沒有看到任何符合12V @ 5A情況的東西,而且我也沒有如果我要編寫一個新函數來校準INA219,那麼可以確定使用什麼值。任何人都知道我可以使用什麼?我希望在這個模塊中爲我需要的東西準備好讀數,但是我得到了一些相當寬的值波動和一些奇數(?)分流電壓值(或者很有可能,我只是不明白他們)。例如,在移動執行器時,我正在每隔1ms讀取模塊的數值,持續15ms,然後平均功率使用情況,並將其用於過濾掉高峯和低谷以查看一般用電量。我使用的是從示例代碼的公式:

shuntvoltage = ina219.getShuntVoltage_mV(); 
busvoltage = ina219.getBusVoltage_V(); 
current_mA = ina219.getCurrent_mA(); 
loadvoltage = busvoltage + (shuntvoltage/1000); 
power = current_mA * loadvoltage; 

這裏有一個閱讀的例子:

shuntvoltage:-31.76 busvoltage:12.16 current_mA:-258.60 loadvoltage:12.13 電源:-3137.40

shuntvoltage:-59.12 busvoltage:12.16 current_mA:-548.50 loadvoltage:12.10 功率:-6637.33

shuntvoltage:-52.00 busvoltage:12.18 current_mA:-691.30 loadvoltage:12.12 功率:-8381.32

shuntvoltage:-32.09 busvoltage:12.12 current_mA:-936.60 loadvoltage :12.09 功率:-11321.54

shuntvoltage:-27.42 busvoltage:12.11 current_mA:-286.00 loadvoltage:12.08 功率:-3455.05

shuntvoltage:-86.82 busvoltage:12.11 current_mA:-338.90 loadvoltage:12.03 功率:-4075.33

shuntvoltage:-67.63 busvoltage:12.16 current_mA: -620.90 loadvoltage:12.09 功率:-7508.15

shuntvoltage:-30.81 busvoltage:12.18 current_mA:-874。 60 loadvoltage:12.15 功率:-10625。68

shuntvoltage:-30.31 busvoltage:12.11 current_mA:-346.90 loadvoltage:12.08 功率:-4189.75

shuntvoltage:-71.75 busvoltage:12.16 current_mA:-557.00 loadvoltage:12.09 功率:-6733.16

shuntvoltage:-48.03 busvoltage:12.18 current_mA:-668.70 loadvoltage:12.13 功率:-8112.65

shuntvoltage:-31.90 busvoltage:12.18 current_mA:-938.20 loadvoltage:12.15 功率:-11397.35

shuntvoltage:-30.14 busvoltage:12.12 current_mA:-627.20 loadvoltage :12.09 功率:-7580.25

shuntvoltage:-31.42 busvoltage:12.14 current_mA:-430.20 loadvoltage:12.10 功率:-5207.39

shuntvoltage:-66.28 busvoltage:12.17 current_mA:-643.70 loadvoltage:12.10 功率:-7789.88

shuntvoltage:-30.93 busvoltage:12.18 current_mA: - 880.00 loadvoltage:12.15 功率:-10694.70

這可能是一個愚蠢的問題,但爲什麼分流電壓價值觀是否定的?目前的價值?也許我只需要扭轉極性。

感謝您的幫助!

[編輯]:這裏的規格在致動器:http://www.progressiveautomations.com/media/catalog/pdf/Linear_Actuator_with_Potentiometer_PA-14P.pdf

+0

請問您能否使用適當的單位?磅是一些質量很奇怪的醫療單位。在美國之外(是的,外面有東西),每個人都以牛頓爲單位。它的2016年.... – Piglet

+0

至少我沒有使用石頭? =)平心而論,我只是使用了執行器製造商使用的單位(我認爲在大白北部有一些近Murica國家),並且我編輯了我的文章以包含他們的規格鏈接。 –

+0

你讀過這個嗎? http://www.ti.com/lit/ds/symlink/ina219.pdf, – Piglet

回答

0

下面是來自Adafruit的代碼的提取物。它顯示瞭如何計算參數。您也可以在INA219數據表中找到相關信息。 這是一個如何設置16V 400mA IC的例子。

void Adafruit_INA219::setCalibration_16V_400mA(void) { 

    // Calibration which uses the highest precision for 
    // current measurement (0.1mA), at the expense of 
    // only supporting 16V at 400mA max. 

    // VBUS_MAX = 16V 
    // VSHUNT_MAX = 0.04   (Assumes Gain 1, 40mV) 
    // RSHUNT = 0.1    (Resistor value in ohms) 

    // 1. Determine max possible current 
    // MaxPossible_I = VSHUNT_MAX/RSHUNT 
    // MaxPossible_I = 0.4A 

    // 2. Determine max expected current 
    // MaxExpected_I = 0.4A 

    // 3. Calculate possible range of LSBs (Min = 15-bit, Max = 12-bit) 
    // MinimumLSB = MaxExpected_I/32767 
    // MinimumLSB = 0.0000122    (12uA per bit) 
    // MaximumLSB = MaxExpected_I/4096 
    // MaximumLSB = 0.0000977    (98uA per bit) 

    // 4. Choose an LSB between the min and max values 
    // (Preferrably a roundish number close to MinLSB) 
    // CurrentLSB = 0.00005 (50uA per bit) 

    // 5. Compute the calibration register 
    // Cal = trunc (0.04096/(Current_LSB * RSHUNT)) 
    // Cal = 8192 (0x2000) 

    ina219_calValue = 8192; 

    // 6. Calculate the power LSB 
    // PowerLSB = 20 * CurrentLSB 
    // PowerLSB = 0.001 (1mW per bit) 

    // 7. Compute the maximum current and shunt voltage values before overflow 
    // 
    // Max_Current = Current_LSB * 32767 
    // Max_Current = 1.63835A before overflow 
    // 
    // If Max_Current > Max_Possible_I then 
    // Max_Current_Before_Overflow = MaxPossible_I 
    // Else 
    // Max_Current_Before_Overflow = Max_Current 
    // End If 
    // 
    // Max_Current_Before_Overflow = MaxPossible_I 
    // Max_Current_Before_Overflow = 0.4 
    // 
    // Max_ShuntVoltage = Max_Current_Before_Overflow * RSHUNT 
    // Max_ShuntVoltage = 0.04V 
    // 
    // If Max_ShuntVoltage >= VSHUNT_MAX 
    // Max_ShuntVoltage_Before_Overflow = VSHUNT_MAX 
    // Else 
    // Max_ShuntVoltage_Before_Overflow = Max_ShuntVoltage 
    // End If 
    // 
    // Max_ShuntVoltage_Before_Overflow = VSHUNT_MAX 
    // Max_ShuntVoltage_Before_Overflow = 0.04V 

    // 8. Compute the Maximum Power 
    // MaximumPower = Max_Current_Before_Overflow * VBUS_MAX 
    // MaximumPower = 0.4 * 16V 
    // MaximumPower = 6.4W 

    // Set multipliers to convert raw current/power values 
    ina219_currentDivider_mA = 20; // Current LSB = 50uA per bit (1000/50 = 20) 
    ina219_powerDivider_mW = 1;  // Power LSB = 1mW per bit 

    // Set Calibration register to 'Cal' calculated above 
    wireWriteRegister(INA219_REG_CALIBRATION, ina219_calValue); 

    // Set Config register to take into account the settings above 
    uint16_t config = INA219_CONFIG_BVOLTAGERANGE_16V | 
        INA219_CONFIG_GAIN_1_40MV | 
        INA219_CONFIG_BADCRES_12BIT | 
        INA219_CONFIG_SADCRES_12BIT_1S_532US | 
        INA219_CONFIG_MODE_SANDBVOLT_CONTINUOUS; 
    wireWriteRegister(INA219_REG_CONFIG, config); 
} 

讓我們從最大母線電壓開始。你有一個12V電源,所以我們堅持16V的例子(你可以選擇16V和32V之間) Adafruit電路板的分流電阻值爲0.1歐姆。 您的執行器在最大負載下拉出5A。歐姆定律告訴我們,最大電流會導致分流電阻上的電壓降爲0.5V,所以我們的VSHUNT_MAX爲0.5現在計算當前測量的LSB值。 5A/32767LSB =150μA每LSB(當然你也可以選擇別的東西,如果你不需要全分辨率)

計算校準寄存器根據數據表中的公式: 卡爾= TRUNC(0.04096/0.00015/0。1)= 2730

等等......我希望你明白這一點。