| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем при измерване с АЦП http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=18771 |
Страница 1 от 1 |
| Автор: | mEtaka_dts [ Вто Мар 14, 2023 8:10 am ] |
| Заглавие: | Проблем при измерване с АЦП |
Здравейте, Опитвам да направя програма за PIC16F18446 (curiosity nano), която единствено да измерва максимално бързо на един АЦП вход. За изготвянето на програмата използвам MPLAB X IDE с компилатор MPLAB XC. За конфигуриране на периферията използвам Microchip Code Configurator. Следвам документ https://ww1.microchip.com/downloads/en/Appnotes/PIC16-PIC18-ADC2-90003194A.pdf?fbclid=IwAR1mmqPigI_XznTdx-8X4lUgqRt2VkQJJ_w7WgOWCwoCfhF0tqkEBUHS6dQ, в който е описано измерване с АЦП при TAD 4ms. и метод за предаване по сериен порт Method Using Direct UART Writes (което не ми е ясно каквo и използвам printf) В програмата, която съм направил АЦП има TAD 4us, UART - 57600, честота 32MHz. Но при измерване на синусоида с честота 50Hz подавана от сигнал генератор към АЦП входа, прочетеният изходен сигнал през серийният порт не е с форма на синусоида. Изглежда като, че ли АЦП не събира достатъчен брой проби. Моля за съдействие. Благодаря предварително! |
|
| Автор: | nobodyshadow [ Вто Мар 14, 2023 10:12 am ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
Според това което си постнал се получават към 350 измервания за един период. Постоянно напрежение мериш ли правилно с тази постановка? |
|
| Автор: | Cekins [ Вто Мар 14, 2023 12:53 pm ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
TAD = 1us, Акуизишън каунт - между 4 и 8. Ауто конвершън тригер - енейбъл. На практика с тази настройка нищо не мериш. Първо защото някой трябва да ти стартира ацп-то, второ без акуизишън тайм няма какво да измериш. Там има един схемички в пдф-ите - хубаво ги огледай и прочети. Първо трябва да ти се зареди самплинг кондензатора, след това да се пусне конверсия и тя като свърши ще имаш резултат. Нормално на микрочип ацп-тата си работят на 1uS TAD без проблеми. Между 4 и 12 uS трябват за да се зареди кондензатора - ако се работи на 1 канал и нещо като DC може и да се мине с по-малко, ама с AC си трябва това време. И Това ADCC_GetSingleConversion - какво точно прави - един господ знае. Начина е : пуска се прекъсване, в обработката на прекъсването се вземат данните, слагат се някъде и се пуска нова конверсия - поне 18-ките това им е напълно автоматично. На такива готови функции нямам никаква вяра. Да не говорим че в повечето случаи са блокиращи. |
|
| Автор: | dan [ Вто Мар 14, 2023 1:12 pm ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
Не съм чел в детайли, но на тази серия нещо не са Й наред ацп-тата. В тази тема съм питал за проблем с АЦП. viewtopic.php?f=3&t=17873 Първо беше един проблем, после някакъв друг. Така или иначе проектът отиде в коша. Но наскоро ми се наложи да използвам платката за друго нещо и смених контролера. Работеше без грешка. |
|
| Автор: | Cekins [ Вто Мар 14, 2023 1:25 pm ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
Колкото и да не са наред - все някакъв смислен резултат трябва да има. Ама с 0 Acquisiton time има само един тип АЦП-та и не знам Mикрочип някога въобще да са имали такова |
|
| Автор: | mEtaka_dts [ Вто Мар 14, 2023 2:08 pm ] | |||||||||
| Заглавие: | Re: Проблем при измерване с АЦП | |||||||||
Благодаря за обяснението и помощта! Ще направя отново опит и ще споделя резултата. Един въпрос. Какво ще рече "поне 18-ките това им е напълно автоматично."? Благодаря предварително! |
||||||||||
| Автор: | mEtaka_dts [ Вто Мар 14, 2023 2:17 pm ] | |||||||||
| Заглавие: | Re: Проблем при измерване с АЦП | |||||||||
Здравейте, Не съм опитвал да измервам постоянно напрежение. Измервам само синусоидално напрежение от честотен синтезатор AD9833 управляван от Ардуино. Амплитудата е около 0,61V |
||||||||||
| Автор: | Cekins [ Вто Мар 14, 2023 3:51 pm ] | ||||||||||||||||||
| Заглавие: | Re: Проблем при измерване с АЦП | ||||||||||||||||||
То това не е баш 18-ка, по скоро Enhanced 16-ка. Ами какво ще рече - ще рече че acquisition-a и sampling-а се случват напълно автоматично след като се даде старт на ацп-то. Естествено всичко трябва да е правилно настроено. При старите 16-ки, програмата трябва да се грижи за aцquisition time, след което включва и самото преобразуване а тук, първо си закача "ключа" към семпъл кондензатора, след като изтече указаното време си го откача и си включва самото преобразуване, като накрая си вдига флага за прекъсване. Ако се работи с прекъсване, единствено като дойде се прочитат данните от резълт регистрите и се пуска следващото мерене. По принцип старт може се даде и през някакъв точно определен период от време - примерно някой от CCP модулите (не помня кой точно) може да дава старт на ацп-то. Така може да семплираш на точни интервали от време, На теб в момента кой ти определя кога да се взема семпъла? Ако е пак някаква таква блокираща функция, нямаш никакви гаранции колко точно време отнемат - такива неща се правят с хардуер. Този честота която ти изписва конфигуратора е честотата на която можеш хардуерно да семплираш а не тази на която реално програмата ти семплира. |
|||||||||||||||||||
| Автор: | TheWizard [ Вто Мар 14, 2023 8:19 pm ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
то ти го пише горе на снимките Conversion time .... 56.25 микро секунди TAD ти е "клока, такта" на АДЦ-то пише и TAD "формулата" за конверсия 17 kHz семпъл холд |
|
| Автор: | mEtaka_dts [ Сря Мар 15, 2023 12:16 pm ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
Бихтре ли ми предложили оптимизиран програмен код за четене на АЦП. Благодаря предварително! |
|
| Автор: | Cekins [ Сря Мар 15, 2023 12:29 pm ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
Тия 17 килохерца са му скоростта с която прави преобразуване. Ако добави и 1-2 TAD-а за акуизишън ще стане по-малко. Там на снимките се вижда че акуизишъна му е 0 - няма как да се случат правилно нещата. И после ако иска да види синусуида, трябва старта на семплирането му да е синхронизиран с някакъв таймер, а не когато дойде. Но както казах TAD-а е достатъчно да е 1uS и акуизишъна да си го сметне колко време трябва да е по формулата в даташита и да го сложи на съответния брой TAD-ове. Като цяло 8-12 uS май бяха стойностите при 5-10к съпротивление на източника. Ако е с буфер може и по-малко, ама не е желателно. Аз по спомен все го слагам на 8TAD. едит: ADCON0= xxxxxxxx - каквито трябва да са там насторйките ADCON1= xxxxxxxx - също ADCON0.1=true чакаш прекъсване... в прекъсването : PIR1.6=false 'на тоя пик май не беше на PIR1.6 uint_var = ADRESHL ADCON0.1=true край на прекъсването... Ако искаш да ти е синхорнизирано по таймер си пускаш някой таймер и в неговото прекъсване правиш ADCON0.1=1. Мисля че CCP3 имаше special event trigger който може да се настрой да стартира АЦП, пуснато в режим COMPARE. Ама тука ще се объркаш най вероятно. |
|
| Автор: | TheWizard [ Сря Мар 15, 2023 12:32 pm ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
https://circuitdigest.com/microcontroll ... c-tutorial |
|
| Автор: | Cekins [ Сря Мар 15, 2023 12:36 pm ] |
| Заглавие: | Re: Проблем при измерване с АЦП |
С това ще се обърка - примера е с много дърт ПИК и адресите, настройките и работата на АЦП са различни. Едит : много е важно още като начинаещ да се научиш да работиш с прекъсвания. Няма нищо кой знае колко сложно. После даташита на конкретния контролер трябва да е отворен в съседния прозорец. Тоя конфигуратор на мплаб не бих му имал вяра. За цялата тази програма има 10-тина SFR-а да се настроят и още 15-20 реда код, барабар с уарт-а. Един кръгов буфер, един таймер, ацп-то и уарт-а - трите периферии на прекъсване. В Main-а ще има 2-3 реда код. Другото само ще си се случва... |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|