Мазмуну:
- 1 -кадам: AD Converter деген эмне?
- 2 -кадам: Колдонулган ресурстар
- 3 -кадам: ESP32 ADC
- 4 -кадам: Circuit колдонулат
- 5 -кадам: Белги колдонулат
- 6 -кадам: Осциллограф тарабынан алынган маалыматтар
- 7 -кадам: Осциллограф тарабынан алынган маалыматтар (Excelдеги csv файлы)
- 8 -кадам: ADC тарабынан алынган маалыматтар
- 9 -кадам: ADC - Excel тарабынан алынган маалыматтар
- 10 -кадам: Чыгуу пандустарын салыштыруу
- 11 -кадам: Үлгүлөрдүн санын теңөө
- 12 -кадам: Боштуктарды толтуруу - Trend Line
- 13 -кадам: Боштуктарды толтуруу - 2 -даражадагы Полиномиялык ийри сызык
- 14 -кадам: Боштуктарды толтуруу - Функцияны баалоо
- 15 -кадам: Осциллографтын чыңалуусун ADC менен салыштыруу үчүн барабар мааниге айландыруу
- 16 -кадам: Алынган эки пандусту салыштыруу
- 17 -кадам: ADC окуу айырмачылыгынын жүрүм -туруму (ERROR)
- 18 -кадам: ADC Reading Difference Behavior - Түзөтүүчү Функцияны Табуу
- 19 -кадам: Башка программаларды колдонуу
- 20 -кадам: Константтар жана Орнотуу ()
- 21 -кадам: Loop () жана Түзөтүү Функциясы
- 22 -кадам: PolySolve Түзөтүү Функциясын колдонуу
- 23 -кадам: Түзөтүү менен тартуу - Plotter Serial
- 24 -кадам: Эсептөө наркы
- 25 -кадам: Test Code - Орнотуу () жана Loop Start ()
- 26 -кадам: Test Code - Loop () жана иштетүү
- 27 -кадам: Test Code - Loop () - Жыйынтыктар
- 28 -кадам: Тест коду - Колдонулган функциялар
- 29 -кадам: Файлдар
Video: Сиз ESP32 ADC тууралоосу жөнүндө билесизби? 29 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Бүгүн мен дагы техникалык маселе жөнүндө сүйлөшөйүн деп жатам, бирок менимче, 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
Espressif маалыматы боюнча, ESP32 чиптери өлчөнгөн жыйынтыктарда бир чиптен экинчисине +/- 6% айырмачылыкты көрсөтүшү мүмкүн.
Мындан тышкары, конверсия окуу үчүн ар бир жеткиликтүү диапазонго сызыктуу жооп ЭМЕС. Espressif калибрлөө ыкмасын камсыз кылат жана колдонуучулар каалаган тактыкка жетүү үчүн зарыл деп эсептешсе башка ыкмаларды колдонууну сунуштайт.
Биз маалыматтарды чогултууну аткарабыз жана мындан ADC жоопторун жана жөнгө салуу үчүн математикалык процессти колдонуу мисалын көрсөтөбүз.
Бул оңдоолорду ишке ашыруунун бир нече (жөнөкөй же татаал) жолдору бар. Долбооруңузга эң ылайыктуусун баалоо сизге байланыштуу.
Бул жерде көрсөтүлгөн мисал иллюстрациялык максатка ээ болот жана түзөтүүлөр учурунда байкалуучу кызыктуу ойлорду чечүүгө аракет кылат.
4 -кадам: Circuit колдонулат
Мен 25 МГцке чейинки сигнал генератору менен осциллографты колдондум, Hantek DSO4102C. Биз ESP A / D жана осциллограф тарабынан окулган толкунду жараттык. Чогулган маалыматтар csvде жана электрондук таблицада жазылган, мен аны жүктөп алуу үчүн макаланын аягында калтырам.
5 -кадам: Белги колдонулат
Биз бүт айландыруу диапазону аркылуу өтүүчү пандустарга кирүүгө мүмкүндүк берүүчү төмөнкү жыштыктагы трапеция сигналын тандап алдык. Бул бул пандустардагы көп сандагы үлгүлөрдү алууга мүмкүндүк берет.
6 -кадам: Осциллограф тарабынан алынган маалыматтар
Тартуу сүрөтү осциллограф тарабынан аткарылган. Маалыматтар csv файлында сакталган. Сигналдын көтөрүлүүчү жана түшүүчү пандустарындагы кичине кыйшыктыкка көңүл буруңуз.
7 -кадам: Осциллограф тарабынан алынган маалыматтар (Excelдеги csv файлы)
Бизде бул жерде үлгүлөр бар.
8 -кадам: ADC тарабынан алынган маалыматтар
Сериалдын өткөрүү ылдамдыгын өзгөртүү менен биз ADC тарабынан алынган маалыматтарды көрө алабыз. Трапеция сигналынын деформациясын байкаңыз.
Маалыматтар Arduino IDE сериялык плоттеринде байкалган
9 -кадам: ADC - Excel тарабынан алынган маалыматтар
Жогорку ченди жана сериялык терминалды колдонуп, биз баалуулуктарды кармап, аларды салыштыруу үчүн Excelде колдоно алабыз.
10 -кадам: Чыгуу пандустарын салыштыруу
Биз эки кармагычтын эки чыгуу пандусун салыштырабыз.
Эки пандуста тең ийриликке көңүл буруңуз.
Белгилей кетсек, ошол эле пандус үчүн бизде ESP32 үлгүлөрү осциллографка караганда көбүрөөк.
11 -кадам: Үлгүлөрдүн санын теңөө
ESP32 осциллографка караганда көп сандагы үлгүлөрдү бергендиктен, биз бул баалуулуктарды теңдешибиз керек, анткени алар эки ийри сызыкты салыштыруу үчүн индекс катары кызмат кылат.
Бул үчүн биз түздөн -түз салыштырууну жасайбыз.
Бизде осциллограф пандусуна 305 үлгү жана ADC пандусуна 2365 үлгү бар.
Пандустар бирдей диапазондо болгондуктан, бизде ар бир осциллограф үчүн ADCтин болжол менен 7.75 үлгүлөрү бар деп айта алабыз.
Ар бир осциллографтын индексин көбөйтүү бирдей ийри сызыкка ээ, бирок ADCге жана кайра бөлүштүрүлгөн маалыматтарга барабар индекстер менен.
Жаңы позициялар үчүн жетишпеген маалыматтарды толтуруу үчүн, биз статистикалык түрдө белгилүү маалыматтарга туура келген ийри сызыкты колдонобуз.
12 -кадам: Боштуктарды толтуруу - Trend Line
Белгилүү маалыматтарды (көк чекиттерди) тандап, оң баскыч менен чыкылдатып, биз тандап алабыз: "Тренд сызыгын кошуу…"
Пайда болгон терезеде биз Полиномиянын түрүн тандайбыз (2 -буйрук жетиштүү болот).
Биз ошондой эле "Диаграммада Теңдемени көрүү" жана "Диаграммада R квадратынын маанисин көрсөтүү" параметрлерин текшердик.
Биз "Жабуу" баскычын басабыз.
13 -кадам: Боштуктарды толтуруу - 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 маанисине айлантуу үчүн ушул мүмкүнчүлүктөн пайдаланалы.
ESP32деги ADPде алынган эң жогорку көрсөткүч 4095 болгон, бул ошол эле индекстин 2.958V көрсөткүчүнө барабар, биз мындай деп айта алабыз:
Осциллографтын өлчөөлөрүндөгү ар бир вольт AD болжол менен 1384.4 бирдигине барабар. Ошондуктан, осциллографтын бардык өлчөөлөрүн бул мааниге көбөйтө алабыз.
16 -кадам: Алынган эки пандусту салыштыруу
Эки окууда алынган айырмачылыктарды элестетүү.
17 -кадам: ADC окуу айырмачылыгынын жүрүм -туруму (ERROR)
Төмөндөгү ийри сызык ADC окуусундагы айырма өлчөөнүн функциясы катары кандайча иштээрин көрсөтөт. Бул маалымат чогултуу бизге түзөтүүчү функцияны табууга мүмкүндүк берет.
Бул ийри сызыкты табуу үчүн, биз ар бир AD позициясынын функциясы катары ар бир өлчөөдө табылган айырманы (0дон 4095ке чейин) түзөбүз.
18 -кадам: 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
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 -кадам: Файлдар
Файлдарды жүктөп алыңыз:
МЕН ЖОК
Электрондук жадыбал
Сунушталууда:
Сиздин өсүмдүктөр кандай сезимде экенин билесизби? [Бөлүкчө+Убидот]: 6 кадам
Сиздин өсүмдүктөр кандай сезимде экенин билесизби? [Бөлүкчө+Убидоттор]: Өзүңүз үчүн топурак менен иштөөнү эч нерсе алмаштыра албайт, бирок бүгүнкү технология топуракты алыстан көзөмөлдөөгө жана менин адамдык сезимдеримди өлчөөсүз көзөмөлдөөгө мүмкүндүк берди. SHT10 сыяктуу топурак зонддору азыр абдан так жана сунушталууда
Таштанды кутусу жөнүндө сиз билбеген нерселер !!: 6 кадам
Таштанды челеги жөнүндө сиз билбеген нерселер !!: Бул Нускоо сизге, балким, таштанды челеги жөнүндө билбеген кээ бир нерселерди көрсөтөт Сураныч, менин каналыма жазылыңыз Рахмат
ESP32: DAC деген эмне экенин билесизби?: 7 кадам
ESP32: DAC деген эмне экенин билесизби ?: Бүгүн биз эки маселе боюнча сүйлөшөбүз. Биринчиси-DAC (Digital-to-Analog Converter). Мен муну маанилүү деп эсептейм, анткени ал аркылуу, мисалы, биз ESP32де аудио чыгарууну жасайбыз. Бүгүн биз карай турган экинчи маселе - осцил
Сиз LED жөнүндө билишиңиз керек болгон бардык нерселер: 7 кадам (сүрөттөр менен)
СИД жөнүндө билишиңиз керек болгон нерсе: Жарык чыгаруучу диод - бул электр тогу, ал аркылуу ток өткөндө жарык чыгарат. Светодиоддор кичинекей, өтө эффективдүү, жаркыраган, арзан, электрондук компоненттер. Адамдар светодиоддор жөнөкөй эле жарык чыгаруучу компоненттер деп ойлошот & жакын
ESP32 LoRa: Сиз 6,5 кмге чейин жете аласыз!: 8 кадам
ESP32 LoRa: Сиз 6.5 кмге чейин жете аласыз !: 6.5km! Бул мен ESP32 OLED TTGO LoRa32 менен өткөргөн тестирлөөнүн жыйынтыгы болчу, бүгүн мен муну сиздер менен талкуулайбыз. Башында мен колдонгон моделдин антеннасы начар болгондуктан, мен башка антеннаны колдонууну чечтим