Đọc một điện áp khác nhau vào Arduino


8

Sử dụng Arduino Nanomáy biến áp hiện tại (CT), tôi đang cố gắng cảm nhận dòng điện chạy qua một dòng 120 V 60 Hz.

Mạch

CT đầu ra 0-1 Vtheo thông số kỹ thuật của nó. Đầu ra này bị sai lệch AREF/2= 2,5 V.

Nhập mô tả hình ảnh ở đây

analogRead Giá trị

Trục x đại diện cho số chỉ mục của mẫu ADC, trong khi trục y đại diện cho giá trị ADC (0-1024). Tốc độ lấy mẫu khoảng 9 kHz. Chênh lệch từ đỉnh đến đỉnh là khoảng 1026 mẫu.

Nhập mô tả hình ảnh ở đây

Đây có phải là dạng sóng mà bạn mong đợi từ CT không? Tại sao có các khu vực nơi các giá trị phẳng, thay vì liên tục thay đổi?

Hơn nữa, nếu chúng ta nhìn vào phần đường cong của cốt truyện, tại sao Arduino lại đọc các giá trị cả trên 512và dưới 512? Nó đọc một giá trị ở trên 512, rồi một giá trị bên dưới 512, rồi một giá trị ở trên 512và cứ thế.

Thời gian dành cho một analogReadlần được đo là 110 micro giây cho thiết lập của tôi và có 1026 mẫu giữa các đỉnh dạng sóng. Điều đó có nghĩa là sẽ có khoảng 9 đỉnh trong 1 giây, mặc dù tôi mong đợi 60 đỉnh vì chúng ta đang cảm nhận được đường 60 Hz. Bạn làm gì từ điều này? Có một tụ điện, C1trong mạch, nó có liên quan gì không?

Các giá trị analogRead này có phù hợp để sử dụng để tính điện áp RMS không, và do đó dòng RMS đi qua dây được cảm nhận? Mục tiêu cuối cùng của việc này là tính toán mức sử dụng năng lượng sau khi xác định dòng RMS chạy qua dây.

Phác thảo được sử dụng để lấy giá trị cho cốt truyện

void setup() {
    Serial.begin(9600);
}

void loop() {
   double sensorValue = analogRead(1);
   Serial.println(sensorValue)
}

analogReadĐiểm dữ liệu thực tế trong khu vực vết sưng

487
534
487
535
488
537
484
536
487
538
486
536
484
540
484
539
485
540
483
540
484
541
481
539
481
540
484
540
480
543
484
539
481
540
484
541
486
542
485
538
485
538
488
535
489
534
491
530
491
529
493
531
492
526
498
526
499
524
499
520
503
518
502
518
507

Sơ đồ các giá trị analogRead

Các giá trị analogRead hiện được lưu trữ trong bộ đệm trước khi được truyền qua Nối tiếp. Hiện có 55 datapoint ADC tạo thành 1 giai đoạn. Xem xét thời gian tương tự là 110 âm, mỗi chu kỳ mất 6.05 ms, cho chúng ta tần số 165 Hz! Điều gì có thể đã đi sai?

Nhập mô tả hình ảnh ở đây

void loop() {
    double sensorValue = analogRead(1);
    char buf[32];

    dtostrf(sensorValue, 8, 2, buf);
    value = buf;

    if (stop == 0) {
        if (i < 10000) {
            message += ',';
            message += value;
            i++;
        }
        else {
            stop = 1;
            Serial.println(message);
        }
    }
}

Bạn có thể gửi mã của bạn? Điều này không đúng chút nào. Khi bạn nói "Giả sử 100ms trôi qua", tại sao chúng ta lại cho rằng?
Cyberg Ribbon

@Cyberg Ribbon Đăng mã được sử dụng để tạo giá trị cho cốt truyện. Xin lỗi, tôi vừa đo thời gian thực hiện analogRead()và thấy nó là 110 micro giây. Cập nhật câu hỏi.
Nyxynyx

Tải trọng bạn đang sử dụng cho nguồn điện là gì. Lý tưởng nhất là bạn muốn một cái gì đó khá ổn định như bóng đèn sợi đốt. Nếu bạn có một cái gì đó phức tạp như nguồn cung cấp năng lượng chuyển đổi máy tính xách tay có thể có tải khác nhau, bạn có thể mong đợi một kết quả phức tạp.
Salix alba

1
Phần lớn thời gian trong vòng lặp sẽ được dành để gửi nối tiếp ở tốc độ 9600bps. Bạn sẽ chỉ thay đổi 960 char / s tức là mỗi lần đọc mất 4ms.
Cyberg Ribbon

@Salixalba Tải là một máy tính để bàn có nguồn điện chuyển đổi. Tôi sẽ thử đo một tải khác nhau, chẳng hạn như lò sưởi.
Nyxynyx

Câu trả lời:


5

Về các phép đo của bạn, tôi sẽ hoàn toàn bỏ qua tập đầu tiên với Serial.println () trong vòng lặp. Tôi sẽ cho rằng thời gian của điều này là không đáng tin cậy.

Tập dữ liệu thứ hai mà bạn thu được trong bộ đệm có vẻ đúng, nhưng Ước tính / thời gian Tần suất của bạn có thể sai. Tôi sẽ đảo ngược một đầu ra kỹ thuật số tại mỗi lần lặp. Bạn có thể đo tần số của tần số đó bằng Đồng hồ vạn năng và tốc độ mẫu ADC của bạn sẽ gấp đôi giá trị đó.

Đối với nguồn điện cho PC hoặc máy tính xách tay, đó là dạng sóng khá phổ biến.

Nếu không hiệu chỉnh hệ số công suất hiệu quả, tín hiệu hiện tại hiển thị bên dưới sẽ khá điển hình (nguồn: http://www.nlvocables.com/blog/?p=300 )

http://www.nlvocables.com/blog/?p=300

Bạn sẽ cần tính toán các giá trị RMS và sẽ rất khôn ngoan khi lọc tín hiệu.

Đây là một hướng dẫn mà tôi đã viết về cách xây dựng và mã hóa Trình theo dõi điện dựa trên Arduino Yun với Cloud Support / Temboo và Google Drive. Nó sẽ là một số giúp đỡ cho bạn.


Cảm ơn bạn! CT bạn đã sử dụng đầu ra -1V đến 1V. Để sử dụng ADC 10 bit, bạn sẽ khuếch đại đầu ra SCT lên 2,5 bằng cách sử dụng opamp? Hoặc đặt ISF của bạn thành 2V và phân cực tín hiệu CT của bạn bằng 1V
Nyxynyx

Không, tôi không khuếch đại nó hoặc thay đổi Aref.
akellyirl

Làm thế nào bạn có thể có được biểu đồ này? Với phần mềm nào?
Zgrknr

0

Nếu bạn đang đo tải điện trở tôi sẽ nói rằng điện trở gánh nặng bạn chọn là sai, có một số CT giá rẻ trên ebay (SCT-013-xxx) có các phiên bản có và không có điện trở gánh, chúng hoạt động tốt với giá của chúng nhưng bạn phải đọc bảng dữ liệu. SCT-013-000 yêu cầu điện trở 20R để thoát ra 1V với tải 100A, nếu điện trở này bị sai, bạn có thể có dạng sóng bị biến dạng nghiêm trọng khi đo dòng điện cao hơn (tương tự như dòng điện bạn đã cung cấp), bạn sẽ mong đợi tín hiệu bóp méo càng nhiều giá trị điện trở gánh nặng càng thấp nhưng đây không phải là trường hợp của CT.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.