Микроконтролери и електроника
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 подавана от сигнал генератор към АЦП входа, прочетеният изходен сигнал през серийният порт не е с форма на синусоида. Изглежда като, че ли АЦП не събира достатъчен брой проби.

Моля за съдействие.

Благодаря предварително!

Прикачени файлове:
UART.jpg
UART.jpg [ 52.7 KiB | Прегледано 4673 пъти ]
System.jpg
System.jpg [ 71.56 KiB | Прегледано 4673 пъти ]
Main.jpg
Main.jpg [ 51.5 KiB | Прегледано 4673 пъти ]
IO.jpg
IO.jpg [ 42.62 KiB | Прегледано 4673 пъти ]
ADC.jpg
ADC.jpg [ 120.17 KiB | Прегледано 4673 пъти ]

Автор:  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: Проблем при измерване с АЦП

Cekins написа:
TAD = 1us, Акуизишън каунт - между 4 и 8. Ауто конвершън тригер - енейбъл. На практика с тази настройка нищо не мериш. Първо защото някой трябва да ти стартира ацп-то, второ без акуизишън тайм няма какво да измериш. Там има един схемички в пдф-ите - хубаво ги огледай и прочети. Първо трябва да ти се зареди самплинг кондензатора, след това да се пусне конверсия и тя като свърши ще имаш резултат. Нормално на микрочип ацп-тата си работят на 1uS TAD без проблеми. Между 4 и 12 uS трябват за да се зареди кондензатора - ако се работи на 1 канал и нещо като DC може и да се мине с по-малко, ама с AC си трябва това време. И Това ADCC_GetSingleConversion - какво точно прави - един господ знае. Начина е : пуска се прекъсване, в обработката на прекъсването се вземат данните, слагат се някъде и се пуска нова конверсия - поне 18-ките това им е напълно автоматично. На такива готови функции нямам никаква вяра. Да не говорим че в повечето случаи са блокиращи.


Благодаря за обяснението и помощта!

Ще направя отново опит и ще споделя резултата.

Един въпрос. Какво ще рече "поне 18-ките това им е напълно автоматично."?

Благодаря предварително!

Автор:  mEtaka_dts [ Вто Мар 14, 2023 2:17 pm ]
Заглавие:  Re: Проблем при измерване с АЦП

nobodyshadow написа:
Според това което си постнал се получават към 350 измервания за един период. Постоянно напрежение мериш ли правилно с тази постановка?


Здравейте,

Не съм опитвал да измервам постоянно напрежение.

Измервам само синусоидално напрежение от честотен синтезатор AD9833 управляван от Ардуино. Амплитудата е около 0,61V

Автор:  Cekins [ Вто Мар 14, 2023 3:51 pm ]
Заглавие:  Re: Проблем при измерване с АЦП

mEtaka_dts написа:
Cekins написа:
TAD = 1us, Акуизишън каунт - между 4 и 8. Ауто конвершън тригер - енейбъл. На практика с тази настройка нищо не мериш. Първо защото някой трябва да ти стартира ацп-то, второ без акуизишън тайм няма какво да измериш. Там има един схемички в пдф-ите - хубаво ги огледай и прочети. Първо трябва да ти се зареди самплинг кондензатора, след това да се пусне конверсия и тя като свърши ще имаш резултат. Нормално на микрочип ацп-тата си работят на 1uS TAD без проблеми. Между 4 и 12 uS трябват за да се зареди кондензатора - ако се работи на 1 канал и нещо като DC може и да се мине с по-малко, ама с AC си трябва това време. И Това ADCC_GetSingleConversion - какво точно прави - един господ знае. Начина е : пуска се прекъсване, в обработката на прекъсването се вземат данните, слагат се някъде и се пуска нова конверсия - поне 18-ките това им е напълно автоматично. На такива готови функции нямам никаква вяра. Да не говорим че в повечето случаи са блокиращи.


Благодаря за обяснението и помощта!

Ще направя отново опит и ще споделя резултата.

Един въпрос. Какво ще рече "поне 18-ките това им е напълно автоматично."?

Благодаря предварително!


То това не е баш 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 реда код. Другото само ще си се случва...

Автор:  mEtaka_dts [ Сря Мар 15, 2023 12:40 pm ]
Заглавие:  Re: Проблем при измерване с АЦП

Благодаря за бързият отговор!

Снимката е от документацията на PIC-a

Прикачени файлове:
ADC.JPG
ADC.JPG [ 78.33 KiB | Прегледано 4476 пъти ]

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/