Агуулгын хүснэгт:

Та ESP32 ADC тохируулгын талаар мэдэх үү ?: 29 алхам
Та ESP32 ADC тохируулгын талаар мэдэх үү ?: 29 алхам

Видео: Та ESP32 ADC тохируулгын талаар мэдэх үү ?: 29 алхам

Видео: Та ESP32 ADC тохируулгын талаар мэдэх үү ?: 29 алхам
Видео: LDmicro 10: Incubator Temperature Regulator (Microcontroller PLC Ladder Programming with LDmicro) 2024, Арваннэгдүгээр
Anonim
Image
Image
Ашигласан нөөц
Ашигласан нөөц

Өнөөдөр би илүү техникийн асуудлын талаар ярих гэж байна, гэхдээ ESP32-тэй ажилладаг бүх хүмүүс мэддэг байх ёстой гэж бодож байна: ADC (аналог-тоон хөрвүүлэгч) унших тохируулга. "Хэмжилт" хийхдээ, ялангуяа аналог гаралттай багажийн хувьд та уншлага зөв хийгдэж байгаа гэдэгт бүрэн итгэлтэй байх ёстой учраас энэ нь чухал гэж би бодож байна.

Өнөөдрийн видеон дээр бид ESP32-ийн "аналог-дижитал хөрвүүлэгч" -ийг ашиглан хэмжилт хийж, хөрвүүлэлтийн зөрүүг ажиглаж, ADC тохируулга / тохируулгын аргыг ашиглах болно.

Алхам 1: AD хөрвүүлэгч гэж юу вэ?

AD хөрвүүлэгч нь аналог (тасралтгүй) хэмжигдэхүүнийг тоон (салангид) утга руу хөрвүүлэх чадвартай хэлхээ юм. Энэ юу гэсэн утгатай вэ? Энэ нь дижитал утга нь зөвхөн тэг ба нэгдлийн хослолоор үүссэн салангид утгыг хүлээн авах боломжтой гэсэн үг боловч аналог хэмжигдэхүүн нь муж доторх аливаа утгыг хүлээж авах боломжтой гэсэн үг юм. Жишээлбэл, хэрэв бид хамгийн тохиромжтой АА үүрний хүчдэлийг хэмжсэн бол энэ нь аналог хэмжигдэхүүн тул 0V ба 1.5V хооронд ямар ч утгыг олж чадна. Тохиромжтой чийдэнгийн гаралтын төлөв нь зөвхөн хоёр төлөвт (унтарсан эсвэл асаалттай) байх ёстой бөгөөд энэ нь салангид хэмжээтэй байна. Микроконтроллерууд энэхүү салангид логикийг ашиглан ажилладаг тул бидэнд аналог хэмжигдэхүүнийг тоон (эсвэл салангид) болгон хөрвүүлэх чадвартай хэлхээ хэрэгтэй болно.

Алхам 2: Ашигласан нөөц

• Нэг Lolin32 Lite карт v1.0.0

• Зураг авах зориулалттай Tektronix TDS1001C осциллограф

• ESP32 -д зориулсан нэг USB кабель

• Hantek DSO4102C осциллограф нь дохио үүсгэгч болно

Алхам 3: ESP32 ADC

ESP32 ADC
ESP32 ADC

Espressif-ийн мэдээллээр ESP32 чип нь хэмжсэн үр дүнд нэг чипээс нөгөө чип хүртэлх +/- 6% -ийн зөрүүтэй байж болно.

Нэмж дурдахад хөрвүүлэлт нь унших боломжтой бүх мужид шугаман хариулт өгөхгүй. Espressif нь шалгалт тохируулга хийх аргыг өгдөг бөгөөд хүссэн нарийвчлалд хүрэх шаардлагатай гэж үзвэл хэрэглэгчид бусад аргыг хэрэгжүүлэхийг санал болгодог.

Бид өгөгдөл цуглуулах ажлыг хийх бөгөөд үүнээс бид ADC -ийн хариулт, тохируулгыг уншихын тулд математик процессыг ашиглах жишээг харуулах болно.

Эдгээр засварыг хийх хэд хэдэн (илүү энгийн эсвэл илүү төвөгтэй) арга байдаг. Төсөлдөө хамгийн тохиромжтойг нь үнэлэх нь танд хамаарна.

Энд үзүүлсэн зураг нь тайлбарлах зорилготой бөгөөд тохируулгын явцад ажиглагдаж болох сонирхолтой цэгүүдийг авч үзэхийг хичээх болно.

Алхам 4: Ашигласан хэлхээ

Ашигласан хэлхээ
Ашигласан хэлхээ

Би Hantek DSO4102C 25 МГц хүртэл дохио үүсгэгчтэй осциллограф ашигласан. Бид ESP A / D болон осциллографоор уншсан долгионыг үүсгэсэн. Цуглуулсан өгөгдлийг csv болон хүснэгтэд бүртгэсэн бөгөөд үүнийг татаж авахын тулд би өгүүллийн төгсгөлд үлдээх болно.

Алхам 5: Ашигласан тэмдэг

Ашигласан тэмдэг
Ашигласан тэмдэг

Бид бага давтамжтай трапецын дохиог сонгосон бөгөөд энэ нь хөрвүүлэлтийн бүх хүрээнд дамжин өнгөрөх налуу руу нэвтрэх боломжийг олгодог. Энэ нь эдгээр налуу зам дээр олон тооны дээж авах боломжийг олгодог.

Алхам 6: Осциллографоор олж авсан өгөгдөл

Осциллографоор олж авсан өгөгдөл
Осциллографоор олж авсан өгөгдөл

Барьсан зургийг осциллографоор гүйцэтгэсэн. Өгөгдлийг csv файлд хадгалсан болно. Дохионы өгсөх ба уруудах налуу дээр бага зэрэг муруйлт байгааг анхаарна уу.

Алхам 7: Осциллографоор олж авсан өгөгдөл (Excel дэх csv файл)

Осциллографоор олж авсан өгөгдөл (Excel дэх csv файл)
Осциллографоор олж авсан өгөгдөл (Excel дэх csv файл)

Энд дээжүүд байна.

Алхам 8: ADC -ийн олж авсан өгөгдөл

ADC -ээс олж авсан өгөгдөл
ADC -ээс олж авсан өгөгдөл

Цувралын дамжуулах хурдыг өөрчилснөөр бид ADC -ийн авсан өгөгдлийг харах боломжтой болно. Трапецын дохионы хэв гажилтыг ажигла.

Arduino IDE сериал плоттер дээр ажиглагдсан өгөгдөл

Алхам 9: ADC - Excel -ээс олж авсан өгөгдөл

ADC - Excel -ээс олж авсан өгөгдөл
ADC - Excel -ээс олж авсан өгөгдөл

Илүү өндөр хурд, цуваа терминал ашиглан бид утгыг барьж, харьцуулахын тулд Excel дээр ашиглах боломжтой.

Алхам 10: Авирах налуугийн харьцуулалт

Авирах налуугийн харьцуулалт
Авирах налуугийн харьцуулалт

Бид хоёр авиралтын хоёр налуу замыг харьцуулж үздэг.

Хоёр налуу дээр тохиолддог муруйлтыг анхаарч үзээрэй.

Нэг налуугийн хувьд бидэнд осциллографоос илүү олон ESP32 дээж байгаа гэдгийг анхаарна уу.

Алхам 11: Дээжийн тоог тэнцүүлэх

Дээжийн тоог тэнцүүлэх
Дээжийн тоог тэнцүүлэх
Дээжийн тоог тэнцүүлэх
Дээжийн тоог тэнцүүлэх

ESP32 нь осциллографоос илүү олон тооны дээж өгсөн тул эдгээр муруйг харьцуулах индекс болох тул эдгээр утгыг тэнцүүлэх шаардлагатай байна.

Үүний тулд бид шууд харьцуулалт хийх болно.

Бид осциллографын налуугийн 305 дээж, ADC налуугийн 2365 дээжтэй.

Налуу зам нь ижил хэмжээтэй тул осциллограф тус бүрт ойролцоогоор 7.75 ADC дээж байдаг гэж хэлж болно.

Осциллографын дээж бүрийн индексийг үржүүлэх нь ижил муруйтай боловч ADC болон дахин хуваарилагдсан өгөгдөлтэй тэнцэх индекстэй байна.

Шинэ албан тушаалуудын дутуу өгөгдлийг бөглөхийн тулд бид мэдэгдэж буй өгөгдөлд статистикийн хувьд нийцсэн муруйг ашиглах болно.

Алхам 12: Цоорхойг нөхөх - чиг хандлагын шугам

Цоорхойг нөхөх - чиг хандлагын шугам
Цоорхойг нөхөх - чиг хандлагын шугам
Цоорхойг нөхөх - чиг хандлагын шугам
Цоорхойг нөхөх - чиг хандлагын шугам

Мэдэгдэж буй өгөгдлийг (цэнхэр цэгүүд) сонгоод, баруун товчлуур дээр дарж бид "Тренд шугам нэмэх …" -ийг сонгоно.

Гарч буй цонхонд бид Полиномын төрлийг сонгоно (захиалга 2 хангалттай байх болно).

Бид мөн "График дээрх тэгшитгэлийг харах" ба "Диаграм дахь R квадрат утгыг харуулах" сонголтуудыг шалгасан.

Бид "Хаах" дээр дарна уу.

Алхам 13: Цоорхойг бөглөх - 2 -р зэргийн олон гишүүнт муруй

Цоорхойг бөглөх - 2 -р зэргийн олон гишүүнт муруй
Цоорхойг бөглөх - 2 -р зэргийн олон гишүүнт муруй

Excel нь бидэнд хоёр шинэ мэдээлэл өгдөг; өгөгдөлд хамгийн сайн нийцсэн хоёр дахь эрэмбийн тэгшитгэл, энэ хүрэлцээтэй байдлыг илэрхийлсэн R квадрат тэгшитгэл.

1 -т ойртох тусам тэгшитгэл илүү тохиромжтой болохыг санаарай.

Математикийг судалж үзэхгүй, үүнийг зөвхөн хэрэгсэл болгон ашиглацгаая.

Алхам 14: Цоорхойг нөхөх - функцийг үнэлэх

Дээж авах цоорхойг тэгшитгэлээр үүсгэсэн өгөгдлөөр дүүргэе. Тэгээд тэдгээрийг цэг бүрээр нь харьцуулж үзээрэй.

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

R² = 0, 9999

Осциллографын хүчдэл = -9E -08 * индекс2 + 0, 0014 * индекс + 0, 1505

Алхам 15: Осциллографын хүчдэлийг ADC -тэй харьцуулах эквивалент утга болгон хувиргах

Осциллографын хүчдэлийг ADC -тэй харьцуулах эквивалент утга болгон хувиргах
Осциллографын хүчдэлийг ADC -тэй харьцуулах эквивалент утга болгон хувиргах

Үүний давуу талыг ашиглан осциллографын хүчдэлийн утгыг ADC -ийн эквивалент утга болгон өөрчилье.

ESP32 -ийн ADP -д олж авсан хамгийн өндөр утга нь 4095 байсан бөгөөд энэ нь ижил индексийн 2.958V -ийн уншилттай тэнцүү юм.

Осциллографын хэмжилт дэх вольт бүр ойролцоогоор МЭ 1384.4 нэгжтэй тэнцэнэ. Тиймээс бид осциллографын бүх хэмжилтийг энэ утгаар үржүүлж болно.

Алхам 16: Олсон хоёр налууг харьцуулах

Олсон хоёр налууг харьцуулж үзээрэй
Олсон хоёр налууг харьцуулж үзээрэй

Хоёр уншлагад олж авсан ялгааг төсөөлөх.

Алхам 17: ADC унших ялгаа (ERROR)

ADC -ийн унших ялгаатай байдал (ERROR)
ADC -ийн унших ялгаатай байдал (ERROR)

Доорх муруй нь ADC -ийн уншилтын ялгаа нь хэмжилтийн функц болж хэрхэн ажилладагийг харуулж байна. Энэхүү өгөгдлийн цуглуулга нь залруулах функцийг олох боломжийг бидэнд олгоно.

Энэ муруйг олохын тулд бид хэмжигдэхүүн бүрт байгаа ялгааг AD -ийн боломжит байрлал бүрийн функц болгон дүрсэлдэг (0 -ээс 4095 хүртэл).

Алхам 18: ADC унших ялгаатай зан төлөв - Залруулах функцийг олох

ADC унших ялгаатай зан төлөв - Залруулах функцийг олох
ADC унших ялгаатай зан төлөв - Залруулах функцийг олох

Бид Excel -д засварлах функцийг бидний өгөгдөлд хангалттай нийцэх хүртэл өндөр түвшний Trend шугамыг нэмж тодорхойлох боломжтой.

Алхам 19: Бусад програм хангамжийг ашиглах

Бусад програм хангамжийг ашиглах
Бусад програм хангамжийг ашиглах
Бусад програм хангамжийг ашиглах
Бусад програм хангамжийг ашиглах
Бусад програм хангамжийг ашиглах
Бусад програм хангамжийг ашиглах
Бусад програм хангамжийг ашиглах
Бусад програм хангамжийг ашиглах

Муруй тодорхойлох бусад сонирхолтой програм бол PolySolve бөгөөд үүнийг https://arachnoid.com/polysolve/ линк дээр шууд ашиглах эсвэл Java програм болгон татаж авах боломжтой.

Энэ нь илүү өндөр түвшний полиномын регрессийг ашиглах, форматлагдсан функцийг дамжуулах, бусад функцийг гүйцэтгэх боломжийг олгодог.

Үүнийг ашиглахын тулд өгөгдлийг эхний текст талбарт оруулна уу. Өгөгдөл нь таслал эсвэл табаар тусгаарлагдсан X, Y дарааллын дагуу байх ёстой. Цэгийг аравтын бутархай болгон зөв ашиглахдаа болгоомжтой байгаарай.

Оруулсан өгөгдлийг зөв форматласан тохиолдолд диаграм дараагийн цонхонд гарч ирнэ.

Манай ADC алдааны муруй хэрхэн явсныг энд харуулав.

Энэ цонх нь регрессийн үр дүнг харуулах болно, үүнд функцын хангалттай байдлын өгөгдөл орно, түүний гаралтыг хэд хэдэн хэлбэрээр форматлаж болно: C / C ++ функц, коэффициентүүдийн жагсаалт, Java дээр бичигдсэн функц гэх мэт.

Тэмдэглэл: Аравтын бутархай тусгаарлагчийг анхаарч үзээрэй

Алхам 20: Тогтмол ба тохиргоо ()

Би аналог зураг авахад ашигладаг GPIO -ийг энд онцолж байна. Би цуваа порт, мөн аналог зураг авахаар тодорхойлсон зүүг эхлүүлдэг.

const int pin_leitura = 36; // GPIO usado para captura analógica void setup () {Serial.begin (1000000); // PinMode (pin_leitura, INPUT) дибаг хийх боломжтой цуврал портууд; // Pino utilizado para captura analógica}

Алхам 21: Loop () ба залруулах функц

Бид тохируулсан хүчдэлийг барьж, утгыг зөв залруулга эсвэл засваргүйгээр хэвлэдэг.

void loop () {int valor_analogico = analogRead (pin_leitura); // realiza a captura da tensão ajustada //Serial.print(valor_analogico + f (valor_analogico)); // impime os valores para debug (COM CORREÇÃO) Serial.print (valor_analogico); // pretimime os valores para debug (SEM CORREÇÃO) Serial.print (","); Serial.print (4095); // cr95 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}

12 -р мөрөнд f (analog_value) функцийг нэмж өгөгдлийг хэвлэх боломжтой гэдгийг анхаарна уу.

Алхам 22: PolySolve залруулах функцийг ашиглах

Энд бид Arduino IDE дотор PolySolve функцийг ашигладаг.

/* Горим: Полиномын зэрэг 6, 2365 x, y өгөгдлийн хос Корреляцийн коэффициент (r^2) = 9, 907187626418e-01 Стандарт алдаа = 1, 353761109831e+01 Гаралтын хэлбэр: C/C ++ функц: Зохиогчийн эрх © 2012, П. Лутус - https://www.arachnoid.com. Бүх эрх хуулиар хамгаалагдсан. */ давхар f (давхар x) {буцах 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); }

Таслалаар цэгийн өөрчлөлтийг аравтын бутархай тусгаарлагч болгон анхаарна уу.

Алхам 23: Залруулга ашиглан зураг авалт - Плоттер цуваа

Залруулгаар авах - Плоттер цуврал
Залруулгаар авах - Плоттер цуврал

Алхам 24: Тооцооллын зардал

Тооцооллын зардал
Тооцооллын зардал
Тооцооллын зардал
Тооцооллын зардал

Полиномын тооцоолол хийхийн тулд процессор энэ ажлыг гүйцэтгэх ёстой. Энэ нь эх код болон бэлэн байгаа тооцоолох хүчнээс хамааран гүйцэтгэлийг удаашруулж болзошгүй юм.

Энд бид олон градусын олон гишүүнт ашиглан хийсэн тестийн үр дүнгийн хүснэгтийг харж байна. Pow () функцийг ашиглаж байсан ба ашиглаагүй байсан үеийн ялгааг анхаарч үзээрэй.

Алхам 25: Туршилтын код - Setup () ба Loop Start ()

Энд бидний туршилтанд ашигласан код байна.

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

Алхам 26: Туршилтын код - Loop () ба боловсруулалт

Би микросекундээр утгыг авахын тулд micros () функцийг ашигласан.

// ============== үйл явц эсвэл хөвөх арга = 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; // тодорхой хугацааны интервалыг тодорхойлно уу

Алхам 27: Туршилтын код - Loop () - Үр дүн

Бид харьцуулах зорилгоор 13 -р ангийн функцээс буцаж ирсэн үнэ цэнийг ХБХ -тэй ба байхгүйгээр, мөн боловсруулах интервалыг хэвлэнэ.

// давж заалдах үүрэг зоригтой байх үүрэг даалгаврыг 13 -р сарын эхээр хөөн хэлэлцэхээс хасах зорилгоор 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 (" -"); // туршилт хийх дараалал Serial.println (agora, 6); }

Алхам 28: Туршилтын код - Ашигласан функцууд

0 ба 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 давхар f1 (давхар x) {буцах 2.202196968876e + 02 + 3.561383996027e-01 * x; }

2, 3, 4 -р ангийн функцууд.

// FUNÇo DE GRAU 2double f2 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2);));)) + 2.082790802069e-10 * pow (x, 4); }

5 ба 6 -р ангийн функцууд.

// 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);)) + 2.082790802069e-10 * pow (x, 4) + -5.306931174991e-14 * pow (x, 5) + 4.787659214703e-18 * pow (x, 6); }

Цэргийн хоригдлуудыг ашиглан 13 -р ангийн функц.

// 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, 968558178426 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); }

Цэргийн хоригдлуудыг ашиглахгүйгээр 13 -р ангийн функц.

// 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 + 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; }

Алхам 29: Файлууд

Файлуудыг татаж авах:

PDF

INO

Хүснэгт

Зөвлөмж болгож буй: