Отговори на тема  [ 14 мнения ] 
Проблем при измерване с АЦП 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

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

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

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


Прикачени файлове:
UART.jpg
UART.jpg [ 52.7 KiB | Прегледано 1276 пъти ]
System.jpg
System.jpg [ 71.56 KiB | Прегледано 1276 пъти ]
Main.jpg
Main.jpg [ 51.5 KiB | Прегледано 1276 пъти ]
IO.jpg
IO.jpg [ 42.62 KiB | Прегледано 1276 пъти ]
ADC.jpg
ADC.jpg [ 120.17 KiB | Прегледано 1276 пъти ]
Вто Мар 14, 2023 7:10 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Окт 30, 2004 4:18 am
Мнения: 630
Мнение Re: Проблем при измерване с АЦП
Според това което си постнал се получават към 350 измервания за един период. Постоянно напрежение мериш ли правилно с тази постановка?

_________________
Не мога да знам всичко,а и не искам.Тогава би било прекалено лесно и скучно!


Вто Мар 14, 2023 9:12 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 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
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 1:23 pm
Мнения: 3545
Местоположение: Високо в планината
Мнение Re: Проблем при измерване с АЦП
Не съм чел в детайли, но на тази серия нещо не са Й наред ацп-тата.
В тази тема съм питал за проблем с АЦП.
viewtopic.php?f=3&t=17873
Първо беше един проблем, после някакъв друг. Така или иначе проектът отиде в коша. Но наскоро ми се наложи да използвам платката за друго нещо и смених контролера. Работеше без грешка.

_________________
Хайде де!


Вто Мар 14, 2023 12:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8873
Местоположение: Разград
Мнение Re: Проблем при измерване с АЦП
Колкото и да не са наред - все някакъв смислен резултат трябва да има. Ама с 0 Acquisiton time има само един тип АЦП-та и не знам Mикрочип някога въобще да са имали такова :) нито стендалоун нито в процесор ...


Вто Мар 14, 2023 12:25 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

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


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

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

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

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


Вто Мар 14, 2023 1:08 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Май 26, 2014 3:47 pm
Мнения: 27
Мнение Re: Проблем при измерване с АЦП
nobodyshadow написа:
Според това което си постнал се получават към 350 измервания за един период. Постоянно напрежение мериш ли правилно с тази постановка?


Здравейте,

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

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


Вто Мар 14, 2023 1:17 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 11:02 am
Мнения: 8873
Местоположение: Разград
Мнение 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 модулите (не помня кой точно) може да дава старт на ацп-то. Така може да семплираш на точни интервали от време, На теб в момента кой ти определя кога да се взема семпъла? Ако е пак някаква таква блокираща функция, нямаш никакви гаранции колко точно време отнемат - такива неща се правят с хардуер. Този честота която ти изписва конфигуратора е честотата на която можеш хардуерно да семплираш а не тази на която реално програмата ти семплира.


Вто Мар 14, 2023 2:51 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Проблем при измерване с АЦП
то ти го пише горе на снимките
Conversion time .... 56.25 микро секунди
TAD ти е "клока, такта" на АДЦ-то
пише и TAD "формулата" за конверсия

17 kHz семпъл холд

_________________
main[-1u]={1};


Вто Мар 14, 2023 7:19 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Май 26, 2014 3:47 pm
Мнения: 27
Мнение Re: Проблем при измерване с АЦП
Бихтре ли ми предложили оптимизиран програмен код за четене на АЦП.

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


Сря Мар 15, 2023 11:16 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 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
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Проблем при измерване с АЦП
https://circuitdigest.com/microcontroll ... c-tutorial

_________________
main[-1u]={1};


Сря Мар 15, 2023 11:32 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 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
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Май 26, 2014 3:47 pm
Мнения: 27
Мнение Re: Проблем при измерване с АЦП
Благодаря за бързият отговор!

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


Прикачени файлове:
ADC.JPG
ADC.JPG [ 78.33 KiB | Прегледано 1079 пъти ]
Сря Мар 15, 2023 11:40 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 8 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни