Zrobiłem sobie prosty układ do pomiaru poboru prądu przez światła DRL w samochodzie.
Chciałem zaoszczędzić miejsce na pcb i zamiast użyć wzmacniacza operacyjnego i przetwornika ADS1110 do pomiaru prądu na boczniku, to ja bezmyślnie użyłem INA226.
Okazuje się, że nie potrafię tego ogarnąć w Bascomie, a mało tego to jeszcze zasugerowałem się jednym schematem z internetu i pin VBUS tego scalaka podłączyłem do rezystora pomiarowego od strony zasilania czyli IN+, a nie od strony odbiornika IN- jak sugeruje w dalszej części nota tego układu scalonego. Nie wiem czy da się to uratować, bo mam już płytkę złożoną.
Nie zależy mi tutaj na pomiarze napięcia przez ten wynalazek, chodzi mi tylko o pobór prądu.
Użyłem bocznika o wartości 10mOhm. Próbowałem się wczytać w notę tego scalaka, ale kompletnie nie rozumiem jak autor wyliczył wartość kalibracji, z podanych wzorów mi zupełnie coś innego wychodzi.
Jeśli miałby ktoś z Was działający kod, to byłbym wdzięczny.
Znalazłem taki kod w internecie, ale nie bardzo rozumiem jak została w nim wyliczona ta wartość kalibracji z wartości bocznika. W ogóle nie rozumiem tego kodu, może jakby były komentarze, ale ich nie ma.
Niby jest podany wzór w nocie, ale w żaden sposób nie wychodzi nawet taki wynik jak obliczony w tej nocie. Skąd w tej nocie wzięła się wartość 2560?
- $regfile = "M16def.dat"
- Const Ina226_adr_w = &H80 ' Adres zapisu INA226
- Const Ina226_adr_r = &H81 ' Adres odczytu INA226
- Dim Ina226_reg As Byte , W_high As Byte , W_low As Byte
- Dim U_high As Byte , U_low As Byte , I_high As Byte , I_low As Byte
- Dim 24vdc As Single , I As Single
- '------------ konfiguracja I2C
- $lib "i2c_twi.lbx"
- Config Scl = Portc.0
- Config Sda = Portc.1
- Config Twi = 100000
- I2cinit
- '------------- inicjalizacja INA226
- W_high = &B01000101 ' 16 pomiarów do uśredniania, 1,1 ms czas pomiaru prądu i napięcia
- W_low = &B00100111 ' ciągły pomiar napięcia i prądu
- Ina226_reg = &H00
- Gosub Ina226_reg_write
- W_high = &B00001000 ' zapisuje rejestr kalibracyjny
- W_low = &B00000000 ' żeby można było czytać od razu prąd w amperach
- Ina226_reg = &H05
- Gosub Ina226_reg_write
- '------------- odczyt INA226
- Gosub Ina226_reg_read_u
- 24vdc = U_high
- Shift 24vdc , Left , 8
- 24vdc = 24vdc + U_low
- 24vdc = 24vdc * 0.00125 ' voltage_LSB = 0,00125 V
- Gosub Ina226_reg_read_i
- I = I_high
- Shift I , Left , 8
- I = I + I_low
- I = I * 0.00005 ' current_LSB = 0.00005 A
- '------------- procedury
- Ina226_reg_read_u:
- I2cstart
- I2cwbyte Ina226_adr_w
- I2cwbyte &H02
- I2cstart
- I2cwbyte Ina226_adr_r
- I2crbyte U_high , Ack
- I2crbyte U_low , Nack
- I2cstop
- Return
- Ina226_reg_read_i:
- I2cstart
- I2cwbyte Ina226_adr_w
- I2cwbyte &H04
- I2cstart
- I2cwbyte Ina226_adr_r
- I2crbyte I_high , Ack
- I2crbyte I_low , Nack
- I2cstop
- Return
- Ina226_reg_write:
- I2cstart
- I2cwbyte Ina226_adr_w
- I2cwbyte Ina226_reg
- I2cwbyte W_high
- I2cwbyte W_low
- I2cstop
- Return
