Mục lục:

Bạn có biết về điều chỉnh ESP32 ADC không ?: 29 bước
Bạn có biết về điều chỉnh ESP32 ADC không ?: 29 bước

Video: Bạn có biết về điều chỉnh ESP32 ADC không ?: 29 bước

Video: Bạn có biết về điều chỉnh ESP32 ADC không ?: 29 bước
Video: ESP - IDF: ĐỌC TÍN HIỆU ADC TRÊN ESP32 2024, Tháng bảy
Anonim
Image
Image
Tài nguyên được sử dụng
Tài nguyên được sử dụng

Hôm nay, tôi sẽ nói về một vấn đề kỹ thuật hơn, nhưng một vấn đề mà tôi nghĩ rằng tất cả những người làm việc với ESP32 đều nên biết: vấn đề điều chỉnh đọc ADC (bộ chuyển đổi tương tự sang kỹ thuật số). Tôi thấy điều này quan trọng bởi vì khi thực hiện "phép đo", đặc biệt là với một thiết bị có đầu ra tương tự, bạn cần phải hoàn toàn chắc chắn rằng việc đọc đang được thực hiện chính xác.

Do đó, trong video ngày hôm nay, chúng tôi sẽ thực hiện các phép đo bằng cách sử dụng "bộ chuyển đổi tương tự-kỹ thuật số" của ESP32, quan sát sự khác biệt về chuyển đổi và áp dụng phương pháp điều chỉnh / hiệu chuẩn ADC.

Bước 1: Công cụ chuyển đổi quảng cáo là gì?

Bộ chuyển đổi AD là một mạch có khả năng dịch một đại lượng tương tự (liên tục) thành các giá trị kỹ thuật số (rời rạc). Điều đó nghĩa là gì? Điều đó có nghĩa là trong khi các giá trị kỹ thuật số chỉ có thể giả định các giá trị rời rạc được tạo thành bởi sự kết hợp của các số không và số một, thì một đại lượng tương tự có thể giả định bất kỳ giá trị nào trong một phạm vi. Ví dụ, nếu chúng tôi đo điện áp của một tế bào AA lý tưởng, chúng tôi có thể tìm thấy bất kỳ giá trị nào trong khoảng từ 0V đến 1,5V, vì đây là đại lượng tương tự. Trạng thái đầu ra của đèn lý tưởng chỉ phải giả định hai trạng thái (tắt hoặc mở), đó là cường độ rời rạc. Vì vi điều khiển hoạt động bằng cách sử dụng logic rời rạc này, chúng ta cần một mạch có khả năng dịch một đại lượng tương tự thành số (hoặc rời rạc).

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

• Một thẻ Lolin32 Lite v1.0.0

• Máy hiện sóng Tektronix TDS1001C để chụp

• Một cáp USB cho ESP32

• Máy hiện sóng Hantek DSO4102C làm bộ tạo tín hiệu

Bước 3: ESP32 ADC

ESP32 ADC
ESP32 ADC

Theo dữ liệu của Espressif, các chip ESP32 có thể thể hiện sự khác biệt +/- 6% giữa chip này với chip khác trong kết quả đo được.

Ngoài ra, chuyển đổi KHÔNG có câu trả lời tuyến tính cho mọi phạm vi có sẵn để đọc. Espressif cung cấp một phương pháp để hiệu chuẩn và đề nghị người dùng thực hiện các phương pháp khác nếu họ cho là cần thiết để đạt được độ chính xác mong muốn.

Chúng tôi sẽ thực hiện thu thập dữ liệu và từ đó, chúng tôi sẽ hiển thị các phản hồi của ADC và ví dụ về việc áp dụng quy trình toán học để đọc điều chỉnh.

Có một số cách (đơn giản hơn hoặc phức tạp hơn) để thực hiện các bản sửa lỗi này. Đó là vào bạn để đánh giá thích hợp nhất cho dự án của bạn.

Hình được hiển thị ở đây sẽ có mục đích minh họa và cố gắng giải quyết những điểm thú vị có thể quan sát được trong quá trình điều chỉnh.

Bước 4: Mạch được sử dụng

Mạch đã sử dụng
Mạch đã sử dụng

Tôi đã sử dụng một máy hiện sóng có bộ tạo tín hiệu lên tới 25 MHz, Hantek DSO4102C. Chúng tôi tạo ra một sóng được đọc bởi ESP A / D và máy hiện sóng. Dữ liệu thu thập được đã được ghi lại trong csv và trong một bảng tính, tôi sẽ để lại ở cuối bài viết để tải xuống.

Bước 5: Đăng nhập đã sử dụng

Đã sử dụng dấu hiệu
Đã sử dụng dấu hiệu

Chúng tôi đã chọn một tín hiệu hình thang tần số thấp cho phép truy cập vào các đường dốc chạy qua toàn bộ phạm vi chuyển đổi. Điều này cho phép một số lượng lớn các mẫu trên các đường dốc này.

Bước 6: Dữ liệu thu được bằng Máy hiện sóng

Dữ liệu do Máy hiện sóng thu được
Dữ liệu do Máy hiện sóng thu được

Hình ảnh chụp được thực hiện bởi máy hiện sóng. Dữ liệu đã được lưu trữ trong một tệp csv. Lưu ý độ cong nhẹ trên đường lên và xuống của tín hiệu.

Bước 7: Dữ liệu thu được bằng Oscilloscope (tệp csv trong Excel)

Dữ liệu do Oscilloscope thu được (Tệp csv trong Excel)
Dữ liệu do Oscilloscope thu được (Tệp csv trong Excel)

Chúng tôi có các mẫu ở đây.

Bước 8: Dữ liệu được ADC thu thập

Dữ liệu được ADC thu thập
Dữ liệu được ADC thu thập

Bằng cách thay đổi tốc độ truyền của nối tiếp, chúng ta có thể xem dữ liệu được ADC thu thập. Quan sát sự biến dạng của tín hiệu hình thang.

Dữ liệu được quan sát trên máy vẽ nối tiếp Arduino IDE

Bước 9: Dữ liệu được ADC thu thập - Excel

Dữ liệu được ADC thu thập - Excel
Dữ liệu được ADC thu thập - Excel

Sử dụng tỷ lệ cao hơn và thiết bị đầu cuối nối tiếp, chúng tôi có thể nắm bắt các giá trị và áp dụng chúng trong Excel để so sánh.

Bước 10: So sánh các đoạn dốc Climb

So sánh các đoạn đường dốc Climb
So sánh các đoạn đường dốc Climb

Chúng tôi so sánh hai đoạn đường leo của hai sản phẩm bắt được.

Lưu ý độ cong xảy ra trên cả hai đường dốc.

Cũng lưu ý rằng đối với cùng một đoạn đường nối, chúng tôi có nhiều mẫu của ESP32 hơn là từ máy hiện sóng.

Bước 11: Cân bằng số lượng mẫu

Cân bằng số lượng mẫu
Cân bằng số lượng mẫu
Cân bằng số lượng mẫu
Cân bằng số lượng mẫu

Vì ESP32 cung cấp số lượng mẫu lớn hơn máy hiện sóng, chúng ta cần phải cân bằng các giá trị này, vì chúng sẽ dùng làm chỉ số để so sánh hai đường cong.

Đối với điều này, chúng tôi sẽ thực hiện một so sánh trực tiếp.

Chúng tôi có 305 mẫu cho đoạn đường nối máy hiện sóng và 2365 mẫu cho đoạn đường nối ADC.

Vì các đường dốc có cùng phạm vi, chúng ta có thể nói rằng chúng ta có khoảng 7,75 mẫu ADC cho mỗi máy hiện sóng.

Nhân chỉ số của mỗi mẫu máy hiện sóng có cùng một đường cong, nhưng với các chỉ số tương đương với ADC và dữ liệu được phân phối lại.

Để điền vào dữ liệu còn thiếu cho các vị trí mới, chúng tôi sẽ áp dụng một đường cong phù hợp về mặt thống kê với dữ liệu đã biết.

Bước 12: Lấp đầy khoảng trống - Đường xu hướng

Lấp đầy khoảng trống - Đường xu hướng
Lấp đầy khoảng trống - Đường xu hướng
Lấp đầy khoảng trống - Đường xu hướng
Lấp đầy khoảng trống - Đường xu hướng

Chọn dữ liệu đã biết (chấm màu xanh), bằng cách nhấp và sau đó nhấp vào nút bên phải, chúng tôi chọn: "Thêm Đường xu hướng…"

Trong cửa sổ hiện ra, chúng ta chọn loại Đa thức (bậc 2 sẽ đủ).

Chúng tôi cũng đã kiểm tra các tùy chọn "Xem phương trình trong biểu đồ" và "Hiển thị giá trị bình phương R trong biểu đồ".

Chúng tôi nhấp vào "Đóng".

Bước 13: Điền vào khoảng trống - Đường cong đa thức bậc 2

Điền vào khoảng trống - Đường cong đa thức bậc 2
Điền vào khoảng trống - Đường cong đa thức bậc 2

Excel cung cấp cho chúng ta hai phần thông tin mới; phương trình bậc hai phù hợp nhất với dữ liệu và phương trình bình phương R định lượng mức độ đầy đủ này.

Chỉ cần nhớ rằng càng gần 1, phương trình càng phù hợp.

Chúng ta đừng đi sâu vào toán học liên quan, hãy chỉ sử dụng nó như một công cụ.

Bước 14: Lấp đầy khoảng trống - Đánh giá chức năng

Hãy điền vào các khoảng trống lấy mẫu bằng dữ liệu được tạo ra bởi phương trình. Và sau đó, so sánh chúng từng điểm một.

y = -9E-08x2 + 0, 0014x + 0, 1505

R² = 0, 9999

Điện áp máy hiện sóng = -9E-08 * index2 + 0, 0014 * index + 0, 1505

Bước 15: Chuyển đổi điện áp của máy hiện sóng sang giá trị tương đương để so sánh với ADC

Chuyển đổi điện áp của máy hiện sóng thành giá trị tương đương để so sánh với ADC
Chuyển đổi điện áp của máy hiện sóng thành giá trị tương đương để so sánh với ADC

Hãy tận dụng điều này để cũng biến đổi giá trị của điện áp dao động ký thành giá trị ADC tương đương.

Vì giá trị cao nhất thu được trong ADP của ESP32 là 4095, tương đương với giá trị đọc 2,958V cho cùng một chỉ số, chúng ta có thể nói rằng:

Mỗi vôn trong các phép đo của máy hiện sóng bằng khoảng 1384,4 đơn vị AD. Do đó, chúng ta có thể nhân tất cả các phép đo của máy hiện sóng với giá trị này.

Bước 16: So sánh hai đường dốc đạt được

So sánh hai đường dốc đạt được
So sánh hai đường dốc đạt được

Hình dung sự khác biệt thu được trong hai bài đọc.

Bước 17: Hành vi của Sự khác biệt Đọc ADC (LỖI)

Hành vi của Sự khác biệt Đọc ADC (LỖI)
Hành vi của Sự khác biệt Đọc ADC (LỖI)

Đường cong dưới đây cho thấy sự khác biệt trong số đọc ADC hoạt động như một chức năng của phép đo. Việc thu thập dữ liệu này sẽ cho phép chúng tôi tìm ra một chức năng hiệu chỉnh.

Để tìm đường cong này, chúng tôi chỉ cần vẽ biểu đồ sự khác biệt được tìm thấy trong mỗi số đo dưới dạng hàm của mỗi vị trí AD có thể có (0 đến 4095).

Bước 18: Hành vi khác biệt khi đọc ADC - Tìm chức năng sửa chữa

Hành vi khác biệt khi đọc ADC - Tìm chức năng sửa chữa
Hành vi khác biệt khi đọc ADC - Tìm chức năng sửa chữa

Chúng tôi có thể xác định trong Excel một hàm hiệu chỉnh bằng cách thêm Đường xu hướng, hiện có mức độ cao hơn, cho đến khi nó phù hợp đủ với dữ liệu của chúng tôi.

Bước 19: Sử dụng phần mềm khác

Sử dụng phần mềm khác
Sử dụng phần mềm khác
Sử dụng phần mềm khác
Sử dụng phần mềm khác
Sử dụng phần mềm khác
Sử dụng phần mềm khác
Sử dụng phần mềm khác
Sử dụng phần mềm khác

Một phần mềm thú vị khác để xác định đường cong là PolySolve, bạn có thể sử dụng trực tiếp phần mềm này tại liên kết: https://arachnoid.com/polysolve/ hoặc tải xuống dưới dạng ứng dụng Java.

Nó cho phép áp dụng các hồi quy đa thức bậc cao hơn và phân phối hàm đã định dạng, cũng như các hàm khác.

Để sử dụng nó, chỉ cần nhập dữ liệu vào hộp văn bản đầu tiên. Dữ liệu phải tuân theo thứ tự X, Y được phân tách bằng dấu phẩy hoặc tab. Hãy thận trọng trong việc sử dụng chính xác dấu chấm dưới dạng dấu thập phân.

Biểu đồ sẽ xuất hiện trong hộp tiếp theo nếu dữ liệu đã nhập được định dạng đúng.

Đây là cách đường cong lỗi ADC của chúng tôi diễn ra.

Cửa sổ này sẽ hiển thị kết quả của hồi quy, bao gồm dữ liệu về tính đầy đủ của hàm, do đó có thể có đầu ra của nó được định dạng theo một số cách: như một hàm C / C ++, một danh sách các hệ số, một hàm được viết bằng Java, v.v.

Lưu ý: Chú ý đến dấu phân cách thập phân

Bước 20: Hằng số và thiết lập ()

Tôi chỉ ra ở đây GPIO được sử dụng để bắt analog. Tôi khởi tạo cổng nối tiếp, cũng như chân được xác định để bắt analog.

const int pin_leitura = 36; // GPIO usado para captura analógica void setup () {Serial.begin (1000000); // Iniciciando một porta serial somente para debug pinMode (pin_leitura, INPUT); // Pino useizado para captura analógica}

Bước 21: Vòng lặp () và chức năng sửa

Chúng tôi thực hiện việc nắm bắt điện áp đã điều chỉnh và chúng tôi in các giá trị có hoặc không có hiệu chỉnh chính xác.

void loop () {int valor_analogico = analogRead (pin_leitura); // realiza a captura da tensão ajustada //Serial.print(valor_analogico + f (valor_analogico)); // printme os valores para debug (COM CORREÇÃO) Serial.print (valor_analogico); // printmime os valores para debug (SEM CORREÇÃO) Serial.print (","); Serial.print (4095); // cria uma linha para marcar o valor máximo de 4095 Serial.print (","); Serial.println (0); // cria uma linha para marcar o valor mínimo de 0}

Lưu ý ở dòng 12 rằng chúng ta có tùy chọn in dữ liệu với việc bổ sung hàm khác biệt f (analog_value).

Bước 22: Sử dụng chức năng hiệu chỉnh PolySolve

Ở đây, chúng tôi sử dụng chức năng PolySolve bên trong Arduino IDE.

/ * Chế độ: bậc đa thức bình thường cặp dữ liệu 6, 2365 x, y Hệ số tương quan (r ^ 2) = 9, 907187626418e-01 Sai số chuẩn = 1, 353761109831e + 01 Dạng đầu ra: Hàm C / C ++: Copyright © 2012, P. Lutus - https://www.arachnoid.com. Đã đăng ký Bản quyền. * / double f (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e- 10 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5) + 4.787659214703e-18 * pow (x, 6); }

Lưu ý sự thay đổi từng dấu phẩy làm dấu phân cách thập phân.

Bước 23: Chụp với hiệu chỉnh - Plotter Serial

Chụp có chỉnh sửa - Sê-ri máy vẽ
Chụp có chỉnh sửa - Sê-ri máy vẽ

Bước 24: Chi phí tính toán

Chi phí tính toán
Chi phí tính toán
Chi phí tính toán
Chi phí tính toán

Để thực hiện các phép tính đa thức, bộ xử lý cần phải xử lý tác vụ này. Điều này có thể dẫn đến sự chậm trễ trong quá trình thực thi, tùy thuộc vào mã nguồn và khả năng tính toán có sẵn.

Ở đây, chúng ta thấy một bảng kết quả của một bài kiểm tra sử dụng đa thức nhiều bậc. Lưu ý sự khác biệt giữa thời điểm khi sử dụng hàm pow () và khi không sử dụng.

Bước 25: Mã kiểm tra - Thiết lập () và Bắt đầu vòng lặp ()

Ở đây, chúng tôi có mã được sử dụng trong thử nghiệm của chúng tôi.

void setup () {Serial.begin (1000000); // Iniciando a porta serial somente para debug} void loop () {float valor_analogico = 500.0; // ô valor arbtrario float quantidade = 10000.0; // quantidade de chamadas float contador = 0.0; // contador de chamadas

Bước 26: Mã thử nghiệm - Vòng lặp () và xử lý

Tôi đã sử dụng hàm micros () để nhận giá trị tính bằng micro giây.

// ============= inicia o processo float agora = micros (); // marca o Instante inicial while (contador <quantidade) {// v (valor_analogico); // função vazia // r (valor_analogico); // função com retorno // f0 (valor_analogico); // grau 0 // f1 (valor_analogico); // grau 1 // f2 (valor_analogico); // grau 2 // f3 (valor_analogico); // grau 3 // f4 (valor_analogico); // grau 4 // f5 (valor_analogico); // grau 5 // f6 (valor_analogico); // grau 6 // f13_semPow (valor_analogico); // grau 13º SEM a função POW // f13_comPow (valor_analogico); // grau 13º COM a função POW contador ++; } agora = (micros () - agora) / quantidade; // định thức o khoảng thời gian chờ đợi vượt qua cuộc gọi của cada iteração // ============= finaliza o processo

Bước 27: Mã kiểm tra - Vòng lặp () - Kết quả

Chúng tôi in giá trị trả về từ hàm lớp 13 có và không có POW để so sánh, cũng như khoảng thời gian xử lý.

// printme o valor retornado da função de grau 13 com e sem POW para comparação Serial.print (f13_semPow (valor_analogico)); // grau 13º SEM a função POW Serial.print ("-"); Serial.print (f13_comPow (valor_analogico)); // grau 13º COM a função POW Serial.print ("-"); // printme o khoảng do processamento Serial.println (agora, 6); }

Bước 28: Mã kiểm tra - Các chức năng đã sử dụng

Các hàm rỗng (chỉ với trả về) của bậc 0 và 1.

// FUNÇÃO VAZIAdouble v (double x) {} // FUNÇÃO SOMENTE COM RETORNO double r (double x) {return x; } // FUNÇÃO DE GRAU 0 double f0 (double x) {return 2.202196968876e + 02; } // FUNÇÃO DE GRAU 1 double f1 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x; }

Chức năng cấp 2, 3 và 4.

// FUNÇÃO DE GRAU 2double f2 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2); } // FUNÇÃO DE GRAU 3 double f3 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3); } // FUNÇÃO DE GRAU 4 double f4 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e-10 * pow (x, 4); }

Lớp 5 và 6 chức năng.

// FUNÇÃO DE GRAU 5double f5 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e-10 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5); } // FUNÇÃO DE GRAU 6 double f6 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2) + -3.470360275448e-07 * pow (x, 3) + 2.082790802069e-10 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5) + 4.787659214703e-18 * pow (x, 6); }

Chức năng lớp 13 bằng cách sử dụng POW.

// FUNÇÃO DE GRAU 13 USANDO O POWdouble f13_comPow (double x) {return 2, 161282383460e + 02 + 3, 944594843419e-01 * x + 5, 395439724295e-04 * pow (x, 2) + -3, 968558178426e-06 * pow (x, 3) + 1, 047910519933e-08 * pow (x, 4) + -1, 479271312313e-11 * pow (x, 5) + 1, 220894795714e-14 * pow (x, 6) + -6, 136200785076e-18 * pow (x, 7) + 1, 910015248179e-21 * pow (x, 8) + -3, 566607830903e-25 * pow (x, 9) + 5, 000280815521e-30 * pow (x, 10) + 3, 434515045670e-32 * pow (x, 11) + -1, 407635444704e-35 * pow (x, 12) + 9, 871816383223e-40 * pow (x, 13); }

Chức năng lớp 13 mà không cần sử dụng POW.

// FUNÇÃO DE GRAU SEM USAR O POWdouble f13_semPow (double x) {return 2, 161282383460e + 02 + 3, 944594843419e-01 * x + 5, 395439724295e-04 * x * x + -3, 968558178426e-06 * x * x * x + 1, 047910519933e-08 * x * x * x * x + -1, 479271312313e-11 * x * x * x * x * x + 1, 220894795714e-14 * x * x * x * x * x * x + -6, 136200785076e-18 * x * x * x * x * x * x * x + 1, 910015248179e-21 * x * x * x * x * x * x * x * x + -3, 566607830903e- 25 * x * x * x * x * x * x * x * x * x + 5, 000280815521e-30 * x * x * x * x * x * x * x * x * x * x + 3, 434515045670e- 32 * x * x * x * x * x * x * x * x * x * x * x + -1, 407635444704e-35 * x * x * x * x * x * x * x * x * x * x * x * x + 9, 871816383223e-40 * x * x * x * x * x * x * x * x * x * x * x * x * x; }

Bước 29: Tập tin

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

PDF

NS

Bảng tính

Đề xuất: