Автор |
Съобщение |
mEtaka_dts
Ранг: Минаващ
Регистриран на: Пон Май 26, 2014 3:47 pm Мнения: 27
|
Проблем при измерване с АЦП
Здравейте, Опитвам да направя програма за 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 подавана от сигнал генератор към АЦП входа, прочетеният изходен сигнал през серийният порт не е с форма на синусоида. Изглежда като, че ли АЦП не събира достатъчен брой проби. Моля за съдействие. Благодаря предварително!
|
Вто Мар 14, 2023 7:10 am |
|
|
nobodyshadow
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 4:18 am Мнения: 630
|
Re: Проблем при измерване с АЦП
Според това което си постнал се получават към 350 измервания за един период. Постоянно напрежение мериш ли правилно с тази постановка?
_________________ Не мога да знам всичко,а и не искам.Тогава би било прекалено лесно и скучно!
|
Вто Мар 14, 2023 9:12 am |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8873 Местоположение: Разград
|
Re: Проблем при измерване с АЦП
TAD = 1us, Акуизишън каунт - между 4 и 8. Ауто конвершън тригер - енейбъл. На практика с тази настройка нищо не мериш. Първо защото някой трябва да ти стартира ацп-то, второ без акуизишън тайм няма какво да измериш. Там има един схемички в пдф-ите - хубаво ги огледай и прочети. Първо трябва да ти се зареди самплинг кондензатора, след това да се пусне конверсия и тя като свърши ще имаш резултат. Нормално на микрочип ацп-тата си работят на 1uS TAD без проблеми. Между 4 и 12 uS трябват за да се зареди кондензатора - ако се работи на 1 канал и нещо като DC може и да се мине с по-малко, ама с AC си трябва това време. И Това ADCC_GetSingleConversion - какво точно прави - един господ знае. Начина е : пуска се прекъсване, в обработката на прекъсването се вземат данните, слагат се някъде и се пуска нова конверсия - поне 18-ките това им е напълно автоматично. На такива готови функции нямам никаква вяра. Да не говорим че в повечето случаи са блокиращи.
|
Вто Мар 14, 2023 11:53 am |
|
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 1:23 pm Мнения: 3545 Местоположение: Високо в планината
|
Re: Проблем при измерване с АЦП
Не съм чел в детайли, но на тази серия нещо не са Й наред ацп-тата. В тази тема съм питал за проблем с АЦП. viewtopic.php?f=3&t=17873Първо беше един проблем, после някакъв друг. Така или иначе проектът отиде в коша. Но наскоро ми се наложи да използвам платката за друго нещо и смених контролера. Работеше без грешка.
_________________ Хайде де!
|
Вто Мар 14, 2023 12:12 pm |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8873 Местоположение: Разград
|
Re: Проблем при измерване с АЦП
Колкото и да не са наред - все някакъв смислен резултат трябва да има. Ама с 0 Acquisiton time има само един тип АЦП-та и не знам Mикрочип някога въобще да са имали такова нито стендалоун нито в процесор ...
|
Вто Мар 14, 2023 12:25 pm |
|
|
mEtaka_dts
Ранг: Минаващ
Регистриран на: Пон Май 26, 2014 3:47 pm Мнения: 27
|
Re: Проблем при измерване с АЦП
Благодаря за обяснението и помощта! Ще направя отново опит и ще споделя резултата. Един въпрос. Какво ще рече "поне 18-ките това им е напълно автоматично."? Благодаря предварително!
|
Вто Мар 14, 2023 1:08 pm |
|
|
mEtaka_dts
Ранг: Минаващ
Регистриран на: Пон Май 26, 2014 3:47 pm Мнения: 27
|
Re: Проблем при измерване с АЦП
Здравейте, Не съм опитвал да измервам постоянно напрежение. Измервам само синусоидално напрежение от честотен синтезатор AD9833 управляван от Ардуино. Амплитудата е около 0,61V
|
Вто Мар 14, 2023 1:17 pm |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8873 Местоположение: Разград
|
Re: Проблем при измерване с АЦП
То това не е баш 18-ка, по скоро Enhanced 16-ка. Ами какво ще рече - ще рече че acquisition-a и sampling-а се случват напълно автоматично след като се даде старт на ацп-то. Естествено всичко трябва да е правилно настроено. При старите 16-ки, програмата трябва да се грижи за aцquisition time, след което включва и самото преобразуване а тук, първо си закача "ключа" към семпъл кондензатора, след като изтече указаното време си го откача и си включва самото преобразуване, като накрая си вдига флага за прекъсване. Ако се работи с прекъсване, единствено като дойде се прочитат данните от резълт регистрите и се пуска следващото мерене. По принцип старт може се даде и през някакъв точно определен период от време - примерно някой от CCP модулите (не помня кой точно) може да дава старт на ацп-то. Така може да семплираш на точни интервали от време, На теб в момента кой ти определя кога да се взема семпъла? Ако е пак някаква таква блокираща функция, нямаш никакви гаранции колко точно време отнемат - такива неща се правят с хардуер. Този честота която ти изписва конфигуратора е честотата на която можеш хардуерно да семплираш а не тази на която реално програмата ти семплира.
|
Вто Мар 14, 2023 2:51 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: Проблем при измерване с АЦП
то ти го пише горе на снимките Conversion time .... 56.25 микро секунди TAD ти е "клока, такта" на АДЦ-то пише и TAD "формулата" за конверсия
17 kHz семпъл холд
_________________ main[-1u]={1};
|
Вто Мар 14, 2023 7:19 pm |
|
|
mEtaka_dts
Ранг: Минаващ
Регистриран на: Пон Май 26, 2014 3:47 pm Мнения: 27
|
Re: Проблем при измерване с АЦП
Бихтре ли ми предложили оптимизиран програмен код за четене на АЦП.
Благодаря предварително!
|
Сря Мар 15, 2023 11:16 am |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8873 Местоположение: Разград
|
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. Ама тука ще се объркаш най вероятно.
|
Сря Мар 15, 2023 11:29 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4671
|
Re: Проблем при измерване с АЦП
_________________ main[-1u]={1};
|
Сря Мар 15, 2023 11:32 am |
|
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 11:02 am Мнения: 8873 Местоположение: Разград
|
Re: Проблем при измерване с АЦП
С това ще се обърка - примера е с много дърт ПИК и адресите, настройките и работата на АЦП са различни.
Едит : много е важно още като начинаещ да се научиш да работиш с прекъсвания. Няма нищо кой знае колко сложно. После даташита на конкретния контролер трябва да е отворен в съседния прозорец. Тоя конфигуратор на мплаб не бих му имал вяра. За цялата тази програма има 10-тина SFR-а да се настроят и още 15-20 реда код, барабар с уарт-а. Един кръгов буфер, един таймер, ацп-то и уарт-а - трите периферии на прекъсване. В Main-а ще има 2-3 реда код. Другото само ще си се случва...
Последна промяна Cekins на Сря Мар 15, 2023 11:42 am, променена общо 1 път
|
Сря Мар 15, 2023 11:36 am |
|
|
mEtaka_dts
Ранг: Минаващ
Регистриран на: Пон Май 26, 2014 3:47 pm Мнения: 27
|
Re: Проблем при измерване с АЦП
Благодаря за бързият отговор!
Снимката е от документацията на PIC-a
|
Сря Мар 15, 2023 11:40 am |
|
|