Đo dòng điện với cảm biến dòng ACS712 – Lập trình Arduino

Giới thiệu module ACS712

Module ACS712 sử dụng IC cảm biến dòng ACS712. ACS 712 là một IC cảm biến dòng tuyến tính dựa trên hiệu ứng Hall. ACS xuất ra 1 tín hiệu analog, Vout biến đổi tuyến tính theo sự thay đổi của dòng điện Ip được lấy mẫu thứ cấp DC (hoặc AC), trong phạm vi đã cho.

Ưu điểm của ACS 712

  • Đường tín hiệu analog có độ nhiễu thấp.
  • Thời gian tăng của đầu ra để đáp ứng với đầu vào là 5µs.
  • Điện trở dây dẫn trong là 1.2mΩ.
  • Nguồn vận hành đơn là 5V.
  • Độ nhạy đầu ra từ 63-190mV/A.
  • Điện áp ra cực kỳ ổn định.
  • ACS 712 5A (x05B).
  • Ip: -5A – 5A.
  • Độ nhạy: 180 – 190 mV/A.

Module ACS712 có loại

  • ACS 712-05B (5Ampe):   180 – 190 mV/A
  • ACS 712-20A (20Ampe): 96 – 104 mV/A
  • ACS 712-30A (30Ampe): 64 – 68 mV/A

Sơ đồ chân Module ACS712

Sơ đồ chân Module ACS712

Đo dòng dòng điện DC qua tải với ACS712-5A 

Khi đo DC phải mắc tải nối tiếp Ip+ và Ip- đúng chiều. Điện áp đầu ra (chân Out) từ  2.5 – 5V tương ứng dòng 0 – 5A, nếu mắc ngược điệp áp sẽ ra điện thế 2.5V đến 0V tương ứng với 0A đến -5A.

Để đổi điện áp ra dòng điện trong lập trình IDE Arduino, cần offset điện áp lúc đầu là 2.5V (lúc chưa tải) tương ứng với 0A. Ở đây tôi lấy độ nhạy cảm biến ACS712-5A là 185mV/A. Tức là tính từ mức 2.5V mỗi lần tăng lên 185mV ta được 1A. Vậy công thức tính dòng điện sẽ là:

ecurrent = ((Voltage – offsetvoltage) / sensitivity)

Trong đó:

ecurrent: dòng điện đo

Voltage: Điện áp cảm VĐK đo được từ Output cảm biến

offsetvoltage: Điện áp offset (2.5V)

sensitivity: độ nhạy của cảm biến (185mV/A).

Trong lập trình Arduino ta dùng công thức sau để đọc giá trị điện áp từ output:

Voltage = (adcvalue / 1024.0) * 5000; (mV)

Trong đó: adcvalue là giá trị analog VĐK đọc được.

Sơ đồ kết nối ACS712-5A với Arduino mô phỏng Proteus

Đo dòng điện với cảm biến dòng ACS712 - Lập trình Arduino

Chương trình Arduino


Video mô phỏng Proteus

Đo dòng dòng điện AC qua tải với ACS712-5A 

Khi đo dòng điện AC, do dòng điện AC không có chiều nên không cần quan tâm chiều. Như ta đã biết dòng điện xoay chiều là dòng điện có cường độ biến thiên tuần hoàn với thời gian theo quy luật của hàm sin hay cosin.

Đối với dòng điện AC thì ta quan tâm đến giá trị hiệu dụng của nó. Để sử dụng cảm biến dòng ACS712 để đo dòng điện xoay chiều, điều quan trọng là tính được giá trị hiệu dụng của dòng điện (RMS).

Với ACS712 để đo được dòng điện với những giá trị điện áp đỉnh đầu vào. Chúng ta cần tính điện áp hiệu dụng:

  • Tìm điện áp đỉnh đến đỉnh (Volts Peak to Peak)
  • Chia điện áp đỉnh đến đỉnh cho 2 được điện áp đỉnh (Volts Peak)
  • Nhân điện áp đỉnh với 0.707 thu được điện áp hiệu dụng (Volts RMS)

Tính được điện áp hiệu dùng rồi chỉ cần chia với độ nhạy của cảm biến mv/A nữa là ta tìm được dòng điện hiệu dụng.

Do điện áp đỉnh thay đổi liên tục, vì vậy chúng ta cần phải lấy nhiều giá trị điện áp đỉnh trong một khoảng thời gian đủ dài để có một kết quả chính xác.

Trong chương trình Arduino dưới đây, điện áp đỉnh đến đỉnh được lấy mẫu trong 1s trong hàm getVPP().

Sơ đồ kết nối ACS712-5A với Arduino mô phỏng Proteus

Đo dòng điện AC với ACS712 5A mô phỏng Proteus
Đo dòng điện AC với ACS712 5A mô phỏng Proteus

Chương trình Arduino


Video mô phỏng

Thư viện ACS712

Một số hàm có trong thư viện:

ACS712( ACS712_type type, uint8_t _pin )

Trong đó:

ACS712_type type : Hỗ trợ 3 models ACS712_05BACS712_20AACS712_30A

uint8_t_pin: Chân analog input

float getCurrentDC()

Đọc giá trị dòng điện DC

float getCurrentAC( uint16_t frequency )

Đọc giá trị dòng điện AC với tần số fequency

float getCurrentAC()

Đọc giá trị dòng điện AC với tần số 50Hz

int calibrate()

void setZeroPoint( int _zero )

Download file

Code ACS712-5A DC + Proteus 
Code ACS712-5A AC + Proteus 
Thư viện ACS712 
Nguồn tham khảo thư viện

Lưu ý: Phần mềm proteus mô phỏng chương trình trên được sử dụng là phần mềm proteus 8.7

Bài viết các bạn có thể tham khảo:

Viết một bình luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.