Mục lục:

Đo điện áp AC True-RMS: 14 bước
Đo điện áp AC True-RMS: 14 bước

Video: Đo điện áp AC True-RMS: 14 bước

Video: Đo điện áp AC True-RMS: 14 bước
Video: Bài 5 : Hướng dẫn Đo Ampe bằng đồng hồ vạn năng số 2024, Tháng bảy
Anonim
Image
Image
Trình diễn
Trình diễn

Hôm nay, chúng ta sẽ sử dụng STM32 Maple Mini để đọc AC. Trong ví dụ của chúng tôi, chúng tôi sẽ nhận được giá trị RMS của lưới điện. Điều này rất hữu ích cho những ai muốn giám sát mạng lưới điện cho Internet of Things. Sau đó, chúng tôi sẽ tạo một ứng dụng sử dụng sức mạnh tính toán của Maple Mini, áp dụng một mạch điện tử có khả năng cho phép thu tín hiệu 127Vac, cũng như áp dụng phép tính bình phương trung bình (RMS) trên các mẫu.

Bước 1: Trình diễn

Trong hệ thống lắp ráp của chúng tôi ngày hôm nay, chúng tôi có STM32, ngoài mạch tương tự của chúng tôi để tạo đầu vào 110. Để tránh sốc, hãy cách ly điện trở đi vào 110.

Mạch khá nhạy. Tôi đang nhận được với 110, nhưng tôi giảm nó 168 lần bằng cách sử dụng bộ chia điện áp và đặt nó vào bộ khuếch đại hoạt động, có một số chức năng.

Chúng tôi cũng có một số tụ điện tùy chọn để lọc nguồn. Nếu nguồn của bạn có chất lượng tốt, bạn không cần sử dụng chúng.

Đầu vào AD được tính toán thông qua máy hiện sóng, trong đó bạn thấy một hình sin, không phải là 110 (nhưng nó được hình thành tốt). Một điều nữa là điện áp trong mạng điện của chúng ta không phải là 110 (thực tế là 127 vôn). Nhưng khi chúng ta đang sử dụng bộ ổn định, nó sẽ điều chỉnh thành 115V.

Giá trị hiển thị trên màn hình nối tiếp là giá trị được tính bằng RMS, tức là giá trị được xác định bởi Fluke Meter.

Bước 2: Tài nguyên được sử dụng

Tài nguyên được sử dụng
Tài nguyên được sử dụng

• Nhảy cầu

• Một Mini Maple

• Protoboard

• Bộ khuếch đại LM386

• Nguồn đối xứng (+ 5V và -5V)

• Một trimpot nhiều vòng 10k (hoặc chiết áp)

• Bốn tụ điện 100nF polyester

• Ba điện trở 10k

• Bốn điện trở 470k

• Một điện trở 5k6

• Một diode zener 1n4728A

Bước 3: Sơ đồ khối

Sơ đồ khối
Sơ đồ khối

Bước 4: Lược đồ

Kế hoạch
Kế hoạch

Đây là mạch tôi phát triển dựa trên các thông số kỹ thuật mà tôi tin là tốt nhất cho phép đo này, nhưng có một số ví dụ khác có thể tìm thấy trên internet.

Bước 5: LM386 - Ghim

LM386 - Ghim
LM386 - Ghim

LM386 có hai bộ khuếch đại để điều hòa hoặc khuếch đại tín hiệu.

Bước 6: AmpOp - Vi sai (bộ trừ)

AmpOp - Vi sai (bộ trừ)
AmpOp - Vi sai (bộ trừ)

Bước 7: AmpOp - Quảng cáo biến tần

AmpOp - Quảng cáo biến tần
AmpOp - Quảng cáo biến tần

Bước 8: Maple Mini - Tiền đúc

Maple Mini - Tiền đúc
Maple Mini - Tiền đúc

Các ghim được đánh dấu trên:

Đỏ >> Dung sai 3V3

Màu xanh lá cây >> Dung sai 5V

Bước 9: Maple Mini - Ghim - a / D được sử dụng để chụp

Maple Mini - Ghim - a / D được sử dụng để chụp
Maple Mini - Ghim - a / D được sử dụng để chụp

Tôi nhấn mạnh ở đây rằng chân cắm mà tôi đã sử dụng là D11 (theo danh pháp của STMicroelectronics) là PA0.

Bước 10: Lắp ráp

cuộc họp
cuộc họp

Đối với mạch của chúng tôi, bạn sẽ cần một nguồn đối xứng, giống như nguồn mà chúng tôi đã tạo cho dự án này. Nếu không, bạn sẽ cần hai nguồn.

Bước 11: Vẽ biểu đồ với dữ liệu thu được

Vẽ biểu đồ với dữ liệu thu được
Vẽ biểu đồ với dữ liệu thu được

Bước 12: Tính giá trị RMS

Tính giá trị RMS
Tính giá trị RMS

Bước 13: Mã nguồn

Mã nguồn - Định nghĩa và hằng số

Lúc đầu, chúng tôi xác định giá trị đọc pin là D11, cũng như các hằng số khác nhau được sử dụng trong các phép tính.

#define leituraTensao D11 // AD CH0 no pino PA0 // valor teórico divisor de tensão = 168.85714285714285714286 const float fatorDivisor = 168.40166345742404792461; // valor teórico do ganho de amplificação = 1.0 const float fatorAmplificador = 1.0; // Valor usado na multilicação da leitura const float fatorMultiplicacao = fatorDivisor * fatorAmplificador; // Valor teórico da Tensão de alimentação Vcc = 3.3V const float Vcc = 3.3; // valor teórico do offset do amplificador = Vcc / 2.0; const float offSet = 1,66; // fator teórico da seekão do AD = 3.3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; // resulta em 1, 027 segundos para cada atualização // const int amostras = 35715; // resulta em 0, 514 segundos para cada atualização

Mã nguồn - Biến toàn cục

Bây giờ, chúng ta xác định một số biến toàn cục.

float Vrms = 0.0; // armazena o valor rms da tensãofloat Vmax = 0.0; // armazena o valor máximo Detado float Vmin = 10000.0; // armazena o valor mínimo Detado float Vmed = 0.0; // armazena o valor médio entre Vmáx e Vmín

Mã nguồn - Thiết lập ()

Khởi động cổng nối tiếp ở tốc độ 1Mbps. Chúng tôi đã điều chỉnh cổng AD làm đầu vào và đợi 5 giây trước khi bắt đầu thu thập dữ liệu. Thời gian chờ là tùy chọn.

void setup () {Serial.begin (1000000); // inicia a porta serial em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada delay (5000); // aguarda 5s antes de iniciar a coleta. (opcional)}

Mã nguồn - Vòng lặp () - Bắt đầu các biến thu thập dữ liệu

Trong Loop, chúng ta có biến để lặp. Ở đây, chúng tôi cũng lưu trữ các số đọc của AD trong 0.0 và khởi động lại biến VRMS cũng trong 0.0.

void loop () {int i = 0; // variável para iteração float leitura = 0.0; // armazena as leituras do AD Vrms = 0.0; // reinicia a variável Vrms

Mã nguồn - Chụp và thực hiện các tính toán riêng lẻ cho từng mẫu

Ở giai đoạn này, nếu tôi nhỏ hơn mẫu, chúng tôi bắt đầu một chu kỳ lấy mẫu cho đến khi tôi đạt được số lượng mẫu. Chúng tôi chạy analogRead để đọc cổng analog và tính tổng bình phương của các điện áp đọc được. Cuối cùng, chúng tôi tăng trình lặp.

while (i <amostras) {// inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao); // lê a porta analógica //Serial.println(leitura); // Descomente se quiser ver o sinal bruto do AD Vrms = Vrms + pow (((leitura * fatorAD) - offSet), 2.0); // tính toán một soma dos quadrados das tensões lidas i ++; // incrementa o iterador}

Mã nguồn - Tính toán chung của các mẫu và xác định giá trị tối đa, tối thiểu và trung bình

Chúng tôi áp dụng thực tế nhân để xác định giá trị thực của điện áp. Chúng tôi phát hiện xem giá trị là lớn nhất hay nhỏ nhất và chúng tôi tính giá trị trung bình của giá trị tối đa và tối thiểu hiện tại.

// Aplicando fator de multiplelicação paraminar o valor real das tensões Vrms = (sqrt (Vrms / amostras)) * fatorMultiplicacao; // deta se é um valor é máximo if (Vrms> Vmax) {Vmax = Vrms; } // deta se é um valor mínimo if (Vrms <Vmin) {Vmin = Vrms; } // tính a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) / 2.0;

Mã nguồn - Tùy chọn đầu ra

Chúng tôi có ba tùy chọn để "vẽ" giá trị đầu ra. Chúng tôi đã định dạng đầu ra cho máy vẽ nối tiếp Arduino IDE, như CSV hoặc Jason.

// saída formatada para plotter serial IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Serial.print (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); / * // saída formatada como json Serial.print ("{" Instante (ms) ":"); Serial.print (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Serial.print (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); Serial.print (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Serial.print (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Serial.print (Vmed, 3); Serial.println ("}"); * / / * // saída formatada como CSV Serial.print (millis ()); Serial.print (","); Serial.print (Vrms, 3); Serial.print (","); Serial.print (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); * /}

Bước 14: Tập tin

Tải xuống các tệp:

PDF

NS

Đề xuất: