Đo dòng điện trung bình với uC và shunt hiện tại


12

Đây là bài viết đầu tiên của tôi. Tôi là một anh chàng phần mềm đang cố gắng làm phần cứng nên thật nhẹ nhàng :)

Mạch

Tôi đang thiết kế một mạch nhỏ (xem pic và xin lỗi vì sơ đồ lộn xộn) đơn giản và đơn giản là một loạt các MOSFET và trình điều khiển cổng được thiết kế để chuyển tải điện trở (miếng đệm sưởi ấm trong trường hợp này) từ vi điều khiển. Các bộ phận làm nóng thường có điện trở rất thấp và để giữ nguồn ở mức mong muốn, MOSFET được chuyển sang sử dụng PWM.

Đo đạc

Bên cạnh khía cạnh chức năng thuần túy, còn có một trọng tâm giáo dục. Tôi muốn có thể nhận được một số phản hồi về mức tiêu thụ hiện tại. Và cách tiếp cận ngây thơ của tôi chỉ đơn giản là ném vào một số IC cảm biến shunt hiện tại. Khi sử dụng đồng hồ vạn năng để đo điện áp đầu ra từ cảm biến, tôi thực sự nhận được thứ gì đó trông giống như dòng điện trung bình (có chuyển mạch PWM) do "độ trễ" của ampe kế. Nhưng khi kết nối cùng một đầu ra với một ADC atmega328p, tôi nhận được một số bài đọc không tốt - tốc độ ở đây đặt một số đọc ở bất cứ đâu trên sóng vuông PWM.

Vì vậy, câu hỏi của tôi là làm thế nào để tôi đo về dòng điện (trung bình) khi chuyển đổi với PWM?

Có vẻ như thiết kế vẫn ổn, nhưng tôi có thể đã bỏ lỡ điều gì đó trong cả thiết kế và cách sử dụng uC ADC trong bối cảnh này.

sơ đồ


Tôi nghĩ rằng một bộ lọc có thể được sử dụng để cung cấp điện áp trung bình từ PWM. Một bài viết thú vị giải thích một bộ lọc như vậy và các giá trị được sử dụng dựa trên tần số PWM là bài viết này .
alexan_e

Có một số câu trả lời liên quan trong câu hỏi này . Nhưng họ chỉ đề cập đến việc sử dụng shunt và IC để đo dòng điện. Không có đề cập đến PWM, mặc dù.
Ricardo

Cảm ơn các ý kiến. @alexan_e: TI đang hiển thị bộ lọc đầu vào trong biểu dữ liệu INA197, nhưng tôi không chắc về việc sử dụng nó. Nó có thể là con đường để đi khi không có điện áp ổn định.
ltj

Tôi nghĩ rằng đó là giải pháp cho vấn đề của bạn nhưng tôi muốn có thêm kinh nghiệm về vấn đề này cung cấp câu trả lời chi tiết, đó là lý do tại sao tôi đăng bài này dưới dạng nhận xét.
alexan_e

Vì đầu ra là các hạt nhân có nhiệm vụ thay đổi, bạn có thể sử dụng mạch dò cực đại và đo nó với ADC.
Martin

Câu trả lời:


6

Đôi khi những gì trông đơn giản không phải là đơn giản. Bạn có một phép đo khá phức tạp để làm, nhưng bạn muốn một kết quả đơn giản. Những gì bạn muốn đo không phải là hằng số, nó thay đổi theo thời gian. Tùy thuộc vào mức độ yêu cầu của bạn, bạn có thể tính toán một hoặc nhiều thuộc tính của mức tiêu thụ hiện tại. Những tính chất này sẽ giúp bạn giám sát hệ thống tốt hơn. Tôi đề xuất cho bạn 3 giải pháp khác nhau, với độ phức tạp tăng dần.

Giải pháp 1: Trung bình

Bạn muốn nhận được kết quả một giá trị -> lấy trung bình trong thời gian. Như đã được đề xuất bởi @akellyirl, hãy sử dụng bộ lọc thông thấp. Tính toán float y = alpha*input + (1-alpha)*ycho từng mẫu, đâu alphalà yếu tố làm mịn. Xem Wikipedia để biết chi tiết.

Giải pháp 2: Tối đa + Trung bình

Bạn rất thú vị trong việc lấy giá trị trung bình và giá trị tối đa. Theo dõi giá trị tối đa có thể thú vị cho kích thước thành phần chẳng hạn.

if (y > max)
  max = y;

Giải pháp 3: Độ lệch chuẩn + Tối đa + Trung bình

Tại sao?

Xem biểu đồ dưới đây. Có 3 tín hiệu có hình dạng khác nhau. Một hình tam giác , một hình sin và tín hiệu tăng đột biến . Họ đều là những kỳ với cùng kỳ, cùng biên độ , cùng trung bình , và cùng một phúttối đa . Nhưng, chúng có hình dạng khác nhau, và thực sự chúng có một câu chuyện hoàn toàn khác ...

Tín hiệu và biểu đồ của họ

Một trong những khác biệt là độ lệch chuẩn. Đó là lý do tại sao tôi khuyên bạn nên mở rộng số đo của mình và bao gồm độ lệch chuẩn. Vấn đề là cách tiêu chuẩn để tính toán nó là tiêu thụ CPU. Hy vọng, có một giải pháp.

Làm sao?

Sử dụng phương pháp biểu đồ . Xây dựng biểu đồ của tất cả các phép đo và trích xuất hiệu quả các số liệu thống kê (min, max, avg, độ lệch chuẩn) của tập dữ liệu. Các nhóm biểu đồ giá trị với nhau có cùng giá trị hoặc cùng một phạm vi giá trị. Ưu điểm là tránh lưu trữ tất cả các mẫu (tăng số lượng theo thời gian) và để tính toán nhanh trên một số lượng dữ liệu hạn chế.

Trước khi bắt đầu lấy số đo, hãy tạo một mảng để lưu trữ biểu đồ. Đó là mảng số nguyên 1 chiều, có kích thước 32 chẳng hạn:

int histo[32];

Tùy thuộc vào phạm vi của ampe kế, thích ứng dưới chức năng. Ví dụ: nếu phạm vi là 256mA, điều đó có nghĩa là bin 0 của biểu đồ sẽ được tăng theo giá trị từ 0 đến 8 mA, bin 1 theo giá trị trong khoảng từ 8 đến 16 mA, v.v ... Vì vậy, bạn sẽ cần một số nguyên để biểu diễn số thùng biểu đồ:

short int index;

Mỗi lần bạn lấy một mẫu, hãy tìm chỉ số bin tương ứng:

index = (short int) floor(yi);

Và tăng thùng này:

histo[index] += 1;

Để tính giá trị trung bình, hãy chạy vòng lặp này:

float mean = 0;
int N = 0;
for (i=0; i < 32 ; i++) {
  mean = i * histo[i]; // sum along the histogram
  N += i; // count of samples
}
mean /= N; // divide the sum by the count of samples.
mean *= 8; // multiply by the bin width, in mA: Range of 256 mA / 32 bins = 8 mA per bin.

Để tính độ lệch chuẩn, hãy chạy vòng lặp này:

float std_dev = 0;

for (i=0; i < 32 ; i++) {
  std_dev = (i - mean) * (i - mean) * histo[i]; // sum along the histogram
}
std_dev /= N; // divide the sum by the count of samples.
std_dev = sqrt(std_dev); // get the root mean square to finally convert the variance to standard deviation.

Chiến lược của phương pháp biểu đồ là làm cho các hoạt động chậm trên một số thùng, thay vì tất cả các mẫu tín hiệu thu được. Kích thước mẫu càng dài thì càng tốt. Nếu bạn muốn biết thêm chi tiết, hãy đọc trang thú vị này Biểu đồ, Pmf và Pdf .


giải thích rất kỹ lưỡng và rõ ràng. Ở mức độ thực tế, làm thế nào để bạn đảm bảo rằng việc lấy mẫu ADC được phân phối "theo cách tốt" tức là không bị khóa với tín hiệu PWM theo bất kỳ cách nào? Tôi phải thừa nhận rằng ngay bây giờ tôi chỉ sử dụng Arduino (hw + sw) cho cả lấy mẫu PWM và ADC. Có lẽ tôi nên tự mình thiết lập bộ hẹn giờ tích hợp. Tôi đoán tần số lấy mẫu sẽ cao hơn một chút so với tần số PWM phải không?
ltj

1
Ngay khi bạn bắt đầu lấy mẫu, mọi thứ trở nên khá phức tạp. Điều đầu tiên cần làm, là ghi nhớ là định lý Nyquist-Shannon. Điều trực quan là tần số lấy mẫu càng cao, bạn càng có nhiều thông tin. Nhưng điều không trực quan, mặc dù cơ bản, là trước khi lấy mẫu ở tần số Fs, bạn phải tuyệt đối lọc bộ lọc thông thấp (trong miền tương tự / điện tử) tín hiệu ở Fs / 2. Nếu không, bạn sẽ bị ảnh hưởng bởi răng cưa. Tôi đề nghị bạn chọn tần số lấy mẫu cao nhất. Một cái gì đó như ~ 10 lần tần số PWM nếu có thể.
RawBean

Đây là một sự hiểu lầm phổ biến của định lý Nyquist-Shannon thực sự nói rằng bạn cần lấy mẫu ở băng thông gấp đôi. Bí danh có thể hữu ích. Không có ý định thiếu tôn trọng, nhưng điều này có vẻ như một câu trả lời từ texbook. Đề xuất lấy mẫu ~ 10 lần trong trường hợp này khi chi tiết tần số cao rất có thể không liên quan là quá mức cần thiết.
akellyirl

1

Bạn hiểu chính xác vấn đề: bạn cần lấy "mức trung bình" của PWM, giống như đồng hồ bạn đang sử dụng để đo.

Bạn có thể sử dụng bộ lọc RC trên các tín hiệu A1,2,3 có hằng số thời gian ít nhất gấp mười lần thời gian PWM của bạn. Điều đó có nghĩa là nếu khoảng thời gian PWM của bạn là 10 micro giây thì hằng số thời gian RC sẽ là 100 micro giây. Ví dụ 10kOhms x 10nF = 100us

Một giải pháp tốt hơn là lọc các tín hiệu số trong vi điều khiển như thế này:

float y = (1-0.99)*input + 0.99*y; 

Thay đổi giá trị "0,99" để thay đổi hằng số thời gian của bộ lọc kỹ thuật số này.


1
Coi chừng răng cưa nếu bạn làm điều đó trong mã.
Andy aka

Bí danh không nhất thiết là một vấn đề. Chúng ta đều biết rằng để tái tạo tín hiệu, tốc độ mẫu phải có tần số cao nhất ít nhất gấp đôi. Nhưng khi tín hiệu được giới hạn băng thông, bạn chỉ cần lấy mẫu ở băng thông gấp đôi . Điều này được gọi là gạch dưới. Vì tín hiệu có lẽ là tần số thấp bởi vì nó đang điều khiển một miếng đệm nóng, nên tốc độ mẫu hợp lý trong phạm vi 100 đến 1000 SPS sẽ ổn. Xem: ni.com/newsletter/50078/vi
akellyirl

Sẽ là khôn ngoan để đảm bảo tốc độ PWM và tốc độ mẫu là nguyên tố lẫn nhau nếu sử dụng cách lấy mẫu.
akellyirl

Chính xác là suy nghĩ của tôi - nếu đo thông qua ADC và tạo ra PWM trong cùng MCU, có thể có xu hướng cả hai bị khóa kịp thời.
Andy aka

Tín hiệu ở tần số pwm, tần số không thấp. Nếu nó là frq thấp, nó có thể ít tốn tài nguyên hơn để chỉ lấy mẫu trong một khoảng thời gian và trung bình hơn là sử dụng toán học dấu phẩy động theo cách đó.
Scott Seidman
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.