Pomiar natężenia prądu z użyciem bocznika, wzmaczniacza operacyjnego i Arduino

W kolejnym projekcie będę mierzyć natężenie przepływającego prądu… Napięcie wystarczy wprowadzić na piny analogowe Arduino. Z natężeniem jest trochę problemów. Matematycznie sprawa jest prosta. Pan Ohm jest tu dość konkretny:
 I = {U \over R}

Natężenie prądu I możemy łatwo obliczyć, jeżeli znamy napięcie U i rezystancję R. Trzeba to jednak zrobić tak, żeby nasz miernik nie wpłynął na mierzony układ. Jeżeli R będzie za duże – spadek napięcia (dodatkowe obciążenie) wpłynie na działanie mierzonego urządzenia. Rezystancja R powinna być więc możliwie jak najmniejsza. Jednak  wtedy spadek napięcia na niej będzie niewielki…. i trudno go będzie zmierzyć!

Pomysł jest prosty: w działający układ wepniemy szeregowo bocznik. Bocznik to nic innego jak raki specjalny rezystor – o bardzo małej, znanej oraz stabilnej rezystancji.

Na boczniku zmierzymy napięcie i znając jego rezystancję – obliczymy prąd płynący przez układ.

Bocznik

Spójrzmy na taki bocznik, 75mV/50A:

Boczniki nie kataloguje się za pomocą rezystancji, ale spadku napięcia przy pewnym prądzie. Ten model bocznika opisano jako 50A/75mV. Oznacza to, że przy natężeniu prądu 50A napięcie na boczniku spadnie o 75mV (0.075V). Łatwo obliczyć jego rezystancję:
 I = {U \over R}

Stąd R:
 R = {U \over I}={0.075 \over 50} = 0,0015\Omega

Gdy przez taki bocznik popłynie prąd 1A, spadek napięcia na boczniku wyniesie:
 I = {U \over R}
 U = {I \cdot R}=1 \cdot 0.0015 = 1.5mV

Standardowo, Arduino mierzy napięcie z rozdzielczością 10 bitów (1024 przedziałów). Przy napięciu referencyjnym 5v, rozróżnia zmiany napięcia od 5v/1024 = 4.88mV. Stąd 1.5mV, 2mV czy 3mV będzie „wpadało” do tego samego przedziału i nie będzie rozróżniane.

Zamiast 5v, możecie wykorzystać wewnętrzne napięcie odniesienia 1.1v. Wtedy minimalny krok to 1.1v/1024=1mV. Znacznie lepiej, ale nadal  pomiar prądów na poziomie setek mili-amper nie będzie w ogóle możliwy.

Rozwiązanie jest proste i nazywa się wzmacniacz operacyjny. Za pomocą wzmacniacza operacyjnego tak wzmocnię napięcie na boczniku, że będzie można je swobodnie mierzyć za pomocą Arduino.

Op-Amp

Powiedzmy, że nie przekroczę 10A. Przy takim prądzie, spadek napięcia na boczniku będzie około 75mV/5=15mV. Chciałbym, żeby przy 10A wyjście ze wzmacniacza było na poziomie około 1.1v.

Spójrzcie na poniższy schemat:

Na powyższym schemacie używam wzmacniacza operacyjnego do zwielokrotnienia napięcia na boczniku Rs na wyjściu Vout (symulacja tutaj). Kluczowym jest tu stosunek R2 do R1, od którego zależy napięcie Vout:
{V_{out}}={I} \cdot {R_s} \cdot {{R_2} \over {R_1}}

Oczywiście:
{I} ={{(V_{out} - V_p)} \over {{R_s} \cdot {{R_2} \over {R_1}}}}
{I} ={{(V_{out} - V_p)} \cdot {{R_1} \over {{R_s} \cdot {R_2}}}}

…stąd znając napięcie wyjściowe Vout oraz wartości rezystorów – obliczę sobie prąd przepływający przez bocznik.

Przy R2 zbudowanym z równolegle połączonych rezystorów 10kΩ i 22kΩ, jego rezystancja zastępcza będzie ok. 6875Ω. Stąd przy prądzie 10A:
{V_{out}}={I} \cdot {R_s} \cdot {{R_2} \over {R_1}}= {10} \cdot {0.0015} \cdot {{6875} \over {100}}=1.03125V

Czyli przy R2 zbudowanym z równolegle połączonych rezystorów 10kΩ i 22kΩ, przy 10A napięcie Vout będzie ok. 1V.

Kilka innych wartości:

Obciążenie RL  Prąd I  URS R2 R1 Vout
 0.25  I={u \over R} = {12 \over {0.2515}}=48A  71.57mV  6875  100 4.95V
 1.2  I={u \over R} = {12 \over {1.2015}}=10A 15mV  6875  100  1V
 12  I={u \over R} = {12 \over {12.0015}}=1A  1.5mV 6875  100  100mV
120 I={u \over R} = {12 \over {120.0015}}=100mA 0.15mV 6875 100 10mV
1k2 I={u \over R} = {12 \over {1200.0015}}=10mA 15uV 6875 100 <1mV

Jaki op-amp?

W przyborniczku znalazłem:

  • LM358N – DIP8
  • LM324N – DIP14
  • TL082 – DIP8
  • TL081 – DIP8
  • NE5534P – DIP8

NE za drogi, TL08x odpadają, bo wymagają zasilania symetrycznego (np. +/-15v). Może najpopularniejszy LM358?

Lutujemy

Tutaj poszedłem na łatwiznę. Do bocznika dokręciłem blaszki:

A pod bocznik gorącym klejem przykleiłem płytkę:

Nie było wiele elementów:

Uruchomienie

Do zasilacza laboratoryjnego ustawionego na 12v, podłączyłem:

Jeżeli chcecie użyć za obciążenie rezystora, pamiętajcie:

  • 12v, obciążenie 100Ω (plus rezystancja bocznika – 0.0015, w tej skali raczej pomijalna)
  • prąd płynący przez układ wyniesie około 120 mA
  • moc prawie 1.4W (P=U*I),
  • Potrzebny będzie rezystor o większej mocy – starndardowe 0.25W ulegną efektowemu spaleniu.

Problemy…

Zapomniałem… o masie. Masa zasilania wzmacniacza operacyjnego musi być połączona z masą mierzonego układu. Dla symulacji nie ma to znaczenia – ale dla prawdziwego układu jak najbardziej. Na zdjęciu powyżej – to ten niebieski kabelek (symulacja tutaj):)

Po uruchomieniu układu okazało się, że napięcie na wyjściu wynosi… 222.84mV – jeszcze przed włączeniem zasilania bocznika… Powód tego jest prosty – wyjście wzmacniacza nigdy nie jest równe zeru – albo zasilaniu (ang. rail). Zawsze jest pewne przesunięcie – i to właśnie ono otworzyło tranzystor i sprawiło niewielkie napięcie na rezystorze emitera.

Po włączeniu zasilania bocznika, przy rezystorze obciążenia o nominalnej rezystancji 100Ω, prąd podany przez zasilacz laboratoryjny wyniósł 115mA. Miernik na wyjściu układu wskazał 236.81mV. Różnica:
236.81 - 222.84=13.89mV

…co było całkiem bliskie symulacji.

Niestety dodatkowe 222.84mV trzeba będzie odliczyć od wyniku.

Przy 2A – napięcie Vout = 0.4232v, przy 2.5A – Vout=.4733v. Dalej nie mierzyłem.

Z Arduino

Wyjście z układu podłączyłem do portu analogowego A0.

Pamiętacie wzór:
{I} ={{(V_{out} - V_p)} \cdot {{R_1} \over {{R_s} \cdot {R_2}}}}

Żeby uzyskać prąd (w mA):

Pod wartości R2, R1 i RS podstawiłem rezystancje użytych elementów. Niestety Vp (napięcie bez obciążenia) obniży  maksymalny zakres z teoretycznych 10A do 8.8A. Dla mnie była to wartość akceptowalna.

Kompletny kod:

Na konsoli:

…tak sobie to wyszło. Jak widzicie, Vout:

  • bez obciążenia, mój miernik pokazywał Vout od 0.2194 do 0.2333,
  • dla obciążenia 500mA: 0.2774 – 0.2839, czyli 0.58A -0.65A,
  • dla obciążenia 1A – od 0.3269 do 0.3409, 1.1A – 1.25.

Niestety przekłamania były dość duże – a odczyty bardzo niestabilne.

Trochę dokładniej…

Przeprowadziłem eksperymenty z wewnętrznym źródłem odniesienia napięcia 1.1v (analogReference(INTERNAL);) oraz z zewnętrznym 2.5v (analogReference(EXTERNAL);) – w wersji z zasilaniem USB i zewnętrznym 12v.

Zasilanie USB
Wewnętrzne odniesienie 1.1v Zewnętrzne odniesienie 2.5v
Średnia Odchylenie Średnia Odchylenie
No Load 0.085 0.056 -0.035 0.050
0.5A 0.646 0.051 0.494 0.055
1.0A 1.203 0.055 1.034 0.056
Zasilanie zewnętrzne 12v
Wewnętrzne odniesienie 1.1v Zewnętrzne odniesienie 2.5v
Średnia Odchylenie Średnia Odchylenie
No Load 0.059 0.051 -0.061 0.050
0.5A 0.623 0.059 0.476 0.053
1.0A 1.183 0.058 1.016 0.053

Jak widzicie, odczyty z zewnętrznym napięciem odniesienia są dużo bliższe rzeczywistemu natężeniu płynącemu przez układ. Myślę, że jest to spowodowane tym, że wartość zewnętrznego napięcie odniesienie jest mi znana. W przypadku wewnętrznego 1.1 – wpisuję katalogowe 1.1v (które wcale takie być nie musi).

Galeria

Źródła

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *