Мазмұны:

Сіз ESP32 ADC реттеу туралы білесіз бе ?: 29 қадам
Сіз ESP32 ADC реттеу туралы білесіз бе ?: 29 қадам

Бейне: Сіз ESP32 ADC реттеу туралы білесіз бе ?: 29 қадам

Бейне: Сіз ESP32 ADC реттеу туралы білесіз бе ?: 29 қадам
Бейне: SKR Pro v1.2 - TMC2226 UART with Sensorless Homing 2024, Шілде
Anonim
Image
Image
Қолданылған ресурстар
Қолданылған ресурстар

Бүгін мен техникалық мәселе туралы сөйлескім келеді, бірақ менің ойымша, ESP32-мен жұмыс істейтіндердің бәрі білуі керек: ADC (аналогты-цифрлық түрлендіргіш) оқуды реттеу мәселесі. Мен мұны маңызды деп санаймын, себебі «өлшеу» кезінде, әсіресе аналогтық шығысы бар құралмен, оқу дұрыс орындалатынына сенімді болу керек.

Бүгінгі бейнеде біз ESP32 «аналогты-цифрлық түрлендіргішін» қолданып өлшеу жүргіземіз, түрлендірудің сәйкессіздігін бақылаймыз және ADC реттеу / калибрлеу әдісін қолданамыз.

1 -қадам: AD түрлендіргіші дегеніміз не?

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 -қадам: Қолданылған схема

Қолданылған схема
Қолданылған схема

Мен 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 -қадам: олқылықтарды толтыру - тренд сызығы

Бос орындарды толтыру - тренд сызығы
Бос орындарды толтыру - тренд сызығы
Бос орындарды толтыру - тренд сызығы
Бос орындарды толтыру - тренд сызығы

Белгілі деректерді (көк нүктелер) таңдап, тінтуірдің оң жақ батырмасын шертіп, біз: «Тренд сызығын қосу …» таңдаймыз.

Пайда болған терезеде біз Полиномия түрін таңдаймыз (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 көрсеткішіне тең, біз мынаны айта аламыз:

Осциллографтың әрбір вольты AD шамамен 1384,4 бірлікке тең. Сондықтан осциллографтың барлық өлшемдерін осы мәнге көбейтуге болады.

16 -қадам: Алынған екі пандусты салыстыру

Алынған екі пандусты салыстыру
Алынған екі пандусты салыстыру

Екі оқылымда алынған айырмашылықтарды бейнелеу.

17 -қадам: ADC оқу айырмашылығының мінез -құлқы (ҚАТЕ)

ADC оқу айырмашылығының мінез -құлқы (ҚАТЕ)
ADC оқу айырмашылығының мінез -құлқы (ҚАТЕ)

Төмендегі қисық 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 for captura analógica void setup () {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) {қайтару 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 -қадам: Test Code - Setup () және Loop Start ()

Мұнда бізде тестте қолданылатын код бар.

void setup () {Serial.begin (1000000); // ақауды жою үшін бос орындар тізімі} 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 ++; } агора = (микрос () - агора) / квандидада; // уақыт аралығы анықталады // ============ процесс аяқталады

27 -қадам: Тест коды - Цикл () - Нәтижелер

Біз 13 -ші сынып функциясынан қайтарылған мәнді POW бар және онсыз салыстыру үшін басып шығарамыз, сондай -ақ өңдеу аралығын.

// PERMA. Print (f13_semPow (valor_analogico)) қарулы күштерінің 13 -ші жауынгерлік күші; // grau 13º SEM a função POW Serial.print (« -»); Serial.print (f13_comPow (valor_analogico)); // grau 13º COM a função POW Serial.print (« -»); // сериялық.println (agora, 6); }

28 -қадам: Сынақ коды - пайдаланылған функциялар

0 және 1 дәрежелі бос функциялар (тек қайтарумен).

// FUNÇÃO VAZIAdouble v (қос x) {} // FUNÇÃO SOMENTE COM RETORNO қос r (қос x) {қайтару x; } // FUNÇÃO DE GRAU 0 қос f0 (қос x) {қайтару 2.202196968876e+02; } // FUNÇÃO DE GRAU 1 қосарланған f1 (қосарланған x) {қайтару 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 GRAU 3 қос f3 (қос 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 және 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);)) + 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 (қос x) {қайтару 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 (қос x) {қайтару 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 + 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

МЕН ЖОҚ

Электрондық кесте

Ұсынылған: