Мазмуну:

Сиз ESP32 ADC тууралоосу жөнүндө билесизби? 29 кадам
Сиз ESP32 ADC тууралоосу жөнүндө билесизби? 29 кадам

Video: Сиз ESP32 ADC тууралоосу жөнүндө билесизби? 29 кадам

Video: Сиз ESP32 ADC тууралоосу жөнүндө билесизби? 29 кадам
Video: Как использовать датчик переменного/постоянного тока Allegro ACS712 с Arduino 2024, Ноябрь
Anonim
Image
Image
Колдонулган ресурстар
Колдонулган ресурстар

Бүгүн мен дагы техникалык маселе жөнүндө сүйлөшөйүн деп жатам, бирок менимче, ESP32 менен иштегендердин баары билиши керек: ADC (аналогдук-санариптик конвертер) маселесин жөнгө салуу. Мен муну маанилүү деп эсептейм, анткени "өлчөө" жасаганда, айрыкча аналогдук чыгышы бар аспапта, окуу туура аткарылып жатканына толук ишенүү керек.

Бүгүнкү видеодо биз ESP32нин "аналогдук-санариптик конвертерин" колдонуу менен өлчөөлөрдү жүргүзөбүз, конверсиянын келишпестиктерин байкайбыз жана ADC тууралоо / калибрлөө ыкмасын колдонобуз.

1 -кадам: AD Converter деген эмне?

AD конвертери - аналогдук (үзгүлтүксүз) санды санариптик (дискреттик) баалуулуктарга которууга жөндөмдүү схема. Эмне деп билдирет? Бул санариптик баалуулуктар нөлдөр менен бирдиктердин айкалышынан пайда болгон дискреттик баалуулуктарды гана кабыл алса, аналогдук чоңдук диапазондогу каалаган маанини кабыл ала алат дегенди билдирет. Мисалы, эгерде биз идеалдуу АА уячасынын чыңалуусун өлчөсөк, анда биз аналогдук чоңдук болгондуктан, 0В менен 1.5В ортосундагы каалаган маанини таба алмакпыз. Идеалдуу лампанын чыгуу абалы дискреттик чоңдуктагы эки абалды (өчүрүү же күйгүзүү) кабыл алышы керек. Микроконтроллерлер бул дискреттик логиканын жардамы менен иштегендиктен, аналогдук санды санарипке (же дискреттикке) которууга жөндөмдүү схема керек.

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 -кадам: Circuit колдонулат

Circuit колдонулат
Circuit колдонулат

Мен 25 МГцке чейинки сигнал генератору менен осциллографты колдондум, Hantek DSO4102C. Биз 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 үлгү бар.

Пандустар бирдей диапазондо болгондуктан, бизде ар бир осциллограф үчүн ADCтин болжол менен 7.75 үлгүлөрү бар деп айта алабыз.

Ар бир осциллографтын индексин көбөйтүү бирдей ийри сызыкка ээ, бирок ADCге жана кайра бөлүштүрүлгөн маалыматтарга барабар индекстер менен.

Жаңы позициялар үчүн жетишпеген маалыматтарды толтуруу үчүн, биз статистикалык түрдө белгилүү маалыматтарга туура келген ийри сызыкты колдонобуз.

12 -кадам: Боштуктарды толтуруу - Trend Line

Боштуктарды толтуруу - Trend Line
Боштуктарды толтуруу - Trend Line
Боштуктарды толтуруу - Trend Line
Боштуктарды толтуруу - Trend Line

Белгилүү маалыматтарды (көк чекиттерди) тандап, оң баскыч менен чыкылдатып, биз тандап алабыз: "Тренд сызыгын кошуу…"

Пайда болгон терезеде биз Полиномиянын түрүн тандайбыз (2 -буйрук жетиштүү болот).

Биз ошондой эле "Диаграммада Теңдемени көрүү" жана "Диаграммада R квадратынын маанисин көрсөтүү" параметрлерин текшердик.

Биз "Жабуу" баскычын басабыз.

13 -кадам: Боштуктарды толтуруу - 2 -даражадагы Полиномиялык ийри сызык

Боштуктарды толтуруу - 2 -даражадагы Полиномиялык ийри сызык
Боштуктарды толтуруу - 2 -даражадагы Полиномиялык ийри сызык

Excel бизге эки жаңы маалымат берет; маалыматка эң туура келген экинчи даражадагы теңдеме жана бул адекваттуулукту сандаган R-квадрат теңдемеси.

Эсиңизде болсун, 1ге жакындаган сайын, теңдеме ошончолук туура болот.

Келгиле, математиканы изилдебей, аны курал катары колдонолу.

14 -кадам: Боштуктарды толтуруу - Функцияны баалоо

Келгиле, теңдеме тарабынан түзүлгөн маалыматтар менен боштуктарды толтуралы. Анан аларды чекит боюнча салыштырып көрүңүз.

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

R² = 0, 9999

Осциллографтын чыңалуусу = -9E -08 * index2 + 0, 0014 * index + 0, 1505

15 -кадам: Осциллографтын чыңалуусун ADC менен салыштыруу үчүн барабар мааниге айландыруу

ADC менен салыштыруу үчүн осциллографтын чыңалуусун эквиваленттүү мааниге айландыруу
ADC менен салыштыруу үчүн осциллографтын чыңалуусун эквиваленттүү мааниге айландыруу

Келгиле, осциллографтын чыңалуусун эквиваленттүү ADC маанисине айлантуу үчүн ушул мүмкүнчүлүктөн пайдаланалы.

ESP32деги ADPде алынган эң жогорку көрсөткүч 4095 болгон, бул ошол эле индекстин 2.958V көрсөткүчүнө барабар, биз мындай деп айта алабыз:

Осциллографтын өлчөөлөрүндөгү ар бир вольт AD болжол менен 1384.4 бирдигине барабар. Ошондуктан, осциллографтын бардык өлчөөлөрүн бул мааниге көбөйтө алабыз.

16 -кадам: Алынган эки пандусту салыштыруу

Алынган эки пандусту салыштыруу
Алынган эки пандусту салыштыруу

Эки окууда алынган айырмачылыктарды элестетүү.

17 -кадам: ADC окуу айырмачылыгынын жүрүм -туруму (ERROR)

ADC окуу айырмачылыгынын жүрүм -туруму (ERROR)
ADC окуу айырмачылыгынын жүрүм -туруму (ERROR)

Төмөндөгү ийри сызык ADC окуусундагы айырма өлчөөнүн функциясы катары кандайча иштээрин көрсөтөт. Бул маалымат чогултуу бизге түзөтүүчү функцияны табууга мүмкүндүк берет.

Бул ийри сызыкты табуу үчүн, биз ар бир AD позициясынын функциясы катары ар бир өлчөөдө табылган айырманы (0дон 4095ке чейин) түзөбүз.

18 -кадам: ADC Reading Difference Behavior - Түзөтүүчү Функцияны Табуу

ADC Reading Difference Behavior - Түзөтүүчү Функцияны Табуу
ADC Reading Difference Behavior - Түзөтүүчү Функцияны Табуу

Биз Excelде оңдоо функциясын, биздин маалыматтар менен толук шайкеш келгенге чейин, азыр жогорку даражада болгон Тренд сызыгын кошуу аркылуу аныктай алабыз.

19 -кадам: Башка программаларды колдонуу

Башка Программаны Колдонуу
Башка Программаны Колдонуу
Башка программаларды колдонуу
Башка программаларды колдонуу
Башка Программаны Колдонуу
Башка Программаны Колдонуу
Башка Программаны Колдонуу
Башка Программаны Колдонуу

Ийри сызыктарды аныктоо үчүн башка кызыктуу программа - бул PolySolve, аны түздөн -түз шилтемеде колдонсо болот: https://arachnoid.com/polysolve/ же Java тиркемеси катары жүктөлгөн.

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

Аны колдонуу үчүн, биринчи текст кутусуна маалыматтарды киргизиңиз. Маалыматтар үтүр же өтмөк менен ажыратылган X, Y тартибине ылайык келиши керек. Чекитти ондук чекит катары туура колдонууда этият болуңуз.

Эгерде киргизилген маалыматтар туура форматталган болсо, диаграмма кийинки кутуда пайда болот.

Бул жерде биздин ADC ката ийрибиз кандайча кетти.

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

Эскертүү: Ондук сепараторлорго көңүл буруңуз

20 -кадам: Константтар жана Орнотуу ()

Мен бул жерде аналогдук тартуу үчүн колдонулган GPIO көрсөтөм. Мен сериялык портту, ошондой эле аналогдук тартуу үчүн аныкталган пинди инициалдаштырам.

const int pin_leitura = 36; // GPIO колдонмосу жараксыз абалга келтирүү () {Serial.begin (1000000); // PinMode (pin_leitura, INPUT) мүчүлүштүктөрдү оңдоонун бир нече түрү; // Колдонуу шарттары

21 -кадам: Loop () жана Түзөтүү Функциясы

Биз жөнгө салынган чыңалууну кармап турабыз жана баалуулуктарды туура оңдоолор менен же оңдоолорсуз басып чыгарабыз.

void loop () {int valor_analogico = analogRead (pin_leitura); // реалдуу шарттар бар болсо //Serial.print(valor_analogico + f (valor_analogico)); // мүчүлүштүктөрдү оңдоо үчүн (COM CORREÇÃO) Serial.print (valor_analogico); // мүчүлүштүктөрдү оңдоо (SEM CORREÇÃO) Serial.print (","); Serial.print (4095); // 4095 Serial.print (","); Serial.println (0); // критерийлер 0 үчүн}

12 -сапта, бизде f (analog_value) функциясын кошуу менен маалыматтарды басып чыгаруу мүмкүнчүлүгү бар экенине көңүл буруңуз.

22 -кадам: PolySolve Түзөтүү Функциясын колдонуу

Бул жерде биз Arduino IDE ичинде PolySolve функциясын колдонобуз.

/* Режим: кадимки Полиномдук даража 6, 2365 x, y маалымат жуптары Корреляция коэффициенти (r^2) = 9, 907187626418e-01 Стандарттык ката = 1, 353761109831e+01 Чыгаруу формасы: C/C ++ функциясы: Copyright © 2012, P. Лутус - https://www.arachnoid.com. Бардык укуктар корголгон. */ кош f (кош 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); }

Ондук бөлгүч катары үтүр-чекит өзгөрүүсүнө көңүл буруңуз.

23 -кадам: Түзөтүү менен тартуу - Plotter Serial

Түзөтүү менен тартуу - Plotter Serial
Түзөтүү менен тартуу - Plotter Serial

24 -кадам: Эсептөө наркы

Эсептөө наркы
Эсептөө наркы
Эсептөө наркы
Эсептөө наркы

Полиномиялык эсептөөлөрдү жүргүзүү үчүн, процессор бул милдетти аткарышы керек. Бул баштапкы кодго жана жеткиликтүү эсептөө кубаттуулугуна жараша аткарылышын кечеңдетүүгө алып келиши мүмкүн.

Бул жерде биз көп даражалуу полиномдорду колдонгон тесттин жыйынтык таблицасын көрөбүз. Pow () функциясы колдонулган жана колдонулбаган учурлардын айырмасына көңүл буруңуз.

25 -кадам: Test Code - Орнотуу () жана Loop Start ()

Бул жерде биздин тестте колдонулган код бар.

void setup () {Serial.begin (1000000); // Мүчүлүштүктөрдү оңдоо} void loop () {float valor_analogico = 500.0; // үмүт арбтрарио калкып жүрүүчү quantidade = 10000.0; // quantidade de chamadas float contador = 0.0; // contador de chamadas

26 -кадам: Test Code - Loop () жана иштетүү

Микросекунддардагы маанини алуу үчүн micros () функциясын колдондум.

// ============== процессинин өзгөрүлмөлүү процесси = micros (); // марка 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 -кадам: Test Code - Loop () - Жыйынтыктар

Биз 13 -класстын функциясынан кайтарылган маанини POW менен жана ансыз басып чыгарабыз, ошондой эле иштетүү аралыгын.

// күч -кубаттын жоктугунан баш тартуунун күчү 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 (агора, 6); }

28 -кадам: Тест коду - Колдонулган функциялар

0 жана 1 даражадагы бош функциялар (кайтаруу менен гана).

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

2, 3 жана 4 -класстын функциялары.

// FUNÇÉ DE GRAU 2double f2 (double x) {return 2.202196968876e + 02 + 3.561383996027e-01 * x + 1.276218788985e-04 * pow (x, 2); } // FUNÇÃ DE 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ÇÃ DE 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); }

5 жана 6 -класстын функциялары.

// FUNÇÉ 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ÇÃ DE 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); }

Аскердик туткундарды колдонуу менен 13 -класс функциясы.

// FUNÇÉ 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ÇÉ 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; }

29 -кадам: Файлдар

Файлдарды жүктөп алыңыз:

PDF

МЕН ЖОК

Электрондук жадыбал

Сунушталууда: